Format de fichier d’animation d’entrée — MRTK2

Structure globale

Le fichier binaire d’animation d’entrée commence par un nombre magique entier 64 bits. La valeur de ce nombre en notation hexadécimale est 0x6a8faf6e0f9e42c6 et peut être utilisée pour identifier les fichiers d’animation d’entrée valides.

Les huit octets suivants sont deux valeurs Int32 déclarant le numéro de version principale et secondaire du fichier.

Le reste du fichier est occupé par les données d’animation, qui peuvent changer d’un numéro de version à l’autre.

Section Type
Nombre magique Int64
Numéro de version principale Int32
Numéro de version secondaire Int32
Données d’animation voir la section version

Version 1.1

Les données d’animation d’entrée se composent de trois valeurs booléennes qui indiquent si l’animation contient des données Caméra, Main et Regard, suivies d’une séquence de courbes d’animation. Les courbes présentes dépendent des valeurs de ces booléens. Chaque courbe peut avoir un nombre différent d’images clés.

Section Type Notes
A la pose de la caméra Boolean
A des données manuelles Boolean
A le regard Boolean
Appareil photo Courbes de pose Uniquement si la pose de l’appareil photo est vraie
Suivi à la main gauche Courbe booléenne Uniquement si les données de la main ont la valeur true
Suivi à la main droite Courbe booléenne Uniquement si les données de la main ont la valeur true
Pincement à gauche de la main Courbe booléenne Uniquement si les données de la main ont la valeur true
Pincement de la main vers la droite Courbe booléenne Uniquement si les données de la main ont la valeur true
Articulations de la main gauche Courbes de pose conjointes Uniquement si les données de la main ont la valeur true
Articulations de la main vers la droite Courbes de pose conjointes Uniquement si les données de la main ont la valeur true
Regard Courbes de rayon] Seulement si a le regard est vrai

Version 1.0

Les données d’animation d’entrée se composent d’une séquence de courbes d’animation. Le nombre et la signification des courbes d’animation sont fixes, mais chaque courbe peut avoir un nombre différent d’images clés.

Section Type
Appareil photo Courbes de pose
Suivi à la main gauche Courbe booléenne
Suivi à la main droite Courbe booléenne
Pincement à gauche de la main Courbe booléenne
Pincement de la main vers la droite Courbe booléenne
Articulations de la main gauche Courbes de pose conjointes
Articulations de la main vers la droite Courbes de pose conjointes

Courbes de pose conjointes

Pour chaque main, une séquence de courbes d’animation conjointes est stockée. Le nombre d’articulations est fixe et un ensemble de courbes de pose est stocké pour chaque joint.

Section Type
Aucune Courbes de pose
Poignet Courbes de pose
Palm Courbes de pose
ThumbMetacarpalJoint Courbes de pose
ThumbProximalJoint Courbes de pose
ThumbDistalJoint Courbes de pose
Info-bulle Courbes de pose
IndexMetacarpal Courbes de pose
IndexKnuckle Courbes de pose
IndexMiddleJoint Courbes de pose
IndexDistalJoint Courbes de pose
IndexTip Courbes de pose
MiddleMetacarpal Courbes de pose
MiddleKnuckle Courbes de pose
MiddleMiddleJoint Courbes de pose
MiddleDistalJoint Courbes de pose
MiddleTip Courbes de pose
RingMetacarpal Courbes de pose
RingKnuckle Courbes de pose
RingMiddleJoint Courbes de pose
RingDistalJoint Courbes de pose
RingTip Courbes de pose
PinkyMetacarpal Courbes de pose
PinkyKnuckle Courbes de pose
PinkyMiddleJoint Courbes de pose
PinkyDistalJoint Courbes de pose
PinkyTip Courbes de pose

Courbes de pose

Les courbes de pose sont une séquence de 3 courbes d’animation pour le vecteur de position, suivies de 4 courbes d’animation pour le quaternion de rotation.

Section Type
Position X Courbe float
Position Y Courbe float
Position Z Courbe float
Rotation X Courbe float
Rotation Y Courbe float
Rotation Z Courbe float
Rotation W Courbe float

Courbes de rayon

Les courbes de rayon sont une séquence de 3 courbes d’animation pour le vecteur d’origine, suivies de 3 courbes d’animation pour le vecteur directionnel.

Section Type
Origine X Courbe float
Origine Y Courbe float
Origine Z Courbe float
Direction X Courbe float
Direction Y Courbe float
Direction Z Courbe float

Courbe float

Les courbes à virgule flottante sont des courbes de Bézier à part entière avec un nombre variable d’images clés. Chaque image clé stocke une heure et une valeur de courbe, ainsi que des tangentes et des pondérations sur les côtés gauche et droit de chaque image clé.

Section Type
Mode Pré-habillage Int32, mode Wrap
Mode post-habillage Int32, mode Wrap
Nombre d’images clés Int32
Images clés Image clé float

Image clé float

Une image clé float stocke les valeurs de tangente et de pondération, ainsi que l’heure et la valeur de base.

Section Type
Temps Float32
Valeur Float32
InTangent Float32
OutTangent Float32
InWeight Float32
Poids hors poids Float32
Mode pondéré Int32, mode pondéré

Courbe booléenne

Les courbes booléennes sont des séquences simples de valeurs on/off. Sur chaque image clé, la valeur de la courbe bascule immédiatement.

Section Type
Mode Pré-habillage Int32, mode Wrap
Mode post-habillage Int32, mode Wrap
Nombre d’images clés Int32
Images clés Image clé booléenne

Image clé booléenne

Une image clé booléenne stocke uniquement une heure et une valeur.

Section Type
Temps Float32
Valeur Float32

Mode Wrap

La sémantique des modes Pré et Post-Wrap suit la définition Unity WrapMode . Il s’agit d’une combinaison des bits suivants :

Valeur Signification
0 Par défaut : lit le mode de répétition par défaut défini plus haut.
1 Une fois : lorsque l’heure atteint la fin du clip d’animation, la lecture du clip s’arrête automatiquement et l’heure est réinitialisée au début du clip.
2 Boucle : lorsque l’heure atteint la fin du clip d’animation, l’heure continue au début.
4 PingPong : lorsque l’heure atteint la fin du clip d’animation, le temps de ping pong est de retour entre le début et la fin.
8 ClampForever : lit l’animation. Lorsqu’il atteint la fin, il continuera à jouer le dernier cadre et ne cessera jamais de jouer.

Mode pondéré

La sémantique du mode pondéré suit la définition Unity WeightedMode .

Valeur Signification
0 Aucun : excluez inWeight ou outWeight lors du calcul des segments de courbe.
1 Dans : incluez inWeight lors du calcul du segment de courbe précédent.
2 Out : incluez outWeight lors du calcul du segment de courbe suivant.
3 Les deux : incluez inWeight et outWeight lors du calcul des segments de courbe.