CGI в домашних условиях при помощи Unreal Engine и iPhone

Всем привет! Меня зовут Василий Мазалов, я работаю старшим видеомонтажером в компании Pixonic. Наш отдел занимается созданием видео-креативов для маркетинга и комьюнити: роликов для страниц в сторы, обзорных видео игровых нововведений и прочего контента.

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

Год назад я наткнулся на следующее видео:


Что мы здесь видим? Парень нацепил на себя костюм захвата движения тела (пока ничего необычного), повесил перед собой iPhone (а вот это уже интересно) и таким образом транслирует анимацию лица и тела персонажа напрямую в режиме реального времени в Unreal Engine, и выглядит результат для столь незамысловатой реализации довольно качественно.

Классная идея, подумал я. Затем закрыл видео. И продолжил дальше работать.

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


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

Начался долгий процесс изучения различной документации.

Что в результате получилось и как мы этого добились, читайте дальше.

Анимация лица


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

Для того, чтобы записать анимацию лица, нам нужен был только iPhone с TrueDepth front-facing camera ― то есть, от iPhone X и выше. Именно эта технология считывала топологию лица и передавала необходимые значения в Unreal уже на нашу модель.

huyo11io_r0xlfw8nzzdzhawcvc.png

За различные выражения лица отвечают блендшейпы ― 3D-модели идентичной топологии, то есть, с одинаковым количеством вершин, но отличающиеся формой. Face AR использует 51 блендшейп, и благодаря подробной документации Apple, в которой описано, какие конкретно блендшейпы используются в DAZ, нам удалось их сделать достаточно быстро.

Примерно так выглядит набор эмоций и блендшейпов в 3D-модели:

berxephpsuciz3wxd7vcachheo0.png
Блендшейпы из интернета

jo9qp2iqqqyo1vyp514j-7xacpu.png
Наши блендшейпы

Итак, сначала мы заводим наше лицо Unreal Engine для тестов, затем билдим приложение и возвращаемся обратно в Unreal для получения результата.

fhx1uimpcjayhq0ybay3ifq8rdq.png

Анимация тела


Для создания тела необходимо было учитывать специфику софта для работы с костюмом. Мы работали с костюмом захвата движения Perception Neuron 2.0 Motion Capture System компании Noitom. Стоит таковой примерно 2500 долларов. Это самый дешевый костюм на рынке и не самый лучший представитель среди аналогов: он очень чувствителен к электромагнитным излучениям, отчего координаты датчиков могут съехать, если он будет находиться в радиусе активного излучения, и чистить анимацию окажется ещё труднее. К счастью, мы как раз переехали на другой этаж, и на новом месте было достаточно безлюдно, а значит, электромагнитные излучения сократились до минимума, ― то есть, было идеально для нас.

jvdfqtdhz19xnag1w_4_lrtg1bw.png

Почему именно костюм? Готовые анимации из различных библиотек нам не подходили, поскольку наш персонаж должен иметь уникальный характер и поведение, а лицо и тело должны точно их отражать. Если бы мы делали анимацию с нуля, это заняло бы месяц, а то и два. Использование же оборудования для захвата движения помогло сэкономить это время.

В отличие от лица, саму модель тела художники отрисовали с нуля. Затем необходимо было произвести ее риггинг и скиннинг в Maya. После сборки тела мы заводим его в Unreal, там собираем все для мокапа, записываем анимацию, после чего результат остается только замешать.

1cnar0oe7evduomjsu9v_q-gyx0.png

Для того, чтобы анимация передавалась точно, доработки были минимальными или вообще удалось их избежать, а также чтобы транслировать анимацию с костюма прямиком в Unreal Engine, необходимо было правильно выставить кости и убрать ненужные значения у нашей модели. У компании Noitom есть черновая 3D-модель для Unreal Engine, используя которую в качестве референса, нам было необходимо доработать нашу собственную модель: поставить ее в T-позу, расположить ладони и пальцы в нестандартные для моделирования позиции и сбросить все значения до нуля. Было очень важно, чтобы все кости были без лишних поворотов, иначе программа их умножит, тем самым сильно исказив движения.

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


После записи анимация нуждалась в доработке, поэтому мы поставили аниматору задачу ее почистить. Для чистки двух минут анимации ему понадобилось три дня.


Затем у нас ушло около трех недель до финальной версии, а если исключить доработки определённых факторов как в модели лица, так и в теле, этот срок можно сократить еще на неделю.

Для чего мы это используем


Давайте отвлечемся от процесса CGI и поговорим о том, какие цели преследовал проект.

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

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

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

vu3jlfs_gtgsym1a0slfy_otmg0.png

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


На данном видео вы видите практически все тесты, которые мы проделали с лицевой анимацией и анимацией тела. Так как спецификация у них разная, приходилось тестировать их по очереди и только в конце смешивать. Для тестов анимации тела была взята модель костюма из CGI-трейлера под новый релиз:


Ну, а теперь покажем, что у нас в результате получилось:

Итог


Имея костюм для захвата движения, iPhone, 3D-модель и Unreal Marketplace c огромным выбором бесплатных качественных ассетов, мы можем буквально за пару недель собирать для наших игроков интересные истории. У нас также появился опыт и понимание того, как можно быстро создать нового персонажа и уже на этапе его создания учесть все особенности производства для достижения наилучшего результата за короткое время.

Почему мы не ставили целью добиться качества крутых синематиков, как у Blizzard? Для комьюнити- и маркетингового контента текущего качества вполне достаточно, чтобы дать нашим пользователям новый взгляд на игровой мир. Однако, пусть пока и нет необходимости в улучшении качества роликов, мы всегда находимся в поиске новых решений.

© Habrahabr.ru