Пролог


Не так давно я увидел showreel движка, который выглядит более чем конкурентно

showreel


В этой статье я максимально кратко расскажу об этом движке и косвенно сравню с прямыми конкурентами.

зарегестрироваться и скачать тут

Немного про историю


Все началось в 2004(!) году с Александра Запрягаева и его opensource проекта.

В 2010 году вышел Heaven Benchmark на основе Unigine.

В 2012 вышла спорная с точки зрения геймплея, но симпатичная OilRush.

OilRush

В 2017 вышла забавная индюшка

Sumoan

Текущее состояние


10 апреля 2020 вышла Community версия, которую можно, использовать если у вашей компании доход меньше 100к$ или для некоммерческого проекта.

Интерфейс


Под спойлером краткий обзор
В целом, если вы пользовались Unity, то в редакторе вас не встретит ничего нового:

image

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

image

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

image

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

image alt

image alt

К минусам хочется отнести то, что нельзя одновременно открыть две сцены, так же система вкладок далека от Unreal engine с точки зрения удобства.

Снизу находиться обычный asset browser и консоль, которые такие же как и везде:

image
Хотелось бы отметить странный показатель папки, в которой ты сейчас находишься

Скриптинг и апи


Описание
Для разработчика представлен выбор из двух языков: С++ и С#
пример кода на с#

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 pressed\n");
	}
	else if (controls.ClearState(Controls.STATE_BACKWARD) != 0  || controls.ClearState(Controls.STATE_TURN_DOWN) != 0 )
	{
		Log.Message("BACKWARD or DOWN key pressed\n");
	}
	else if (controls.ClearState(Controls.STATE_MOVE_LEFT) != 0  || controls.ClearState(Controls.STATE_TURN_LEFT) != 0 )
	{
		Log.Message("MOVE_LEFT or TURN_LEFT key pressed\n");
	}
	else if (controls.ClearState(Controls.STATE_MOVE_RIGHT) != 0  || controls.ClearState(Controls.STATE_TURN_RIGHT) != 0 )
	{
		Log.Message("MOVE_RIGHT or TURN_RIGHT key pressed\n");
	}

			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 pressed\n");
	}
	else if (controls->clearState(Controls::STATE_BACKWARD) || controls->clearState(Controls::STATE_TURN_DOWN))
	{
		Log::message("BACKWARD or DOWN key pressed\n");
	}
	else if (controls->clearState(Controls::STATE_MOVE_LEFT) || controls->clearState(Controls::STATE_TURN_LEFT))
	{
		Log::message("MOVE_LEFT or TURN_LEFT key pressed\n");
	}
	else if (controls->clearState(Controls::STATE_MOVE_RIGHT) || controls->clearState(Controls::STATE_TURN_RIGHT))
	{
		Log::message("MOVE_RIGHT or TURN_RIGHT key pressed\n");
	}

	return 1;
}

Tак выглядит логика среды выполнения, в принципе ничего необычного:

image

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


Платформы


Коротко про поддерживаемые платформы
Из коробки есть поддержка:

  • Windows
  • linux и OSX
  • VR: steamvr
  • Обещают android, ios, playstation, etc… но не понятно по датам


Рендер — шейдинг — vfx


Подробно
Первое что хочется отметить: даже на AAx4 все выглядит очень мягко и лесенок не видно
Сцена на 500к полигонов с кучей неплохих vfx бегает в 300+fps даже на моем скромном ноутбучном железе
Particicle editor

image

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

Просто робот из примера от разработчиков движка:

image

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

image

Кстати внутри компании есть собственного алгоритм:
[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)
Семь лет назад выходила [игра](http://flying-cafe.com/ru.shtml)