Unreal Engine 5 Motion Matching
Motion Matching
Используйте Motion Matching для создания отзывчивых систем анимации, которые выбирают позы анимации из базы данных, чтобы соответствовать динамическим запросам системы во время выполнения.
Motion Matching в Unreal Engine - это система выбора позы анимации, основанная на запросах. Находясь в плагине Pose Search, вы можете использовать узел Motion Matching Animation Blueprint в качестве динамической альтернативы машинам состояний или Blendspaces. В отличие от традиционных систем анимации, Motion Matching может делать обоснованный выбор позы анимации из набора данных анимации, чтобы создать отзывчивую и реактивную систему анимации, без необходимости настраивать логику перехода или смешивания между анимациями.
Узел Motion Matching запрашивает каналы персонажа через схему (например, положение и скорость кости) и делает выбор позы анимации из набора данных анимации, хранящихся в ассете базы данных, чтобы соответствовать запросу. Результаты анимации персонажей с помощью Motion Matching более реактивны и отвечают требованиям игровых систем, чем традиционные машины состояний или логика смешивания.
С помощью Motion Matching вы можете повысить точность анимации персонажа, просто добавив больше данных об анимации в базу данных. При увеличении количества данных анимации узел Motion Matching получает доступ к большему количеству данных для выбора, без необходимости изменять или реализовывать дополнительную логику переходов.
Система Motion Matching в Unreal Engine также содержит набор настроек и инструментов отладки, которые можно использовать для настройки системы анимации в соответствии с целями вашего проекта. С помощью этих инструментов вы можете наблюдать за выбором, редактировать процесс запроса и устанавливать веса критериев выбора.
В этом документе представлен обзор Motion Matching в Unreal Engine, а также пример рабочего процесса по настройке системы анимации передвижения персонажа с помощью Motion Matching.
Предварительная подготовка
- Включите плагин Pose Search. Перейдите в строке меню Edit > Plugins и найдите его в разделе Animation или воспользуйтесь строкой поиска. Включите плагин и перезапустите редактор.
- Ваш проект содержит персонажа с набором анимаций движения (ходьба, бег и повороты). Если у вас их нет, вы можете загрузить образец проекта Game Animation Sample Project с Unreal Engine Marketplace. Дополнительную информацию об этом проекте-образце можно найти в документации Game Animation Sample Project.
Настройка Motion Matching
Здесь вы можете проследить за тем, как настроить простую систему Motion Matching, основанную на передвижении, в вашем проекте. Более подробную и сложную настройку можно найти в документации по проекту Game Animation Sample.
Создание ассета Pose Search Schema
Ассет Pose Search Schema хранит конфигурацию согласования движений и настройки запросов. Этот ассет используется для связи баз данных анимации и системы запросов с узлом Motion Matching и определяет данные, которые будут использоваться для запроса, чтобы сделать выбор анимации.
Чтобы создать ассет Pose Search Schema, щелкните правой кнопкой мыши в браузере контента (+) Add и выберите Animation > Motion Matching > Pose Search Schema.
После создания нового ассета Pose Search Schema вам будет предложено выбрать скелет персонажа, для которого вы создаете систему согласования движений.
Новые ассеты Pose Search Schema поставляются с двумя каналами - каналом траектории и каналом поиска позы - для настройки передвижения. С помощью канала Траектории вы можете задать точки для Motion Trajectory Component для выборки, чтобы сделать выборку позы. Настройки по умолчанию подойдут для этого примера, однако вы можете добавить дополнительные семлы с помощью (+) Add в свойстве Samples, чтобы обеспечить больше полезных данных для системы согласования движений при выборе позы.
Рекомендуется использовать как можно меньше семплов. Хотя большее количество семплов может обеспечить узлу Motion Matching более точные данные, это может исказить результаты работы системы.
Канал Траектории (Trajectory Channel)
Каждому индексу в канале траектории можно присвоить флаги, чтобы определить, какой тип данных будет искать точка выборки при запросе канала траектории движения. Для данного примера рабочего процесса подойдут значения по умолчанию. Дополнительные сведения о настройках и флагах канала траектории см. в разделе Справочник канала траектории.
С помощью канала Pose Channel можно задать определения костей для системы Motion Matching, чтобы сопоставить позы с помощью системы запросов. В ассете по умолчанию предварительно настроены определения костей для костей ног скелета манекена foot_l и foot_r. Если вы используете другой скелет, замените эти определения костей костями левой и правой ступни вашего ассета скелета.
Вы также можете установить флаги для каждой сэмплированной кости, чтобы определить, какой тип данных из сэмплированной кости будет рассматривать система согласования движений, чтобы сделать выборку. Дополнительные сведения о настройках канала Pose Channel и флагах различий см. в разделе Канал Pose Channel.
Канал Pose Channel может использовать любую кость в качестве опорной точки. Для системы анимации, соответствующей движению, вы захотите выбрать пару костей, которые будут полезны для отслеживания данных, связанных с движением, например ноги персонажей. В альтернативной системе, например в системе скалолазания, вы захотите выбрать кости, которые будут содержать больше ценных данных, например кости рук персонажей.
В ассет Motion Database Config можно добавить больше каналов, но чем больше каналов и сэмплов внутри каналов, тем больше производительности потребуется для работы.
Для данного примера рабочего процесса значения по умолчанию обеспечат хорошие результаты движения.
Руководство по ассету Pose Search Schema
Здесь вы можете просмотреть список свойств и настроек ассета Pose Search Schema.
Skeleton Здесь вы можете определить ассет Skeleton для вашего персонажа, который будет использовать узел Motion Matching.
Mirror Data Table Здесь вы можете установить ассет Mirror Data Table, чтобы обеспечить зеркальное отображение анимаций для узла Motion Matching, который будет использовать их при выборе анимации.
Data Preprocessor Установите тип операции, выполняемой с полным набором данных по позиционированию. Можно выбрать один из следующих вариантов:
- None: Эта опция не применяет никакой предварительной обработки данных.
- Normalize: Эта опция нормализует все данные относительно их отклонения. Кроме того, все веса будут приведены к единичному векторному значению.
- Normalize Only by Deviation: Эта опция нормализует все данные только по их отклонению, не нормализуя значения веса.
Sample Rate Установите частоту обновления данных анимации в базе данных. Чем выше частота выборки, тем более точным будет поиск поз анимации, но это приведет к увеличению затрат памяти системы.
Channels Здесь вы можете добавить и настроить каналы для системы согласования движений, которые будут использоваться при запросе, поиске и согласовании поз анимации во время выполнения. Каналы разбивают стоимость ассета Pose Search Schema на более простые части, такие как положение или скорость костей семпла или фазы конечностей. Общая стоимость запроса к индексированной базе данных поз будет равна сумме затрат по каналам. Вы можете добавить канал с помощью кнопки (+) Add и выбрать канал из выпадающего меню. Добавление дополнительных каналов детализирует поиск в системе согласования движений, но требует больше памяти и затрат на производительность.
Рекомендуется использовать столько каналов, сколько необходимо для достижения целей вашей анимационной системы.
Более подробную информацию об отдельных каналах и их свойствах см. в разделе "Каналы".
Number of Permutations Установите количество раз, которое будут индексироваться анимационные ассеты из связанной базы данных при выборе.
Permutations Time Offset Установите значение, которое будет представлять собой начальное смещение PermutationTime от Sampling Time первой перестановки. Последующие перестановки будут использовать формулу перетекания для определения смещения времени перестановки: PermutationTime = SamplingTime + PermutationTimeOffset + PermutationIndex / PermutationSampleRate .
Add Data Padding Если эта функция включена, в ассет Motion Database Config будет добавлен канал смещения, чтобы убедиться, что данные выровнены по 16 байтам и вмещены для повышения производительности за счет возможной дополнительной памяти.
Inject Additional Debug Channels Когда эта функция включена, каналам будет предложено ввести дополнительные каналы в эту схему. Изначально предполагалось добавить UPoseSearchFeatureChannel_postions(s), чтобы помочь справиться со сложностью отладочного рисования (в базе данных будут все необходимые позиции для рисования линий в нужном месте и в нужное время).
Каналы
Здесь вы можете получить список доступных каналов для ассета Motion Database Schema.
Вы можете использовать Group Channel для объединения других ассетов Pose Search Schema в группы, чтобы выполнять операции вместе. После создания группового канала вы можете создать дополнительные каналы в его свойстве Sub-Channel, используя (+) Add.
Вы можете использовать канал Heading Channel для запроса направления движения системы. Это может быть полезно, когда вы хотите сопоставить компоненты ориентации конкретной кости, выраженные в виде оси направления, например, только горизонтальное или вертикальное движение кости.
Здесь вы можете ознакомиться со списком свойств канала Heading Channel и описанием их функций:
Debug Color Здесь вы можете задать цвет отладочного рисунка, который будет отображаться во вьюпорте, чтобы помочь в отладке системы согласования движений.
Bone Здесь вы можете назначить кость из скелета персонажа, которая будет использоваться в запросе для выбора позы. Вы можете выбрать кость из иерархии скелета с помощью выпадающего меню.
Origin Bone Задайте кость скелета, которая будет служить исходной костью для определения направления движения. Вы можете выбрать кость из скелета персонажа с помощью выпадающего иерархического меню.
Weight Установите значение веса, которое будет использоваться для взвешивания влияния этого канала на выходную позу по сравнению с другими каналами в ассете Motion Database Config.
Sample Attribute ID Задайте значение, которое будет использоваться в качестве идентификатора атрибута семпла. Если это значение больше 0,0, ожидается, что все анимации, содержащиеся в Pose Search Database, связанной с этим ассетом Pose Search Schema, содержащимся в этом канале, будут иметь Pose Search: Sampling Attribute ID Notify State, и свойство Sampling Attribute определено. Значение, установленное в этом свойстве, будет использоваться в качестве источника данных вместо канала Bone. Значения свойства Sampling Attribute будут преобразованы в пространство Origin Bone.
Sample Time Offset Здесь можно задать значение, которое будет использоваться в качестве смещения для времени выборки.
Origin Time Offset Здесь вы можете задать значение, которое будет использоваться для смещения времени начала отчета. Данные относительно Sampling Time, связанного с Origin Bone этого канала (Root или Trajectory Bone), будут смещены на значение этого свойства в секундах. Например, если Origin Bone установлена на головную кость персонажа, Sample Time Offset установлено на 0,5, а Origin Time Offset установлено на 0,5, этот канал будет пытаться сопоставить будущее направление головной кости персонажа на 0,5 секунды вперед относительно будущей корневой кости в то же самое время.
Heading Axis Установите ось (X, Y или Z), которая будет использоваться для опроса движения выбранного свойства Bone.
Input Query Pose Здесь вы можете задать метод, используемый для ввода запрашиваемой позы. Вы можете выбрать один из следующих методов:
- Use Character Pose: Использует текущую позу персонажа для ввода запрашиваемой позы.
- Use Continuing Pose: Использует текущую позу персонажа для ввода запрашиваемой позы.
- Use Interpolated Continuing Pose: Использует интерполяционную смешивание для ввода запрашиваемой позы и продолжающейся позы.
Component Stripping Здесь можно выбрать конкретную ось движения для выделения из запрашиваемых данных. Выбор None не приводит к отсечению компонентов, при выборе Strip XY будет наблюдаться движение только по осям X и Y, совпадающее с горизонтальной плоскостью, а при выборе Strip Z будет наблюдаться движение только по оси Z, совпадающее с движением по высоте запроса.
Permutation Time Type Здесь вы можете выбрать тип времени перестановки, который будет использоваться при выборке анимации. Вы можете выбрать один из следующих вариантов:
- Use Sample Time: Этот тип сэмплирует Bone и Origin Bone в одно и то же время сэмплирования, в дополнение к возможному смещению времени сэмплирования Bone. Оно определяется как текущее время оценки анимации.
- Use Permutation Time: Этот тип сэмплирует кость и исходную кость в одно и то же время перестановки, в дополнение к возможному смещению времени сэмплирования кости. Он определяется как SampleTime (как UseSampleTime) + Schema -> PermutationTimeOffset + PermutationIndex / Schema -> PermutationSampleRate, где PurmutationIndex находится в диапазоне [0, Schema -> Number of Permutations].
- Use Sample to Permutation Time: Этот тип оценивает кость во время выборки, в дополнение к возможному смещению времени выборки для кости, а исходная кость оценивается во время перестановки.
Normalization Group Здесь можно задать группу нормализации, чтобы нормализовать запрос канала по отношению к другим Heading Channels. Если этот параметр установлен, все каналы одного класса с одинаковой кардинальностью и одинаковой группой нормализации будут нормализованы вместе. Например, в базе данных перемещения персонажа, держащего оружие, содержащей анимации, не поддающиеся изменению, вы все равно можете захотеть нормализовать положение и скорость левой и правой ног.
Канал подгонки используется для добавления дополнительных данных подгонки в базу данных Motion Matching, чтобы повысить производительность за счет дополнительной памяти. Канал автоматически вводится в схему поиска позы, если свойство Add Data Padding включено и установлено на 16 байт. Вы можете задать количество перестановок, при которых канал будет добавлять данные, используя свойство Padding Size.
Здесь вы можете обратиться к свойствам канала Phase и описанию их функциональности:
Debug Color Здесь вы можете задать цвет отладочного рисунка, который будет отображаться во вьюпорте, чтобы упростить отладку системы согласования движений.
Bone Здесь вы можете назначить кость из скелета персонажа, которая будет использоваться в запросе для выбора позы. Вы можете выбрать кость из иерархии скелета с помощью выпадающего меню.
Weight Установите значение веса, которое будет использоваться для расчета влияния этого канала на выходную позу по сравнению с другими каналами в ассете Motion Database Config.
Input Query Pose Здесь вы можете задать метод, используемый для ввода запрашиваемой позы. Вы можете выбрать один из следующих методов:
- Use Character Pose: Использует текущую позу персонажа для ввода запрашиваемой позы.
- Use Continuing Pose: Использует текущую позу персонажа для ввода запрашиваемой позы.
- Use Interpolated Continuing Pose: Использует интерполяционную комбинацию для ввода запрашиваемой позы и продолжающейся позы.
Вы можете использовать канал Pose для вычисления положения персонажа в пространстве персонажа, а не в глобальном пространстве. Этот канал полезен, когда движение, которое вы хотите запросить, является локальным для позиции персонажа, а не глобальным.
Здесь вы можете ознакомиться со свойствами канала Pose и описанием их функциональности:
Weight Установите значение веса, которое будет использоваться для взвешивания влияния этого канала на выходную позу по сравнению с другими каналами в ассете Motion Database Config.
Sampled Bones Здесь вы можете определить список костей, которые канал Pose Channel будет сэмплировать на основе соответствующих флагов, чтобы сопоставить позы с системой запросов. Вы можете добавить определения костей для выборки, используя (+) Add. После добавления индекса вы можете задать следующие свойства:
- Debug Color: Установите цвет, который будет использоваться для отрисовки отладочного рисунка кости с эталонной выборкой во время выполнения в окне просмотра.
- Reference: Выберите кость из иерархии скелетов персонажа с помощью выпадающего меню.
- Flags: Здесь вы можете переключить флаги, которые определят, к какому типу данных будут относиться отобранные кости. Вы можете установить столько флагов, сколько необходимо для достижения целей вашего проекта. Вы можете выбирать флаги из следующего списка:
- Weight: Установите значение веса, которое будет использоваться для взвешивания влияния этого индекса Sampled Bones на канал.
Input Query Pose Здесь вы можете задать метод, используемый для ввода запрашиваемой позы. Вы можете выбрать один из следующих методов:
- Use Character Pose: Использует текущую позу персонажа для ввода запрашиваемой позы.
- Use Continuing Pose: Использует текущую позу персонажа для ввода запрашиваемой позы.
- Use Interpolated Continuing Pose: Использует интерполяционную смесь для ввода запрашиваемой позы и продолжающейся позы.
Use Character Space Velocities Если эта опция включена, скорости будут рассчитываться на основе позиций в пространстве персонажа, в противном случае они будут рассчитываться на основе позиций в глобальном пространстве.
Вы можете использовать канал " Position", чтобы узнать положение кости относительно другой в скелете персонажа. Это может быть полезно при попытке выбора позы на основе смещения кости или ее положения относительно другой.
Здесь вы можете ознакомиться со списком свойств канала Position Channel и описанием их функциональности:
Debug Color Здесь вы можете задать цвет отладочного рисования, который будет отображаться во вьюпорте, чтобы помочь в отладке системы согласования движений.
Bone Здесь вы можете назначить кость из скелета персонажа, которая будет использоваться в запросе для выбора позы. Вы можете выбрать кость из иерархии скелета с помощью выпадающего меню.
Origin Bone Здесь вы можете назначить кость из скелета персонажа, которая будет использоваться в качестве опорной точки для расчета изменения положения кости. Вы можете выбрать кость из иерархии скелета с помощью выпадающего меню.
Weight Установите значение веса, которое будет использоваться для взвешивания влияния этого канала на выходную позу по сравнению с другими каналами в ассете Motion Database Config.
Sample Time Offset Здесь вы можете задать значение, которое будет использоваться в качестве смещения для времени выборки.
Input Query Pose Здесь вы можете задать метод, используемый для ввода запрашиваемой позы. Вы можете выбрать один из следующих методов:
- Use Character Pose: Использует текущую позу персонажа для ввода запрашиваемой позы.
- Use Continuing Pose: Использует текущую позу персонажа для ввода запрашиваемой позы.
- Use Interpolated Continuing Pose: Использует интерполяционную смесь для ввода запрашиваемой позы и продолжающейся позы.
Component Stripping Здесь можно выбрать конкретную ось движения для выделения из запрашиваемых данных. Выбор None не приводит к отсечению компонентов, при выборе Strip XY будет наблюдаться движение только по осям X и Y, совпадающее с горизонтальной плоскостью, а при выборе Strip Z будет наблюдаться движение только по оси Z, совпадающее с движением по высоте запроса.
Permutation Time Offset Установите значение, которое будет представлять собой начальное смещение PermutationTime от Sampling Time первой перестановки. Последующие перестановки будут использовать формулу перетекания для определения смещения времени перестановки: PermutationTime = SamplingTime + PermutationTimeOffset + PermutationIndex / PermutationSampleRate.
Канал Sampling Time используется для отладочных целей, чтобы дополнить данные о характеристиках временем выборки. По умолчанию вес этого канала установлен на 0,0, поэтому он не будет учитываться при поиске.
Канал траектории используется для выборки траектории движения персонажа и предназначен для совместного использования с компонентом чертежа Character Trajectory. С помощью свойства Weight вы можете установить степень влияния канала траектории на конечную выходную позу. С помощью свойства Samples вы можете добавить сэмплы из временных точек компонента Character Trajectory, в которых будет сэмплироваться модель движения персонажа.
Здесь вы можете ознакомиться со списком свойств сэмплов и описанием их функциональности:
Debug Color Здесь вы можете задать цвет отладочного рисунка, который будет отображаться во вьюпорте, чтобы помочь в отладке системы согласования движений.
Offset Здесь вы можете установить, когда выборка движения персонажа должна быть взята из компонента "Character Trajectory". Положительные значения смотрят вперед по времени, а отрицательные - назад по времени.
Flags Здесь вы можете переключить, какие значения из движения персонажа должны быть взяты в месте вдоль компонента Character Trajectory, указанном свойством Offset. Вы можете выбрать любое количество значений из выпадающего списка.
Weight Установите значение, которое будет использоваться для взвешивания влияния сэмплов на выбор конечной выходной позы. Это значение используется только для взвешивания относительно других образцов в индексе, но не относительно других каналов.
Вы можете использовать канал Velocity Channel для запроса поз, основанных на скорости персонажа в пространстве персонажа или в глобальном пространстве.
Здесь вы можете ознакомиться со списком свойств канала Velocity Channel и описанием их функциональности:
Debug Color Здесь вы можете задать цвет отладочного рисунка, который будет отображаться во вьюпорте, чтобы помочь в отладке системы согласования движений.
Bone Здесь вы можете назначить кость из скелета персонажа, которая будет использоваться в запросе для выбора позы. Вы можете выбрать кость из иерархии скелета с помощью выпадающего меню.
Weight Установите значение веса, которое будет использоваться для взвешивания влияния этого канала на выходную позу по сравнению с другими каналами в ассете Motion Database Config.
Sample Time Offset Здесь вы можете задать значение, которое будет использоваться в качестве смещения для времени выборки.
Input Query Pose Здесь вы можете задать метод, используемый для ввода запрашиваемой позы. Вы можете выбрать один из следующих методов:
- Use Character Pose: Использует текущую позу персонажа для ввода запрашиваемой позы.
- Use Continuing Pose: Использует текущую позу персонажа для ввода запрашиваемой позы.
- Use Interpolated Continuing Pose: Использует интерполяционную смесь для ввода запрашиваемой позы и продолжающейся позы.
Use Character Space Velocities При включении этого параметра скорость указанного кости будет рассчитываться в пространстве персонажа, а не глобально. Это полезно, когда вы запрашиваете локальное движение, а не движение персонажа в мировом пространстве.
Normalize При включении этого параметра значения скорости будут нормализованы до максимального значения 1. Это свойство может быть полезно при попытке запросить, когда кость находится в движении, а не интенсивность движения.
Component Stripping Здесь можно выбрать конкретную ось движения для выделения из запрашиваемых данных. Выбор None не приводит к отсечению компонентов, при выборе Strip XY будет наблюдаться движение только по осям X и Y, совпадающее с горизонтальной плоскостью, а при выборе Strip Z будет наблюдаться движение только по оси Z, совпадающее с движением по высоте запроса.
Экспериментальные каналы
Здесь вы можете ознакомиться со списком экспериментальных каналов схемы поиска поз и описанием их функциональности:
Следующие каналы являются экспериментальными, и на их функциональность не следует полагаться в производстве.
Канал Crashing Legs используется для предотвращения перекрытия ног персонажа во время движения путем выбора позы, при которой конечности находятся на заданном расстоянии друг от друга. Это рассчитывается с помощью угла между направлением от позиции левого бедра к позиции правого бедра и направлением от позиции левой ноги к позиции правой ноги, который затем делится на PI, чтобы получить значения в заданном диапазоне от -1,0 до 1,0. Этот канал автоматически включается в схему поиска позы, если свойство Number of Permutations (Количество вариантов) больше 1.0. Этот канал предназначен для использования в сочетании с экспериментальной функцией Motion Matched Stitching.
Здесь вы можете ознакомиться со списком настроек канала Crashing Legs Channel и описанием их функциональности:
LeftThigh Установите кость, представляющую левое бедро персонажа.
Right Thigh Установите кость, представляющую правое бедро персонажа.
Left Foot Установите кость, представляющую левую ногу персонажа.
Right Foot Установите кость, представляющую правую ногу персонажа.
Weight Установите значение веса, чтобы соотнести результаты этого канала с другими активными каналами в ассете Motion Database Config.
Input Query Pose Здесь вы можете задать метод, используемый для ввода запрашиваемой позы. Вы можете выбрать один из следующих методов:
- Use Character Pose: Использует текущую позу персонажа для ввода запрашиваемой позы.
- Use Continuing Pose: Использует текущую позу персонажа для ввода запрашиваемой позы.
- Use Interpolated Continuing Pose: Использует интерполяционную смесь для ввода запрашиваемой позы и продолжающейся позы.
Allowed Tolerance Установите допустимое отклонение при выборе с помощью этого канала.
С помощью канала Permutation Time вы можете взвесить дополнительные каналы, чтобы установить степень влияния каждого канала на конечную выходную позу.
Вы можете установить вес влияния этого канала по сравнению с другими каналами с помощью свойства Weight.
Создание ассета Pose Search Database
Чтобы сохранить данные анимации персонажа в формате, из которого узел Motion Matching может делать выборки, необходимо создать ассеты базы данных Pose Search Database. Чтобы создать ассет базы данных движений, перейдите в обозревателе содержимого к (+) Add и выберите Animation > Motion Matching > Pose Search Database.
После создания ассета Pose Search Database необходимо определить ассет Pose Search Schema, выбрав ассет Pose Search Schema в палитре ассетов. Вы можете открыть редактор ассетов, дважды щелкнув его в обозревателе содержимого.
Базы данных поиска поз - это место, где вы можете добавлять и редактировать список ассетов анимации, доступных для Motion Matching, чтобы делать из них выборки. После создания ассетов вы можете открыть редактор ассетов базы данных Pose Search Database, дважды щелкнув по ассету в браузере контента.
Теперь вы можете добавить свои анимационные ассеты в ассет Motion Database. В этом примере рабочего процесса используется набор ассетов движения, таких как циклы, повороты и остановки.
Анимации, используемые в настройках Motion Matching для движения, должны содержать root-движение, а в анимациях должно быть включено свойство Root Motion.
Вы можете использовать любое количество ассетов анимации, необходимое для достижения желаемой точности, но чем больше ассетов анимации вы предоставите, тем больше данных будет у узла Motion Matching для выбора.
Чтобы добавить анимационный ассет, можно воспользоваться кнопкой (+) Add на панели Asset List или перетащить ассет с помощью панелей Content Browser или Asset Browser.
Ассеты базы данных Pose Search Database поддерживают различные типы анимационных ассетов, в то время как ассеты Animation Sequence используются по умолчанию, при желании вы можете использовать Animation Composite, Blendspace.
Хотя ассеты Animation Montage не поддерживаются в Animation Blueprints и поэтому не могут использоваться с узлом Motion Matching, их можно использовать и воспроизводить в установках Motion Matching, используя экспериментальную функцию Motion Matching в Character Blueprint.
После добавления анимации в Pose Search Database вы можете выбрать один или несколько ассетов анимаций на панели Asset List, чтобы просмотреть их воспроизведение в окне просмотра или изменить их свойства на панели Selection Details.
Schema Здесь вы можете установить или сослаться на ассет Pose Search Schema, который задает каналы, по которым будет сопоставляться данный ассет базы данных Pose Search. Это свойство автоматически заполняется схемой, которую вы выбрали при создании ассета базы данных. Вы можете изменить связанную схему с помощью выпадающего меню выбора ассета свойства.
Continuing Pose Cost Bias Здесь вы можете задать значение, которое добавит смещение к текущей выбранной позе. Это позволяет применить к позе положительное или отрицательное смещение стоимости, чтобы повлиять на то, как она будет оцениваться при выборе следующей позы. Это полезно для того, чтобы помочь системе задержаться на одном сегменте анимации дольше или короче, в зависимости от установленного значения. Отрицательные значения повышают вероятность того, что анимация будет постоянно выбираться или воспроизводиться дольше, а положительные значения снижают вероятность того, что она будет выбрана снова, в результате чего анимация будет воспроизводиться дольше.
Looping Cost Bias Здесь вы можете задать значение, которое будет добавлено ко всем ассетам с зацикленной анимацией в базе данных. Это позволяет контролировать вероятность того, что система выберет зацикленную анимацию. Отрицательные значения повышают вероятность того, что система выберет зацикленные анимации и останется в них, а положительные значения снижают вероятность того, что зацикленные анимации будут выбраны или воспроизведены подряд.
Exclude from Database Parameters Здесь вы можете задать, как далеко за пределами первого и последнего кадра анимации должны быть оценены. Это свойство можно использовать для обрезки начальных и конечных кадров анимации в базе данных, чтобы сохранить позы перехода при смешивании между текущей и следующей выбранной анимацией, например, предотвратить самые последние кадры анимации при смешивании. При значении 0.0 обрезка не производится, в то время как отрицательные кадры обрезают анимацию с любой стороны в зависимости от используемого свойства.
Additional Extrapolation Time Здесь вы можете задать значения, определяющие дополнительное время экстраполяции, которое будет использоваться при наложении анимации. Вы можете задать минимальное или максимальное значение, которое будет использоваться в следующих формулах, применяемых для зажатия времени экстраполяции каждой анимации:
MinimumExtrapolationTime = AnimationAssetTimeStart + AdditionalExtrapolationTime.Min
MaximumExtrapolationTime = AnimationAssetTimeEnd + AdditionalExtrapolationTime.Max
Tags Здесь вы можете задать массив тегов, которые могут быть использованы в качестве метаданных для ассета базы данных поиска поз. Вы можете добавить новый элемент в массив с помощью кнопки (+) Add. После добавления элемента массива вы сможете добавить текстовое значение к элементу индекса.
Normalization Set Здесь вы можете задать ассет Pose Search Normalization Set, который определит список ассетов Pose Search Database, с которыми вы хотите нормализовать выборку. Хотя установка набора нормализации не является обязательной для функциональной настройки Motion Matching, разделение наборов анимации по типам и использование набора нормализации для сравнения наборов друг с другом может дать более точные и эффективные результаты. Дополнительные сведения об использовании наборов нормализации см. в разделе "(Pose Search Normalization Sets)" данного документа.
Preview Mesh Здесь вы можете задать ассет скелетной сетки, который будет использоваться во вьюпорте при воспроизведении анимации. Если оставить это свойство неопределенным, редактор будет использовать скелетную сетку, связанную с добавленными вами анимационными ассетами. Вы можете выбрать новую скелетную сетку для предварительного просмотра, используя выпадающее меню выбора ассета свойства и выбрав любой скелет, совместимый с анимационными ассетами базы данных.
Pose Search Mode Установите режим, в котором база данных будет выполнять поиск данных анимации. С помощью выпадающего меню вы можете выбрать один из следующих вариантов:
- Brute Force: Поиск по базам данных будет тщательно проанализирован. Система будет оценивать все проиндексированные позы, чтобы найти лучшую.
- PCAKDTree: Это оптимизированный режим поиска. База данных проецирует свои позы в пространство PCA (Principal Component Analysis), используя только наиболее значимое измерение, полученное из свойства **Number Of Principal Components, и строит KDTree ** (структуру данных с пространственным разделением) для облегчения поиска.
- VPTree: Это оптимизированный режим поиска, который использует дерево точек обзора.
Этот режим является экспериментальным, поэтому не следует полагаться на его функциональность в условиях производства.
Pose Pruning Similarity Threshold Здесь можно задать значение, определяющее порог сохранения похожих поз под одним и тем же индексом. Например, если две позы имеют одинаковые значения отбора, например, когда многомерная точка с кардинальностью схемы похожи, и эти значения ближе, чем значение, установленное для свойства Pose Pruning Similarity Threshold, только одна будет сохранена в базе данных и доступна по двум различным индексам поз. Это свойство полезно для установки пороговых значений, когда для заданного значения можно выбрать несколько поз, чтобы сэкономить память.
Это свойство доступно только в том случае, если для свойства Pose Search Mode установлено значение PCAKDTree.
Number Of Principal Components Устанавливает количество измерений, используемых для создания KDTree, когда для свойства Pose Search Mode установлено значение PCAKDTree. Более высокие значения приводят к увеличению числа измерений, что позволяет лучше понять разброс набора данных. Большее количество измерений обычно приводит к лучшим результатам поиска, но также приводит к увеличению объема памяти и снижению производительности проекта.
Это свойство доступно только в том случае, если для свойства Pose Search Mode установлено значение PCAKDTree.
KDTree Max Leaf Size Устанавливает максимальное количество листьев у каждой ветви KDTree.
Это свойство доступно только в том случае, если для свойства Pose Search Mode установлено значение PCAKDTree.
KNNQuerryNumNeighbors При использовании поиска по KDTree результаты будут иметь только приблизительную стоимость, поэтому при поиске по базе данных будет выбрано несколько поз, чтобы выполнить полный анализ стоимости и выбрать лучшую позу. Задайте значение в этом свойстве, чтобы установить количество поз, которые будут выбраны для полного анализа стоимости в результате поиска по KDTree. Это свойство также можно использовать для задания количества поз из поиска в VPTree для выполнения полного анализа стоимости при использовании режима поиска поз в VPTree.
Создание простейшей установки: Узел Motion Matching и узел Pose History
В анимационном блюпринте персонажа создайте узел Motion Matching, щелкнув правой кнопкой мыши на графике и выбрав Motion Matching в категории Pose Search.
Выберите ассет базы данных с помощью раскрывающегося меню Select Asset на графе узла Motion Matching.
Затем добавьте узел Pose History, перетащив выходной контакт узла Motion Matching и выбрав узел Pose History в разделе Pose Search или с помощью панели поиска. Затем подключите выходной контакт узла Pose History к узлу Output Pose.
Выберите узел Pose History в AnimGraph, чтобы раскрыть его свойства на панели Details. Включите свойство "Generate Trajectory".
Затем разверните свойство Collected Bones и добавьте элемент массива с помощью (+) Add для каждой кости в скелете персонажа, которую вы хотите взять за образец. Кости, определенные в этом свойстве, будут отобраны, когда узлы Pose History и Motion Matching будут запрашивать траекторию при выборе анимации.
Сохраните и скомпилируйте анимационный блюпринт. Теперь ваш персонаж использует Motion Matching для выбора позы анимации движения во время выполнения.
Узел Motion Matching
Здесь вы можете ознакомиться со списком настроек узла Motion Matching и описанием их функциональности:
Database Здесь вы можете задать ассет базы данных, который будет использоваться для выбора.
Blend Time Задайте значение, которое будет использоваться для определения длины смешивания при выборе нового сегмента анимации. В Motion Matching встроено дерево смешивания, которое позволяет нам иметь больше возможностей для выбора типов смешивания, качества смешивания и профилей смешивания. При желании можно сделать так, что, например, верхняя часть тела будет смешиваться дольше, чем нижняя. В будущем эта функция будет расширена еще больше.
Blend Profile Здесь вы можете установить один из профилей наложения персонажа, который будет использоваться с помощью Motion Matching.
Mode Здесь вы можете задать кривую, которая будет использоваться для определения того, как смешивание будет применяться к костям с течением времени. Обычно выбираются следующие варианты: Linear, Ease In, Ease Out и Ease In and Out. Вы можете получить доступ к этому свойству с помощью выпадающего меню, расположенного под расширением свойства Blend Profile.
Pose Jump Threshold Time Здесь вы можете задать временные рамки в секундах, при которых система не будет переходить к позам в этом диапазоне на одном и том же ассете, если они не находятся на расстоянии этого количества времени от текущего кадра. Это помогает предотвратить выбор фрагментов анимации в одном и том же клипе снова и снова и поощряет воспроизведение анимации или выбор чего-то нового.
Pose Reselect History Здесь вы можете задать диапазон в секундах, который не позволит системе переходить к позам, которые были выбраны ранее в течение заданного количества секунд.
Search Throttle Time Установите, как часто система ищет новые позы.
Play Rate Здесь вы можете установить скорость воспроизведения выбранных анимаций.
Use Inertial Blend Если эта функция включена, инерционное смешивание будет применяться к анимационным смешиваниям.
Reset On Becoming Relevant Если это свойство включено, оно сбросит состояние Motion Matching, если узел стал актуальным для графа после того, как не был отмечен на предыдущем кадре или кадрах.
Should Search При включении узел Motion Matching будет искать в подключенном ассете Database анимацию для сопоставления с системой запросов.
Should Use Cached Channel Data Если эта функция включена, при поиске по нескольким базам данных с разными схемами будет предпринята попытка передать данные об особенностях позы, вычисленные во время построения запроса. Это делается для того, чтобы иметь возможность как можно чаще использовать вектор признаков позы в разных схемах (и потенциально улучшить производительность). По умолчанию это свойство отключено, чтобы сохранить обратную совместимость с существующими системами согласования движений.
Should FIlter Notifies Если эта опция включена, все уведомления, исходящие от сэмплов проигрывателя анимации, должны быть отфильтрованы. {в секундах}
Max Active Blends Устанавливает максимальное количество активных анимаций смешивания в стеке смешивания. Если это свойство равно 0, то стек наложения будет отключен.
Store Blended Pose Если это включено и количество запрашиваемых смешиваний превышает значение свойства Max Active Blends, стек смешиваний будет смешиваться и накапливаться в сохраненной позе со всеми переполненными анимациями. При выключенном режиме память для хранения позы будет сохранена, но при достижении значения свойства Max Active Blends стек блендов начнет отбрасывать анимации, что может привести к выскакиванию анимации.
Notify Recency Time Out Устанавливает промежуток времени, в течение которого после отправки уведомления будут отфильтровываться все экземпляры этого уведомления.
Max Blend in Time to Override Animation Если последняя добавленная анимация находится в диапазоне, заданном значением этого свойства, то новый запрашиваемый объект займет ее место. В противном случае новая смесь будет добавлена в стек смешивания.
Player Depth Blend Time Multiplier Установите значение, которое умножит таймер смешивания проигрывателя анимации. Увеличение этого значения может быть полезно для ускорения времени смешивания при более глубоком смешивании.
Anim Notify Filtering
При использовании системы Motion Matching можно столкнуться с проблемой, когда выбранные системой позы вызывают определенные анимационные уведомления, например звуковой эффект шагов во время анимации ходьбы или бега. В результате на соседних кадрах воспроизводятся два или более звуковых эффекта шагов, а не один. Эту проблему можно решить с помощью фильтрации анимационных уведомлений.
Здесь вы можете увидеть две записи Rewind Debugger одной и той же игровой ситуации с персонажем. В примере слева не используется фильтрация Anim Notify, и анимация запускает одно и то же Anim Notify более одного раза из-за выбора Anim Pose. В примере справа используется фильтрация анимационных уведомлений, чтобы предотвратить срабатывание одного и того же уведомления в заданном временном интервале, в результате чего анимационное уведомление срабатывает только один раз за определенное время.
Нет фильтрации уведомлений об анимации
С фильтрацией уведомлений анимации
Чтобы реализовать фильтрацию уведомлений, выберите узел Motion Matching в анимационном блюпринте персонажа и включите свойство Should Filter Notifies на панели Details. Затем вы можете задать продолжительность времени в секундах, в течение которого уведомление будет отфильтровываться, используя свойство Notify Recency Time Out.
Значение по умолчанию 0,2 можно использовать в качестве базового, так как оно было разработано как наиболее полезное для двуногих движений, однако в вашем проекте может потребоваться другое значение для достижения желаемых результатов.
При включении свойства Should Filter Notifies все анимационные уведомления будут обрабатываться одинаково, отфильтровывая любые повторные экземпляры одного и того же уведомления в течение заданного значения, установленного в свойстве Notify Recency Time Out. Если в вашей анимации есть уведомление, которое вы не хотите фильтровать, выберите это уведомление в анимации или монтаже и отключите свойство Can Be Filtered Via Request в панели подробностей уведомления. По умолчанию это свойство включено для всех уведомлений анимации.
Фильтрация Anim Notify Filtering применима только к Anim Notifies и не работает с Anim Notify States.
Pose Search Schema Channel Weights
Вы можете контролировать степень влияния каждого канала на процесс выбора, используя свойство Weight каждого канала в ассетах Pose Search Schema.
Свойство Weight для каждого канала в ассете Pose Search Schema указывает системе Motion Matching, насколько сильно каждый канал должен влиять на выбор кадров анимации в базе данных.
В приведенном выше примере рабочего процесса вес канала Pose установлен на 1,0, а вес канала Trajectory - на 3,0. Это означает, что различия в траектории будут влиять на систему в три раза сильнее, чем различия в позе.
Отдельным свойствам в каждом канале также можно присвоить вес, чтобы дополнительно настроить факторы, влияющие на выбор анимации. Например, свойствам " History" и "Prediction Horizon" можно придать вес, чтобы смещать оценку в сторону прошлого или будущего. Это позволяет вам распределить, какие элементы канала используются для определения его влияния среди других каналов в Pose Search Schema.
Независимо от того, какие значения вы придадите этим различным весам, система автоматически нормализует их. Чтобы предотвратить нормализацию весов, установите для свойства Data Processor значение None.
Однако весовые коэффициенты не всегда помогают решить проблему неправильного выбора позы. Например, если ваша модель движения движется со скоростью 5 метров в секунду, а средние данные составляют около 4 метров в секунду, это может привести к тому, что система Motion Matching будет последовательно выбирать позы анимации с максимальным значением. Корректировка весовых значений для уменьшения стоимости анимационных поз с максимальным значением может исправить этот повторяющийся выбор, но может привести к тому, что некоторые критерии каналов будут полностью проигнорированы, что приведет к пробелам в вашей системе анимации.
При настройке весов каналов вы настраиваете то, как система выбирает позы анимации, а не настраиваете свою систему с учетом систем вашего проекта. Чтобы сохранить всю систему анимации, можно использовать другие методы, например, Pose Search Database Sets, чтобы учесть все сценарии игры.
Pose Search Normalization Sets
Pose Search Normalization Sets - это ряд определенных ассетов базы данных Pose Search, каждый из которых содержит группы анимаций, применимых в конкретных случаях. Например, одна база данных может содержать анимации ходьбы персонажа, а другая - анимации бега. Установив несколько баз данных поиска поз в ассет Pose Search Normalization Set, вы можете разделить наборы анимаций и установить для каждой из них весовые коэффициенты, чтобы они стали предпочтительнее для системы Motion Matching при соблюдении определенных критериев.
Pose Search Normalization Sets можно динамически менять местами при наступлении определенных игровых событий. Это ограничит набор анимационных данных для выбора узлом Motion Matching, предоставляя вам больше контроля над выводом поз анимации в вашей анимационной системе. Это можно сделать, определив серию баз данных поиска поз в ассете Pose Search Normalization Set и используя систему выбора для динамической установки того, какая база данных активна во время выполнения.
Motion Matching Notifies
Вы также можете использовать набор уведомлений Motion Matching Notifies для помощи в настройке. Здесь вы можете ознакомиться со списком доступных уведомлений Motion Matching и описанием их функциональности:
Pose Search: Block Transition Используя это состояние Notify State, вы можете задать области анимации, в которых система не может перейти в отмеченную область, но может воспроизвести ее из предыдущей секции, которая не отмечена этой меткой. Это полезно, когда у вас есть участки анимации, в середину которых вы не хотите прыгать. Если у вас есть неработающая анимация, в середине которой персонаж почесывает голову, вы никогда не захотите прыгать в середину почесывания головы. Если вы пометите эту область, вы сможете перепрыгнуть в любой участок анимации, не помеченный этим.
Pose Search: Exclude From Database Используя это " Notify State ", вы можете полностью исключить секции анимационных данных из их анимаций. Любые секции, установленные с этим уведомлением, не будут строиться или искаться.
Pose Search: Motion Matched Branch In Вы можете использовать это состояние Notify State, чтобы определить, где анимация должна быть разветвлена при выборе системой Motion Matching.
Pose Search: Override Base Cost Bias Это состояние Notify State позволяет назначить участку анимации бонус или штраф за выбор этого участка анимации. Отрицательные значения дают бонус, а положительные - штраф. Это полезно в ситуациях, когда система покидает начальную анимацию раньше, чем вы хотите, поэтому вы можете поместить это уведомление над участками, которые вы хотите, чтобы она продолжила до идеального выхода, и дать ей небольшой бонус, чтобы попытаться удержать ее в этой области дольше.
Pose Search: Override Continuing Pose Cost Bias Используя это " Notify State ", вы можете установить стоимость поиска позы для продолжения, делая сегмент анимации более или менее вероятным быть выбранным снова для продолжения воспроизведения, основываясь на параметрах уведомления.
Pose Search: Sampling Attribute Каналы вашей схемы Pose Search Schema могут использовать это состояние уведомления в качестве поставщика положения, вращения и линейной скорости в пространстве анимации во время индексации базы данных, указав свойство Sampling Attribute ID канала, чтобы оно соответствовало свойству Sampling Attribute ID состояния уведомления.
Pose Search Sampling Effect Каналы вашей схемы Pose Search Schema могут использовать это состояние уведомления для отграничения событий, идентифицированных по свойству Sampling Attribute ID, во время индексации базы данных, указав свойство Sampling Attribute ID канала, чтобы оно совпадало со свойством Sampling Attribute ID состояния уведомления.
Animation Warping
Вы можете реализовать узлы Animation Warping в сочетании с Motion Matching, чтобы смягчить недостаток охвата, процедурно изменяя позу персонажа во время выполнения.
Для получения дополнительной информации об искажении анимации см. следующую документацию:
Motion Warping - Глубокое рассмотрение технологии Motion Warping для анимации в Unreal Engine.
Отладка системы Motion Matching
Для получения дополнительной информации об отладке и оптимизации анимационной системы Motion Matching см. документацию по отладке Motion Matching.
Дополнительная информация
Для получения дополнительной информации о сопоставлении движений в Unreal Engine смотрите презентацию Motion Matching | GDC 2024.
Пример игрового анимационного проекта
Проект Game Animation Sample - это пример проекта, который вы можете использовать для наблюдения и изучения высококачественных и отзывчивых систем анимации в Unreal Engine.