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

Материал из Oxygen Engine
Версия от 14:13, 17 мая 2021; ForserX (обсуждение | вклад)

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

sxHUPvLdvjQ.jpg

Oxygen Engine - обновлённый X-Ray Engine 1.6.02. Проект был предоставлен общественности в декабре 2016 года под названием FX-Ray, позже получил название Oxygen и ушёл в закрытую разработку. Oxygen Engine является движком для 3D игр от 1-го лица в режиме выживания. Однако, его можно и в других направлениях.

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

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

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

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

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

  • DirectX 11 (SM: 5.0)
  • DirectX 11on12 (SM: 5.0)

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

  • DirectX 12
  • Vulkan


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

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

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

  • Сглаживание: MSAA, FXAA, DLAA, SMAA
  • Система отражений: SSLR
  • Принцип фокусировки: DoF, Motion Blur
  • Постпроцессные обработки: Chromatic aberration, Bloom, Tonemapping, & Vigette
  • Имитация погоды: Капли от дождя на худе, имитация намокания поверхностей, покачивания крон деревьев и травы от ветра

Физика

В 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).

  • В планы проекта входит использование 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)

Разработчики

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