Пара прототипов на Unigine

Собирал в этом году две демки на движке для 3-хдневного джема с темой "киберсказка".

Немного про сам движок

Вкатывался в него достаточно давно, в нём много своих интересных моментов и хорошо продуманных фич, вроде использования системы масок или ветвления шейдеров и прочих производных ресурсов, но по многим пунктам для соло-разработчика достаточно неудобно, благо хоть есть C#. Вот для художников довольно неплохо - “отрендерить табуретку как живую”, но долгое время аниматор объектов был бесполезным, несмотря на мощные настройки внутри него. Привязка к аккаунту и требование быть онлайн для работы, ну и в целом тотальноая зависимость от майкрософт-загончика - тоже не красят продукт. Ещё подойдёт командам, которые проблемные места порешают через C++ и отдельных специалистов с набитой рукой в плане использования промышленных пайплайнов (вроде реализации UI не отдельными элементами, руками, а через XML файлы и всякое прочее подобное).

Собственно, однажды писал статью о том Как я собирал физику колёс в Unigine

В этот раз для джема скачал юниджиновский браузер по новой. Возникли некоторые трудности с установкой старого SDK, хотя в итоге удалось его поставить. В новых же версиях движка кардинально мало что меняется, кроме прикручивания дополнительных технологий, рендеров, повышения требований. По крайней мере с точки зрения инди-разработчика.

Тут в интерфейсе что-то подкрутили для удобства - иконки, показывающие что на узле висит логика. Там облака доработали. Здесь добавили Edit mode для переключения режимов. Но какие-нибудь числа поворота по оси, как слетали с точных значений, так и слетают.

Вот Tracker аниматор сделали чуть более юзабельным, но всё равно тут далеко не тот уровень удобства анимирования чего-то руками, как в Godot/Unity. Добавили Vulkan, так там он такой версии, что у меня не работает, допустим, в отличии от Godot-варианта.

Примеры, вместо отдельных сцен внутри какой-то своей песочницы, откуда их так просто не выдрать, стали делать отдельными проектами. Но перегруженными - одна из демок была 14 Гб, например.

<i>Вода, каустика, свет скринспейсы - всё это было 2 года назад. Всё это было ещё на Win7 вроде даже.</i><br />

Из странного - раньше не обращал внимания, как-то руки не доходили (кастомные коллизии в основном для статики детально настраивал), но когда начинал делать новые демки, то посмотрел внимательнее на примеры объектов и там есть нечто довольно неочевидное:

Собственно, у тех же кубов кроме основной формы коллизии - куба, есть ещё пачка сферических мини-коллайдеров, которым включен другой режим. Это всё помогает точнее отслеживать коллизии - понятно (у нас тут движок для поддержки всяких симуляций, как никак) но несколько неожиданно реализуется.

А вобще, дело даже не в этом, а в том, что сам куб и прочие примитивы с физикой в дефолтном шаблоне собраны как-то неправильно в логике самого движка. Ведь если я хочу изменить размеры данного куба, то я не смогу это сделать иначе, как создав другой куб, который будет отвечать за визуальное представление, добавлю его внутрь текущего примитива и буду менять размеры уже именно этому кубу, отвечающему за визуал. Вот так:

Почему это происходит - потому что любые скейлы основного куба будут сброшены физикой в дефолтные 1,1,1, а менять размер физического коллайдера нужно отдельно - они не равны габаритам основного куба.

При этом в движке ведь есть узел "физическая пустышка" - ObjectDummy, у которой нет собственного визуала и которую можно сделать rigidbody с назначением формы коллизии. И уже внутрь неё положить желаемый визуальный объект, выставив ему требуемые скейлы и подогнав размер коллизии к его габаритам. Вот в виде таких пустышек с содержимым и следовало бы делать подобные объекты - это было бы более корректно.

Unigine - что изменилось

Переходим к конкурсным проектам.

Пара прототипов на Unigine

EQUA

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

Я и забыл уже, что в движке удобно отключается вся физика если просто скрыть узел её содержащий (как было в Unity). Правда те же звуки здесь делаются переусложнённо через представление в 3д пространстве, (вот музыка может быть нормальным фоновым объектом, только это муторно кодить), но их можно реализовать костыльно - через скрытие и показ звучащего объекта, чтобы он автопроигрался при этом. И фоновую музыку тоже сделать через этот вариант. Только позаботиться о том, чтобы игрок входил в область слышимости звука/музыки. А вот громкость саунда настраивается плохо - тише можно, громче нет, что создаёт проблемы с подбором эффектов с нужным запасом громкости.

Билд для windows вложен на страничке:

EQUA by NoNsense

Пара прототипов на Unigine Пара прототипов на Unigine

Solway

На сдачу успел собрать проектик ещё попроще, представляющий собой симулятор рождения солнца (заодно вышло похоже на некий миф о кибер-колобке и всякие прочие параллели с какими-то мета-сюжетами).

В качестве героя тут супермасса которая постепенно левелапается до солнца, поглощая частицы энергии. В целом тут ближе к некоторому иммёрсиву - сам геймплей элементарен.

Билд для windows вложен на страничке:

Solway by NoNsense

Пара прототипов на Unigine

Отдельные нюансы движка бывают довольно неудобны, даже когда привык. Ну и многие ключевые вещи из API желательно знать заранее, потому что в условиях ограниченного времени со всеми этими завихрениями местных неймингов и правильным использованием конструкций просто замучаешься разбираться.

Зато шейдера чудно быстро компилятся и можно не особо ударяться в оптимизацию материалов для решения статтеров - встроенные грамотные убершейдеры-на-лету и прочая асинхронщина (или что там ещё использовано) вполне справляются. Может статтеры становятся заметны, когда много именно материалов с уникальной текстурой, но на простеньких подобные просадки незаметны. То есть, допустим, у мой системы производительность низкая и fps немного, но резких рывков нет - оно равномерно медленное.

Пара прототипов на Unigine

Собственно, тут ничего нового, просто немного освежил в памяти местные особенности. С узлами, вложенностью, префабами, текстом/звуком, коллайдерами, правильным ориентированием поворотов - работается уже как-то попроще в силу привычки. Поначалу, на этапе первичного осваивания движка, было больнее этим всем оперировать.

Что касается судейства - мне то всё равно, конечно, победа ничего существенного не давала - но показалось, что номинация “игра на движке Unigine“ была уже заранее распределена, так как там кроме моих было всего 2-3 проекта на движке, которые появились в последний момент и были похожи на работы стажёров/студентов, которых команда движка как раз некоторое время назад привлекала. То есть сторонних проектов они, похоже, вобще не ожидали.