Ландшафт

Стараниями Rafał Ziemniewski в Dagon была реализована базовая поддержка процедурных ландшафтов — загружаемых из карты высот, либо генерируемых шумом OpenSimplex. Надеюсь вскоре добавить проверку столкновений с ландшафтом и специализированный шейдер для него.

Итоги 2018 года

Год подошел концу, а это значит, что наступило время для традиционного подведения итогов.

  • 2018-й ознаменовался множеством значительных улучшений в движке Dagon. Самые важные из них включают переход на OpenGL 4.0, HDR, отложенный рендеринг, новую систему шейдеров, поддержку карт окружения, улучшенные частицы, новые эффекты пост-обработки (SSAO, HDR glow, motion blur, хроматическая аберрация, улучшенный color grading), экспорт сцен из Blender. Также была улучшена поддержка джойстиков и реализована поддержка рулей.
  • Я написал цикл уроков по базовым возможностям Dagon и открыл англоязычный блог на Medium.
  • Вышло три релиза коллекции библиотек dlib — 0.13.0, 0.14.0, 0.15.0.
  • Я запустил краудфандинг своих проектов на Patreon и начал продавать 3D-модели на CGTrader.
  • На сайте LightHouse Software вышли две мои статьи по D — «Преобразование карт окружения при помощи dlib», «Музыкальный D: синтезатор в 100 строк».

Ну и, конечно, не могу не назвать самые значимые для меня события в мире CG, СПО и геймдева:

  • Прекращение поддержки OpenGL на macOS.
  • Покупка GitHub корпорацией Microsoft.
  • Открытие исходников PhysX под свободной лицензией.
  • Появление поддержки WebAssembly в компиляторе LDC, включение фронтенда D в GCC, портирование бэкенда DMD на D, отвязывание всех компиляторов D от линкера MSVS при сборке 64-битных приложений. Инструменты развиваются, язык не стоит на месте, и все это, конечно, не может не радовать. 
  • Выход BindBC, нового биндинг-фреймворка от автора Derelict (я стал одним из первых его пользователей).
  • Выход бета-версии Blender 2.80. Очень впечатлили возможности Eevee, но слегка разочаровал отказ от BGE — я-то надеялся, что игровой движок, напротив, будет улучшен и интегрирован с Eevee.
  • Бесплатный релиз движка Armory. Давно и с большим интересом слежу за этим проектом, хотя и не собираюсь отказываться от Dagon в пользу чего-то стороннего.
  • Krita 4.0 и GIMP 2.10.
  • RTX от NVIDIA — трассировка лучей на GPU с игровой производительностью — и, соответственно, выход первых потребительских видеокарт с полной поддержкой этой технологии (линейка GeForce RTX 2080 на базе архитектуры Turing)
  • C&D-письмо автору Spyro: Myths Awaken. Нападки корпораций на фанатское творчество не прекращаются, и это печально.

Tube area lights

Добавил в Dagon поддержку трубчатых источников света (tube area lights) по методу, описанному тут. На скриншотах показаны блики от трубок на поверхностях с разной шероховатостью, а также рельефом.

Блог на Medium

Я решил начать писать для англоязычной аудитории, в связи с чем зарегистрировался на платформе Medium: https://medium.com/@gecko0307. Там я собираюсь фокусироваться на разработке Dagon и связанных с ней узкоспециализированных темах. Постоянных читателей спешу заверить, что русскоязычный блог я забрасывать не собираюсь, но и посты дублировать, скорее всего, не буду, так что читайте меня и тут, и там. Этот блог я планирую использовать больше для новостей по проектам, анонсов, размышлений о D и других языках, геймдеве и программировании в целом.

Dagon 0.9.0 и dlib 0.15.0

На днях вышли новые версии Dagon и dlib — 0.9.0 и 0.15.0 соответственно. Релиз Dagon — самый крупный со времени портирования движка на современный OpenGL: он содержит 190 коммитов, практически весь рендерер был переписан заново. Вот краткий список изменений:

  • Состоялся переход с прямого рендеринга (forward) на отложенный (deferred). Это должно было рано или поздно произойти, все современные движки в той или иной мере используют отложенные эффекты. В Dagon этот рефакторинг серьезно улучшил производительность и позволил полноценно реализовать SSAO. Количество динамических источников света теперь ограничено только fillrate’ом видеокарты. Ценой стало повышенное потребление видеопамяти, также при отложенном рендеринге невозможно эффективно реализовать прозрачность, поэтому все прозрачные объекты рендерятся в прямом fallback-режиме, и для них не учитываются точечные источники света.
  • Система шейдеров была переписана с нуля. Старая система с бэкендами материалов была заменена на шейдеры, все избыточные классы материалов были объединены в один, создавать новые материалы и передавать шейдерам параметры стало значительно проще. Все шейдеры используют GLSL 4.0 Core, ветвление в шейдерах было заменено на uniform-подпрограммы, что повысило производительность и сделало код более читаемым. Материалы с пользовательскими шейдерами также рендерятся в прямом режиме.
  • Была серьезно улучшена система частиц: появилась поддержка мягких частиц, освещения, отбрасывания теней. Также теперь можно создавать несколько эмиттеров в каждой системе. Опционально в качестве частиц можно рендерить любые объекты вместо биллбордов.
  • Добавлена поддержка Screen space ambient occlusion (SSAO).
  • Добавлены шейдер воды по методу Себастьяна Лагарда и модель неба по Рэлею (экспериментально).
  • Dagon теперь использует BindBC вместо Derelict.
  • Добавлена поддержка автоматического деплоя: при каждой сборке Dub копирует в проект все необходимые файлы для запуска, включая DLL’ки под Windows.

