dagon
Clustered Forward Shading
Метод очень перспективный — минимальная нагрузка на GPU, всего две дополнительные служебные текстуры (кластер и буфер источников света), хорошая масштабируемость и почти полная независимость от сложности сцены (есть лишь зависимость от ее размера — чем больше сцена, тем выше разрешение кластера).
Есть, впрочем, и недостатки — во-первых, небольшая дополнительная нагрузка на CPU при обновлении 3D-текстуры и буфера. Но обновлять их нужно только при движении источников света — если у вас статичный свет, то оверхед будет нулевой. Другое узкое место — передача буфера источников света в видеопамять. У меня это текстура GL_RGB32F шириной N * 8, где N — количество ячеек кластера, и высотой 4 — по одной строке на атрибут. N может достигать 1024 и выше — передавать такой буфер из системной памяти каждый кадр может показаться малоэффективным, но можно обновлять не весь буфер, а только те его части, где меняется список источников света (маловероятно, что в обычной игровой ситуации будут сотни движущихся ламп).
Надеюсь вскоре доделать и выложить демку с реализацией данного метода.
Dagon 0.2.0
- Система частиц с поддержкой векторных полей
- Шейдерный бэкенд для материалов
- Экспериментальная поддержка теневых карт
- Демонстрационный пример Dagon также обновлен — в сцену с механикой от первого лица добавлены тени.

Физика автомобиля на D

Я, впрочем, не планирую создание полноценной гоночной игры, поэтому не стал моделировать реальные характеристики двигателя, тормозов и т.д. — автомобиль движется под действием двух сил на каждое колесо, продольной и боковой, основанных на взятых «с потолка» константах. В принципе, ничто не мешает сделать точные расчеты этих сил.
Демка использует модифицированную версию dmech, а также Dagon в качестве графического движка (опять-таки с модификациями, которые совсем скоро войдут в основной репозиторий — к примеру, реализованы тени и шейдерный бэкенд для материалов). Все зависимости включены в архив, кроме dlib 0.11.1. Прилагается сборка для Windows. Можете использовать демку в своих проектах (код доступен под лицензией Boost).
Скачать (9,65 Мб)
Текущий статус и планы по проекту Dagon
Демки Dagon переместились в отдельный репозиторий: https://github.com/gecko0307/dagon-demo. Теперь это всего одно приложение, включающее несколько сцен и меню для переключения между ними. Появилась новая демка с реализацией системы частиц, которая, надеюсь, скоро станет частью движка. Система включает очень быстрый отрисовщик биллбордов для частиц, поддерживает стандартные векторные поля (аттрактор, дефлектор, «черная дыра», вихрь) и позволяет добавлять новые.
Dagon
Те, кто следит за моей активностью на GitHub, могли заметить, что у меня появился новый репозиторий dagon — проект, который позиционируется как новая эволюционная ступень DGL. В процессе работы над Atrium я пришел к выводу, что в движке не хватает средств автоматизации некоторых рутинных задач. Например, управление памятью в типичном игровом приложении может быть почти полностью автоматизировано, поскольку выделение и высвобождение памяти происходит в специально задуманных паузах, таких как переключение между локациями (это не относится к играм с открытым миром с фоновой подгрузкой, но это уже специфический случай). Кроме того, в обсуждении на Reddit звучал вопрос, почему DGL не использует SDL2. Так родилась новая ветка движка, которую я решил сделать отдельным экспериментальным проектом.
На сегодняшний день Dagon включает следующие возможности:
- Использование SDL2
- Новая модель памяти на основе концепции владельца (owner), позаимствованной из Delphi
- Модель образцов и компонентов (entity-component), позволяющая расширять функциональность объектов динамически, без наследования классов
- Динамическая перезагрузка ресурсов при их модификации сторонним приложением без перезапуска игры
- Поддержка форматов OBJ и IQM
- Поддержка текстур PNG, JPG, TGA, BMP
- Поддержка контейнера Box для ресурсов
- Новая система материалов с разделением на фронтенд (набор параметров) и бэкенд (передатчик параметров графическому конвейеру — фиксированному или шейдерному, в зависимости от выбранной реализации бэкенда). Система позволяет использовать как стандартные материалы с известным набором параметров, так и создавать свои, специализированные
- Некоторые компоненты, напрямую портированные из DGL — например, система событий, система освещения, рендеринг текста.