SkyXEngine  0.9.3
3D real-time render
Информация о движке SkyXEngine

Общее

SkyXEngine - движок для создания 3D игр с real-time рендером, использует технологии DirectX 9.
Сразу уточнение, DirectX 9 мы используем в связи с личными предпочтениями, так как на наш взгляд эта технология является одной из лучших, хоть и считается устаревшей. Все новое это забытое старое)) И как нам кажется ... нет ничего такого, чего нельзя было бы сделать на DirectX 9, но что можно сделать на другом GAPI, для создания игр любого жанра с real-time рендером. Но это только точка зрения нашей команды и она может быть ошибочная. Однако в планах есть расширение поддерживаемых GAPI.

Формирование уровня осуществляется посредством:

  • загрузки статических моделей формата dse, с их автоматическим разбиением на "куски рендера" как quad или octo дерево, возможны сохранение/загрузка в бинарный файл всей геометрии уровня
  • генерации растительности по маске, возможны 2 вида: трава (чем дальше тем меньше размер объекта) и деревья (с возможностью загрузки лодов), возможны возможны сохранение/загрузка в бинарный файл всей растительности уровня. Ручная расстановка расстительности поддерживается. Редактирование поддерживается.

Освещение представлено 3 видами источников света (опционально поддерживается генерация теней от каждого исчтоника света):

  • глобальный (солнце), тени - PSSM
  • локальный - точечный, тени - Cube Shadow Mapping
  • локальный - направленный, тени - Shadow Mapping.

HDR эффект присутсвует.

Система материалов pbr, то есть построенная на физичеки корретных, но апроксимированных вычислениях.
Для формирования данных для освещения используется техника Deferred shading, что позволяет обрабатывать неограниченное количество источников света.
Поддерживаются отражения 2 видов:

  • плоские (планарные)
  • объемные (кубические).

Поддерживается до 3 полупрозрачных поверхностей в кадре (пока только тестовый режим, в планах улучшения качества).
Поддерживаемые эффекты поверхностей:

  • микрорельеф
  • микрорельеф по маске (до 4 текстур)
  • детальность
  • детальность по маске (до 4 текстур)
  • комбинированный микрорельеф с детальностью по маске (до 4 текстур)
  • альфа тест
  • просвечиваемость (для освещения тонких поверхностей, к примеру листвы и травы).

Вся система материалов является открытой и практически любой функционал системы доступен для собственной интерпретации, посредством шейдеров. Имеется встроенный набор данных.
Поддерживаются различные пользовательские данные которые интерпретируются только создающим материалы. Настрока физического материала доступна.

Постпроцесс состоит из эффектов:

  • черно-белое изображение
  • эффект сепия
  • коррекция изображения
  • рендер солнца
  • bloom
  • lens flare, эффект восприятия яркого света линзами
  • depth of field, глубина резкости
  • linear fog, линейный туман
  • space screen ambient occulusion, глобальное освещение (точнее затенение) в пространстве экрана
  • motion blur, размытие в движении
  • nfaa
  • dlaa.

Декали - следы от пуль, взрывов, трещины. Рисуются поверх основной геометрии.

Физика - для симуляции физики используется физический движок Bullet.

Звуковой движок поддерживает воспроизведение в пространстве и в фоне. Поддерживаемые форматы ogg, wav. Доступно создание инстансов без возможности управления.

Партиклы с необходимым набором логики и с многочисленными и простыми настроками.

AI сетка для навигации живых игровых объектов.

Игровой движок - основа для построения игровой логики. Предоставляет набор игровых объектов и обеспечивает их взаимодействие.

Эффекты окружения представлены фоновыми ambient звуками, погодой, определяемой для каждого уровня, с различными погодными эффектами.

Real-time конфигурация (cvars) позволяет в режиме реального времени через консоль изменять разного рода установки движка

Редакторы:

Идеология движка

Основной технической идеей при разработке движка была идея о том что программист должен иметь контроль над объектами которыми он оперирует, НО этот контроль должен быть в меру.
Основной идеей предназначения служила и служит идея о том чтобы предоставляемый инструментарий мог полностью удовлетворять потребностям разработчика, без необходимости со стороны разработчика вникать в детали реализации, но чтобы этот инструментарий имел прозрачную, открытую, свободную, бесплатную лицензию, и разработчик мог спокойно податься в стихию сотворения своего мира.
Также главенствовал принцип разделения функционала на логические блоки (библиотеки) и после окончания разработки очередного блока он бы выносился в dll (с глаз долой). Однако существенным дополнением являлась идея о том что библиотеки не должны ничего значть о равнозначных себе библиотеках в общей иерархии. К примеру библиотека статической геометрии и растительности ничего не знает о библиотеке материалов, и последняя ничего не знает о первой, однако первая использует функции из второй посредством графического ядра, а вторая осуществляется настройку материалов перед рендером первой.
Немаловажным моментом являлся ориентир на гибкость. К примеру переопредляемые функции в графическом ядре, позволяют настроить на свой лад рендер.
Ну и пожалуй самая главная идея заключается в полноценной возможности разработки игр с видом от первого лица, с настройкой/перестройкой "под себя" всего рендера. Также к приправе к этому мы руководствовались мыслью о том что скриптеры (коих не мало) могли бы вести разработку игры на своем (доступном им) уровне, со всеми возможностями движка.

Структура движка

Весь движок состоит из подсистем, которые в некоторых случаях являются ядрами.
Иерархия подсистем:
- sxcore - основное ядро
-- sxgcore - графическое ядро, использует технологии DirectX 9
--- sxgeom - библиотека с базовой организацией статической геометрии и растительности
--- sxanim - библиотека скелетной анимации
--- sxmtllight - библиотека освещения и материалов
--- sxpp - библиотека постпроцесса
- sxinput - система ввода информации с устройств
Все библиотеки представлены файлами dll, что позволяет разделить функционал и реализацию. Также в большинстве случаев библиотеки могут быть вычленены из самого движка и могут использоваться автономно.
В большинстве случаев весь функционал библиотек предоставляется интерфейсом функций, а идентификация объектов числовая, по типу #ID. Это позволяет не беспокоится о типах и о существовании объектов - об этом заботятся сами библиотеки.