Заглавная страница

Материал из Oxygen Engine
Версия от 15:02, 3 июля 2019; ForserX (обсуждение | вклад) (DoF / BOKE)

(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

sxHUPvLdvjQ.jpg

X-Ray Oxygen - ответвление игрового движка X-Ray Engine, с целью его совершенствования в виде OpenSource продукта. Проект был предоставлен общественности в декабре 2016 года под названием FX-Ray программистом ForserX. Основными преимуществами данного проекта являются: многопоточность (в отличии от оригинального движка, здесь отсутствует привязка к одному ядру), полная поддержка x64.

Характеристики и особенности движка

История версий

Графический движок

Графический движок, основной компонент игрового движка X-Ray Engine, использует технологию отложенного освещения и затенения (англ. Deferred shading), которая позволяет достичь высокой достоверности в рендеринге освещения при высокой геометрической сложности сцены. Поддерживается рендеринг в высоком динамическом диапазоне с плавающей запятой.

На данный момент Oxygen поддерживает следующие версии DirectX:

  • DirectX 11 (SM: 5.0)

Так же в планах:

  • DirectX 12
  • Vulkan


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

Система освещения является полностью динамической и по-пиксельной. Возможны мягкие тени и используется технология Screen Space Ambient Occlusion(SSAO). Из технологий рельефного текстурирования используются Normal mapping и Parallax Mapping/Steep Paralax Mapping.

Так же проект имеет большое кол-во графических настроек, что позволяет пользователю настроить изображение под себя. Отметим некоторые из них:

Сглаживание

  • MSAA
  • FXAA
  • DLAA
  • SMAA

Хроматическая абберация

06.png

Виньетка

25-02-2019_17-54-05_.png

DoF / BOKE

nhkIRMl87PE.png

Физика

В X-Ray Oxygen используется свободный физический движок Open Dynamics Engine(ODE). Однако, движок инвертирует направление осей, т.к. основная часть обработки физики происходит собственным способом. В добавок, для Collision Detection, используется технология [Optimized Collision Detection] под версией 1.3 с рядом изменений для поддержки x64 и кеширования игрового .cform уровня. Для обработки Inverse kinematics используется библиотека IKAN за 2000 год.

Звук

Для работы со звуком используется OpenAL Soft, который предоставляет три режима работы: Hardware, Software и OpenAL Soft. Последний режим отличается поддержкой EFX(современный аналог EAX) и HRTF(который на данный момент искажает периодически звук, из-за чего был заблокирован внутри проекта).

  • В планы проекта входит использование XAudio2 для работы со звуком.

Скрипты

Lua

X-Ray Engine использует в качестве скриптового движка LuaVM, соответственно со скриптовым языком Lua. С учётом того, что Lua не является самым быстрым языком, используется LuaJIT. На данный момент 2.1.0-beta3. Так же X-Ray использует LuaBind, что предоставляет возможность использовать скриптовые классы для удобства.

Spectre

В дополнение к Lua, Oxygen имеет поддержку скриптинга на таких языках, как Visual C# и Visual Basic .NET. Для работы с ними был разработан собственный скриптовы движок, именуемый SpectreScript Engine.

Игровой ИИ

Игровой искусственный интеллект в X-Ray Engine называется «A-Life»:

Суть [A-Life] заключается в том, что персонажи в игре живут своей жизнью и существуют всё время, а не только когда их видит игрок. Это идёт вразрез с привычными оптимизациями, используемыми при разработке игр [...] Мы ввели два термина, характеризующие 2 модели поведения персонажа, отличающихся степенью детализации: офлайн и онлайн. Офлайновое поведение персонажа является очень простым с точки зрения детализации: персонаж не отыгрывает анимации, звуки, не управляет активно инвентарём, не строит детализированные сглаженные пути (хотя строит пути по глобальному навигационному графу, но об этом позже) и т.д. Онлайновое поведение напротив имеет полную степень детализации. Т.о. можно считать, что офлайновое поведение является плодом онлайнового.
В нашей системе пока игрок играет на своём уровне, другие персонажи живут на других уровнях, т.е. находятся в офлайне, т.е. используют офлайновое поведение. Более того, ввиду большой населённости, не все персонажи в пределах одного уровня имеют онлайновое поведение, а лишь те, кто находится в заданном радиусе от игрока (это может зависеть от уровней, обычно в районе 150 метров) или же по желанию гейм дизайнеров.
Для реализации этого симулятор следит за передвижением игрока и объектов в оффлайне и переводит их в онлайн/оффлайн. При вычислении перехода объектов используется стандартный трюк с инерцией: радиус перехода в оффлайн больше радиуса перехода в онлайн.
Далее стоит сказать о навигации объектов в онлайне и оффлайне. У нас в игре есть уровни, для каждого из которых создаётся свой навигационный граф, который используют персонажи для передвижения в онлайне. Мы называем его детальным графом. Для каждого детального графа также создаётся его менее детализированный аналог, вершины которого можно связать с вершинами такого же графа другого уровня/ей. Т.е. после объединения всех таких графов воедино мы получаем граф, который объединяет все уровни. Он и используется персонажами для передвижения в оффлайне. Также им пользуются персонажи в онлайне, когда они выполняют свои стратегические цели. Например, если персонаж в онлайне решил идти на другой уровень, то он строит путь по глобальному графу, затем строит путь по детальному графу своего уровня со своей позиции до точки глобального графа. Если эта точка уже на другом уровне, то он телепортируется туда и автоматически переходит в оффлайн. Для того, чтобы это не происходило на глазах у игрока, мы точки перехода для игровых персонажей ставили дальше точки перехода игрока, где-то «за углом».

Интеграции

  • Steam: Отсутствует
  • Discord: Отображение времени и активного уровня.
  • Ansel SDK: Oxygen поддерживает ограниченный функционал Ansel SDK. (https://youtu.be/h7CTz5PZA4M)

Команда

На данный момент состав (постоянной) команды таков:

  • ForserX - Автор проекта, программист C/C++/CLI, C#, SpectreC#, SpectreVB
  • Giperion - Ведущий программист. C/C++/CLI, C#, SpectreC#
  • Borshig - Заместитель главы. Программист C++/CLI, C#
  • Mortany - Программист C++
  • Dark - Программист C++ C++/CLI, C#, Vulkan
  • v2v3v4 - Программист C++. Основное направление: Gameplay.

Так же, о людях, помогавших в развитии проекта, бывших участниках, а так же тех, чьи наработки были использованы, можно прочитать тут: Contributors