Несколько дней назад я открыл исходный код 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.

Кому следует использовать этот проект?

Этот проект все еще находится на стадии бета-тестирования. Будут ошибки/глюки и нестабильность, так как он все еще находится в стадии разработки. Это далеко не проверенный в бою код. Прямо сейчас я вижу три варианта использования этого проекта:

  1. Любой, кто хочет использовать его в образовательных целях.
  2. Любой, кто создает более общий пользовательский игровой движок, но не хочет начинать с нуля при создании своего рендерера.
  3. Интеграция всего (или его частей) в другие полнофункциональные движки или инструменты моделирования.

Взгляните на его особенности

› См. внизу этой статьи ссылки на используемые 3D-ресурсы.

› Также доступна демонстрация видеотехнологий: https://www.youtube.com/watch?v=s5aIsgzwNPE

Глобальное освещение в реальном времени + косвенное затенение

Объемное освещение Raymarched

Физически обоснованный конвейер металлической шероховатости

Отложенное освещение + мягкое затенение

Кинематографическое тональное отображение

Цвести

Другие особенности

Графика

  • Каскадное отображение теней
  • Генерация и выбор детализации сетки
  • Отсечение усеченной пирамиды графического процессора
  • Затенение окружающего пространства экрана (SSAO)
  • Быстрое приблизительное сглаживание (FXAA)

Двигатель

  • Распределители пула
  • Многопоточные утилиты
  • Параллельная хеш-карта
  • Сущностно-компонентная система (ECS)
  • Ведение журнала

Будущее StratusGFX

Есть еще несколько вещей, которые, как мне кажется, необходимы, прежде чем мне будет удобно отметить версию движка 1.0 и сказать, что он готов к использованию в продакшене.

Короткий срок

-› Улучшение системы сборки и документации, чтобы людям было проще начать работу с кодом.

-› Добавление TAA или TSSAA для повышения стабильности изображения во время движения.

-› Анимация

-› Улучшения производительности

Средняя степень

-› Заказать независимую прозрачность

-› Улучшенная обработка генерации LOD и перехода

-› Отражения в пространстве экрана (SSR)

Долгосрочный

-› Переключите серверную часть на Vulkan, что позволит движку работать на MacOS, а не только на Windows/Linux.

-› Добавление функций запеченного освещения, чтобы более слабое оборудование имело запасной вариант.

-› Добавление других современных методов глобального освещения для замены или дополнения того, что уже есть

Спасибо за прочтение!

Если вы заинтересованы в том, чтобы попробовать код или попытаться адаптировать его для использования в любом из ваших проектов, не стесняйтесь обращаться ко мне с любыми вопросами, которые у вас есть.

Используемые 3D-активы