Formato do arquivo de animação de entrada

Estrutura geral

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

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

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

Seção Tipo
Número mágico Int64
Número de 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 boolianas que indicam se a animação contém dados de Câmera, Mão e Olhar, seguidos por uma sequência de curvas de animação. As curvas presentes dependem dos valores desses boolianas. Cada curva pode ter um número diferente de keyframes.

Seção Type Observações
Tem pose de câmera Boolean
Tem dados de mão Boolean
Tem o olhar fixo Boolean
Câmera Curvas de pose Somente se a Pose da Câmera for verdadeira
Esquerda controlada à mão Curva booliana Somente se Tem Dados de Mão for true
Direita controlada à mão Curva booliana Somente se Tem Dados de Mão for true
Pinçar a mão para a esquerda Curva booliana Somente se Tem Dados de Mão for true
Direita de pinçamento de mão Curva booliana Somente se Tem Dados de Mão for true
Junções à esquerda Curvas de pose conjunta Somente se Tem Dados de Mão for true
Junções de mão à direita Curvas de pose conjunta Somente se Tem Dados de Mão for true
Olhar fixo Curvas de raio] Somente se Tem o Olhar é 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 keyframes.

Seção Tipo
Câmera Curvas de pose
Esquerda controlada à mão Curva booliana
Direita controlada à mão Curva booliana
Pinçar a mão para a esquerda Curva booliana
Direita de pinçamento de mão Curva booliana
Junções à esquerda Curvas de pose conjunta
Junções de mão à direita Curvas de pose conjunta

Curvas de pose conjunta

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

Seção Tipo
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 digital 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 três curvas de animação para o vetor de posição, seguida por quatro curvas de animação para o quaternion de rotação.

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

Curvas de raio

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

Seção Tipo
Origem X Curva de flutuação
Origem Y Curva de flutuação
Origem Z Curva de flutuação
Direção X Curva de flutuação
Direção Y Curva de flutuação
Direção Z Curva de flutuação

Curva de flutuação

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

Seção Tipo
Modo de pré-encapsulamento Int32, modo de encapsulamento
Modo pós-encapsulamento Int32, modo de encapsulamento
Número de quadros-chave Int32
Quadros chave Barra-chave flutuante

Barra-chave flutuante

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

Seção Tipo
Hora Float32
Valor Float32
Intangente Float32
Ditangente Float32
Inpeso Float32
De peso Float32
WeightedMode Int32, modo ponderado

Curva booliana

As curvas boolianas são sequências simples de valores de ativas/desligados. Em cada keyframe, o valor da curva muda imediatamente.

Seção Tipo
Modo de pré-quebra Int32, modo de quebra
Modo pós-quebra Int32, modo de quebra
Número de keyframes Int32
Quadros chave Keyframe booliana

Keyframe booliana

Um keyframe booliana armazena apenas uma hora e um valor.

Seção Tipo
Hora Float32
Valor Float32

Modo de wrap

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

Valor Significado
0 Padrão: lê a configuração mais alta do modo de repetição padrão.
1 Uma vez: quando o tempo atingir o fim do clipe de animação, o clipe será automaticamente parado e a hora será redefinida para o início do clipe.
2 Loop: quando o tempo atingir o fim do clipe de animação, o tempo continuará no início.
4 PingPong: quando o tempo atingir o fim do clipe de animação, o tempo fará ping entre o início e o fim.
8 ClampForever: reproduz a animação. Quando chegar ao final, ele continuará a tocar o último quadro e nunca mais interromperá a reprodução.

Modo ponderado

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

Valor Significado
0 Nenhum: exclua inWeight ou outWeight ao calcular segmentos de curva.
1 Em: inclua 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.