Formato de arquivo de animação de entrada — MRTK2

Estrutura geral

O arquivo binário de animação de entrada começa com um número mágico inteiro de 64 bits. O valor desse número na notação hexadecimal é 0x6a8faf6e0f9e42c6 e pode ser usado para identificar arquivos de animação de entrada válidos.

Os próximos oito bytes são dois valores Int32 declarando o número de versão principal e secundária do arquivo.

O restante do arquivo é usado por dados de animação, que podem ser alterados entre números de versão.

Seção Type
Número Mágico Int64
Número da versão principal Int32
Número da versão secundária Int32
Dados de animação consulte a seção de versão

Versão 1.1

Os dados de animação de entrada consistem em três valores boolianos que indicam se a animação contém dados Câmera, Mão e Olhar Ocular, seguidos por uma sequência de curvas de animação. As curvas presentes dependem dos valores desses boolianos. Cada curva pode ter um número diferente de quadros de chaves.

Seção Type Observações
Tem Câmera Pose Booliano
Tem dados de mão Booliano
Tem olhar para os olhos Booliano
Câmera Curvas de Pose Somente se Câmera Pose for verdadeira
Mão rastreada para a esquerda Curva booliana Somente se os dados de mão forem verdadeiros
Controle manual à direita Curva booliana Somente se os dados de mão forem verdadeiros
Pinçando a mão à esquerda Curva booliana Somente se os dados de mão forem verdadeiros
Pinçando a mão para a direita Curva booliana Somente se os dados de mão forem verdadeiros
Articulações de mão à esquerda Curvas de Pose Conjunta Somente se os dados de mão forem verdadeiros
Juntas m mão direita Curvas de Pose Conjunta Somente se os dados de mão forem verdadeiros
Olhar fixo Curvas de Raio] Somente se o olhar de olho for verdadeiro

Versão 1.0

Os dados de animação de entrada consistem em uma sequência de curvas de animação. O número e o significado das curvas de animação são fixos, mas cada curva pode ter um número diferente de quadros-chave.

Seção Tipo
Câmera Curvas de Pose
Mão rastreada para a esquerda Curva booliana
Controle manual à direita Curva booliana
Pinçando a mão à esquerda Curva booliana
Pinçando a mão para a direita Curva booliana
Articulações de mão à esquerda Curvas de Pose Conjunta
Juntas m mão direita Curvas de Pose Conjunta

Curvas de pose conjunta

Para cada mão, uma sequência de curvas de animação conjunta é armazenada. O número de articulações é fixo e um conjunto de curvas de pose é armazenado para cada articulação.

Seção Type
Nenhum Curvas de Pose
Pulso Curvas de Pose
Palm Curvas de Pose
ThumbMetacarpalJoint Curvas de Pose
ThumbProximalJoint Curvas de Pose
ThumbDistalJoint Curvas de Pose
Dica de Polegar Curvas de Pose
IndexMetacarpal Curvas de Pose
IndexKnuckle Curvas de Pose
IndexMiddleJoint Curvas de Pose
IndexDistalJoint Curvas de Pose
IndexTip Curvas de Pose
MiddleMetacarpal Curvas de Pose
MiddleKnuckle Curvas de Pose
MiddleMiddleJoint Curvas de Pose
MiddleDistalJoint Curvas de Pose
MiddleTip Curvas de Pose
RingMetacarpal Curvas de Pose
RingKnuckle Curvas de Pose
RingMiddleJoint Curvas de Pose
RingDistalJoint Curvas de Pose
RingTip Curvas de Pose
PinkyMetacarpal Curvas de Pose
PinkyKnuckle Curvas de Pose
PinkyMiddleJoint Curvas de Pose
PinkyDistalJoint Curvas de Pose
PinkyTip Curvas de Pose

Curvas de pose

As curvas de pose são uma sequência de 3 curvas de animação para o vetor de posição, seguidas por 4 curvas de animação para o quatérnion de rotação.

Seção Tipo
Posição X Curva Float
Posição Y Curva Float
Posição Z Curva Float
Rotação X Curva Float
Rotação Y Curva Float
Rotação Z Curva Float
Rotação W Curva Float

Curvas de raio

As curvas de raio são uma sequência de três curvas de animação para o vetor de origem, seguidas por três curvas de animação para o vetor de direção.

Seção Type
Origem X Curva Float
Origem Y Curva Float
Origem Z Curva Float
Direção X Curva Float
Direção Y Curva Float
Direção Z Curva Float

Curva flutuante

As curvas de ponto flutuante são curvas Bézier completas com um número variável de quadros de chaves. Cada quadro de chaves armazena um valor de tempo e curva, bem como tangentes e pesos no lado esquerdo e direito de cada quadro de chaves.

Seção Type
Modo pré-encapsulamento Int32, Modo wrap
Modo pós-encapsulamento Int32, Modo wrap
Número de quadros de chaves Int32
Quadros chave Quadro de chaves float

Quadro de chaves float

Um quadro de chaves flutuante armazena valores de peso e tangente juntamente com a hora e o valor básicos.

Seção Tipo
Hora Float32
Valor Float32
InTangent Float32
OutTangent Float32
InWeight Float32
OutWeight Float32
WeightedMode Int32, Modo Ponderado

Curva booliana

As curvas boolianas são sequências simples de valores ativados/desativados. Em cada quadro de chaves, o valor da curva é invertido imediatamente.

Seção Tipo
Modo pré-encapsulamento Int32, Modo wrap
Modo pós-encapsulamento Int32, Modo wrap
Número de quadros de chaves Int32
Quadros chave Keyframe booliano

Quadro de chaves booliano

Um keyframe booliano armazena apenas uma hora e um valor.

Seção Tipo
Hora Float32
Valor Float32

Modo wrap

A semântica dos modos Pré e Pós-Encapsulamento segue a definição de WrapMode do Unity . Eles são uma combinação dos seguintes bits:

Valor Significado
0 Padrão: lê o modo de repetição padrão configurado mais alto.
1 Uma vez: quando o tempo chegar ao final do clipe de animação, o clipe interromperá automaticamente a reprodução e o tempo será redefinido para o início do clipe.
2 Loop: quando o tempo chegar ao final do clipe de animação, o tempo continuará no início.
4 PingPong: quando o tempo chegar ao fim do clipe de animação, o tempo fará ping pong de volta entre o início e o fim.
8 ClampForever: reproduz a animação. Quando chegar ao fim, ele continuará jogando o último quadro e nunca deixará de jogar.

Modo ponderado

A semântica do modo Ponderado segue a definição Unity WeightedMode .

Valor Significado
0 Nenhum: exclua tanto em Peso quanto em Peso ao calcular segmentos de curva.
1 In: Incluir inWeight ao calcular o segmento de curva anterior.
2 Out: Incluir outWeight ao calcular o próximo segmento de curva.
3 Ambos: inclua inWeight e outWeight ao calcular segmentos de curva.