Eingabeanimationsdateiformat – MRTK2

Gesamtstruktur

Die Eingabeanimations-Binärdatei beginnt mit einer 64-Bit-ganzzahl magic number. Der Wert dieser Zahl in hexadezimaler Notation ist 0x6a8faf6e0f9e42c6 und kann verwendet werden, um gültige Eingabeanimationsdateien zu identifizieren.

Die nächsten acht Bytes sind zwei Int32-Werte, die die Haupt- und Nebenversionsnummer der Datei deklarieren.

Der Rest der Datei wird von Animationsdaten übernommen, die sich zwischen den Versionsnummern ändern können.

`Section` Typ
Magische Zahl Int64
Hauptversionsnummer Int32
Nebenversionsnummer Int32
Animationsdaten siehe Abschnitt "Version"

Version 1.1

Die Eingabeanimationsdaten bestehen aus drei booleschen Werten, die angeben, ob die Animation Kamera-, Hand- und Augenaugendaten enthält, gefolgt von einer Sequenz von Animationskurven. Die vorhandenen Kurven hängen von den Werten dieser Booleen ab. Jede Kurve kann eine unterschiedliche Anzahl von Keyframes aufweisen.

`Section` type Hinweise
Hat Kamerahaltung Boolean
Verfügt über Handdaten Boolean
Hat Augen blicken Boolean
Camera Posenkurven Nur, wenn Die Kamerapose true ist
Handgetrackt links Boolesche Kurve Nur, wenn Die Handdaten wahr sind
Handgetrackt rechts Boolesche Kurve Nur, wenn Die Handdaten wahr sind
Hand anheften links Boolesche Kurve Nur, wenn Die Handdaten wahr sind
Hand anheften nach rechts Boolesche Kurve Nur, wenn Die Handdaten wahr sind
Handgelenke links Gelenkhaltungskurven Nur, wenn Die Handdaten wahr sind
Handgelenke rechts Gelenkhaltungskurven Nur, wenn Die Handdaten wahr sind
Anvisieren mit den Augen Strahlkurven] Nur, wenn Has Eye Gaze true ist

Version 1.0

Die Eingabeanimationsdaten bestehen aus einer Sequenz von Animationskurven. Die Anzahl und Bedeutung von Animationskurven ist festgelegt, aber jede Kurve kann eine andere Anzahl von Keyframes aufweisen.

`Section` Typ
Camera Posenkurven
Handgetrackt links Boolesche Kurve
Handgetrackt rechts Boolesche Kurve
Hand anheften links Boolesche Kurve
Hand anheften nach rechts Boolesche Kurve
Handgelenke links Gelenkhaltungskurven
Handgelenke rechts Gelenkhaltungskurven

Gelenkposenkurven

Für jede Hand wird eine Sequenz von Gelenkanimationskurven gespeichert. Die Anzahl der Gelenke ist fest, und für jedes Gelenk wird eine Reihe von Posenkurven gespeichert.

`Section` Typ
Keine Posenkurven
Handgelenk Posenkurven
Palm Posenkurven
ThumbMetacarpalJoint Posenkurven
ThumbProximalJoint Posenkurven
ThumbDistalJoint Posenkurven
ThumbTip Posenkurven
IndexMetacarpal Posenkurven
IndexKnuckle Posenkurven
IndexMiddleJoint Posenkurven
IndexDistalJoint Posenkurven
IndexTip Posenkurven
MiddleMetacarpal Posenkurven
MiddleKnuckle Posenkurven
MiddleMiddleJoint Posenkurven
MiddleDistalJoint Posenkurven
MiddleTip Posenkurven
RingMetacarpal Posenkurven
RingKnuckle Posenkurven
RingMiddleJoint Posenkurven
RingDistalJoint Posenkurven
RingTip Posenkurven
PinkyMetacarpal Posenkurven
PinkyKnuckle Posenkurven
PinkyMiddleJoint Posenkurven
PinkyDistalJoint Posenkurven
PinkyTip Posenkurven

