Формат файла анимации ввода — MRTK2

Общая структура

Двоичный файл входной анимации начинается с 64-разрядного целочисленного магического числа. Значение этого числа в шестнадцатеричной нотации и 0x6a8faf6e0f9e42c6 может использоваться для идентификации допустимых входных файлов анимации.

Следующие восемь байтов — это два значения Int32, объявляющие основной и дополнительный номер версии файла.

Остальная часть файла берется с помощью данных анимации, которые могут меняться между номерами версий.

Section Тип
Магическое число Int64
Основной номер версии Int32
Дополнительный номер версии Int32
Данные анимации см. раздел версии

Версия 1.1

Входные данные анимации состоят из трех логических значений, указывающих, содержит ли анимация данные Камера, Hand и Eye Gaze, а затем последовательность кривых анимации. Кривые, присутствующие, зависят от значений этих логических значений. Каждая кривая может иметь разные ключевые кадры.

Section Тип Примечания
Имеет Камера позу Логическое значение
Имеет данные рук Логическое значение
Имеет взгляд взгляда Логическое значение
Камера Кривые положения Только в том случае, если Камера Позе имеет значение true
Стрелка влево Логическая кривая Только в том случае, если данные руки имеют значение true
Рука отслеживаемая справа Логическая кривая Только в том случае, если данные руки имеют значение true
Сцепление руки влево Логическая кривая Только в том случае, если данные руки имеют значение true
Сцепление руки вправо Логическая кривая Только в том случае, если данные руки имеют значение true
Суставы рук слева Кривые совместных поз Только в том случае, если данные руки имеют значение true
Суставы рук справа Кривые совместных поз Только в том случае, если данные руки имеют значение true
Направление взгляда Кривые лучей] Только в том случае, если взгляд имеет значение true

Версия 1.0

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

Section Тип
Камера Кривые положения
Стрелка влево Логическая кривая
Рука отслеживаемая справа Логическая кривая
Сцепление руки влево Логическая кривая
Сцепление руки вправо Логическая кривая
Суставы рук слева Кривые совместных поз
Суставы рук справа Кривые совместных поз

Кривые объединяемой позы

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

Section Тип
None Кривые положения
Запястье Кривые положения
Palm Кривые положения
ThumbMetacarpalJoint Кривые положения
ThumbProximalJoint Кривые положения
ThumbDistalJoint Кривые положения
ThumbTip Кривые положения
IndexMetacarpal Кривые положения
IndexKnuckle Кривые положения
IndexMiddleJoint Кривые положения
IndexDistalJoint Кривые положения
Подсказка индекса Кривые положения
MiddleMetacarpal Кривые положения
MiddleKnuckle Кривые положения
MiddleMiddleJoint Кривые положения
MiddleDistalJoint Кривые положения
Средняя подсказка Кривые положения
RingMetacarpal Кривые положения
RingKnuckle Кривые положения
RingMiddleJoint Кривые положения
RingDistalJoint Кривые положения
Круглая подсказка Кривые положения
PinkyMetacarpal Кривые положения
PinkyKnuckle Кривые положения
PinkyMiddleJoint Кривые положения
PinkyDistalJoint Кривые положения
Пинкит Кривые положения

Кривые положения

Кривые представления представляют собой последовательность из 3 кривых анимации для вектора положения, а затем 4 кривых анимации для кватерниона поворота.

Section Тип
Позиция X Кривая с плавающей запятой
Позиция Y Кривая с плавающей запятой
Позиция Z Кривая с плавающей запятой
Поворот X Кривая с плавающей запятой
Поворот Y Кривая с плавающей запятой
Поворот Z Кривая с плавающей запятой
Поворот W Кривая с плавающей запятой

Кривые лучей

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

Section Тип
Источник X Кривая с плавающей запятой
Источник Y Кривая с плавающей запятой
Источник Z Кривая с плавающей запятой
Направление X Кривая с плавающей запятой
Направление Y Кривая с плавающей запятой
Направление Z Кривая с плавающей запятой

Кривая с плавающей запятой

Кривые с плавающей запятой являются полностью полноценными кривыми Bézier с переменным числом ключевых кадров. Каждый ключевой кадр хранит время и значение кривой, а также тангенсы и весы в левой и правой части каждого ключевого кадра.

Section Тип
Режим предварительной оболочки Int32, режим переноса
Режим после переноса Int32, режим переноса
Количество ключевых кадров Int32
Опорные кадры Кадр с плавающей запятой

С плавающей запятой

С плавающей запятой ключевые кадры хранят тангенсные и весовые значения вместе с базовым временем и значением.

Section Тип
Time Float32
Значение Float32
InTangent Float32
OutTangent Float32
InWeight Float32
Избыточный вес Float32
WeightedMode Int32, взвешанный режим

Логическая кривая

Логические кривые — это простые последовательности значений on/off. На каждом ключевом кадре значение кривой немедленно переключается.

Section Тип
Режим предварительной оболочки Int32, режим переноса
Режим после переноса Int32, режим переноса
Количество ключевых кадров Int32
Опорные кадры Логический ключевой кадр

Логический ключевой кадр

Логический ключевой кадр хранит только время и значение.

Section Тип
Time Float32
Значение Float32

Режим переноса

Семантика режимов предварительного и последующего переноса следует определению Unity WrapMode . Они представляют собой сочетание следующих битов:

Значение Значение
0 Значение по умолчанию: считывает режим повторения по умолчанию, настроенный выше.
1 Один раз: когда время достигнет конца клипа анимации, клип автоматически перестанет воспроизводиться, и время будет сброшено до начала клипа.
2 Loop: когда время достигает конца клипа анимации, время будет продолжаться в начале.
4 PingPong: Когда время достигает конца клипа анимации, время будет ping pong назад между началом и концом.
8 ClampForever: воспроизводит анимацию. Когда он достигнет конца, он будет продолжать играть последний кадр и никогда не перестать играть.

Взвешанный режим

Семантика взвешенном режиме соответствует определению Unity WeightedMode .

Значение Значение
0 Нет: исключите оба сегмента в весе или весе при вычислении сегментов кривой.
1 In: Include inWeight при вычислении предыдущего сегмента кривой.
2 Out: включите outWeight при вычислении следующего сегмента кривой.
3 Оба: включить inWeight и outWeight при вычислении сегментов кривой.