Crystal Plague - alembic, blender, steam

Чтобы не просто так вещать о том, чего я нового сделал в своей игре, расскажу о своей реализации анимации сборки предмета.

С чего началось

С ЭТОЙ статьи, где автор подробно, четко и понятно разбирает, как добиться эффекта сборки предмета в блендоре и перенести это в юнити. Мое увожение таким людям, действительно классный гайд.

Однако формат COLLADA, в котором экспортируется анимация в примере, не поддерживается UE, в котором работаю я над своей игрой. Несмотря на то, что мне нафиг не надо было что-то подобное реализовывать, меня заинтересовала возможность, "а как это будет в анриле"?

В процессе реализации

Короткое гугление и вопросы в чатике анрила в телеге привели меня к формату ALEMBIC, который примерно для такого и создавался, для переноса между пакетами всяких симуляций одежды, частиц и прочего. Я не буду делать подробные объяснения того, что и сам плохо понимаю, так что тонкости того, как там хранятся данные ищите сами.

Хочу отдельной строкой указать, что это не единственный способ. Подробнее в конце статьи.

Все начальные этапы до экспорта из blender точно такие же, как в статье выше:

1) Создается нужный нам меш

2) Применяется cell fracture

Crystal Plague - alembic, blender, steam

3) Применяется физика к кускам меша
4) Запекается анимация

Crystal Plague - alembic, blender, steam

С этого этапа начинаются отличия, нужно экспортировать модель в другой формат.

Диалог экспорта модели в алембик
Диалог экспорта модели в алембик

Выделенное красной рамкой - важные с моей точки зрения пункты.

1) Scale. При 1.0 модель, импортированная в анрил, будет ОЧЕНЬ маленькой. ОЧЕНЬ.

вот такой
вот такой

2) Start frame и End frame - рекомендую при экспорте указать ту длину анимации, которая на самом деле используется(в моем случае 80 кадров)
3) Selected objects only - почему - то во всех остальных случая экспорт багался и не работал. Возможно проблема только у меня.
4) UVs, Pack UV Islands, Face Sets - при отсутствии этих галочек импорт в анрил будет работать через раз. Чаще всего не будет работать.
5) Triangulate - поскольку cell fracture разрезает объект как random пошлет, там будут нгоны, которые опять же, при импорте в анриле выдадут ошибку.

Окно импорта alembic
Окно импорта alembic

При импорте указывается, что это будет не скелетная анимация и не статический меш, а "кэш геометрии". Что делает галочка "Calculate Motion Vectors During Import" я не знаю, но во всех туториалах по алембику в анриле её ставили. Решил не выделяться.

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

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

Crystal Plague - alembic, blender, steam

В настройках снял галочки Running и Looping. Добавил невидимую сферу с коллизией, если её задевает персонаж, то активируется "код". Запускается анимацию, ускоряется, чтобы смотрелось поинтереснее, ждем момента окончания анимации(пока не знаю, как перехватить точное время завершения анимации) скрывается кеш геометрии, показывается обычный статик меш.

Crystal Plague - alembic, blender, steam
Как выглядит в игре

Что я узнал, пока со всем этим возился. Похожего эффекта можно добиться, используя решение "в лоб" - Просто анимировать по одному все кусочки разломанного меша. Можно использовать vertex animation texture. Не очень разобрался, как это работает, может кто в комментариях триггернется и пояснит.Можно использовать(вроде) так называемые shapekeys, но для меня загадка, как это будет работать на нескольких объектах одновременно. Как бы насколько я понял технологию, один объект преобразуется в другой, просто меня положение вертексов, как один объект разбить на несколько - непонятно.

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

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

1515
15 комментариев

Если не через VAT, то можно ещё в скелетную анимацию запечь. По сравнению с алембиком тут бонус, что в анриле можешь потом это дело переключить на физику движка. Ну и в целом это вроде как в плане оптимизации получше, чем алебмик.

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

голове все-же стоило сделать ретопологию, не стоит ее боятся.

А это прям в блендере можно делать?

 Можно использовать vertex animation texture. Не очень разобрался, как это работает, может кто в комментариях триггернется и пояснит.Для каждого кадра анимации позиция каждого вертекса преобразуется в цвет пикселя (XYZ => RGB) и помещается на текстуру. В итоге получается каша из цветных пикселей, которую можно обратно преобразовать в анимацию, если сконветировать цвет пикселя в позицию вертекса.

 Как бы насколько я понял технологию, один объект преобразуется в другой, просто меня положение вертексов, как один объект разбить на несколько - непонятно

Никак. Бленд шейпы работают с фиксированным количеством вертексов. 

Получается этакий набор текстур с записанной картой вертексов, что-то вроде спрайт-листа, но в 3д?

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