Что такое ретаргетинг анимации и как сделать его в Unreal Engine 5 / Skillbox Media
Поэтапное описание процесса и разбор основных проблем, которые могут возникнуть у начинающего специалиста.
Содержание:
Научитесь: Профессия 3D-дженералист
Узнать большеСоздание анимации вручную — довольно кропотливая работа. Чтобы движения персонажа выглядели органично, разработчику нужно постоянно проверять расположение костей в скелетной анимации и их перемещение во время ключевых кадров. Как ускорить процесс, если технология мокапа недоступна, а на создание уникальной анимации просто нет ресурсов? В этой ситуации может помочь ретаргетинг.
Из этого материала вы узнаете:
- как работает перенаправление анимации с одного скелета на другой;
- в чём специфика экспорта моделей со скелетом из Blender в Unreal Engine 5 без использования дополнительных аддонов;
- как перенаправить анимации с манекена Unreal Engine на другую модель;
- в чём специфика работы сервиса Mixamo;
- с какими проблемами чаще всего сталкиваются при ретаргетинге и как их можно решить;
- как изменился ретаргетинг в Unreal Engine 5.4 (если кратко: теперь весь процесс занимает всего несколько минут).
Что такое ретаргетинг анимации
Ретаргетинг анимации — это процесс перенаправления готовых анимаций на объект с идентичным ригом, но другим мешем, или на объект, скелет которого отличается от оригинала иерархией костей, но имеет с ним сходства в строении. В результате такого переноса риг модели полностью копирует движения рига-источника.
Этот метод ускоряет производство, так как избавляет от необходимости создавать уникальные скелеты для персонажей с разным телосложением. Техника также станет хорошим подспорьем для начинающих пользователей: не нужно будет тратить время на создание анимаций с помощью ключевых кадров, рискуя ошибиться с расположением и поворотом костей скелета.
Например, если в визуализации нужно продемонстрировать стандартные действия персонажа (ходьбу, бег, прыжок и так далее), не обязательно делать их вручную. Можно зайти в бесплатный сервис Mixamo, загрузить FBX-файл с моделью персонажа, выбрать подходящую анимацию из каталога, скачать её, а затем импортировать в программу для 3D-моделирования или в игровой движок.
Читайте также:
Что такое риггинг — и как подготовить его в Blender
Как происходит ретаргетинг анимации
Процесс ретаргетинга во многом зависит от специфики программы или редактора, но перенос анимации происходит по общему принципу.
Каждый риг содержит набор данных: наименования костей, их расположение и исходные пропорции при перемещении. Для моделей с другим ростом, толщиной и длиной конечностей простой привязки исходного скелета недостаточно: необходимо перенаправить данные костей. В противном случае во время анимации появятся различные дефекты — например, растяжки или исчезновение определённых частей меша.
На иллюстрации ниже слева изображён персонаж со скелетом, созданным под его пропорции во время воспроизведения анимации бега с оружием. На остальных двух кадрах запечатлены персонажи в этой же позе, но внешне они отличаются от первого объекта, и оригинальный скелет привязан к их мешу без ретаргетинга.
После перенаправления скелетной анимации видимые дефекты исчезают, так как теперь расположение костей соответствует влиянию на определённые участки меша при движении.
По этому же принципу можно перенаправить данные на скелет с другими группами костей, но похожий по строению.
Примечание
Система ретаргетинга не переносит данные о вращении костей — они зависят от исходных значений в анимациях.
Запускаем 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 актора, на который нужно перенаправить анимации (в данном случае — импортированная модель).
Нажимаем ПКМ в области 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.
Закончив сборку цепей, сохраняем ассет, сворачиваем окно и в 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.
Профессия 3D-дженералист
Вы станете универсальным специалистом, который умеет в 3D всё: создавать объекты и окружение, настраивать текстуры и цвет, анимировать модели и внедрять их в 3D-сцену.Освоите Houdini, Autodesk Maya, Blender, Photoshop, ZBrush, Marmoset 3D, Substance Painter, Marvelous Designer, Arnold и Rizom UV. Сможете претендовать на работу в рекламе, играх или кино.На иллюстрации: работа участника курса Евгения Кузнецова
Узнать подробнее