Dagon — это мой движок для разработки 3D-игр, основанный на OpenGL 4.0 и SDL2. Полный список возможностей см. ниже.

Сайт проекта: https://gecko0307.github.io/dagon
Исходники: https://github.com/gecko0307/dagon
Демонстрационное приложение: https://github.com/gecko0307/dagon-sandbox

Если вы заинтересованы в развитии этого проекта, поддержите его на Patreon: https://www.patreon.com/gecko0307, либо сделайте разовое пожертвование криптовалютой через NOWPayments. Все, кто пожертвует $10 и выше, будут перечислены в списке спонсоров на этой странице, в репозитории Dagon, а также на сайте движка. Заранее благодарен!

Спонсоры проекта: Daniel Laburthe, Rafał Ziemniewski, Kumar Sookram, Александр Ковалев, Robert Georges, Jan Jurzitza (WebFreak), Раис Сафиуллин (SARFEX), Benas Cernevicius, Koichi Takio, Константин Меньшиков. Огромное спасибо за вашу поддержку!

Отдельное спасибо контрибьюторам Rafał Ziemniewski, Mateusz Muszyński, Björn Roberg, dayllenger, my-ijet, а также Lawrence Aberba, Andrey Penechko, Elias Batek, aferust, enjoysmath за багрепорты и полезные идеи.

Список возможностей

На сегодняшний день Dagon включает следующие особенности и возможности:

  • Ядро движка имеет минимум сторонних зависимостей — основано на OpenGL 4.0, SDL2 и SDL2_Image
  • Поддержка моделей в форматах glTF 2.0 и OBJ
  • Скелетная анимация, GPU-скиннинг
  • Поддержка всех популярных форматов изображений: PNG, JPG, WebP, AVIF, TGA, BMP, HDR, DDS, KTX, KTX2, SVG. Для DDS и KTX поддерживаются форматы сжатия S3TC, RGTC, BPTC, ASTC, для KTX2 — транскодирование из Basis Universal в S3TC или BPTC в зависимости от выбранного профиля. SVG-изображения растеризуются в выбранное разрешение
  • HDR-рендеринг с поддержкой операторов тональной компрессии ACES, Filmic, Uncharted, Reinhard, Unreal, AgX
  • Отложенный рендеринг с использованием прокси-геометрии (световых объемов). Неограниченное (fillrate-bound) количество точечных/объемных источников света. Прозрачные объекты рисуются в прямом режиме поверх непрозрачной геометрии, пока без учета точечных источников света
  • Сферические и трубчатые объемные источники света
  • Направленные и конусные источники света
  • Каскадные теневые карты (cascaded shadow maps) для направленных источников света, поддержка мягких теней (PCF)
  • Эффект объемных лучей (volumetric light) для направленного света
  • Normal mapping, parallax mapping, parallax occlusion mapping
  • PBR (roughness/metallic workflow), GGX BRDF
  • IBL при помощи кубических и равнопромежуточных HDR-карт окружения. Загрузка кубических карт из файлов DDS и KTX / KTX2
  • Отложенные декали с поддержкой PBR
  • Процедурное динамическое небо с солнцем по модели Рэлея
  • Рендеринг ландшафтов с поддержкой шума OpenSimplex для карт высот
  • Система частиц с поддержкой векторных полей, мягкие частицы, освещаемые частицы, тени от частиц
  • Постобработка, встроенные фильтры SSAO, FXAA, Motion Blur, Glow, Lens Distortion, Color Grading, цветокоррекция на основе 3D-таблиц Hald CLUT
  • Рендеринг текста в кодировке UTF-8 с использованием TTF-шрифтов
  • Модель сущностей и компонентов (entity-component), позволяющая расширять функциональность объектов динамически, без наследования классов
  • Ввод с клавиатуры, мыши и геймпада. Поддержка вибрации и горячего подключения геймпадов
  • Система событий
  • Встроенный логгер
  • Файлы конфигурации
  • Поддержка GUI на основе тулкита ImGui
  • Физика на основе движка Newton Dynamics. Встроенный контроллер персонажа
  • Загрузка ресурсов из архивов при помощи библиотеки PhysFS
  • Встроенная логика для камеры от первого лица (first person view) и свободного просмотра сцены (freeview).

Начало работы

Dagon устанавливается пакетным менеджером DUB. Проще всего начать работу с шаблона, создаваемого командой dub init:

dub init --type=dagon
dub build

Эта команда создаст минимальный проект с простой сценой (плоскость и куб).

Документация

Примеры использования

Игры и приложения, сделанные при помощи Dagon:

  • DagoBan — клон Sokoban
  • Dagon-shooter — скроллинг шутер в разработке
  • sacengine — свободная реализация движка игры Sacrifice.

Примеры:

Публикации