Как работают перемещения в AAA: Motion Matching в UE5 на практике
Что такое Motion Matching
Motion Matching — это алгоритм, который каждый кадр ищет в базе анимаций позу, максимально подходящую под текущую ситуацию персонажа.
Он анализирует не только текущую позу, но и:
скорость и направление движения
положение стоп
ориентацию корпуса
будущую траекторию (куда игрок собирается идти) и даже то, как персонаж двигался пару кадров назад
После этого система выбирает самый подходящий фрейм из всей библиотеки анимаций и плавно блендится в него.
По сути, это не переключение между состояниями, а умный поиск следующего кадра.
Чаще всего технология используется для локомоушн: ходьбы, бега, стартов, остановок, поворотов.
Где применялась
The Last of Us Part II, For Honor, The Last of Us Part I, Fortnite.
Мой тг канал об анимаци и играх
Важно
Motion Matching обычно работает вместе с Root Motion.
Root Motion — это когда движение персонажа задается самой анимацией: смещение «запекается» в root-кость, и именно она реально двигает персонажа в мире, а не код.
Motion Matching лучше всего раскрывается на большой библиотеке анимаций. Чем больше вариантов шагов, стартов/стопов, поворотов и разгонов — более вариативным будет движение
Пример: Game Animation Sample от Epic — там в базе сотни фрагментов, и это лишь часть того, что используется в этом паке .
Но важно и другое: Motion Matching может нормально работать и на маленьком наборе, если правильно подготовить материал.
Минимальный пример: “котик” на 3 анимациях
В моём примере используется всего 3 анимации:
- базовая анимация ходьбы вперёд
- аддитивная поза для поворота/сгиба в одну сторону
- аддитивная поза для поворота/сгиба в другую сторону
В итоге персонаж может ходить по кругу/менять дугу, хотя в базе нет отдельных анимаций для поворотов.
Что такое аддитивные позы
Additive Poses — это анимации, которые не заменяют базовое движение, а накладываются поверх него, добавляя нужную корректировку.
Проще: есть “основа” (ходьба), а аддитив — это слой, который: наклоняет корпусменяет изгиб тела
Как устроен Motion Matching в UE5
В Unreal система держится на трёх ключевых частях:
Pose Search Schema + Pose Search Database + Normalize
Если совсем просто:
- Database — где лежат анимации
- Schema — по каким правилам выбираем позу
- Normalize — чтобы сравнение работало корректно
Pose Search Schema — «правила поиска»
Здесь ты говоришь движку, что считать важным при выборе позы.
Можно настроить:
— какие кости сравнивать (таз, стопы, корпус и т.д.) — учитывать ли позиции, скорости или ориентации — смотреть ли в будущее по траектории — анализировать прошлые/будущие кадры — учитывать ли контакты ног с землёй — веса параметров (что важнее: стопы, корпус или скорость)
По сути, Schema — это формула, по которой UE решает: «какой кадр самый подходящий прямо сейчас»
Trajectory Channel
Этот канал отвечает за то, куда персонаж движется сейчас и куда он будет двигаться в ближайшее время.
Position XY — положение будущих точек
помогает выбрать правильную траекторию
Velocity XY
Сравнивает скорость движения по X/Y. отличает шаг от бега, разгон от торможения.
Facing Direction XY
Учитывает направление, куда смотрит персонаж. → важно для поворотов и страфинга.
Velocity Direction
Сравнивает только направление скорости, без ее величины. → полезно, когда важно “куда движемся”, а не “насколько быстро”.
Offset
Offset — насколько далеко в будущее смотрим (0.3–1.0 сек)
больше offset = больше учёт будущего
Weight
Насколько сильно этот сэмпл влияет на выбор позы.
Больше weight → сильнее влияет на результат поиска.
Position / Velocity Channels — как двигается тело
Если Trajectory отвечает за куда идём, то Pose/Bone каналы отвечают за как именно двигаемся.
Например:
Position Channel (foot_l / foot_r)
Сравнивает положение стоп.
Зачем: — меньше скольжения — стабильные контакты — правильные шаги — аккуратные старты/стопы
Velocity Channel
Сравнивает скорость кости.
Зачем: — понимает, какая нога опорная — выбирает правильную фазу шага
Heading Channel
это канал, который учитывает направление, куда “смотрит” персонаж, а не его скорость
Почему туда кидают root или pelvis Потому что именно они задают основной facing всего тела
Weight
Насколько кость важна для поиск
Pose Search Database — библиотека анимаций
Это просто база всех клипов:
ходьба ,бег старты/стопы , повороты ,страфы
UE разбивает их по кадрам и сохраняет:
позы , скорости ,root motion,контакты стоп , траекторию
В рантайме система сравнивает текущий запрос со всеми кадрами и выбирает лучший.
Можно делать разные Database (Search Schema) :
- отдельную для стартов
- для стопов
- для локомоушена
Чем разнообразнее база — тем естественнее движение.
Pose Search Normalize — что это
Normalize — это приведение всех данных позы к одному масштабу перед сравнением.
Motion Matching сравнивает:
- позиции костей
- скорости
- траекторию
Но у них разные единицы измерения:
- позиции → метры
- скорости → м/с
- направления → 0–1
Если не использовать Normalize, Motion Matching начинает сравнивать сырые цифры, и поиск становится кривым.
Итог
Database — где ищем Schema — как ищем Normalize — связывание все это дело изолентой
Конечно - в моушен матчинге гораздо больше настроек и эта статья затрагивает лишь общие аспекты
Мой телеграмм канал посвященный 3D анимации и unreal