Unigine Engine — новый уникальный

в 21:58, , рубрики: .net, C#, c++, cgi, CGI (графика), game engine, Gamedev, unigine

Пролог

Не так давно я увидел 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 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ак выглядит логика среды выполнения, в принципе ничего необычного
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)

Автор: Alex wortega

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js