Формат файла входной анимации — MRTK2
Общая структура
Двоичный файл входной анимации начинается с 64-разрядного целочисленного магического числа. Значение этого числа в шестнадцатеричной нотации равно 0x6a8faf6e0f9e42c6
и может использоваться для определения допустимых входных файлов анимации.
Следующие восемь байт — это два значения Int32, объявляющие основной и дополнительный номер версии файла.
Остальная часть файла занята данными анимации, которые могут меняться между номерами версий.
Section | Тип |
---|---|
Магическое число | Int64 |
Основной номер версии | Int32 |
Дополнительный номер версии | Int32 |
Данные анимации | см. раздел версии |
Версия 1.1
Входные данные анимации состоят из трех логических значений, которые указывают, содержит ли анимация данные камеры, руки и взгляда, за которыми следует последовательность кривых анимации. Представленные кривые зависят от значений этих логических значений. Каждая кривая может иметь разное количество ключевых кадров.
Section | Тип | Примечания |
---|---|---|
Имеет позу камеры | Логическое | |
Имеет данные о руках | Логическое | |
Имеет взгляд | Логическое | |
Камера | Кривые положения | Только в том случае, если параметр Has Camera Pose имеет значение true |
Стрелка слева | Логическая кривая | Только в том случае, если имеет значение True |
Правая отслеченная рука | Логическая кривая | Только в том случае, если имеет значение True |
Сжатие руки влево | Логическая кривая | Только в том случае, если имеет значение True |
Сжатие руки вправо | Логическая кривая | Только в том случае, если имеет значение True |
Суставы рук слева | Кривые совместного положения | Только в том случае, если имеет значение True |
Суставы рук справа | Кривые совместного положения | Только в том случае, если имеет значение True |
Направление взгляда | Кривые луча] | Только в том случае, если параметр Имеет взгляд имеет значение true |
Версия 1.0
Входные данные анимации состоят из последовательности кривых анимации. Число и значение кривых анимации фиксировано, но каждая кривая может иметь разное количество ключевых кадров.
Section | Тип |
---|---|
Камера | Кривые положения |
Стрелка слева | Логическая кривая |
Правая отслеченная рука | Логическая кривая |
Сжатие руки влево | Логическая кривая |
Сжатие руки вправо | Логическая кривая |
Суставы рук слева | Кривые совместного положения |
Суставы рук справа | Кривые совместного положения |
Кривые совместного положения
Для каждой руки хранится последовательность кривых анимации. Количество соединений фиксировано, и для каждого соединения сохраняется набор кривых позы.
Section | Тип |
---|---|
Нет | Кривые положения |
Запястье | Кривые положения |
Palm | Кривые положения |
ThumbMetacarpalJoint | Кривые положения |
ThumbProximalJoint | Кривые положения |
ThumbDistalJoint | Кривые положения |
Отбивная подсказка | Кривые положения |
IndexMetacarpal | Кривые положения |
IndexKnuckle | Кривые положения |
IndexMiddleJoint | Кривые положения |
IndexDistalJoint | Кривые положения |
Подсказка по индексу | Кривые положения |
MiddleMetacarpal | Кривые положения |
MiddleKnuckle | Кривые положения |
MiddleMiddleJoint | Кривые положения |
MiddleDistalJoint | Кривые положения |
MiddleTip | Кривые положения |
RingMetacarpal | Кривые положения |
RingKnuckle | Кривые положения |
RingMiddleJoint | Кривые положения |
RingDistalJoint | Кривые положения |
Мелодия звонка | Кривые положения |
ПинкиМетакарпал | Кривые положения |
PinkyKnuckle | Кривые положения |
PinkyMiddleJoint | Кривые положения |
PinkyDistalJoint | Кривые положения |
PinkyTip | Кривые положения |
Кривые положения
Кривые положения — это последовательность из 3 кривых анимации для вектора положения, за которой следуют 4 кривые анимации для кватерниона поворота.
Section | Тип |
---|---|
Позиция X | Кривая с плавающей запятой |
Позиция Y | Кривая с плавающей запятой |
Позиция Z | Кривая с плавающей запятой |
Поворот X | Кривая с плавающей запятой |
Поворот Y | Кривая с плавающей запятой |
Поворот Z | Кривая с плавающей запятой |
Поворот W | Кривая с плавающей запятой |
Кривые луча
Кривые луча — это последовательность из 3 кривых анимации для исходного вектора, за которой следует 3 кривые анимации для вектора направления.
Section | Тип |
---|---|
Источник X | Кривая с плавающей запятой |
Источник Y | Кривая с плавающей запятой |
Источник Z | Кривая с плавающей запятой |
Направление X | Кривая с плавающей запятой |
Направление Y | Кривая с плавающей запятой |
Направление Z | Кривая с плавающей запятой |
Кривая с плавающей запятой
Кривые с плавающей запятой — это полноценные кривые Безье с переменным количеством опорных кадров. Каждый ключевой кадр хранит значение времени и кривой, а также касательные и весовые коэффициенты в левой и правой части каждого ключевого кадра.
Section | Тип |
---|---|
Режим предварительной оболочки | Int32, режим переноса |
Режим после переноса | Int32, режим переноса |
Число опорных кадров | Int32 |
Опорные кадры | Плавающий ключевой кадр |
Плавающий ключевой кадр
В ключевом кадре с плавающей запятой хранятся значения тангенса и веса вместе с базовым временем и значением.
Section | Тип |
---|---|
Time | Float32 |
Значение | Float32 |
InTangent | Float32 |
OutTangent | Float32 |
InWeight | Float32 |
OutWeight | Float32 |
WeightedMode | Int32, взвешанный режим |
Логическая кривая
Логические кривые — это простые последовательности значений включения и выключения. На каждом ключевом кадре значение кривой немедленно вернется.
Section | Тип |
---|---|
Режим предварительной оболочки | Int32, режим переноса |
Режим после переноса | Int32, режим переноса |
Число опорных кадров | Int32 |
Опорные кадры | Логический ключевой кадр |
Логический ключевой кадр
В логическом ключевом кадре хранятся только время и значение.
Section | Тип |
---|---|
Time | Float32 |
Значение | Float32 |
Режим переноса
Семантика режимов до и после обтекания соответствует определению Unity WrapMode . Они представляют собой сочетание следующих битов:
Значение | Значение |
---|---|
0 | По умолчанию: считывает режим повтора по умолчанию, настроенный выше. |
1 | Один раз: когда время достигнет конца клипа анимации, клип автоматически прекратит воспроизведение, а время будет сброшено до начала клипа. |
2 | Цикл. Когда время достигнет конца клипа анимации, время будет продолжаться в начале. |
4 | Пинг-понг: когда время достигает конца клипа анимации, время будет пинг-понг между началом и концом. |
8 | ClampForever: воспроизводит анимацию. Когда он достигнет конца, он будет продолжать играть последний кадр и никогда не перестать играть. |
Взвешанный режим
Семантика взвешенных режимов соответствует определению Unity WeightedMode .
Значение | Значение |
---|---|
0 | Нет: при вычислении сегментов кривой исключите как inWeight, так и outWeight. |
1 | В: включите inWeight при вычислении предыдущего сегмента кривой. |
2 | Out: включите outWeight при вычислении следующего сегмента кривой. |
3 | Оба: включите inWeight и OutWeight при вычислении сегментов кривой. |