Formato de arquivo de animação de entrada

Estrutura global

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

Os próximos oito bytes são dois valores Int32 declarando o número de versão maior e menor do ficheiro.

O resto do ficheiro é recolhido por dados de animação, que podem mudar entre números de versão.

Section Tipo
Número mágico Int64
Número da versão principal Int32
Número de versão menor Int32
Dados de Animação ver secção versão

Versão 1.1

Os dados de animação de entrada consistem em três valores booleanos que indicam se a animação contém dados de Camera, Hand e Eye Gaze, seguidos de uma sequência de curvas de animação. As curvas presentes dependem dos valores destes booleanos. Cada curva pode ter um número diferente de quadros-chave.

Section Tipo Notas
Tem Pose de Câmera Booleano
Tem dados manuais Booleano
Tem olhar de olho Booleano
Câmara Pose Curvas Só se tem a pose da câmera é verdadeira
Mão rastreada à esquerda Curva booleana Só se tiver dados de mão é verdadeiro
Direito rastreado à mão Curva booleana Só se tiver dados de mão é verdadeiro
Mão Beliscando à esquerda Curva booleana Só se tiver dados de mão é verdadeiro
Direito beliscado da mão Curva booleana Só se tiver dados de mão é verdadeiro
Articulações da mão esquerda Curvas de pose articulares Só se tiver dados de mão é verdadeiro
Direito das articulações da mão Curvas de pose articulares Só se tiver dados de mão é verdadeiro
Olhar de olho Curvas de Raios] Só se tem olhar é verdadeiro

Versão 1.0

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

Section Tipo
Câmara Pose Curvas
Mão rastreada à esquerda Curva booleana
Direito rastreado à mão Curva booleana
Mão Beliscando à esquerda Curva booleana
Direito beliscado da mão Curva booleana
Articulações da mão esquerda Curvas de pose articulares
Direito das articulações da mão Curvas de pose articulares

Curvas de pose articulares

Para cada mão é armazenada uma sequência de curvas de animação conjuntas. O número de juntas é fixado e um conjunto de curvas de pose é armazenado para cada articulação.

Section Tipo
Nenhuma Pose Curvas
Pulso Pose Curvas
Palm Pose Curvas
ThumbmetacarpalJoint Pose Curvas
PolegarProximalJoint Pose Curvas
PolegarDistalJoint Pose Curvas
Ponta do Polegar Pose Curvas
IndexMetacarpal Pose Curvas
IndexKnuckle Pose Curvas
IndexMiddleJoint Pose Curvas
IndexDistalJoint Pose Curvas
IndexTip Pose Curvas
Middlemetacarpal Pose Curvas
MiddleKnuckle Pose Curvas
MiddleMiddleJoint Pose Curvas
MiddleDistalJoint Pose Curvas
MiddleTip Pose Curvas
Ringmetacarpal Pose Curvas
RingKnuckle Pose Curvas
RingMiddleJoint Pose Curvas
RingDistalJoint Pose Curvas
Ponta de Anel Pose Curvas
PinkyMetacarpal Pose Curvas
PinkyKnuckle Pose Curvas
PinkyMiddleJoint Pose Curvas
PinkyDistalJoint Pose Curvas
Ponta-de-rosa Pose Curvas

Pose curvas

As curvas 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 quaternion de rotação.

Section Tipo
Posição X Curva flutuante
Posição Y Curva flutuante
Posição Z Curva flutuante
Rotação X Curva flutuante
Rotação Y Curva flutuante
Rotação Z Curva flutuante
Rotação W Curva flutuante

Curvas de raios

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

Section Tipo
Origem X Curva flutuante
Origem Y Curva flutuante
Origem Z Curva flutuante
Direção X Curva flutuante
Direção Y Curva flutuante
Direção Z Curva flutuante

Curva flutuante

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

Section Tipo
Modo de Pré-Embrulho Int32, Modo de Embrulho
Modo pós-embrulho Int32, Modo de Embrulho
Número de quadros-chave Int32
Quadros-chave Quadro-chave flutuante

Quadro de chave flutuante

Um quadro-chave flutuante armazena valores tangentes e de peso ao lado do tempo e valor básicos.

Section Tipo
Hora Float32
Valor Float32
InTangent Float32
Fora-de-campo Float32
InWeight Float32
OutWeight Float32
Mode ponderado Int32, Modo Ponderado

Curva booleana

As curvas booleanas são sequências simples de valores ligados/desligados. Em cada quadro-chave, o valor da curva inverte-se imediatamente.

Section Tipo
Modo de Pré-Embrulho Int32, Modo de Embrulho
Modo pós-embrulho Int32, Modo de Embrulho
Número de quadros-chave Int32
Quadros-chave Quadro-chave boolean

Quadro-chave boolean

Um quadro de chaves booleano só armazena um tempo e valor.

Section Tipo
Hora Float32
Valor Float32

Modo de embrulho

A semântica dos modos Pré e Pós-Wrap segue a definição De Unidade WrapMode. São uma combinação dos seguintes bits:

Valor Significado
0 Predefinição: Lê o modo de repetição predefinido mais alto.
1 Uma vez: Quando o tempo chegar ao fim do clipe de animação, o clipe para automaticamente de reproduzir e o tempo será reiniciado para o início do clipe.
2 Loop: Quando o tempo chegar ao fim 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 volta entre o início e o fim.
8 ClampForever: Reproduz a animação. Quando chegar ao fim, continuará a tocar o último quadro e nunca deixará de jogar.

Modo ponderado

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

Valor Significado
0 Nenhum: Excluir tanto em Peso como fora do Peso ao calcular segmentos de curva.
1 In: Incluir em Peso no cálculo do segmento de curva anterior.
2 Out: Incluir outWeight ao calcular o próximo segmento de curva.
3 Ambos: Incluir em Peso e OutWeight ao calcular segmentos de curva.