Несколько дней назад я открыл исходный код StratusGFX. "Он может быть найден здесь."
Некоторое время это был личный исследовательский проект-хобби. Я работал над ним в свободное время, пытаясь изучить низкоуровневую архитектуру игрового движка и современные методы 3D-рендеринга. Только недавно он достиг состояния, когда у него было достаточно функций и достаточно стабильности, и я чувствовал, что доступ к нему может быть полезен другим людям. Поэтому я немного почитал о некоторых доступных лицензиях с открытым исходным кодом и, наконец, остановился на Mozilla Public License 2.0 (MPL 2.0).
В этой статье я расскажу о лицензии, о том, кто может захотеть ее использовать, и покажу несколько скриншотов, демонстрирующих ее текущие функции.
Публичная лицензия Mozilla 2.0 (MPL 2.0)
MPL считается лицензией со слабым авторским левом, которая, кажется, находится между лицензией MIT без ограничений и GPLv3 со сильным авторским левом.
У MPL есть несколько приятных преимуществ. Он поощряет совместную работу, требуя, чтобы любые изменения исходного кода либо возвращались в основной репозиторий, либо публиковались каким-либо другим способом (например, посредством форка).
В то же время он также очень привлекателен как для другого программного обеспечения с открытым исходным кодом, так и для проприетарного программного обеспечения. Он работает на уровне отдельных файлов и не требует, чтобы проекты, использующие его, принимали ту же лицензию. Пока они публикуют свои изменения в StratusGFX, остальная часть их проекта может использовать другую лицензию или даже оставаться закрытым исходным кодом.
Фокус проекта
Проект был разработан для работы на картах Nvidia 10-й серии, таких как GTX 1050 Ti и 1060. Он предлагает современные графические функции, такие как физический рендеринг и глобальное освещение. Его упор делается на работу в реальном времени, что означает минимум 30 кадров в секунду.
Поскольку это в первую очередь движок 3D-рендеринга, он имеет лишь несколько функций, которые можно найти в более крупных движках.
Что у него есть
- Компилируется в libStratusEngine, с которым можно связать для простой настройки отдельных приложений.
- 3D-рендеринг в реальном времени
- Управление ресурсами для текстур и моделей
- Асинхронная загрузка ресурсов
- Сущностно-компонентная система (ECS)
- Некоторые утилиты, такие как распределители пула и многопоточность
- Класс основного механизма, отвечающий за запуск, основной цикл, завершение работы.
Чего нет
- Редактор общего назначения
- Звуковой движок
- Физический движок
- Сценарии
- Формат файла, зависящий от движка (вместо этого он принимает .obj, .fbx, .gltf)
Технический стек
Он построен с использованием C++17 и OpenGL 4.6. Будущие версии, скорее всего, перенесут серверную часть с OpenGL на Vulkan.
Кому следует использовать этот проект?
Этот проект все еще находится на стадии бета-тестирования. Будут ошибки/глюки и нестабильность, так как он все еще находится в стадии разработки. Это далеко не проверенный в бою код. Прямо сейчас я вижу три варианта использования этого проекта:
- Любой, кто хочет использовать его в образовательных целях.
- Любой, кто создает более общий пользовательский игровой движок, но не хочет начинать с нуля при создании своего рендерера.
- Интеграция всего (или его частей) в другие полнофункциональные движки или инструменты моделирования.
Взгляните на его особенности
› См. внизу этой статьи ссылки на используемые 3D-ресурсы.
› Также доступна демонстрация видеотехнологий: https://www.youtube.com/watch?v=s5aIsgzwNPE
Глобальное освещение в реальном времени + косвенное затенение
Объемное освещение Raymarched
Физически обоснованный конвейер металлической шероховатости
Отложенное освещение + мягкое затенение
Кинематографическое тональное отображение
Цвести
Другие особенности
Графика
- Каскадное отображение теней
- Генерация и выбор детализации сетки
- Отсечение усеченной пирамиды графического процессора
- Затенение окружающего пространства экрана (SSAO)
- Быстрое приблизительное сглаживание (FXAA)
Двигатель
- Распределители пула
- Многопоточные утилиты
- Параллельная хеш-карта
- Сущностно-компонентная система (ECS)
- Ведение журнала
Будущее StratusGFX
Есть еще несколько вещей, которые, как мне кажется, необходимы, прежде чем мне будет удобно отметить версию движка 1.0 и сказать, что он готов к использованию в продакшене.
Короткий срок
-› Улучшение системы сборки и документации, чтобы людям было проще начать работу с кодом.
-› Добавление TAA или TSSAA для повышения стабильности изображения во время движения.
-› Анимация
-› Улучшения производительности
Средняя степень
-› Заказать независимую прозрачность
-› Улучшенная обработка генерации LOD и перехода
-› Отражения в пространстве экрана (SSR)
Долгосрочный
-› Переключите серверную часть на Vulkan, что позволит движку работать на MacOS, а не только на Windows/Linux.
-› Добавление функций запеченного освещения, чтобы более слабое оборудование имело запасной вариант.
-› Добавление других современных методов глобального освещения для замены или дополнения того, что уже есть
Спасибо за прочтение!
Если вы заинтересованы в том, чтобы попробовать код или попытаться адаптировать его для использования в любом из ваших проектов, не стесняйтесь обращаться ко мне с любыми вопросами, которые у вас есть.
Используемые 3D-активы
- https://www.intel.com/content/www/us/en/developer/topic-technology/graphics-research/samples.html
- https://developer.nvidia.com/orca/amazon-lumberyard-bistro
- https://sketchfab.com/3d-models/the-bathroom-free-d5e5035dda434b8d9beaa7271f1c85fc
- https://casual-effects.com/data/
- https://sketchfab.com/3d-models/abandoned-warehouse-1e40d433ed6f48fb880a0d2172aff7ca
- https://sketchfab.com/3d-models/interogation-room-6e9151ec29494469a74081ddc054d569