Как работают перемещения в 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-кость, и именно она реально двигает персонажа в мире, а не код.

Как работают перемещения в AAA: Motion Matching в UE5 на практике

Motion Matching лучше всего раскрывается на большой библиотеке анимаций. Чем больше вариантов шагов, стартов/стопов, поворотов и разгонов — более вариативным будет движение

Пример: Game Animation Sample от Epic — там в базе сотни фрагментов, и это лишь часть того, что используется в этом паке .

Как работают перемещения в AAA: Motion Matching в UE5 на практике

Но важно и другое: Motion Matching может нормально работать и на маленьком наборе, если правильно подготовить материал.

Минимальный пример: “котик” на 3 анимациях

В моём примере используется всего 3 анимации:

  1. базовая анимация ходьбы вперёд
  2. аддитивная поза для поворота/сгиба в одну сторону
  3. аддитивная поза для поворота/сгиба в другую сторону

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

Что такое аддитивные позы

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

Проще: есть “основа” (ходьба), а аддитив — это слой, который: наклоняет корпусменяет изгиб тела

Как устроен Motion Matching в UE5

В Unreal система держится на трёх ключевых частях:

Pose Search Schema + Pose Search Database + Normalize

Если совсем просто:

  • Database — где лежат анимации
  • Schema — по каким правилам выбираем позу
  • Normalize — чтобы сравнение работало корректно

Pose Search Schema — «правила поиска»

Здесь ты говоришь движку, что считать важным при выборе позы.

Можно настроить:

— какие кости сравнивать (таз, стопы, корпус и т.д.) — учитывать ли позиции, скорости или ориентации — смотреть ли в будущее по траектории — анализировать прошлые/будущие кадры — учитывать ли контакты ног с землёй — веса параметров (что важнее: стопы, корпус или скорость)

По сути, Schema — это формула, по которой UE решает: «какой кадр самый подходящий прямо сейчас»

Как работают перемещения в AAA: Motion Matching в UE5 на практике

Trajectory Channel

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

Position XY — положение будущих точек

помогает выбрать правильную траекторию

Velocity XY

Сравнивает скорость движения по X/Y. отличает шаг от бега, разгон от торможения.

Как работают перемещения в AAA: Motion Matching в UE5 на практике

Facing Direction XY

Учитывает направление, куда смотрит персонаж. → важно для поворотов и страфинга.

Velocity Direction

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

Offset

Offset — насколько далеко в будущее смотрим (0.3–1.0 сек)

больше offset = больше учёт будущего

Weight

Насколько сильно этот сэмпл влияет на выбор позы.

Больше weight → сильнее влияет на результат поиска.

Как работают перемещения в AAA: Motion Matching в UE5 на практике

Position / Velocity Channels — как двигается тело

Если Trajectory отвечает за куда идём, то Pose/Bone каналы отвечают за как именно двигаемся.

Например:

Position Channel (foot_l / foot_r)

Сравнивает положение стоп.

Зачем: — меньше скольжения — стабильные контакты — правильные шаги — аккуратные старты/стопы

Как работают перемещения в AAA: Motion Matching в UE5 на практике

Velocity Channel

Сравнивает скорость кости.

Зачем: — понимает, какая нога опорная — выбирает правильную фазу шага

Как работают перемещения в AAA: Motion Matching в UE5 на практике

Heading Channel

это канал, который учитывает направление, куда “смотрит” персонаж, а не его скорость

Почему туда кидают root или pelvis Потому что именно они задают основной facing всего тела

Как работают перемещения в AAA: Motion Matching в UE5 на практике

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

53
13
42 комментария