Dagon 0.11.0

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

Из прочих крупных изменений отмечу следующие:

  • GUI на основе Nuklear, модуль шрифтов на основе Freetype, физический движок и загрузчик анимированных моделей IQM вынесены в расширения (субпакеты Dub), их нужно добавлять в зависимости отдельно (dagon:nuklear, dagon:ftfont). Это было сделано из-за трудностей у пользователей с установкой Nuklear под Linux.
  • Добавлена поддержка эффекта объемного рассеивания света (volumetric light scattering) для направленного источника. Это оптическое явление, возникающие в дисперсной среде, например, в тумане. Объекты, отбрасывающие тень, заслоняют собой свет и блокируют рассеивание, в результате чего в атмосфере образуются видимые лучи и неоднородности. В Dagon этот эффект основан на разновидности ray marching’а — теневая карта сэмплируется несколько раз вдоль луча в направлении взгляда из пикселя, результат нормируется и используется как коэффициент фазовой функции Хеньи-Гринштейна.
  • Добавлена поддержка файлов DDS для текстур. Поддерживаются форматы сжатия S3TC (DXT1/BC1, DXT3/BC2, DXT5/BC3), RGTC (BC4, BC5), BPTC (BC6H, BC7).
  • Добавлен новый оператор тональной компрессии Tonemapper.Filmic, близкий к тому, что используется в Blender/Eevee.

Dagon vs Eevee

В грядущем Dagon 0.11 будет поддерживаться дополнительный метод тональной компрессии схожий по результату с тем, что используется в Blender 2.8 (Filmic View Transform). Ниже — сравнение рендеров Eevee в Blender 2.82 и Dagon на примере сцены со шлемом из коллекции примеров glTF. Моя картинка чуть более контрастна, но зато нет «передержаных» бликов.

Временная шкала моих проектов

Приводя в порядок архивы и вспоминая прошлое, решил зафиксировать информацию о моих 3D-движках и других OpenSource-разработках в виде интерактивной временной шкалы при помощи time.graphics — возможно, кому-то будет интересно:

Вода в Dagon 0.11

Работа над Dagon 0.11 близится к завершению: реализованы поддержка прозрачных объектов прямым рендером, частицы, ease-функции, а также встроенный шейдер воды.

С Новым годом!

Поздравляю всех читателей блога с наступившим 2020 годом! Желаю творческих успехов всем авторам и долгих лет жизни всем интересным проектам!

В качестве небольшого подарка — обновленная версия демки dagon-sandbox, которую теперь можно скомпилировать в «зимнем» режиме (version = Winter)

Итоги 2019 года

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

  • Блог DLangGamedev переехал на новый адрес и движок: https://gamedev.timurgafarov.ru.
  • Был значительно улучшен движок Dagon: добавлена поддержка декалей, трубчатых источников света и «фонариков», кубических карт окружения. Благодаря сторонним разработчикам появилась поддержка рендеринга ландшафтов, в том числе процедурных с использованием шума OpenSimplex, а также интеграция GUI-тулкита Nuklear. Были полностью переписаны рендер и система постобработки в Dagon, упорядочена структура модулей движка, внесено множество оптимизаций производительности, реализован эффект объемного рассеяния света в атмосфере (volumetric light scattering) для направленных источников света. Mateusz Muszyński на основе Dagon и Nuklear написал клон Sokoban с редактором уровней.
  • Я начал работу по интеграции физического движка Newton Dynamics в Dagon в рамках проекта dagon-newton и биндинга bindbc-newton. Newton был выбран как наиболее функциональный физический движок с интерфейсом C.
  • Вышли dlib 0.16.0 и 0.17.0. Библиотека постепенно приближается к релизу версии 1.0.
  • Я написал bindbc-wgpu, биндинг к графической библиотеке wgpu.

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

  • Появление WebGPU, нового веб-стандарта для высокопроизводительной графики.
  • Выход Blender 2.80 c новым вьюпорт-движком Eevee.
  • Открытие кода Mimalloc, быстрого и компактного аллокатора памяти от Microsoft.

Newton

Экспериментирую с интеграцией Newton Dynamics — лучшего на сегодняшний день свободного физического движка с API для C. Специально для этого написал биндинг bindbc-newton.

 

Новый рендер в Dagon

В следующей версии движка, 0.11, будут полностью переписаны рендер и система постобработки, а также изменена структура модулей. Как следствие, Dagon потеряет совместимость со старыми проектами, но зато появится возможность практически не ограниченного расширения движка путем создания пользовательских графических конвейеров. Новая версия Dagon разрабатывается в ветке dagon-ng.

Из уже реализованных возможностей можно отметить почти готовый отложенный рендер с оптимизациями производительности и расхода памяти (например, больше не используется буфер позиций, позиции вычисляются на основе буфера глубины). Стало возможным изменение разрешения окна/вьюпорта в процессе работы приложения. Кроме того, был улучшен сэмплинг карты окружения — используется нелинейная зависимость mip-уровня от шероховатости, реализованная по методу, предложенному Морганом Макгуайром, что повысило реалистичность материалов с низкой и средней шероховатостью:

Экранное затенение среды (SSAO) было вынесено в отдельный буфер, что позволяет использовать данные о затенении на разных этапах конвейера. Был добавлен денойзер, благодаря которому удается рендерить SSAO без шума с небольшим количеством сэмплов:

Демку новой ветки Dagon с функциями редактора можно найти тут.