Обработка анимации после бюджетного мокапа для UE4

Мы небольшая студия энтузиастов, основная наша деятельность это создание проектов для местного музея под гарнитуры VR (Oculus Quest 2). В каждый наш новый проект мы стараемся добавлять какую-нибудь фишку. В этом проекте принято было отказаться от Mixamo и создать свой комплект анимации, тем более нам в руки попали две камеры Azure Kinect.
Вооружившись стареньким LeapMoution, и IPhone 12 Pro Max, Мы сняли более ста движений, наконец-то наши персонажи перестанут быть однотипными болванками, думали мы)
Если эта тема интересна, могу описать как мы построили мини мокап-студию.

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

Пока создавали проект решили оставить эту проблему на финальный этап, так как необходимо было решить ряд других проблем и задач.

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

Дальше я опишу наш подход, сразу скажу, что местами он перемудрен, но возможно посмотрев это решение вы сможете применить подобный подход в решениях других проблем. Выбор ПО также обусловлен тем с чем привык работать.

Для получения нужного результата были взяты инструменты: Maya, Cascadeur и (внезапно) WinAutomation.

Забираем анимацию из UE4

Экспорт анимации из UE4

Экспорт анимации из UE4

Настройки экспорта

Настройки экспорта

Закидываем выгруженный файл в Maya, в новую сцену.

Экспортированный файл в Maya

Экспортированный файл в Maya

Обязательно отображаем все ключи на таймлайне

Отображаем все ключи на таймлайне

Отображаем все ключи на таймлайне


Как видно со скрина, в анимации запечен ключ на каждом кадре. Кроме того в модель зашиты блендшейпы для лицевой анимации (держим пока это в голове). Для первого этапа нам нужна анимация со скелета. Для обработки выбираем все кости

Select→All by Type→Joints

Select→All by Type→Joints

В Graph Editor открываем настройки Curves→Smooth Filter

Curves→Smooth Filter

Curves→Smooth Filter

Далее в зависимости от характера анимации нужно указать насколько детально мы хотим оставить анимацию. В этом нам поможет настройка Sampling Rate. Для Айдловой анимации можно установить 1, тогда интерполяция будет на каждые 25 кадров. Для диалоговой анимации, там где нам нужно передать эмоции, ставим значение 5.

Sampling Rate = 5

Sampling Rate = 5

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

На этом функционал майки нам больше не нужен, выделяем верхнюю кость root и экспортируем выделенное (File→Export Selection)

Экспорт из  Maya

Экспорт из Maya

Запускаем Cascadeur. Первым делом нам необходимо загрузить мешку персонажа в A — позе и произвести авториг.

Персонаж в А позе в Cascadeur

Персонаж в А позе в Cascadeur

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

File→Import Fbx/Dae→Animation

File→Import Fbx/Dae→Animation

К загруженной мешке применится анимация

Анимация применилась к мешке

Анимация применилась к мешке

Особенность программы Cascadeur заключается в том, что можно рассчитать естественность позы, а значит мы можем расставит ноги и пересчитать тело для каждого кадра. Если бы мы выбрали вариант интерполяция на 25 кадров, то это можно сделать руками и получить приемлемый результат. В конце статьи приложу видео с таким результатом. Но при разбивке с интерполяцией в 6 кадров, руками работать придется очень долго.

Перед тем как автоматизировать нужно разобраться с возможностью Cascadeur. У него есть несколько режимов работы нам понадобятся два: Автоматической позы и правка через риг. Для переключения воспользуемся кнопкой Enable AutoPosing tool

Enable AutoPosing tool

Enable AutoPosing tool

Для работы нам понадобятся некоторые хоткеи приложения, для перемещения от ключевого кадра к следующему ключевому кадру используем Shift+A и Shift+D (предыдущий и следующий кадр) Редактирование можно производить только на ключевых кадрах, правка на промежуточных кадрах будет игнорироваться.

Перед копированием положения ног на все кадры нам нужно выставить персонажа в нужную стартовую позу, для этого переключаемся в режим AutoPosing и изменяем положение синих сфер на ступнях.

Когда стартовая поза готова, ее необходимо перенести на финальную, для этого переключаемся в режим рига (отключаем AutoPosing), выделяем все точки, копируем (Ctrl+C) встаем на последний кадр и не снимая выделения нажимаем Ctrl+V. Теперь наша анимация может считаться зацикленной.

Перенос точек с первого кадра на последний

Перенос точек с первого кадра на последний

Вот теперь все готово, чтобы приклеить ноги к полу. Для этого выделяем точки на ногах копируем переходим на следующий ключ и вставляем. Это можно сделать нажав комбинации Shift+D, Ctrl+V так нужно повторить 230 раз (количество ключей на этой анимации)

Копируем точки ног

Копируем точки ног

Вот здесь на помощь и приходит автоматизатор WinAutomation.

Скрипт автоматизатора

Скрипт автоматизатора

Строка 1: Встать мышью в позицию заголовка окна (можно было через дескриптор окна сделать активным, только зачем)
Строка 2: Нажать мышку на левую кнопку
Строка 3: Цикл 100 раз (можно указать сразу 230)
Строка 4: Отравить комбинации Shift+D, Ctrl+V

Копируем положение точек в 0 кадре, запускаем скрипт и идем наливать чай. через минуту все кадры ног стоят на одном месте, но тело в некоторых кадрах немного покорежилось

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

Чтобы было красиво, нам нужно теперь воспользоваться автопозой, но если просто включить ее, то все положение тела превратится в тоже что и сейчас на 0 кадре, для того что сохранить исходные положения нужно определить важные точки, которые должны не меняться, остальные же рассчитаем. Для этого заморозим точки ног (не снимая выделения, а если сняли выделяем еще раз) нажимаем R и точки будут обведены красными квадратами

Замороженные точки ног

Замороженные точки ног

Теперь при автопозе ноги не изменят своего положения.

Переключимся в автопозу и и выбираем точки, которые влияют на индивидуальность позы

Устанавливаем важные точки

Устанавливаем важные точки

Теперь если нажать Shift+Z, то поза исправится так чтобы замороженные точки ног и выбранные точки смотрелись естественно в этой позе. Такую операцию снова необходимо повторить для каждого кадра

Скрипт для автоматизатора

Скрипт для автоматизатора

Встаем на 0 кадр и запускаем скрипт. Во время выполнения, скорее всего, вы ничего не увидите, но после того как скрипт закончит работу результат вас должен порадовать.

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

Экспорт анимации

Экспорт анимации

Открываем Maya создаем новую сцену, и переносим в нее старый файл с мешкой, анимацией и блендшейпами, а затем поверх переносим файл с новой анимацией.

Теперь новый файл можно открыть в UE и насладиться результатом

Для сравнения можно посмотреть как было и как стало

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

В заключение обещанная анимация, в которой интерполяции через 25 кадров и заморозка ног по очереди

Спасибо за прочитанный текст.
Денис Береженко

© Habrahabr.ru