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, que pueden cambiar entre 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 consulte 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 camera, 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 posición de cámara Boolean
Tiene datos de mano Boolean
Tiene mirada con los ojos Boolean
Cámara Curvas de posición Solo si Tiene posición de cámara es true
Hand Tracked Left Curva booleana Solo si tiene datos de mano es true
Mano a la derecha con seguimiento Curva booleana Solo si tiene datos de mano es true
Desprendiendo mano a la izquierda Curva booleana Solo si tiene datos de mano es true
Pellizcar a la derecha Curva booleana Solo si tiene datos de mano es true
Articulaciones de mano izquierda Curvas de posición conjunta Solo si tiene datos de mano es true
Articulaciones de la mano derecha Curvas de posición conjunta Solo si tiene datos de mano 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 el significado de las curvas de animación son fijos, pero cada curva puede tener un número diferente de fotogramas clave.

Sección Tipo
Cámara Curvas de posición
Hand Tracked Left Curva booleana
Mano a la derecha con seguimiento Curva booleana
Desprendiendo mano a la izquierda Curva booleana
Pellizcar a la derecha Curva booleana
Articulaciones de 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 Curvas de posición
Muñeca Curvas de posición
Palm Curvas de posición
ThumbMetacarpalJoint Curvas de posición
ThumbProximalJoint Curvas de posición
ThumbDistalJoint Curvas de posición
Información sobre pulgar Curvas de posición
IndexMetacarpal Curvas de posición
IndexKnuckle Curvas de posición
IndexMiddleJoint Curvas de posición
IndexDistalJoint Posar curvas
IndexTip Posar curvas
MiddleMetacarpal Posar curvas
MiddleKnuckle Posar curvas
MiddleMiddleJoint Posar curvas
MiddleDistalJoint Posar curvas
Información intermedia Posar curvas
RingMetacarpal Posar curvas
RingKnuckle Posar curvas
RingMiddleJoint Posar curvas
RingDistalJoint Posar curvas
Información sobre anillos Posar curvas
PinkyMetacarpal Posar curvas
PinkyKnuckle Posar curvas
PinkyMiddleJoint Posar curvas
PinkyDistalJoint Posar curvas
PinkyTip Posar curvas

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 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 detendrá automáticamente la reproducción y el tiempo se restablecerá al principio del clip.
2 Bucle: cuando el tiempo 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 de Unity WeightedMode .

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.