Модель переносится в Unreal нормально, скелет на месте, а анимация либо не проигрывается, либо персонаж дёргается, либо стоит на месте, пока движется под ним пол. Все три случая относятся не к экспорту как таковому, а к тому, как движок понимает скелет и корневое движение.
Ниже по шагам: что происходит при переносе анимации, как переиспользовать движения между разными персонажами и почему корневое движение это отдельная тема, о которой узнают позже всего.
Что именно переносится
Анимация в движке это не то же самое, что анимация в Blender, и понимание разницы снимает половину вопросов.
Переносится связка из трёх частей: скелет, привязка меша к скелету и сами треки движения костей.
Движок хранит их раздельно: скелет отдельно, сетка отдельно, анимации отдельно. Это и даёт главное преимущество, ради которого стоит разбираться: одну анимацию можно применить к разным персонажам, если у них совместимые скелеты.
Базовый порядок экспорта разобран в материале про экспорт из Blender в UE5, дальше о том, что начинается после того, как анимация приехала.
Скелет: требования движка
Движок строже Blender к структуре скелета, и часть проблем закладывается ещё на этапе риггинга.
Одна корневая кость. Скелет должен иметь единственную кость в основании иерархии. Несколько независимых корней движок принимает плохо.
Никаких вспомогательных объектов в иерархии. Управляющие элементы, к которым привязан риг, в экспорт попадать не должны: движок примет их за кости.
Понятные имена. Не косметика, а рабочая необходимость: по именам костей движок сопоставляет скелеты при переносе анимации между персонажами.
Единый масштаб. Масштаб объекта и арматуры должен быть единичным. Иначе анимация приедет с искажёнными пропорциями, и исправить это в движке сложнее, чем в Blender.
Ретаргет: зачем он нужен
Ситуация типовая: есть библиотека анимаций для одного персонажа и новый персонаж с другими пропорциями. Переделывать анимацию вручную дорого.
Ретаргет это перенос движения с одного скелета на другой с пересчётом под другие пропорции. Движок сопоставляет кости по назначению и пересчитывает повороты.
Ключевое требование: движок должен понимать, какая кость чем является. Для этого скелеты приводят к общему описанию, где указано, что вот это бедро, а вот это предплечье.
Когда соответствие задано, перенос работает автоматически, и одна библиотека движений обслуживает всех персонажей проекта.
Что ломается при ретаргете
Руки проходят сквозь тело. Разные пропорции: у нового персонажа плечи шире, а поворот кости остался прежним. Решается настройкой, которая пересчитывает не только повороты, но и положение относительно тела.
Ноги проваливаются под пол или висят. Разная длина ног при неизменной высоте таза. Решается инверсной кинематикой для ног, которая подстраивает их под поверхность.
Персонаж скользит. Скорость движения ног не совпадает со скоростью перемещения. Это уже вопрос корневого движения, о нём ниже.
Кисти вывернуты. Разные оси ориентации костей в исходном и целевом скелете. Самая частая и самая неприятная проблема, потому что проявляется только на руках.
Общий совет: проверять ретаргет на анимации с широкой амплитудой движений. Спокойная ходьба может выглядеть нормально, а замах рукой сразу покажет проблему.
Корневое движение: главная непонятность
Тема, о которой узнают позже всего и обычно после того, как персонаж поехал по уровню странным образом.
Есть два способа перемещать персонажа в пространстве.
Движение задаёт логика. Анимация проигрывается на месте, а перемещение вычисляет код. Просто, предсказуемо, но ноги скользят: скорость анимации не совпадает со скоростью перемещения.
Движение задаёт анимация. Корневая кость смещается внутри анимации, и движок переносит это смещение на весь персонаж. Ноги стоят на земле правильно, потому что движение изначально соответствует шагу.
Второй способ и называется корневым движением. Он даёт естественный результат и усложняет управление: персонаж движется так, как записано в анимации, а не так, как хочет игрок.
Как подготовить корневое движение в Blender
Главное условие: смещение должно быть на корневой кости, а не на объекте и не на тазе.
Частая ошибка: аниматор двигает персонажа целиком, перемещая объект в сцене. При экспорте это смещение теряется, потому что движок смотрит на кости, а не на объект.
Вторая ошибка: движение записано на кости таза. Тогда движок не считает его корневым, и персонаж будет дёргаться относительно своего положения.
Правильно: корневая кость стоит на полу между стопами, и именно она перемещается вперёд по ходу движения. Таз при этом колеблется относительно неё, как в реальной ходьбе.
Проверка перед экспортом простая: спрячьте всё, кроме корневой кости, и проиграйте анимацию. Она должна двигаться плавно вперёд.
Циклы: где они рвутся
Циклическая анимация должна замыкаться, и при переносе это часто ломается.
Первый и последний кадр должны совпадать по позе, иначе на стыке будет рывок. Но при корневом движении они не должны совпадать по положению корня: он за цикл смещается вперёд.
Отсюда типовая ошибка: аниматор делает первый и последний кадр полностью идентичными, включая корень, и персонаж при каждом повторе телепортируется назад.
Второй момент: дублирующийся кадр. Если последний кадр совпадает с первым полностью, в цикле появляется лишний кадр паузы. Обычно последний кадр цикла исключают.
Смешивание анимаций
После переноса анимации редко проигрываются по одной: между ними нужны переходы.
Движок умеет смешивать анимации по времени, и качество перехода зависит от того, насколько похожи позы в точках смешивания.
Практический приём для набора движений: делать их так, чтобы начальные и конечные позы были близки. Тогда переходы получаются сами собой, без длинных смешиваний.
Второй приём: смешивание по частям скелета. Верхняя половина проигрывает одну анимацию, нижняя другую. Так персонаж может целиться на ходу без отдельной анимации на каждое сочетание.
Что проверять после импорта
Короткий список, который ловит большинство проблем.
Скорость проигрывания: анимация не должна идти быстрее или медленнее задуманного. Расхождение обычно означает разную частоту кадров в Blender и в движке.
Масштаб: персонаж должен приехать в нужном размере. Движок работает в сантиметрах, и это частая причина странных пропорций.
Ориентация: персонаж должен смотреть вдоль оси, которую движок считает направлением вперёд. Иначе вся логика движения будет развёрнута.
Корневая кость: проверить, что движок распознал корневое движение, если оно предполагалось.
Деформации в суставах: посмотреть на локти и колени при полном сгибании. Проблемы привязки видны именно там.
Сжатие анимации в движке
Механизм, о котором узнают, когда анимация начинает выглядеть хуже, чем в Blender, без видимой причины.
Движок сжимает анимационные данные, чтобы экономить память: отбрасывает ключи, которые считает избыточными, и снижает точность хранения поворотов.
На грубых движениях это незаметно. На тонких проявляется дрожанием пальцев, подёргиванием лицевых костей, потерей плавности в медленных сценах.
Что делать: для критичных анимаций отключить или ослабить сжатие в настройках конкретного ресурса, а не глобально. Глобальное отключение раздувает память проекта без пользы.
Как проверить, что дело в сжатии: сравнить одну и ту же анимацию с включённым и отключённым сжатием на тонком движении. Если разница видна, настройку стоит менять точечно.
Частота кадров
Неочевидная причина проблем, которую находят долго.
Если в Blender сцена настроена на одну частоту, а в движке ожидается другая, анимация приедет с неверной длительностью. Визуально это выглядит как слишком быстрое или слишком медленное движение.
Вторая беда: ключи на дробных кадрах. При пересчёте частоты они округляются, и плавность теряется.
Правило простое: задать одинаковую частоту с самого начала и ставить ключи только на целых кадрах.
Порядок работы, который экономит время
Схема, снимающая большинство проблем.
Сначала перенести скелет с простой тестовой анимацией из нескольких кадров. Убедиться, что масштаб, ориентация и структура костей верны.
Потом проверить одну полноценную анимацию: цикл ходьбы с корневым движением, если оно нужно.
Потом настроить ретаргет на втором персонаже, если он планируется.
И только после этого переносить всю библиотеку.
Ошибка, которая обходится дороже всего: перенести сорок анимаций и обнаружить, что скелет собран неверно. Подготовка персонажа и рига разобрана в гайде по анимации персонажа в Blender.
Частые вопросы
Почему персонаж скользит по полу?
Скорость перемещения не совпадает со скоростью шага в анимации. Либо включите корневое движение, либо подгоните скорость логики под анимацию. Третьего не дано.
Можно ли перенести анимацию на скелет с другим числом костей?
Да, если основные кости сопоставимы. Лишние кости целевого скелета останутся без анимации, и их придётся анимировать отдельно или оставить статичными.
Почему кисти рук вывернуты после ретаргета?
Разная ориентация осей костей в скелетах. Лечится настройкой поворота для проблемных костей в описании скелета, а не переделкой анимации.
Нужно ли экспортировать меш вместе с каждой анимацией?
Нет. Меш со скелетом экспортируется один раз, анимации отдельными файлами без меша. Это экономит и время, и место.
Что делать, если анимация проигрывается рывками?
Проверьте частоту кадров и ключи на дробных кадрах. Если это не помогло, посмотрите на настройки сжатия анимации в движке: агрессивное сжатие иногда даёт заметные артефакты на плавных движениях.
Проверяйте перенос на простом тестовом движении до того, как гнать в движок готовую анимацию. Десять секунд ходьбы выявят всё, что сломается на сложной сцене.
