Геймдев
#статьи

Что такое ретаргетинг анимации — и как сделать его в Unreal Engine 5

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

Иллюстрация: Катя Павловская для Skillbox Media

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

Из этого материала вы узнаете:

  • как работает перенаправление анимации с одного скелета на другой;
  • в чём специфика экспорта моделей со скелетом из Blender в Unreal Engine 5 без использования дополнительных аддонов;
  • как перенаправить анимации с манекена Unreal Engine на другую модель;
  • в чём специфика работы сервиса Mixamo;
  • с какими проблемами чаще всего сталкиваются при ретаргетинге и как их можно решить;
  • что почитать и посмотреть на тему ретаргетинга.

Что такое ретаргетинг анимации

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

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

Как происходит ретаргетинг анимации

Процесс ретаргетинга во многом зависит от специфики программы или редактора, но перенос анимации проходит по общему принципу.

Каждый риг содержит набор данных: наименования костей, их расположение и исходные пропорции при перемещении. Для моделей с другим ростом, толщиной и длиной конечностей простой привязки исходного скелета недостаточно: необходимо перенаправить данные костей. В противном случае во время анимации появятся различные дефекты — например, растяжки или исчезновение определённых частей меша.

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

Изображение: Unreal Engine

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

Оригинальный риг и два разных персонажа с этим же ригом после ретаргетинга. Зелёным цветом показано положение оригинального скелета
Изображение: 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 выдаст ошибку при загрузке модели, будет минимальной.

Общие настройки при экспорте в FBX для Unreal Engine
Скриншот: Blender / Blender Foundation

Импорт контента в 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.

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

  • Источник (Source) — Skeletal Mesh актора, с которого будут перенаправлены анимации (в данном случае — манекен Unreal Engine);
  • Цель (Target) — Skeletal Mesh актора, на который нужно перенаправить анимации (в данном случае — импортированная модель).

Создание IK Rig

Нажимаем ПКМ в области Content Browser, чтобы вызвать меню создания ассетов, и в разделе Create Advanced Asset находим вкладку Animation, далее — IK RigIK 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). Аналогичные связки создаём для цепи костей ног и правой руки.

Пример выделения сегмента костей руки для формирования цепи LeftArm
Скриншот: Unreal Editor / Epic Games

Примечание

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

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

Выделение бедренной кости (pelvis) и действие Set Retarget 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), а остальные сгенерированные цепи удаляем. Также можно изначально выделить только те кости, которые требуются для определённой цепи.

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

Финальный IK Rig манекена Quinn с простой арматурой
Скриншот: Unreal Editor / Epic Games

Работа в IK Retargeter

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

Меню при создании IK Retargeter. Красным выделен IK Rig Источника
Скриншот: Unreal Editor / Epic Games

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

Источник и Цель во вьюпорте IK Retargeter
Скриншот: Unreal Editor / Epic Games

Во время ретаргетинга анимации учитывается изначальное положение скелета, то есть A- или Т- поза. Манекены в UE по умолчанию находятся в A-позе. Поэтому, если Цель изначально была в Т-позе, положение рук необходимо изменить, иначе при дальнейшем ретаргетинге меш импортированной модели будет деформирован. Аналогичные манипуляции потребуются и в случае, если источником окажется модель в T-позе — тогда Цель в A-позе (например, тот же манекен) также нужно привести в Т-позу.

Чтобы придать Skeletal Mesh A-позу, нужно убедиться, что в меню слева отмечена Target, и перейти в режим Edit Mode. Из списка выбираем кость плеча, которая отвечает за подъём руки (обычно это upper arm или shoulder) и перемещаем её в положение, максимально близкое к плечу Источника. Если размер меша Цели отличается от размера меша Источника, в настройках справа его можно увеличить или уменьшить (параметр Target Mesh Scale) и так добиться более аккуратного позиционирования. В данном примере плечи Цели находятся на одном уровне с плечами Источника, и необходимо лишь немного сместить предплечье и кисть руки вперёд. Выбираем левую кость предплечья из списка, поворачиваем её относительно осей, запоминаем координаты в настройках справа и по ним сверяем правую руку.

Настройка позы Цели в соответствии с позой Источника
GIF: Unreal Editor / Epic Games

Закончив правки, отодвинем Цель в сторону. Для этого нужно изменить первое значение (ось X) в параметре Target Mesh Offset. Напоследок проверяем, соответствуют ли цепи костей обоих ригов друг другу. Особенно важно проверить цепи с разными названиями, как в случае со связкой Neck и Head, которая упоминалась ранее. Убедившись, что всё верно, переходим во вкладку Asset Browser со списком поз и проверяем результат.

Проверка цепей костей и просмотр анимаций Источника и их перенаправление на Цель в реальном времени
GIF: Unreal Editor / Epic Games

Понравившиеся анимации можно экспортировать, нажав на Export Selected Animations (кнопка с зелёной дискетой). В настройках экспорта по желанию можно добавить к названию префикс и суффикс: они помогут быстрее отыскать ассет в строке поиска. Полученные анимации уже будут относиться к Skeletal Mesh Цели, и их можно использовать в дальнейшей работе.

Кат-сцена с предварительно загруженной анимацией, перенесённой на персонажа через ретаргетинг
GIF: Unreal Editor / Epic Games

Итоги и преимущества описанного подхода

Со стороны может показаться, что в этом материале выбран довольно сложный подход, ведь в теории можно просто загрузить модель в 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 уникальными анимациями для манекенов, которые можно быстро интегрировать в проект и перенаправить на Цель.

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

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

Если что-то пошло не так…

Ниже перечислено несколько распространённых проблем, с которыми может столкнуться начинающий пользователь в процессе ретаргетинга в 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 Editor / Epic Games

Полезные ссылки

  • Раздел официальной документации Unreal Engine, посвящённый ретаргетингу.
  • Подробный видеоурок по ретаргетингу анимаций в Unreal Engine 5 (канал Druid Mechanics).
  • Видеоурок по ретаргетингу MetaHuman (канал MR3D-Dev).
  • Пошаговый урок с переносом анимации Mixamo на персонажа MetaHuman (канал Jobutsu).
  • Видеоурок по интеграции и ретаргетингу персонажа из Character Creator 4 в Unreal Engine 5 и настройка блюпринта анимации для управления им в качестве игрового персонажа в рамках шаблона Third Person (канал Yepkoo).

Проверьте свой английский. Бесплатно ➞
Нескучные задания: small talk, поиск выдуманных слов — и не только. Подробный фидбэк от преподавателя + персональный план по повышению уровня.
Пройти тест
Понравилась статья?
Да

Пользуясь нашим сайтом, вы соглашаетесь с тем, что мы используем cookies 🍪

Ссылка скопирована