Пролог
Не так давно я увидел showreel движка, который выглядит более чем конкурентно
В этой статье я максимально кратко расскажу об этом движке и косвенно сравню с прямыми конкурентами.
Немного про историю :
Все началось в 2004(!) году с Александра Запрягаева и его opensource проекта
В 2010 году вышел Heaven Benchmark на основе Unigine
В 2012 вышла спорная с точки зрения геймплея, но симпатичная OilRush
В 2017 вышла забавная индюшка
Текущее состояние
10 апреля 2020 вышла Community версия, которую можно, использовать если у вашей компании доход меньше 100к$ или для некомерческого проекта
Интерфейс

Сразу хочу отметить то лучшее что ребята взяли от Unreal engine: доступ ко всем необходимым свойствам объекта вроде LOD ,Render ,Collision etc.

В меню просмотра сцены есть удобный дебаг рендера:

Иерархия сцены построена странно, в ней есть отдельно материалы на сцене, отдельно объекты:


К минусам хочется отнести то, что нельзя одновременно открыть две сцены, так же система вкладок далека от Unreal engine с точки зрения удобства.
Снизу находиться обычный asset browser и консоль, которые такие же как и везде
Хотелось бы отметить странный показатель папки, в которой ты сейчас находишься
Скриптинг и апи
пример кода на с#
using Unigine;
namespace UnigineApp
{
class AppWorldLogic : WorldLogic
{
/* .. */
public override bool Update()
{
// getting current controls
Controls controls = Game.Player.Controls;
// checking controls states and reporting which buttons were pressed
if (controls.ClearState(Controls.STATE_FORWARD) != 0 || controls.ClearState(Controls.STATE_TURN_UP) != 0)
{
Log.Message("FORWARD or UP key pressedn");
}
else if (controls.ClearState(Controls.STATE_BACKWARD) != 0 || controls.ClearState(Controls.STATE_TURN_DOWN) != 0 )
{
Log.Message("BACKWARD or DOWN key pressedn");
}
else if (controls.ClearState(Controls.STATE_MOVE_LEFT) != 0 || controls.ClearState(Controls.STATE_TURN_LEFT) != 0 )
{
Log.Message("MOVE_LEFT or TURN_LEFT key pressedn");
}
else if (controls.ClearState(Controls.STATE_MOVE_RIGHT) != 0 || controls.ClearState(Controls.STATE_TURN_RIGHT) != 0 )
{
Log.Message("MOVE_RIGHT or TURN_RIGHT key pressedn");
}
return true;
}
}
}
и на с++
#include <Unig ineGame.h>
/* .. */
int AppWorldLogic::update()
{
// getting current controls
ControlsPtr controls = Game::getPlayer()->getControls();
// checking controls states and reporting which buttons were pressed
if (controls->clearState(Controls::STATE_FORWARD) || controls->clearState(Controls::STATE_TURN_UP))
{
Log::message("FORWARD or UP key pressedn");
}
else if (controls->clearState(Controls::STATE_BACKWARD) || controls->clearState(Controls::STATE_TURN_DOWN))
{
Log::message("BACKWARD or DOWN key pressedn");
}
else if (controls->clearState(Controls::STATE_MOVE_LEFT) || controls->clearState(Controls::STATE_TURN_LEFT))
{
Log::message("MOVE_LEFT or TURN_LEFT key pressedn");
}
else if (controls->clearState(Controls::STATE_MOVE_RIGHT) || controls->clearState(Controls::STATE_TURN_RIGHT))
{
Log::message("MOVE_RIGHT or TURN_RIGHT key pressedn");
}
return 1;
}
Tак выглядит логика среды выполнения, в принципе ничего необычного
на самом деле такое поверхностное сравнение не имеет смысла, но отсутвие вызова 100 библиотек и 10 пространств имен ради простых вещей меня уже радует, чисто визуально код выглядит лаконично и названия классов имено такие какие ждешь что лично меня опять же радует. Поработаю месяц на движке и расскажу подробнее или нет, потому что куда веселее
рассказать о разработке под мобильный vr
Платформы
- Windows
- linux и OSX
- VR: steamvr
- Обещают android, ios, playstation, etc… но не понятно по датам
Рендер — шейдинг — vfx
Сцена на 500к полигонов с кучей неплохих vfx бегает в 300+fps даже на моем скромном ноутбучном железе
Particicle editor

Внутри есть все для создания современного pbr, причем работает во вьюпорт все быстрее чем в UE4
Просто робот из примера от разработчиков движка:

А вот так выглядит низкие настройки графики в понимании авторов в уже собранном проекте

Кстати внутри компании есть собственного алгоритм:
[Practical Cascaded Shadow Maps](https://developer.download.nvidia.com/SDK/10.5/opengl/src/cascaded_shadow_maps/doc/cascaded_shadow_maps.pdf)
Чего в нем хорошего?
- много примеров, гайдов и референс кода
- годная поддержка всех современных фичей от nvidia про которые надо писать отдельной статьей
- сравнительно низкий порог вхождения несмотря на то что UI все еще сырой
Эпилог
Сейчас Unigine хоть и сырой, и не поддерживает основные платформы, но уже выглядит многообещающие, и возможно через несколько лет вместе с Unreal Engine и Unity в один ряд встанет и Unigine.
Дополнительные ссылки
[большое интервью](https://secretmag.ru/trends/players/unigine.htm)
[мигрантам с unreal engine ](https://developer.unigine.com/ru/docs/2.11/migration/from_ue/?rlang=cpp)
[мигрантам с unity engine](https://developer.unigine.com/ru/docs/2.11/migration/from_unity/?rlang=cpp)
Автор: Alex wortega