Что такое ретаргетинг анимации — и как сделать его в Unreal Engine 5
Поэтапное описание процесса и разбор основных проблем, которые могут возникнуть у начинающего специалиста.


Иллюстрация: Катя Павловская для Skillbox Media
Создание анимации вручную — довольно кропотливая работа. Чтобы движения персонажа выглядели органично, разработчику нужно постоянно проверять расположение костей в скелетной анимации и их перемещение во время ключевых кадров. Как ускорить процесс, если технология мокапа недоступна, а на создание уникальной анимации просто нет ресурсов? В этой ситуации может помочь ретаргетинг.
Из этого материала вы узнаете:
- как работает перенаправление анимации с одного скелета на другой;
- в чём специфика экспорта моделей со скелетом из Blender в Unreal Engine 5 без использования дополнительных аддонов;
- как перенаправить анимации с манекена Unreal Engine на другую модель;
- в чём специфика работы сервиса Mixamo;
- с какими проблемами чаще всего сталкиваются при ретаргетинге и как их можно решить;
- как изменился ретаргетинг в Unreal Engine 5.4 (если кратко: теперь весь процесс занимает всего несколько минут).
Что такое ретаргетинг анимации
Ретаргетинг анимации — это процесс перенаправления готовых анимаций на объект с идентичным ригом, но другим мешем, или на объект, скелет которого отличается от оригинала иерархией костей, но имеет с ним сходства в строении. В результате такого переноса риг модели полностью копирует движения рига-источника.
Этот метод ускоряет производство, так как избавляет от необходимости создавать уникальные скелеты для персонажей с разным телосложением. Техника также станет хорошим подспорьем для начинающих пользователей: не нужно будет тратить время на создание анимаций с помощью ключевых кадров, рискуя ошибиться с расположением и поворотом костей скелета.
Например, если в визуализации нужно продемонстрировать стандартные действия персонажа (ходьбу, бег, прыжок и так далее), не обязательно делать их вручную. Можно зайти в бесплатный сервис Mixamo, загрузить FBX-файл с моделью персонажа, выбрать подходящую анимацию из каталога, скачать её, а затем импортировать в программу для 3D-моделирования или в игровой движок.
Читайте также:
Как происходит ретаргетинг анимации
Процесс ретаргетинга во многом зависит от специфики программы или редактора, но перенос анимации происходит по общему принципу.
Каждый риг содержит набор данных: наименования костей, их расположение и исходные пропорции при перемещении. Для моделей с другим ростом, толщиной и длиной конечностей простой привязки исходного скелета недостаточно: необходимо перенаправить данные костей. В противном случае во время анимации появятся различные дефекты — например, растяжки или исчезновение определённых частей меша.
На иллюстрации ниже слева изображён персонаж со скелетом, созданным под его пропорции во время воспроизведения анимации бега с оружием. На остальных двух кадрах запечатлены персонажи в этой же позе, но внешне они отличаются от первого объекта, и оригинальный скелет привязан к их мешу без ретаргетинга.

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

Изображение: Unreal Engine
По этому же принципу можно перенаправить данные на скелет с другими группами костей, но похожий по строению.

Изображение: NVIDIA Omniverse
Примечание
Система ретаргетинга не переносит данные о вращении костей — они зависят от исходных значений в анимациях.
Ретаргетинг в 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 выдаст ошибку при загрузке модели, будет минимальной.

Скриншот: Blender / Blender Foundation
Импорт контента в Unreal Engine
Запускаем Unreal Editor и открываем шаблон Third Person — или добавляем контент Third Person в существующий проект. Создаём отдельную папку в разделе Characters и перемещаем в неё модель FBX, созданную в Blender. При импорте появится диалоговое окно. Указываем следующие настройки:

Скриншот: Unreal Editor / Epic Games

Скриншот: Unreal Editor / Epic Games
После этого в папке появятся 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.

Скриншот: Unreal Editor / Epic Games
Примечание
Редактор автоматически предлагает подходящее имя цепи, исходя из списка костей. Если он не распознает кость, то выставит название по умолчанию — NewRetargetChain. В любом случае эти данные можно изменить при подтверждении операции или позже при редактировании.
Первая цепь готова. По этому же принципу создаём остальные группы, стараясь объединять их в логические сегменты. Например, в текущем риге кость шеи (neck) можно объединить с костью головы (head) и создать цепь Head. А в группу LeftArm добавить все кости руки, включая ключицу (clavicle). Аналогичные связки создаём для цепи костей ног и правой руки.

Скриншот: Unreal Editor / Epic Games
Примечание
В цепи добавляют только те группы костей, которые будут задействованы при переносе анимаций. Например, совсем не обязательно создавать цепи для костяшек пальцев, если они не будут сгибаться во время движения.
В Unreal Engine есть своя специфика в отношении root bone. В качестве root bone обычно задействуют бедренную кость (pelvis или hips). Выделяем её в списке ПКМ и выбираем Set Retarget Root. При этом вносить root в список цепей костей для будущего перенаправления не нужно.

