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

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

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

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

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

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

Dagon 0.10.0 и dlib 0.16.0

Dagon 0.10.0 и dlib 0.16.0

Вышли новые версии движка Dagon и библиотеки dlib – 0.10.0 и 0.16.0 соответственно. Релиз Dagon один из самых крупных за всю историю проекта: он содержит 226 коммитов и труд четырех разработчиков (Тимур Гафаров, Mateusz Muszyński, Rafał Ziemniewski, dayllenger). Вот краткий список изменений:

  • Рендеринг ландшафтов, в том числе процедурных с использованием шума OpenSimplex.
  • Интеграция GUI-тулкита Nuklear.
  • Поддержка декалей для статических поверхностей.
  • Поддержка трубчатых источников света (tube area light) и “фонариков” (spot light).
  • Поддержка кубических карт.
  • Улучшенный HDR glow.
  • Множество новых функций для объектов Entity.
  • Поддержка твинов (tween) для анимации перемещения, поворота и масштаба объектов. Встроенный набор функций изинга включает linear, quad, back, bounce.
  • Улучшенный таймер.
  • Система конфигурации приложений.
  • Менеджер ввода (InputManager), позволяющий настраивать конфигурации клавиатуры и устройств ввода.
  • Поддержка отладочных сообщений от видеодрайвера (при помощи OpenGL-расширения GL_KHR_debug).

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

Напоминаю: если вы заинтересованы в развитии этого проекта, то можете поддержать его на Patreon: https://www.patreon.com/gecko0307. Вы также можете сделать разовое пожертвование через PayPal: https://www.paypal.me/tgafarov. Заранее благодарен!

Шейдер ландшафта и декали

Шейдер ландшафта и декали

Наконец-то добавил в Dagon специализированный материал для объекта Terrain – 4-канальный шейдер ландшафта, поддерживающий карты нормалей.

До этого также появилась поддержка отложенного рендеринга декалей (deferred decals) – текстур, проецируемых на статические объекты. При помощи декалей можно сделать на поверхностях различные следы, пятна, надписи, граффити, мелкий мусор и т.д. Для декалей поддерживаются карты нормалей, PBR и излучения света, так что они позволяют разнообразить сцену с высокой степенью реалистичности. Реализованы они путем блиттинга текстур в G-буфер – таким образом, декали могут быть отрисованы поверх уже отрендеренной геометрии с возможность смешивания цвета, нормалей и других атрибутов поверхности по альфа-маске. В демо-приложении Dagon декали используются для рендеринга следов игрока на земле:

Nuklear – GUI для Dagon

Nuklear – GUI для Dagon

Отличные новости: стараниями Mateusz Muszyński aka Timu5 в Dagon был интегрирован Nuklear – тулкит для построения графических интерфейсов и рендеринга 2D-графики! Теперь на движке стало проще создать редактор, а то и вовсе написать 2D-игру, что и было сделано: на основе dagon.ui.nuklear был написан клон Sokoban с редактором уровней.

BindBC-биндинг Nuklear вы можете найти тут.

Также я работаю над поддержкой декалей и твининга, но об этом еще напишу подробнее в другой раз.

Кубические текстуры

Кубические текстуры

Добавил в движок поддержку кубческих текстур для рендеринга отражений и простейшего GI. Также возможна конвертация равнопромежуточных карт окружения в кубические текстуры по методу, описанному мной в статье на LHS.

На скриншотах показано, как меняется отражение на металле при смене освещенности сцены.