Partilhar via


Formato de ficheiro de animação de entrada – MRTK2

Estrutura geral

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 utilizado para identificar ficheiros de animação de entrada válidos.

Os oito bytes seguintes são dois valores Int32 que declaram o número de versão principal e menor do ficheiro.

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

Section Tipo
Número Mágico Int64
Número da Versão Principal Int32
Número da Versão Secundária Int32
Dados de Animação ver secção de 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 Câmara, Mão e Olhar para Os Olhos, 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 keyframes.

Section Tipo Notas
Tem Pose da Câmara Booleano
Tem Dados Mano Booleano
Tem Olhar para Os Olhos Booleano
Câmara Curvas de Pose Apenas se Has Camera Pose for true
Mão Controlada à Esquerda Curva booleana Apenas se a opção Tem Dados Da Mão for verdadeira
Mão Controlada à Direita Curva booleana Apenas se a opção Tem Dados Da Mão for verdadeira
Mão a Aproximar à Esquerda Curva booleana Apenas se a opção Tem Dados Da Mão for verdadeira
Mão a Aproximar à Direita Curva booleana Apenas se a opção Tem Dados Da Mão for verdadeira
Articulações da Mão Esquerda Curvas de Pose conjunta Apenas se a opção Tem Dados Da Mão for verdadeira
Articulações da Mão Direita Curvas de Pose conjunta Apenas se a opção Tem Dados Da Mão for verdadeira
Olhar para os Olhos Curvas de Raios] Apenas se Has Eye Gaze for true

Versão 1.0

Os dados de animação de entrada consistem numa 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.

Section Tipo
Câmara Curvas de Pose
Mão Controlada à Esquerda Curva booleana
Mão Controlada à Direita Curva booleana
Mão a Aproximar à Esquerda Curva booleana
Mão a Aproximar à Direita Curva booleana
Articulações da Mão Esquerda Curvas de Pose conjunta
Articulações da Mão Direita Curvas de Pose conjunta

Curvas de pose de articulação

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

Section Tipo
Nenhuma Curvas de Pose
Pulso Curvas de Pose
Palm Curvas de Pose
ThumbMetacarpalJoint Curvas de Pose
ThumbProximalJoint Curvas de Pose
ThumbDistalJoint Curvas de Pose
Descrição Curvas de Pose
IndexMetacarpal Curvas de Pose
IndexKnuckle Curvas de Pose
IndexMiddleJoint Curvas de Pose
IndexDistalJoint Curvas de Pose
Descrição do Índice Curvas de Pose
MiddleMetacarpal Curvas de Pose
MiddleKnuckle Curvas de Pose
MiddleMiddleJoint Curvas de Pose
MiddleDistalJoint Curvas de Pose
Descrição Média Curvas de Pose
RingMetacarpal Curvas de Pose
RingKnuckle Curvas de Pose
RingMiddleJoint Curvas de Pose
RingDistalJoint Curvas de Pose
Descrição do Anel Curvas de Pose
PinkyMetacarpal Curvas de Pose
PinkyKnuckle Curvas de Pose
PinkyMiddleJoint Curvas de Pose
PinkyDistalJoint Curvas de Pose
Descrições Cor de Rosa 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, seguida de 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, seguida de 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 vírgula flutuante são curvas Bézier completas com um número variável de keyframes. Cada keyframe armazena uma hora e um valor de curva, bem como tangentes e pesos no lado esquerdo e direito de cada chaveframe.

Section Tipo
Modo de Pré-Moldagem Int32, Modo de Moldagem
Modo pós-moldagem Int32, Modo de Moldagem
Número de keyframes Int32
Keyframes Chave flutuante

Chave flutuante

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

Section Tipo
Hora Float32
Valor Float32
InTangent Float32
OutTangent Float32
Peso-Pesado Float32
OutWeight Float32
WeightedMode Int32, Modo Ponderado

Curva booleana

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

Section Tipo
Modo de Pré-Moldagem Int32, Modo de Moldagem
Modo pós-moldagem Int32, Modo de Moldagem
Número de keyframes Int32
Keyframes Chave booleana

Chave booleana

Um keyframe booleano só armazena uma hora e um valor.

Section Tipo
Hora Float32
Valor Float32

Modo de moldagem

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

Valor Significado
0 Predefinição: lê o modo de repetição predefinido configurado mais acima.
1 Uma vez: quando o tempo chegar ao fim do clip de animação, o clip deixará de ser reproduzido automaticamente e a hora será reposta para o início do clip.
2 Ciclo: quando a hora chegar ao fim do clip de animação, o tempo continuará no início.
4 PingPong: quando a hora chegar ao fim do clip de animação, o tempo voltará a ping pong entre o início e o fim.
8 ClampForever: reproduz a animação. Quando chegar ao fim, continuará a jogar a última moldura e nunca deixará de jogar.

Modo ponderado

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

Valor Significado
0 Nenhum: exclua inWeight ou outWeight ao calcular segmentos de curva.
1 Em: Incluir inWeight ao calcular o segmento de curva anterior.
2 Out: Include outWeight when calculing the next curve segment.
3 Ambos: Incluir inWeight e outWeight ao calcular segmentos de curva.