Началось все с проекта
Phantom3D, над которым я работал в 2009-2010 годах. Это был движок на C++, который я хотел создать по образцу Xtreme3D, но так и не довел до юзабельного состояния, хотя и многому научился в процессе. Особенно на меня повлияли разработки
David Henry (библиотека Mathlib, декодеры изображений и т.д.), на основе которых я начал делать собственную библиотеку общего назначения
Sparx. Вкоре я открыл для себя D и постепенно портировал на него весь накопленный код - в итоге получилась библиотека
dlib, которая сейчас входит в топ-20 по популярности в реестре пакетов Dub. Часть функциональности из Phantom3D кочевала по разным примерам и демкам, пока в итоге не оформилась как движок
DGL, который впоследствии перевоплотился в
Dagon. Такая вот сложная "связь поколений")
Изначально DGL был на основе OpenGL 2.x, сейчас в Dagon используется 4.0. Есть долгосрочный план перейти на WebGPU или какой-то другой абстрактный API, но это пока из области научной фантастики, т.к. реальной полноценной замены OpenGL в природе не существует. В движке используется отложенный рендеринг (deferred): геометрические объекты запекаются в набор буферов (цвета, глубины, нормалей, PBR-параметров), а затем на основе этих буферов в несколько стадий формируется HDR-изображение сцены (используются отдельные проходы для освещения окружения, источников света и Ambient Occlusion). Оно затем проходит через серию опциональных фильтров постобработки (Glow, Motion Blur, Depth of Field, Lens Distortion), пропускается через тональный компрессор и, наконец, отправляется на вывод. Картинка получается очень близкая к Eevee в новых версиях Blender.
До недавнего времени я работал, в основном, над рендером - сторонними разработчиками были добавлены модули GUI (на основе библиотеки
Nuklear), ландшафт на основе шума OpenSimplex, конфигурируемая система ввода и многое другое. Из свежих фич - частичная поддержка формата glTF (вскоре надеюсь сделать поддержку анимированных моделей):
https://youtu.be/lJi9lSe-ngE
Также была добавлена интеграция с физ. движком Newton и контроллер персонажа на ее основе:
https://youtu.be/gTZ8QT4yOOo
К сожалению, пока нет простой возможности заценить движок, не устанавливая компилятор и тулчейн разработки D. Есть идея на данном этапе сделать небольшой прототип игры, чтобы продемонстрировать широкой аудитории все основные фичи и возможности.
Почему я до сих пор считаю, что свой движок - это хорошо? Во-первых, чужая разработка всегда ограничена условиями лицензии. Даже если это Open Source с возможностью использования кода в коммерческих продуктах. Со своим кодом вы можете делать все, что угодно - Open Source вы не сможете перелицензировать как вам хочется. Во-вторых, чужие продукты развиваются не всегда в том направлении, которое вам нужно. Я видел людей, которые с Unity 2020 возвращались на 2018 из-за тормозов, завышенных системных требований и проблем совместимости. А иногда движок может вообще кануть в небытие, как это было с Blender Game Engine.