Скриншот: Unreal Editor / Epic Games
Создав все необходимые цепи, сохраняем ассет и сворачиваем окно. Далее нужно проделать аналогичную операцию с Источником.
Создаём новый IK Rig и выбираем подходящий Skeletal Mesh. В UE5 доступно несколько видов манекенов, которые различаются как анимациями, так и иерархией костей. И в целом выбор зависит от скелета, на который будут перенаправлены анимации. Нет смысла брать стандартный риг, если скелет Цели простой, так как в состав цепей войдут лишь основные кости. В случае с низкополигональными моделями можно ограничиться классическим манекеном из UE4 (68 костей) или выбрать Manny_Simple или Quinn_Simple. Костей в арматуре последних почти в два раза меньше, чем в стандартном манекене (89 вместо 161). В текущем примере выбран Skeletal Mesh Quinn_Simple.
Теперь наша задача — создать в IK Rig Источника такие же цепи костей, как и у Цели. Возможно, даже в скелете Simple-манекена окажется гораздо больше костей, чем в импортированном, но всё содержимое можно также разделить на логические сегменты. Главное, чтобы общее содержание цепей совпадало у обоих ригов. Придерживаться одинаковых наименований цепей при этом не обязательно. В текущем примере у Цели есть цепь Head (кость шеи и головы), а у Источника — цепь Neck (две кости шеи и кость головы). Если сопоставить их между собой на следующей стадии, редактор всё равно поймёт, что кости в этих группах выполняют одинаковую задачу.
При массовом выделении костей в списке слева редактор создаёт несколько дополнительных цепей. Поскольку при выборе затронута одна или несколько подгрупп, он автоматически разбивает одну цепь на несколько дополнительных в соответствии с иерархией.

Скриншот: Unreal Editor / Epic Games
Если это произошло, выделяем необходимую кость, которую не получилось автоматически вписать в основную цепь, и в окне IK Retargeting указываем её как конечную (End Bone), а остальные сгенерированные цепи удаляем. Также можно изначально выделить только те кости, которые требуются для определённой цепи.

Скриншот: Unreal Editor / Epic Games

Скриншот: Unreal Editor / Epic Games
Далее переносим точку root на бедренную кость, как ранее в IK Rig Цели: нажимаем ПКМ на кость pelvis и выбираем Set Retarget Root.

Скриншот: Unreal Editor / Epic Games
Работа в IK Retargeter
Закончив сборку цепей, сохраняем ассет, сворачиваем окно и в Content Browser создаём новый ассет — IK Retargeter. Он расположен в той же вкладке, что и IK Rig. В диалоговом окне нужно выбрать, какой IK Rig будет Источником. В данном примере мы переносим анимации с Quinn, поэтому выбираем этот IK Rig.

Скриншот: Unreal Editor / Epic Games
Созданный ассет переименовываем на своё усмотрение и открываем. В новом окне отдаляем камеру во вьюпорте колёсиком мыши, чтобы лучше видеть модель. В настройках справа указано, что данный риг — Source (т.е. Источник), и теперь нужно назначить Цель. В разделе Target указываем IK Rig, который мы создавали в самом начале. После этого Цель появится в той же точке, где находится Источник.

Скриншот: Unreal Editor / Epic Games
Во время ретаргетинга анимации учитывается изначальное положение скелета, то есть A- или Т-поза. Манекены в UE по умолчанию находятся в A-позе. Поэтому, если Цель изначально была в Т-позе, положение рук необходимо изменить, иначе при дальнейшем ретаргетинге меш импортированной модели будет деформирован. Аналогичные манипуляции потребуются и в случае, если Источником окажется модель в T-позе — тогда Цель в A-позе (например, тот же манекен) также нужно привести в Т-позу.
Чтобы придать Skeletal Mesh A-позу, нужно убедиться, что в меню слева отмечена Цель, и перейти в режим Edit Mode. Из списка выбираем кость плеча, которая отвечает за подъём руки (обычно это upper arm или shoulder) и перемещаем её в положение, максимально близкое к плечу Источника. Если размер меша Цели отличается от Источника, в настройках справа его можно увеличить или уменьшить (параметр Target Mesh Scale) и так добиться более аккуратного позиционирования.
В данном примере плечи Цели находятся на одном уровне с плечами Источника, и необходимо лишь немного сместить предплечье и кисть руки вперёд. Выбираем левую кость предплечья из списка, поворачиваем её относительно осей, запоминаем координаты в настройках справа и по ним сверяем правую руку.

GIF: Unreal Editor / Epic Games
Закончив правки, отодвинем Цель в сторону. Для этого нужно изменить первое значение (ось X) в параметре Target Mesh Offset. Напоследок проверяем, соответствуют ли цепи костей обоих ригов друг другу. Особенно важно проверить цепи с разными названиями, как в случае со связкой Neck и Head, которая упоминалась ранее. Убедившись, что всё верно, переходим во вкладку Asset Browser со списком поз и проверяем результат.
Понравившиеся анимации можно экспортировать, нажав на Export Selected Animations (кнопка с зелёной дискетой). В настройках экспорта по желанию можно добавить к названию префикс или суффикс: они помогут быстрее отыскать ассет в строке поиска. Полученные анимации уже будут относиться к Skeletal Mesh Цели, и их можно использовать в дальнейшей работе.

GIF: Unreal Editor / Epic Games
Видеоурок по ретаргетингу анимаций в ранних версиях 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.