Posenkurven

Posenkurven sind eine Sequenz von 3 Animationskurven für den Positionsvektor, gefolgt von 4 Animationskurven für die Rotationsquaternion.

`Section` Typ
Position X Float-Kurve
Position Y Float-Kurve
Position Z Float-Kurve
Drehung X Float-Kurve
Drehung Y Float-Kurve
Drehung Z Float-Kurve
Drehung W Float-Kurve

Strahlenkurven

Strahlkurven sind eine Sequenz von 3 Animationskurven für den Ursprungsvektor, gefolgt von 3 Animationskurven für den Richtungsvektor.

`Section` Typ
Ursprung X Float-Kurve
Ursprung Y Float-Kurve
Ursprung Z Float-Kurve
Richtung X Float-Kurve
Richtung Y Float-Kurve
Richtung Z Float-Kurve

Floatkurve

Gleitkommakurven sind vollwertige Bézierkurven mit einer variablen Anzahl von Keyframes. Jeder Keyframe speichert einen Zeit- und einen Kurvenwert sowie Tangenten und Gewichtungen auf der linken und rechten Seite jedes Keyframes.

`Section` Typ
Pre-Wrap-Modus Int32, Umbruchmodus
Nach dem Umbruchmodus Int32, Umbruchmodus
Anzahl der Keyframes Int32
Keyframes Float-Keyframe

Float-Keyframe

Ein Float-Keyframe speichert Tangenten- und Gewichtungswerte neben der Basiszeit und dem Grundlegenden Wert.

`Section` Typ
Time Float32
Wert Float32
InTangent Float32
OutTangent Float32
InWeight Float32
OutWeight Float32
WeightedMode Int32, Gewichteter Modus

Boolesche Kurve

Boolesche Kurven sind einfache Sequenzen von On/Off-Werten. Auf jedem Keyframe wird der Wert der Kurve sofort umgedreht.

`Section` Typ
Pre-Wrap-Modus Int32, Umbruchmodus
Nach dem Umbruchmodus Int32, Umbruchmodus
Anzahl von Keyframes Int32
Keyframes Boolescher Keyframe

Boolescher Keyframe

Ein boolescher Keyframe speichert nur eine Zeit und einen Wert.

`Section` Typ
Time Float32
Wert Float32

Umbruchmodus

Die Semantik des Pre- und Post-Wrap-Modus folgt der Unity WrapMode-Definition . Sie sind eine Kombination aus den folgenden Bits:

Wert Bedeutung
0 Standard: Liest den standardmäßigen Wiederholungsmodus, der höher eingerichtet ist.
1 Einmal: Wenn die Zeit das Ende des Animationsclips erreicht, wird der Clip automatisch nicht mehr wiedergegeben, und die Zeit wird auf den Anfang des Clips zurückgesetzt.
2 Schleife: Wenn die Zeit das Ende des Animationsclips erreicht, wird die Zeit am Anfang fortgesetzt.
4 PingPong: Wenn die Zeit das Ende des Animationsclips erreicht, wird die Zeit zwischen Anfang und Ende zurückpingen.
8 ClampForever: Gibt die Animation wieder. Wenn das Ende erreicht wird, wird der letzte Frame weiterhin wiedergegeben, und die Wiedergabe wird nie beendet.

Gewichteter Modus

Die Semantik des Gewichteten Modus folgt der Unity WeightedMode-Definition .

Wert Bedeutung
0 Keine: Schließen Sie beim Berechnen von Kurvensegmenten sowohl inWeight als auch outWeight aus.
1 In: Schließen Sie inWeight bei der Berechnung des vorherigen Kurvensegments ein.
2 Out: Schließen Sie outWeight bei der Berechnung des nächsten Kurvensegments ein.
3 Beides: Schließen Sie inWeight und outWeight beim Berechnen von Kurvensegmenten ein.