Переработанная и улучшенная версия Dagon, которую я разрабатываю с начала 2026 года. Архитектура движка в целом осталась прежней, но внесено множество мелких изменений, и полностью переписан рендер, который теперь обеспечивает фотореалистичную графику. При этом он не требует более мощной конфигурации железа и работает на тех же видеокартах, что и Dagon 1.0 (я тестирую на GeForce RTX 3050).

Репозиторий: https://github.com/gecko0307/dagon2

Идеи для второй версии движка у меня начали копиться еще до выхода первой. Главным вопросом последних лет была, конечно, перспектива перехода на низкоуровневый графический API (и заодно на SDL3). Кроме того, многие техники и фичи современного рендеринга не слишком хорошо вписывались в архитектуру Dagon 1.0, поэтому я решил с ними повременить. То же самое касалось скриптового языка GScript, который я только в прошлом году довел до уровня применимости в реальных проектах. В общем, все, что я изучал и потихоньку пилил, не добавляя в Dagon 0.x/1.0, станет частью Dagon 2.0.

Нововведения

  • Переработан dagon.render. Deferred-рендеринг, пост-обработка и вывод теперь объединены в одну структуру. Рендер Dagon 2.0 является полной и корректной реализацией метода split sum approximation, описанного в статье Брайана Кариса «Real Shading in Unreal Engine 4», с доработками и улучшениями. В частности, добавлена поддержка multiple scattering. Рендер теперь использует отдельную irradiance-карту для диффузного света (в Dagon 1.0 использовался максимальный уровень шероховатости specular-карты). Также BRDF LUT теперь генерируется в рантайме, а не загружается из файла;
  • Реализована поддержка стохастических отражений в экранном пространстве (SSLR/SSSR) c темпоральным шумоподавлением;
  • Шейдерный воркфлоу теперь основан на GLSL 4.60 и включает встроенный в движок компилятор GLSL в SPIR-V. Модули SPIR-V кэшируются на диск для переиспользования;
  • Загрузчик текстур полностью основан на SDL3_Image и не использует dlib.image.io. Поддержка KTX теперь является функцией ядра, а не расширением;
  • Реализована поддержка сжатия текстур в BC4 и BC7;
  • Тонмаппинг полностью основан на AgX. Все остальные операторы удалены, так как на фоне AgX я их считаю морально устаревшими. Реализованы параметры для управления визуальным стилем (offset, slope, power, saturation);
  • FXAA обновился до версии 3.11;
  • Изменилась семантика классов Scene и World. Scene теперь является просто контейнером для Entity и графических данных; для обработки ввода и кастомной игровой логики используется World;
  • Все Entity по умолчанию статичны, и их матрицы не пересчитываются каждый кадр, чтобы уменьшить нагрузку на процессор. Для динамических обновлений нужно включить Entity.dynamic или использовать EntityController (частичный аналог старому EntityComponent);
  • Библиотека Assimp теперь не расширение, а полноправная часть движка. Загрузка glTF, как и других популярных форматов, теперь основана на Assimp;
  • Аналогично физика Jolt теперь встроена в ядро движка в виде пакета dagon.jolt;
  • В разработке — собственный формат ассетов (DAF), который будет быстрее и оптимальнее, чем glTF;
  • Встроенная виртуальная машина GScript3. Скрипты пока компилируются внешней утилитой, Dagon только исполняет байт-код. Можно экспонировать скриптам любые функции и свойства игры.