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 os números da 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 de mão Booleano
Tem olhar de olho Booleano
Câmara Poses Curvas Só se has camera pose é verdade
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 beliscador da mão Curva booleana Só se tiver dados de mão é verdadeiro
Articulações de mão à esquerda Curvas de pose articulares Só se tiver dados de mão é verdadeiro
Mão Articulações Direita 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 Poses Curvas
Mão rastreada à esquerda Curva booleana
Direito rastreado à mão Curva booleana
Mão Beliscando à esquerda Curva booleana
Direito beliscador da mão Curva booleana
Articulações de mão à esquerda Curvas de pose articulares
Mão Articulações Direita 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 Poses Curvas
Pulso Poses Curvas
Palm Poses Curvas
ThumbmetacarpalJoint Poses Curvas
PolegarProximalJoint Poses Curvas
PolegarDistalJoint Poses Curvas
Ponta do Polegar Poses Curvas
IndexMetacarpal Poses Curvas
IndexKnuckle Poses Curvas
IndexMiddleJoint Poses Curvas
IndexDistalJoint Poses Curvas
IndexTip Poses Curvas
Middlemetacarpal Poses Curvas
MiddleKnuckle Poses Curvas
MiddleMiddleJoint Poses Curvas
MiddleDistalJoint Poses Curvas
MiddleTip Poses Curvas
Ringmetacarpal Poses Curvas
RingKnuckle Poses Curvas
RingMiddleJoint Poses Curvas
RingDistalJoint Poses Curvas
Ponta de Anel Poses Curvas
PinkyMetacarpal Poses Curvas
PinkyKnuckle Poses Curvas
PinkyMiddleJoint Poses Curvas
PinkyDistalJoint Poses Curvas
PinkyTip Poses Curvas

Pose curvas

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 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 flutuantes do ponto 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 porta-chaves 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 booleano

Um quadro-chave 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 vai voltar 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: Inclua outWeight ao calcular o próximo segmento de curva.
3 Ambos: Incluir em Peso e OutWeight ao calcular segmentos de curva.