Formato de archivo de animación de entrada: MRTK2

Estructura general

El archivo binario de animación de entrada comienza con un número mágico entero de 64 bits. El valor de este número en notación hexadecimal es 0x6a8faf6e0f9e42c6 y se puede usar para identificar archivos de animación de entrada válidos.

Los ocho bytes siguientes son dos valores int32 que declaran el número de versión principal y secundaria del archivo.

El resto del archivo se ocupa de los datos de animación, lo que puede cambiar entre los números de versión.

Sección Tipo
Número mágico Int64
Número de versión principal Int32
Número de versión secundaria Int32
Datos de animación ver la sección de versión

Versión 1.1

Los datos de animación de entrada constan de tres valores booleanos que indican si la animación contiene datos de Cámara, Hand y Eye Gaze, seguidos de una secuencia de curvas de animación. Las curvas presentes dependen de los valores de estos booleanos. Cada curva puede tener un número diferente de fotogramas clave.

Sección Tipo Notas
Tiene Cámara pose Boolean
Tiene datos de mano Boolean
Tiene mirada con los ojos Boolean
Cámara Posar curvas Solo si Has Cámara Pose es true
Mano a la izquierda con seguimiento Curva booleana Solo si Has Hand Data es true
Mano a la derecha Curva booleana Solo si Has Hand Data es true
Pellizcar a la izquierda Curva booleana Solo si Has Hand Data es true
Pellizcar a la derecha Curva booleana Solo si Has Hand Data es true
Articulaciones de la mano izquierda Curvas de posición conjunta Solo si Has Hand Data es true
Articulaciones de la mano derecha Curvas de posición conjunta Solo si Has Hand Data es true
Control ocular Curvas ray] Solo si La mirada con los ojos es verdadera

Versión 1.0

Los datos de animación de entrada constan de una secuencia de curvas de animación. El número y significado de las curvas de animación es fijo, pero cada curva puede tener un número diferente de fotogramas clave.

Sección Tipo
Cámara Posar curvas
Mano a la izquierda con seguimiento Curva booleana
Mano a la derecha Curva booleana
Pellizcar a la izquierda Curva booleana
Pellizcar a la derecha Curva booleana
Articulaciones de la mano izquierda Curvas de posición conjunta
Articulaciones de la mano derecha Curvas de posición conjunta

Curvas de posición de articulación

Para cada mano se almacena una secuencia de curvas de animación conjunta. El número de articulaciones es fijo y se almacena un conjunto de curvas de posición para cada articulación.

Sección Tipo
None Posar curvas
Muñeca Posar curvas
Palm Posar curvas
ThumbMetacarpalJoint Posar curvas
ThumbProximalJoint Posar curvas
ThumbDistalJoint Posar curvas
Información sobre pulgar Posar curvas
IndexMetacarpal Posar curvas
IndexKnuckle Posar curvas
IndexMiddleJoint Posar curvas
IndexDistalJoint Curvas de posición
Información sobre índices Curvas de posición
MiddleMetacarpal Curvas de posición
MiddleKnuckle Curvas de posición
MiddleMiddleJoint Curvas de posición
MiddleDistalJoint Curvas de posición
Información intermedia Curvas de posición
RingMetacarpal Curvas de posición
RingKnuckle Curvas de posición
RingMiddleJoint Curvas de posición
RingDistalJoint Curvas de posición
Información sobre anillos Curvas de posición
PinkyMetacarpal Curvas de posición
PinkyKnuckle Curvas de posición
PinkyMiddleJoint Curvas de posición
PinkyDistalJoint Curvas de posición
PinkyTip Curvas de posición

Curvas de posición

Las curvas de posición son una secuencia de 3 curvas de animación para el vector de posición, seguidas de 4 curvas de animación para el cuaternión de rotación.

Sección Tipo
Posición X Curva float
Posición Y Curva float
Posición Z Curva float
Rotación X Curva float
Rotación Y Curva float
Rotación Z Curva float
Rotación W Curva float

Curvas ray

Las curvas ray son una secuencia de 3 curvas de animación para el vector de origen, seguidas de 3 curvas de animación para el vector de dirección.

Sección Tipo
Origen X Curva float
Origen Y Curva float
Origen Z Curva float
Dirección X Curva float
Dirección Y Curva float
Dirección Z Curva float

Curva float

Las curvas de punto flotante son curvas Bézier totalmente llenas con un número variable de fotogramas clave. Cada fotograma clave almacena una hora y un valor de curva, así como tangentes y pesos en el lado izquierdo y derecho de cada fotograma clave.

Sección Tipo
Modo de ajuste previo Int32, modo de ajuste
Modo posterior al ajuste Int32, modo de ajuste
Número de fotogramas clave Int32
Fotogramas clave Fotograma clave float

Fotograma clave float

Un fotograma clave float almacena valores tangentes y de peso junto con la hora y el valor básicos.

Sección Tipo
Time Float32
Valor Float32
InTangent Float32
OutTangent Float32
InWeight Float32
OutWeight Float32
WeightedMode Int32, modo ponderado

Curva booleana

Las curvas booleanas son secuencias simples de valores on/off. En cada fotograma clave, el valor de la curva se voltea inmediatamente.

Sección Tipo
Modo de ajuste previo Int32, modo de ajuste
Modo posterior al ajuste Int32, modo de ajuste
Número de fotogramas clave Int32
Fotogramas clave Fotograma clave booleano

Fotograma clave booleano

Un fotograma clave booleano solo almacena una hora y un valor.

Sección Tipo
Time Float32
Valor Float32

Modo de ajuste

La semántica de los modos de ajuste previo y posterior sigue la definición wrapMode de Unity . Son una combinación de los bits siguientes:

Valor Significado
0 Valor predeterminado: lee el modo de repetición predeterminado configurado más arriba.
1 Una vez: cuando el tiempo llega al final del clip de animación, el clip dejará de reproducirse automáticamente y el tiempo se restablecerá al principio del clip.
2 Loop: cuando llegue al final del clip de animación, el tiempo continuará al principio.
4 PingPong: cuando el tiempo llegue al final del clip de animación, el tiempo hará ping pong entre el principio y el final.
8 ClampForever: reproduce la animación. Cuando llegue al final, seguirá jugando el último fotograma y nunca dejará de jugar.

Modo ponderado

La semántica del modo Ponderado sigue la definición weightedMode de Unity .

Valor Significado
0 Ninguno: excluya tanto inWeight como outWeight al calcular segmentos de curva.
1 In: incluya inWeight al calcular el segmento de curva anterior.
2 Out: incluya outWeight al calcular el siguiente segmento de curva.
3 Ambos: incluya inWeight y outWeight al calcular segmentos de curva.