Полный список изменений смотрите на странице релиза. Также было обновлено и демонстрационное приложение.

Изменения в dlib по большей части носят исправляющий и косметический характер: я решил постепенно избавиться от устаревших компонентов, в связи с чем следующие модули пометил как deprecated:

  • dlib.image.parallel
  • dlib.math.fixed
  • dlib.functional.quantifiers
  • функции map, filter, reduce в dlib.functional.range.

Следующие модули были удалены:

  • dlib.container.aarray
  • dlib.math.affine
  • dlib.core.fiber (временно перенесен в отдельную ветку до завершения windows-порта)

Нововведения включают:

  • dlib.text.unmanagedstring — альтернативная реализация строк, не использующая сборщик мусора
  • Улучшенные декодеры текстовых кодировок, модуль dlib.text.encodings.
  • Также dlib теперь может быть собран компилятором GDC (за исключением модуля dlib.math.sse, который в этом случае не будет доступен).

Полный список изменений — на странице релиза.

Dagon + BindBC

На днях произошло два крупных события. Во-первых, вышла бета-версия LDC 1.13.0, которая теперь тоже самодостаточна — для сборки 64-битных приложений не нужны библиотеки из Visual Studio. По умолчанию используется линкер LLD.

Во-вторых, я решил отказаться от Derelict в пользу новой разработки Aldacron’а — BindBC. Это фреймворк для создания динамических биндингов, не использующий классы и сборщик мусора (@nogc), и потому отлично вписывающийся в мои принципы разработки. Из других преимуществ — поддержка OpenGL 4.6 и SDL 2.0.9, простота использования (вместо неинтуитивных DerelictGL3.load() и DerelictGL3.reload() теперь просто loadOpenGL()) и более простая обработка ошибок без исключений.

Из других значительных нововведений в Dagon отмечу рендеринг воды, новый шейдер неба по модели Рэлея и автоматический деплой — Dub теперь копирует библиотеки и внутренние данные движка в папку с проектом после каждой сборки.

Вода

Экспериментирую с шейдером воды — сделал анимацию кругов от дождя и плавный переход прозрачности к берегу:

SSAO

Улучшенный screen space ambient occlusion в новом Dagon:

Это однопроходный эффект, работающий с G-буфером и реализованный методом спирального сэмплинга.

«You knew what this was, just infringement, nothing more»

На днях узнал печальную новость: авторы Spyro: Myths Awaken получили предупреждение от юристов Activision и были вынуждены убрать из игры всю интеллектуальную собственность компании — проект продолжается, но уже под другим названием и с другими персонажами. Я следил за Myths Awaken с самого начала: очень хотелось увидеть фанатское продолжение любимой игровой серии детства, ставшей символом PlayStation. Мы, поклонники классической трилогии Spyro, ждали чего-то подобного 15 с лишним лет — и, действительно, появились талантливые люди, решившие сделать сообществу такой подарок. И ведь фанаты никого не трогали, просто ностальгировали — все подобные проекты делаются на чистом энтузиазме, без цели заработать на чужих идеях. Но, разумеется, в корпорациях думают иначе.

Самое нелепое здесь в том, что до недавних пор Спайро вообще не был интересен правообладателям — только неугасающий фанатский интерес подтолкнул их делать Reignited Trilogy. Нащупали золотое дно, но на полноценное продолжение смелости, похоже, не хватило после многочисленных низкопробных перезапусков. Лицемерие в худшей форме — наживаться на любви фанатов, но при этом ненавидеть эту любвь, душить ее, втаптывать в грязь…

И ведь все могло бы быть по-другому, по-человечески — Activision могли бы договориться с командой Myths Awaken о сотрудничестве. Сама игра и YouTube-каналы авторов могли бы рекламировать Reignited Trilogy и другие продукты компании в обмен на разрешение использовать интеллектуальную собственность. В конечном счете, можно было пригласить разработчиков к себе, сделать этот проект официальным тайтлом. Но нет, проще было все разрушить.
Activision показали себя не с лучшей стороны — и тем хуже для них. Своим существованием Myths Awaken никак не повлияла бы на продажи переиздания, но теперь… Я лично намеревался купить PC-версию, если она выйдет, но после такого красноречивого жеста, естественно, и не подумаю — и советую всем уважающим себя фанатам поступить так же. Компания, которая до такой степени презирает своих потребителей, не заслуживает ни денег, ни уважения.

А Cyreides’у и его команде — респект и наилучшие пожелания в дальнейшем творчестве. Надеюсь поддержать их финансово, как только появится такая возможность — ребята выложились на максимум и доказали, что фан-игры могут быть лучше официальных франшиз.

Quill3D

Обнаружил интересный проект от польского разработчика — Quill3D, OpenGL-движок на D с использованием GLFW. Поддерживаются мягкие тени, normal mapping, анимированные модели, рендеринг ландшафтов, частицы, пост-процессинг, вывод текста. Исходников в публичном доступе, к сожалению, пока нет, но видео и скриншоты очень впечатляют. Рад, что D становится популярнее в области геймдева.

https://warsztat.gd/projects/quill3d/info