Dagon 0.14.0

Выпустил новую версию движка. Основное нововведение – рефакторинг системы текстур: в частности, текстуры теперь могут быть загружены напрямую, без необходимости создавать объект SuperImage, что позволяет создавать текстуры любого формата, поддерживаемого OpenGL – таким образом, достигается лучшая совместимость с DDS. 2D-текстуры и кубические карты объединены в один класс Texture, и работать с ними стало проще. Появилась поддержка формата сжатия ASTC.

(далее…)

Deferred Texturing для ландшафта

Еще одной новинкой в Dagon 0.14 станет довольно интересная и нетипичная техника, которую я еще не встречал в готовых реализациях – Deferred Texturing (отложенное текстурирование) для ландшафта.

Когда у меня в движке появилась поддержка ландшафтов, я не стал особо мудрить и сделал для них простейший шейдер, к которому подключаются до четырех текстур, причем для них пришлось сделать специальные свойства у материала, что выглядело не очень эстетично с точки зрения дизайна API. Также этот шейдер не поддерживал текстуры шероховатости и металличности, что делало его неполноценным по сравнению с остальными компонентами рендера. Техника Deferred Texturing, описанная Натаном Ридом, практически идеально вписалась в мой пайплайн и полностью решает эти две старые проблемы.

Основная идея заключается в том, чтобы вынести процесс наложения каждой текстуры в отдельный проход. Чтобы не рендерить сетку ландшафта по нескольку раз, мы запекаем геометрические данные в G-буфер, как в обычном отложенном рендере – отличие в том, что нам при этом нужно сохранять только интерполированные вершинные нормали и текстурные координаты ландшафта.

Полученные буферы вместе с PBR-текстурами (карта нормалей, base color, roughness, metallic) скармливаем текстурирующему проходу, который рисует экранный квад и записывает значения уже в обычный G-буфер. Для вычисления финальных нормалей используются значения из буфера нормалей ландшафта (плюс глубина, которую я сохраняю как альфа-канал буфера нормалей – она нужна для реконструирования eyespace-позиции пикселя). PBR-текстуры сэмплируются UV-координатами из буфера. Чтобы экранный квад не перезаписывал значения, уже сохраненные в G-буфере, нужно отсекать пиксель по маске, которую я храню в Z-канале буфера текстурных координат – 0 означает, что в данной точке нет ландшафта, 1 – есть.

Текстурирующий проход срабатывает несколько раз подряд – по количеству слоев текстур, которые я храню в специальном многослойном материале, каждый слой которого сам является отдельным материалом. Проход рисует в режиме альфа-смешивания, альфа-канал для прохода хранится в слое как отдельная текстура. Что самое интересное, прозрачность можно анимировать/клиппить и таким образом создать эффект плавного перехода одной текстуры в другую – например, постепенного покрытия ландшафта снегом. Возможности открываются самые широкие!

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 декали используются для рендеринга следов игрока на земле:

Ландшафт

Ландшафт

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