Dagon 2
Переработанная и улучшенная версия 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 только исполняет байт-код. Можно экспонировать скриптам любые функции и свойства игры.