Ретаргетинг (переназначение) анимаций - это процесс переноса анимаций, предназначенных для одного персонажа, на другого. При этом структуры скелетов и их пропорции могут различаться. Ретаргетинг позволяет использовать один и тот же набор анимаций на различных моделях персонажей.
В данной статье мы будем делать ретаргетинг mocap (motion capture) анимаций, подготовленных лабораторией Motion Capture центра ACCAD (The Advanced Computing Center for the Arts and Design) Государственного университета штата Огайо:
http://accad.osu.edu/research/mocap/mocap_data.htm. Из представленных на странице мы используем один из следующих наборов анимаций в формате BVH: Female 1, Male 1, Male 2.
Целевой персонаж для ретаргетинга - девушка Izzy компании Reallusion. Персонаж доступен для свободного скачивания в Unity Asset Store https://www.assetstore.unity3d.com/en/#!/content/50690 или на странице http://www.reallusion.com/iclone/game/ другом формате.
Мы будем работать с программами Autodesk MotionBuilder 2015 для ретаргетинга и iClone 3DXchange5 - для вспомогательных целей.
Наша цель - показать все этапы работы, включая преодоление проблем, которые могу возникнуть. Мы не добивались исключительного качества полученных анимаций. Внимательный читатель также заметит, что мы переопределяем мужские анимации на женский персонаж.
Шаги
Внимание! Для настройки Т-позы какого-либо из скелетов необходимо снять галку [ ] Characterize у обоих персонажей.
- При импорте в MotionBuilder указанных анимаций (на примере Male2_*.bvh) можно увидеть следующую картину (см. рисунок). Исправить такую “перекошенность” анимаций можно, экспортировав их из iClone 3DXchange в bvh с флагом “Reset bone offset”.
- Вот что мы имеем в виду под “перекошенностью” в кости Hips при импорте анимаций Male2 в MotionBuilder:
!['перекошенность' в кости Hips](images/image50.png)
- В iClone 3DXchange модель импортируется без данного дефекта:
![В iClone 3DXchange модель импортируется без данного дефекта](images/image54.png)
-
Перетаскиваем (драг-н-дроп) любой из Male2_*.bvh в iClone 3DXchange.
-
Затем делаем драг-н-дроп всех необходимых Male2_*.bvh в Motion Library:
![драг-н-дроп всех необходимых анимаций в Motion Library](images/image60.png)
- Нажимаем кнопку Add All to Perform.
![Add All to Perform](images/image15.png)
- Получаем все анимации в разделе Perform Editor.
![Получаем все анимации в разделе Perform Editor](images/image34.png)
-
Экспортируем. File -> Export to Other 3D Format -> Export BVH...
- Выставляем галку [x] Reset Bone Offset и экспортируем.
![Выставляем галку [x] Reset Bone Offset и экспортируем](images/image14.png)
Note: “File Name” — это префикс. Поле не должно быть пустым.
- Анимации Male2 исправлены:
![Анимации исправлены](images/image35.png)
- Открываем в MotionBuilder Girl.fbx (персонаж доступен для свободного скачивания в Unity Asset Store https://www.assetstore.unity3d.com/en/#!/content/50690).
- Делаем File -> Motion File Import…, выбираем любой из исправленных *Male2_*.bvh, для определенности *Male2_A5_PickUpBox.bvh.
- Import Options следующие:
![Import Options](images/image59.png)
Обратите внимание, что мы выбираем пункт Create (не Merge).
- Получаем такую сцену:
![Получаем такую сцену](images/image38.png)
Avatar — reference Girl;
RL_G6_Hip — рутовая кость (Hips) Girl;
BVH:reference — reference Male2;
BVH:Hips — рутовая кость (Hips) Male2.
-
Выберем в Asset Browser Templates / Characters / Character.
![Asset Browser Templates / Characters / Character](images/image46.png)
- И перетащим (драг-н-дроп) на скелет Girl. Появится tooltip Characterize, кликаем по нему.
![tooltip Characterize](images/image40.png)
Для удобства перетаскивать можно на Hips-кость в Navigator / Scene, результат тот же:
![Для удобства перетаскивать можно на Hips-кость в Navigator / Scene](images/image27.png)
- Получаем следующее сообщение:
![Получаем сообщение](images/image19.png)
Нажимаем Ok.
- Еще одно сообщение:
![Еще одно сообщение](images/image17.png)
Нажимаем Close.
-
Переименуем только что созданного персонажа (Character)...
![Переименуем только что созданного персонажа](images/image36.png)
...в GirlChar.
![...в GirlChar](images/image53.png)
- Сделаем двойной щелчок по GirlChar.
- Убедимся, что в Character Controls выбран Character: GirlChar и открыта вкладка Definition.
![в Character Controls выбран Character: GirlChar и открыта вкладка Definition](images/image44.png)
- Далее — местами творческий, местами рутинный процесс маппинга костей. LMB (клик левой кнопкой мыши) по кости в окне просмотра:
![процесс маппинга костей](images/image52.png)
- RMB (клик правой кнопкой мыши) по соответствующей кости в Character Controls / Definition, Assign Selected Bone:
![Character Controls / Definition, Assign Selected Bone](images/image56.png)
- Для удобства скрываем отображение моделей:
![скрываем отображение моделей](images/image29.png)
- Хорошим признаком является соответствие названий костей Girl
и внутреннего представления MotionBuilder:
![соответствие названий костей персонажа
и внутреннего представления MotionBuilder](images/image13.png)
-
Не забываем про более мелкие кости, такие как Shoulder (Clavicle):
![Не забываем про более мелкие кости, такие как Shoulder (Clavicle)](images/image48.png)
-
Абсолютный минимум — это все кости из группы “Base (required)”.
![Абсолютный минимум — это все кости из группы 'Base (required)'](images/image24.png)
- После этого нажимаем галку Characterize.
![нажимаем галку Characterize](images/image26.png)
- Выбираем Biped:
![Выбираем Biped](images/image20.png)
-
Переходим к Male2. Перетаскиваем Character на скелет Male2:
![Перетаскиваем Character на скелет](images/image16.png)
Нажимаем Characterize.
- Выбираем Biped:
![Выбираем Biped](images/image05.png)
- Переименовываем только что созданный Character в MaleChar.
![Переименовываем только что созданный Character](images/image10.png)
- У Male2 сам маппинг костей в порядке.
![маппинг костей в порядке](images/image39.png)
-
Проблема в том, что поза, в которой мы его видим, считается Т-позой.
![Проблема в том, что поза, в которой мы его видим, считается Т-позой](images/image00.png)
- Выключаем [ ] Characterize у MaleChar.
- Выбираем BVH:Hips, RMB -> Select Branches.
![BVH:Hips Select Branches](images/image32.png)
- RMB -> Zero -> Rotation.
![Zero -> Rotation](images/image25.png)
- Получаем:
![Получаем после Zero -> Rotation](images/image57.png)
- Теперь это нужно привести к Т-позе.
-
Крутим кости с выключенным [ ] Characterize у MaleChar, пока не получим Т-позу.
- Включаем [x] Characterize у MaleChar.
- Включаем [x] Characterize у GirlChar.
- У GirlChar в Character Settings выбираем Input Type: Character, [x] Active; Input Source: MaleChar.
![выбираем Input Type: Character, [x] Active; Input Source: MaleChar](images/image28.png)
-
Проигрываем анимацию. Скелет Girl должен повторять анимацию Male2.
![Проигрываем анимацию](images/image01.png)
- Чтобы "запечь" полученную перенесенную на Girl анимацию в ее скелет, нажимаем Plot Character.
![нажимаем Plot Character](images/image06.png)
- Выбираем Skeleton.
![Выбираем Skeleton](images/image49.png)
- Настройки по умолчанию вполне подойдут.
![Настройки по умолчанию](images/image04.png)
Более подробное описание этих параметров: http://mocappys.com/retargeting-animation-motionbuilder/#Plot_Properties_Window_Explained
- Проверяем, что plotting прошел успешно.
![plotting прошел успешно](images/image55.png)
С такими настройками персонаж GirlChar должен сохранить анимацию.
- Выберите Hips-кость Girl.
![Выберите Hips-кость](images/image12.png)
- File -> Motion File Export…
![File -> Motion File Export](images/image37.png)
Нужно убедиться, что выбран Content: Selected Models and Children.
- Получаем сообщение:
![Получаем сообщение](images/image30.png)
Нажимаем Yes (три раза).
- Вот искомая RL_G6_Hair 1:
![искомая RL_G6_Hair 1](images/image58.png)
-
Переименовываем эту кость, заменив пробел на подчеркивание (RL_G6_Hair_1).
- Еще раз делаем File -> Motion File Export, предварительно выбрав Hips-кость.
- На этот раз успешно экспортировали.
-
Открываем полученный bvh в iClone 3DXchange. Проигрываем анимацию.
![Открываем полученный bvh в iClone 3DXchange](images/image11.png)
- Казалось бы, всё хорошо.
- Проверим, как полученные bvh открываются в MotionBuilder.
- Создаем в MotionBuilder пустой проект.
-
File -> Motion File Import. Импортируем только что созданную bvh.
-
Замечаем, что у скелета что-то не то с поворотом головы.
![у скелета что-то не то с поворотом головы](images/image41.png)
- Найденный workaround — экспортировать bvh -> bvh в iClone 3DXchange с флагом [x] Reset Bone Offset.
- Экспортируем.
![Экспортируем](images/image45.png)
- Переимпортируем исправленный bvh в MotionBuilder:
![Переимпортируем исправленный bvh в MotionBuilder](images/image51.png)
Результат налицо.
- Таким образом, мы выполнили ретаргетинг одной анимации.
- Выполним ретаргетинг нескольких анимаций.
- Откроем нашу основную сцену с MaleChar и GirlChar.
- Выберем BVH:Hips.
- File -> Motion File Import.
![File -> Motion File Import](images/image22.png)
- При импорте большого количества анимаций может возникнуть следующая ошибка:
![При импорте большого количества анимаций может возникнуть ошибка](images/image42.png)
- В таком случае делим исходный набор на несколько частей и импортируем их по отдельности. В нашем случае обходимся двумя партиями, в каждой примерно по 75 анимаций.
- После того, как закончили импортировать все необходимые анимации,
выбираем GirlChar и включаем линковку на MaleChar:
![включаем линковку на MaleChar](images/image03.png)
- Двойным щелчком по тэйкам запускаем проигрывание соответствующих анимаций.
![Двойным щелчком по тэйкам запускаем проигрывание анимаций](images/image08.png)
- Далее на GirlChar делаем Plot Character.
![делаем Plot Character](images/image07.png)
- Выбираем Skeleton:
![Выбираем Skeleton](images/image02.png)
- Важная галка — [x] Plot All Takes.
![[x] Plot All Takes](images/image18.png)
-
Ретаргетинг можно оценить в том числе по поведению модели (скина).
![Ретаргетинг можно оценить в том числе по поведению модели (скина)](images/image09.png)
- File -> Motion File Export, предварительно выбрав рутовую кость (Hips) Girl.
![File -> Motion File Export, предварительно выбрав рутовую кость (Hips) Girl](images/image43.png)
- Как вы уже догадались, полученные bvh необходимо переэкспортировать в bvh в iClone 3DXchange с включенным флагом [x] Reset Bone Offset.
![полученные bvh необходимо переэкспортировать в bvh в iClone 3DXchange с включенным флагом [x] Reset Bone Offset](images/image23.png)
- Это — победа.
![победа](images/image31.png)
-
Для проверки импортируем исправленные bvh в пустую сцену MotionBuilder:
![импортируем исправленные bvh в пустую сцену MotionBuilder](images/image47.png)
- Отсматриваем анимации (двойной щелчок по тэйкам).
![Отсматриваем анимации (двойной щелчок по тэйкам)](images/image33.png)
- На исправленных bvh можно обучать нейросеть.
Документы, которые нам помогли
- http://mocappys.com/retargeting-animation-motionbuilder/#for_retargeting_Multiple_File (данный раздел в частности и весь документ в целом)
- http://www.3dbuzz.com/forum/threads/186992-Multiple-bvh-s-in-MotionBuilder
Появились вопросы? Задайте их нам: