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 os números de versão.

Seção Type
Número Mágico Int64
Número da versão principal Int32
Número de 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 de Câmera, Mão e Foco 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-chave.

Seção Type Observações
Tem pose de câmera Boolean
Tem dados de mão Boolean
Tem foco nos olhos Boolean
Câmera Curvas de Pose Somente se a Pose da Câmera for verdadeira
Mão rastreada à esquerda Curva booliana Somente se Has Hand Data for true
Acompanhamento manual à direita Curva booliana Somente se Has Hand Data for true
Pinçando a mão para a esquerda Curva booliana Somente se Has Hand Data for true
Pinçando a mão para a direita Curva booliana Somente se Has Hand Data for true
Articulações de mão à esquerda Curvas de Pose Conjunta Somente se Has Hand Data for true
Articulações das Mãos à Direita Curvas de Pose Conjunta Somente se Has Hand Data for true
Olhar fixo Curvas de Raio] Somente se Has Eye Gaze for true

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 Type
Câmera Curvas de Pose
Mão rastreada à esquerda Curva booliana
Acompanhamento manual à direita Curva booliana
Pinçando a mão para a esquerda Curva booliana
Pinçando a mão para a direita Curva booliana
Articulações de mão à esquerda Curvas de Pose Conjunta
Articulações das Mãos à 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
Dica de Índice Curvas de Pose
MiddleMetacarpal Curvas de Pose
MiddleKnuckle Curvas de Pose
MiddleMiddleJoint Curvas de Pose
MiddleDistalJoint Curvas de Pose
Dica Intermediária 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 três curvas de animação para o vetor de posição, seguidas por 4 curvas de animação para o quatérnio de rotação.

Seção Type
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 float

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

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

Quadro-chave float

Um quadro-chave float armazena valores tangentes e de peso junto com o tempo e o valor básicos.

Seção Type
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-chave, o valor da curva é invertido imediatamente.

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

Quadro-chave booliano

Um quadro-chave booliano armazena apenas um tempo e um valor.

Seção Type
Hora Float32
Valor Float32

Modo de encapsulamento

A semântica dos modos Pré e Post-Wrap segue a definição 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 deixará de ser reproduzido automaticamente e a hora será redefinida para o início do clipe.
2 Loop: quando o tempo atingir o final do clipe de animação, o tempo continuará no início.
4 PingPong: quando o tempo chegar ao final 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 de WeightedMode do Unity .

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