Формат файла анимации входных данных

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

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

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

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

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

Версия 1.1

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

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

Версия 1.0

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

Section Тип
Камера Выставить кривые
С левой стороны Логическая кривая
С правой стороны Логическая кривая
Сжатие вручную, слева Логическая кривая
Правильное сжатие вручную Логическая кривая
Осталось соединений с руки Стыковые кривые
Справа от руки Стыковые кривые

Стыковые кривые

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

Section Тип
None Выставить кривые
Кисти Выставить кривые
Palm Выставить кривые
сумбметакарпалжоинт Выставить кривые
сумбпроксималжоинт Выставить кривые
сумбдисталжоинт Выставить кривые
сумбтип Выставить кривые
индексметакарпал Выставить кривые
индекскнуккле Выставить кривые
индексмиддлежоинт Выставить кривые
индексдисталжоинт Выставить кривые
индекстип Выставить кривые
миддлеметакарпал Выставить кривые
миддлекнуккле Выставить кривые
миддлемиддлежоинт Выставить кривые
миддледисталжоинт Выставить кривые
миддлетип Выставить кривые
рингметакарпал Выставить кривые
рингкнуккле Выставить кривые
рингмиддлежоинт Выставить кривые
рингдисталжоинт Выставить кривые
рингтип Выставить кривые
пинкиметакарпал Выставить кривые
пинкикнуккле Выставить кривые
пинкимиддлежоинт Выставить кривые
пинкидисталжоинт Выставить кривые
пинкитип Выставить кривые

Выставить кривые

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

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

Кривые лучей

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

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

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

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

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

Опорный кадр с плавающей точкой

В опорном кадре float значения тангенса и веса хранятся рядом с базовым временем и значением.

Section Тип
Время Float32
Значение Float32
Нетангенс Float32
Тангенс Float32
Невес Float32
Масса Float32
веигхтедмоде Int32, взвешенный режим

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

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

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

Логический опорный кадр

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

Section Тип
Время Float32
Значение Float32

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

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

Значение Значение
0 По умолчанию: считывает режим повтора по умолчанию, установленный выше.
1 Один раз: когда время достигает конца анимированного фрагмента анимации, клип автоматически прекращает воспроизведение, а время сбрасывается до начала клипа.
2 Цикл: Если время достигает конца анимированного фрагмента анимации, то время продолжится в начале.
4 Пингпонг: когда время достигает конца анимированного фрагмента анимации, время пройдет проверку связи между началом и концом.
8 Клампфоревер: воспроизводит анимацию назад. По достижении конца он продолжает играть в последнюю рамку и никогда не останавливает воспроизведение.

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

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

Значение Значение
0 Нет: при вычислении сегментов кривой исключается как невесовой, так и неплотный.
1 В: включение невесовых значений при вычислении предыдущего сегмента кривой.
2 Out: включение веса при вычислении следующего сегмента кривой.
3 Оба: включают невесовые значения и вес при вычислении сегментов кривой.