Что такое ретаргетинг анимации — и как сделать его в Unreal Engine 5
Поэтапное описание процесса и разбор основных проблем, которые могут возникнуть у начинающего специалиста.
Иллюстрация: Катя Павловская для Skillbox Media
Создание анимации вручную — довольно кропотливая работа. Чтобы движения персонажа выглядели органично, разработчику нужно постоянно проверять расположение костей в скелетной анимации и их перемещение во время ключевых кадров. Как ускорить процесс, если технология мокапа недоступна, а на создание уникальной анимации просто нет ресурсов? В этой ситуации может помочь ретаргетинг.
Из этого материала вы узнаете:
- как работает перенаправление анимации с одного скелета на другой;
- в чём специфика экспорта моделей со скелетом из Blender в Unreal Engine 5 без использования дополнительных аддонов;
- как перенаправить анимации с манекена Unreal Engine на другую модель;
- в чём специфика работы сервиса Mixamo;
- с какими проблемами чаще всего сталкиваются при ретаргетинге и как их можно решить;
- как изменился ретаргетинг в Unreal Engine 5.4 (если кратко: теперь весь процесс занимает всего несколько минут).
Что такое ретаргетинг анимации
Ретаргетинг анимации — это процесс перенаправления готовых анимаций на объект с идентичным ригом, но другим мешем, или на объект, скелет которого отличается от оригинала иерархией костей, но имеет с ним сходства в строении. В результате такого переноса риг модели полностью копирует движения рига-источника.
Этот метод ускоряет производство, так как избавляет от необходимости создавать уникальные скелеты для персонажей с разным телосложением. Техника также станет хорошим подспорьем для начинающих пользователей: не нужно будет тратить время на создание анимаций с помощью ключевых кадров, рискуя ошибиться с расположением и поворотом костей скелета.
Например, если в визуализации нужно продемонстрировать стандартные действия персонажа (ходьбу, бег, прыжок и так далее), не обязательно делать их вручную. Можно зайти в бесплатный сервис Mixamo, загрузить FBX-файл с моделью персонажа, выбрать подходящую анимацию из каталога, скачать её, а затем импортировать в программу для 3D-моделирования или в игровой движок.
Читайте также:
Как происходит ретаргетинг анимации
Процесс ретаргетинга во многом зависит от специфики программы или редактора, но перенос анимации происходит по общему принципу.
Каждый риг содержит набор данных: наименования костей, их расположение и исходные пропорции при перемещении. Для моделей с другим ростом, толщиной и длиной конечностей простой привязки исходного скелета недостаточно: необходимо перенаправить данные костей. В противном случае во время анимации появятся различные дефекты — например, растяжки или исчезновение определённых частей меша.
На иллюстрации ниже слева изображён персонаж со скелетом, созданным под его пропорции во время воспроизведения анимации бега с оружием. На остальных двух кадрах запечатлены персонажи в этой же позе, но внешне они отличаются от первого объекта, и оригинальный скелет привязан к их мешу без ретаргетинга.
После перенаправления скелетной анимации видимые дефекты исчезают, так как теперь расположение костей соответствует влиянию на определённые участки меша при движении.
По этому же принципу можно перенаправить данные на скелет с другими группами костей, но похожий по строению.
Примечание
Система ретаргетинга не переносит данные о вращении костей — они зависят от исходных значений в анимациях.
Ретаргетинг в Unreal Engine 5
С релизом версии Unreal Engine 5.1 ретаргетинг стал проще благодаря связке нового ассета IK Rig с IK Retargeter. Эта связка позволяет легко перенести данные костей с одного скелета на другой.
Теперь рассмотрим процесс подробно — и попробуем перенаправить анимацию со скелета стандартного манекена Unreal Engine на скелет другой человекоподобной модели. В качестве цели ретаргетинга мы используем низкополигонального персонажа, скелет для которого создавали в Blender в одном из предыдущих материалов. Для задачи подойдёт любая модель с готовой арматурой, созданной по принципу человеческого скелета, за исключением моделей MetaHuman — их арматура сложнее и потребует дополнительных манипуляций.
Подготовка модели, созданной в Blender, к экспорту в движок
Если вы не используете конвертеры, например Send to Unreal или Auto-Rig Pro, при переносе модели из Blender в Unreal Engine стоит учитывать несколько нюансов.
- Убедитесь, что меш и скелет расположены ровно в центре, то есть в нулевых координатах по всем осям. Иначе при экспорте возникнут проблемы с позиционированием ассета в сцене.
- В Blender и Unreal Engine разные единицы измерения. По умолчанию в Blender одна единица — это один метр, а в UE такая же единица — один сантиметр. Из-за этого возможны проблемы с отображением костей в движке.
Например, пользователи часто сталкиваются с тем, что джойнты импортированного скелета в Unreal Engine выглядят слишком большими и вьюпорт превращается в сетку из огромных сфер. Чтобы этого не произошло, перед экспортом переходим в настройки сцены (значок капли) и проверяем, что Система единиц (Unit System) выбрана Метрическая (Metric), а затем изменяем Масштаб единиц (Unit Scale) на 0.01. После этого меш и скелет уменьшатся в размерах. Переходим в ортогональный режим и масштабируем оба объекта до нужного значения: нажимаем S и набираем 100, тем самым увеличивая объект в 100 раз. Чтобы было удобно видеть объект во вьюпорте после этой операции, открываем на боковой панели Вид (View) и изменяем Начало от (Clip Start) на 0.1, а Конец (End) на 100.
После этого в настройках объекта можно увидеть, что размер меша по всем осям равен 1, а размер арматуры — 100, и нужно привести этот параметр к общему знаменателю. Нажимаем Ctrl + A → Применить (Apply) → Масштаб (Scale), после чего проделываем аналогичную операцию с мешем. Если всё сделано правильно, после импорта в Unreal Engine размер костей будет отображаться корректно. - Перед тем как выбрать экспорт в FBX, сначала выделяется меш модели, а затем — сама арматура (с удержанием Shift). В противном случае движок распознает меш как часть арматуры и сделает её главной в иерархии костей.
- Название арматуры движок считает названием отдельной кости. Например, если ваша арматура называется root (что характерно для моделей, перенесённых из Unreal Engine), при импорте движок сообщит, что из-за двух одинаковых названий он заменит кость root на root_1. Но, если перед экспортом дать скелету название armature, иерархия костей будет выстроена от изначальной кости root.
- При экспорте в FBX переносятся только меш и арматура, без сторонних объектов (света, камеры и так далее). В Типах объектов (Types of Objects) убираем всё, кроме Меша (Mesh) и Арматуры (Armature), либо в разделе Limit to отмечаем галочкой Выделенные объекты (Selected Objects), предварительно убедившись, что другие объекты в сцене при этом не выделены.
- В разделе Трансформация (Transform) оставляем настройки по умолчанию. Далее в секции Геометрия (Geometry), в пункте Сглаживание (Smoothing), выбираем Грани (Face) или Рёбра (Edges) и чуть ниже в Арматуре (Armature) снимаем отметку с Добавить листовые кости (Add Leaf Bones). Галочку напротив Запечь анимацию (Bake Animation) не ставим, так как сейчас задача состоит в том, чтобы перенести сам скелет и модель, а не анимации, созданные в Blender. Впрочем, если таковые есть, их можно отдельно перенести в движок позже.
Если все условия экспорта были соблюдены, вероятность того, что Unreal Engine выдаст ошибку при загрузке модели, будет минимальной.
Импорт контента в Unreal Engine
Запускаем Unreal Editor и открываем шаблон Third Person — или добавляем контент Third Person в существующий проект. Создаём отдельную папку в разделе Characters и перемещаем в неё модель FBX, созданную в Blender. При импорте появится диалоговое окно. Указываем следующие настройки:
После этого в папке появятся Static Mesh, Skeletal Mesh, Physics Asset и все материалы, которые задействованы в данной модели. В Unreal Engine при работе с анимациями используют Skeletal Mesh. В отличие от Static Mesh, этот тип меша содержит данные арматуры. Именно его используют в проекте для создания игровых персонажей и NPC. Например, аватар в шаблоне Third Person — это Skeletal Mesh манекена Unreal Engine 5.
Наша задача — перенести данные костей со стандартного рига манекена на риг импортированного персонажа. Чтобы избежать путаницы, для обозначения ригов во время процесса ретаргетинга мы будем использовать термины движка:
- Источник — Skeletal Mesh актора, с которого будут перенаправлены анимации (в данном случае — манекен Unreal Engine);
- Цель — Skeletal Mesh актора, на который нужно перенаправить анимации (в данном случае — импортированная модель).
Создание IK Rig
Нажимаем ПКМ в области Content Browser, чтобы вызвать меню создания ассетов, и в разделе Create Advanced Asset находим вкладку Animation, далее — IK Rig → IK Rig. В диалоговом окне выбираем Цель, то есть Skeletal Mesh загруженной модели. Даём созданному ассету название и открываем его. В новом окне будем работать с вкладкой IK Retargeting, расположенной в правом нижнем углу. В ней создаются так называемые цепи (Chain) — объединённые группы костей, которые в дальнейшем можно сопоставить с арматурой другого скелета.
В окне слева выделяем группу костей позвоночника (с пометкой spine) и нажимаем Add New Chain. По умолчанию движок предлагает объединить их в цепь Spine. Подтверждаем. Далее следует уточнение, нужно ли добавить IK Goals — точки для изменения положения конкретного сегмента (работают по принципу IK-костей в Blender, которые мы разбирали в материале по риггингу). Выбираем No Goal.
Примечание
Редактор автоматически предлагает подходящее имя цепи, исходя из списка костей. Если он не распознает кость, то выставит название по умолчанию — NewRetargetChain. В любом случае эти данные можно изменить при подтверждении операции или позже при редактировании.
Первая цепь готова. По этому же принципу создаём остальные группы, стараясь объединять их в логические сегменты. Например, в текущем риге кость шеи (neck) можно объединить с костью головы (head) и создать цепь Head. А в группу LeftArm добавить все кости руки, включая ключицу (clavicle). Аналогичные связки создаём для цепи костей ног и правой руки.
Примечание
В цепи добавляют только те группы костей, которые будут задействованы при переносе анимаций. Например, совсем не обязательно создавать цепи для костяшек пальцев, если они не будут сгибаться во время движения.
В Unreal Engine есть своя специфика в отношении root bone. В качестве root bone обычно задействуют бедренную кость (pelvis или hips). Выделяем её в списке ПКМ и выбираем Set Retarget Root. При этом вносить root в список цепей костей для будущего перенаправления не нужно.
Создав все необходимые цепи, сохраняем ассет и сворачиваем окно. Далее нужно проделать аналогичную операцию с Источником.
Создаём новый IK Rig и выбираем подходящий Skeletal Mesh. В UE5 доступно несколько видов манекенов, которые различаются как анимациями, так и иерархией костей. И в целом выбор зависит от скелета, на который будут перенаправлены анимации. Нет смысла брать стандартный риг, если скелет Цели простой, так как в состав цепей войдут лишь основные кости. В случае с низкополигональными моделями можно ограничиться классическим манекеном из UE4 (68 костей) или выбрать Manny_Simple или Quinn_Simple. Костей в арматуре последних почти в два раза меньше, чем в стандартном манекене (89 вместо 161). В текущем примере выбран Skeletal Mesh Quinn_Simple.
Теперь наша задача — создать в IK Rig Источника такие же цепи костей, как и у Цели. Возможно, даже в скелете Simple-манекена окажется гораздо больше костей, чем в импортированном, но всё содержимое можно также разделить на логические сегменты. Главное, чтобы общее содержание цепей совпадало у обоих ригов. Придерживаться одинаковых наименований цепей при этом не обязательно. В текущем примере у Цели есть цепь Head (кость шеи и головы), а у Источника — цепь Neck (две кости шеи и кость головы). Если сопоставить их между собой на следующей стадии, редактор всё равно поймёт, что кости в этих группах выполняют одинаковую задачу.
При массовом выделении костей в списке слева редактор создаёт несколько дополнительных цепей. Поскольку при выборе затронута одна или несколько подгрупп, он автоматически разбивает одну цепь на несколько дополнительных в соответствии с иерархией.
Если это произошло, выделяем необходимую кость, которую не получилось автоматически вписать в основную цепь, и в окне IK Retargeting указываем её как конечную (End Bone), а остальные сгенерированные цепи удаляем. Также можно изначально выделить только те кости, которые требуются для определённой цепи.
Далее переносим точку root на бедренную кость, как ранее в IK Rig Цели: нажимаем ПКМ на кость pelvis и выбираем Set Retarget Root.
Работа в IK Retargeter
Закончив сборку цепей, сохраняем ассет, сворачиваем окно и в Content Browser создаём новый ассет — IK Retargeter. Он расположен в той же вкладке, что и IK Rig. В диалоговом окне нужно выбрать, какой IK Rig будет Источником. В данном примере мы переносим анимации с Quinn, поэтому выбираем этот IK Rig.
Созданный ассет переименовываем на своё усмотрение и открываем. В новом окне отдаляем камеру во вьюпорте колёсиком мыши, чтобы лучше видеть модель. В настройках справа указано, что данный риг — Source (т.е. Источник), и теперь нужно назначить Цель. В разделе Target указываем IK Rig, который мы создавали в самом начале. После этого Цель появится в той же точке, где находится Источник.
Во время ретаргетинга анимации учитывается изначальное положение скелета, то есть A- или Т-поза. Манекены в UE по умолчанию находятся в A-позе. Поэтому, если Цель изначально была в Т-позе, положение рук необходимо изменить, иначе при дальнейшем ретаргетинге меш импортированной модели будет деформирован. Аналогичные манипуляции потребуются и в случае, если Источником окажется модель в T-позе — тогда Цель в A-позе (например, тот же манекен) также нужно привести в Т-позу.
Чтобы придать Skeletal Mesh A-позу, нужно убедиться, что в меню слева отмечена Цель, и перейти в режим Edit Mode. Из списка выбираем кость плеча, которая отвечает за подъём руки (обычно это upper arm или shoulder) и перемещаем её в положение, максимально близкое к плечу Источника. Если размер меша Цели отличается от Источника, в настройках справа его можно увеличить или уменьшить (параметр Target Mesh Scale) и так добиться более аккуратного позиционирования.
В данном примере плечи Цели находятся на одном уровне с плечами Источника, и необходимо лишь немного сместить предплечье и кисть руки вперёд. Выбираем левую кость предплечья из списка, поворачиваем её относительно осей, запоминаем координаты в настройках справа и по ним сверяем правую руку.
Закончив правки, отодвинем Цель в сторону. Для этого нужно изменить первое значение (ось X) в параметре Target Mesh Offset. Напоследок проверяем, соответствуют ли цепи костей обоих ригов друг другу. Особенно важно проверить цепи с разными названиями, как в случае со связкой Neck и Head, которая упоминалась ранее. Убедившись, что всё верно, переходим во вкладку Asset Browser со списком поз и проверяем результат.
Понравившиеся анимации можно экспортировать, нажав на Export Selected Animations (кнопка с зелёной дискетой). В настройках экспорта по желанию можно добавить к названию префикс или суффикс: они помогут быстрее отыскать ассет в строке поиска. Полученные анимации уже будут относиться к Skeletal Mesh Цели, и их можно использовать в дальнейшей работе.
Видеоурок по ретаргетингу анимаций в ранних версиях Unreal Engine 5 можно найти на YouTube-канале Druid Mechanics.
Нюансы работы с Mixamo
Со стороны может показаться, что описанный выше подход выглядит запутанно, ведь в теории можно просто загрузить модель в Mixamo, подобрать подходящие анимации из каталога и скачать их. Но в этом случае есть риск столкнуться с дополнительными сложностями.
Во-первых, сервис Adobe может загружать напрямую не любые модели. По опыту пользователей, Mixamo часто выдаёт ошибки при воспроизведении высокополигональных моделей, требует переконвертации, а также не отображает текстуры, если они состоят из нескольких карт. Это значит, что работа с более детальными моделями потребует дополнительных манипуляций. Надёжным способом считается ретаргетинг анимации с помощью аддона Rokoko Mixamo в Blender. На сайте Mixamo из каталога подбирают модель, схожую по комплекции с оригинальной, сохраняют необходимые анимации, загружают в Blender и с помощью аддона перенаправляют данные костей. Полученную анимацию можно использовать в рамках программы или экспортировать в движок.
Во-вторых, прямая загрузка анимаций из Mixamo в Unreal Engine часто сопровождается ошибками. Самая распространённая из них — Mesh contains root bone as root but animation doesn’t content root track, из-за которой импорт невозможен. Это происходит, потому что Mixamo генерирует свой риг без кости root. Из-за этого придётся импортировать персонажа из сервиса, в котором есть арматура Mixamo по умолчанию, а затем перенаправлять анимацию на нужную Цель. Эту проблему также можно решить с помощью дополнительных плагинов типа Mixamo Animation Retargeting 2 и других похожих инструментов, но процесс также потребует дополнительного времени и финансовых затрат.
Способ ретаргетинга, описанный в этом материале, позволяет легко переносить анимации из Mixamo с помощью бесплатной утилиты Mixamo Converter. В комплекте с программой идут адаптированные FBX-файлы манекенов из четвёртой и пятой версий Unreal Engine — их можно загрузить в сервис Mixamo без ошибок, выбрать понравившиеся анимации из каталога, скачать их риг, а затем с помощью утилиты сконвертировать FBX-файл под стандарты движка. В интерфейсе программы есть скриншоты, где указаны настройки, которые нужно задать при загрузке файлов в редактор. После успешного импорта скачанные анимации можно перенаправить с манекена на другого персонажа в окне ассета IK Retargeter.
Кроме того, не стоит забывать, что в Unreal Marketplace есть много относительно недорогих ассетов c уникальными анимациями для манекенов, которые можно быстро интегрировать в проект и аналогичным образом перенаправить на Цель.
Примечание
Если говорить об анимациях моделей из Mixamo в целом, а также моделей людей, созданных в MetaHuman, DAZ Studio или Character Creator, то на данный момент перенаправление лучше всего работает в версии 5.4. И если вы планируете постоянно осуществлять ретаргетинг с контентом, созданным в этих приложениях (а это сейчас достаточно актуально), рекомендуем ознакомиться с последней главой, посвящённой ретаргетингу анимаций в обновлении 5.4.
Если что-то пошло не так…
Ниже перечислено несколько распространённых проблем, с которыми может столкнуться начинающий пользователь в процессе ретаргетинга в ранних версиях Unreal Engine 5, и возможные варианты их решения.
- Меш Источника во вьюпорте парит в воздухе, в отличие от Цели.
Решение. Можно создать цепь кости для Root и в самом IK Retargeter выделить эту цепь в меню Chain Mappings. Откроется панель с настройками, где в разделе FK Adjustments нужно найти параметр Translation Mode и выбрать в нём Globally Scaled. Если в ретаргетинге задействован манекен из UE4, рекомендуем посмотреть руководство по настройке костей root и pelvis и назначению им параметра Animation Scaled. На официальном форуме разработчиков отмечают, что эта техника во многих случаях помогает решить проблему с перенаправлением кости root.
- Retarget Output Log выдаёт следующие ошибки: IK Retargeter could not find source root bone… IK Retargeter unable to initiate source root «Bone» in Skeletal Mesh.
Решение. Скорее всего, не назначена Set Retarget Root на кости pelvis/hips и движок не распознаёт её в процессе ретаргетинга. Если после появления сообщения об ошибке вы исправили недочёт в IK Rig персонажа, но при этом в IK Retargeter один из мешей сместился по вертикали, следует попробовать один из способов, указанных в первом пункте.
- Отдельные части меша Цели (чаще всего это пальцы) при ретаргетинге неестественно вытянуты или повёрнуты не в ту сторону.
Решение. Необходимо выставить Цель в более точную позу по отношению к оригиналу.
- Захват анимаций работает, но не полностью (некоторые части меша остаются неподвижными или двигаются неправильно).
Решение. В какой-то из цепи костей Источника и Цели есть несоответствия. Нужно ещё раз проверить содержания цепей каждого IK Rig.
- Ретаргетинг работает, но отдельные части меша персонажа неестественно смещаются в процессе анимации.
Решение. Нужно вернуться в программу для 3D-моделирования и правильно распределить вес по модели. Также, если во время ретаргетинга скелет активен, но сам меш или его часть остаются неподвижными, — значит, рисование веса не закончено.
Решения многих проблем, связанных с ретаргетингом, можно найти на официальном форуме по Unreal Engine.
Как изменился ретаргетинг в Unreal Engine 5.4
С обновлением 5.4 редактор Unreal Engine 5 стал поддерживать русский язык, так что в этой главе представлены русскоязычные названия функций и их аналоги на английском языке в скобках. Если название какой-то функции в движке ещё не перевели, сохраняется оригинальное название.
В отношении ретаргетинга обновление 5.4 интересно тем, что сводит на нет все нюансы импорта анимаций из Mixamo, о которых упоминалось ранее. Это значит, что пользователю больше не нужно создавать ассет ИК каркаса (IK Rig) для каждой импортированной модели и устанавливать сторонние программы для конвертации рига Mixamo под стандарты движка. Рассмотрим, как это работает на практике.
Заходим на сайт Mixamo, выбираем понравившегося персонажа из раздела Characters и анимацию в Animations. Нажимаем Download. В новом диалоговом окне следим, чтобы в параметре Skin было указано With Skin, и скачиваем FBX-файл.
На первом этапе наша основная цель — получить Скелетную сетку (Skeletal Mesh). При скачивании сервис присваивает файлу название выбранной анимации. Если вы планируете загрузить больше анимаций, перед импортом можно переименовать файл, присвоив ему название модели, а уже потом скачивать и загружать в редактор другие анимации с названиями движений. Перетаскиваем файл в заранее подготовленную папку Каталога ресурсов (Content Browser). При импорте оставляем все настройки по умолчанию. Главное — убедиться, что напротив пункта Skeletal Mesh проставлена галочка.
В журнале сообщений редактор может оповестить о том, что в «сцене FBX не найдены группы сглаживания». Игнорируем это. В Каталоге ресурсов (Content Browser) появились статическая и скелетная сетки (меши) модели, ассет с физикой, материалы и, наконец, сама анимация (значок ассета с зелёной линией). Её можно просмотреть в отдельном окне, дважды щёлкнув по ней ЛКМ.
Теперь, чтобы перенаправить анимацию на другого персонажа, кликаем ПКМ по значку с анимацией и в открывшемся меню выбираем пункт Перенаправить анимации (Retarget Animations).
После этого откроется окно, где нужно назначить Скелетную сетку-источник (Source Skeletal Mesh) и Скелетную сетку-цель (Target Skeletal Mesh). В данном случае Источником станет анимация, которую мы скачали, а Целью — скелетная сетка, на которую мы перенесём эту анимацию. В качестве примера выберем скелетную сетку уже знакомого нам манекена SKM_Quinn. Процесс перенаправления костей происходит автоматически. Посмотреть, как анимация выглядит на новом персонаже, можно, нажав на её название в окне, расположенном в правом нижнем углу.
Полученную анимацию можно сохранить, выделив её и нажав Экспорт анимаций (Export Animations). Процесс напоминает экспорт анимаций по классическому ретаргетингу: выбираем папку для сохранения, по желанию добавляем префиксы и суффиксы. Далее откроется окно с Настройками пакетного экспорта (Batch Export Options), в них можно оставить всё как есть.
Новый подход в версии 5.4 поможет перенаправить анимации не только из Mixamo, но и из приложений, поддерживающих захват движений, в частности MetaHuman, Character Creator, Daz 3D, Move AI, MotionBuilder и Xsens MVN Animate. При этом движения можно перенаправить на любого персонажа, у которого есть скелетная сетка, созданная по подобию человека. Весь процесс занимает буквально пару минут и не требует предварительного переназначения костей в ИК каркасе (IK Rig), как это было раньше.
* * *
Резюмируя, можно отметить, что система ретаргетинга в Unreal Engine значительно ускоряет процесс разработки игр и визуализации. Но если ваш проект содержит много уникальных анимаций, рекомендуется работать с ними в последних сборках движка, в частности 5.4.