Eingabeanimationsdateiformat – MRTK2

Gesamtstruktur

Die Binäre Datei der Eingabeanimation beginnt mit einer 64-Bit-ganzzahligen Magischen Zahl. 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 Versionsnummern ändern können.

`Section` type
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 Eye Gaze-Daten enthält, gefolgt von einer Sequenz von Animationskurven. Die vorhandenen Kurven hängen von den Werten dieser Booleanen ab. Jede Kurve kann eine andere Anzahl von Keyframes aufweisen.

`Section` type Notizen
Hat Kamera Pose Boolean
Hat Handdaten Boolesch
Hat Augenblick Boolean
Kamera Posenkurven Nur wenn Has Kamera Pose wahr ist
Hand nachverfolgt links Boolesche Kurve Nur, wenn Handdaten wahr sind
Hand nach rechts nachverfolgt Boolesche Kurve Nur, wenn Handdaten wahr sind
Handheften nach links Boolesche Kurve Nur, wenn Handdaten wahr sind
Handheften rechts Boolesche Kurve Nur, wenn Handdaten wahr sind
Handgelenke links Gelenk-Posenkurven Nur, wenn Handdaten wahr sind
Handgelenke rechts Gelenk-Posenkurven Nur, wenn Handdaten wahr sind
Anvisieren mit den Augen Ray Curves] Nur wenn Has Eye Gaze wahr ist

Version 1.0

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

`Section` type
Kamera Posenkurven
Hand nachverfolgt links Boolesche Kurve
Hand nach rechts nachverfolgt Boolesche Kurve
Handheften nach links Boolesche Kurve
Handheften rechts Boolesche Kurve
Handgelenke links Gelenk-Posenkurven
Handgelenke rechts Gelenk-Posenkurven

Gelenk-Posenkurven

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` type
Keine Posenkurven
Handgelenk Posenkurven
Palm Posenkurven
ThumbMetacarpalJoint Posenkurven
ThumbProximalJoint Posenkurven
ThumbDistalJoint Posenkurven
Fingerabdruckinfo Posenkurven
IndexMetacarpal Posenkurven
IndexKnuckle Posenkurven
IndexMiddleJoint Posenkurven
IndexDistalJoint Posenkurven
Indexinfo Posenkurven
MiddleMetacarpal Posenkurven
MiddleKnuckle Posenkurven
MiddleMiddleJoint Posenkurven
MiddleDistalJoint Posenkurven
Mittelinfo 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 Drehungs quaternion.

`Section` type
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

Strahlkurven

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

`Section` type
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 werden voll aus Bézierkurven mit einer variablen Anzahl von Keyframes erstellt. Jeder Keyframe speichert eine Zeit und einen Kurvenwert sowie Tangenten und Gewichtungen auf der linken und rechten Seite jedes Keyframes.

`Section` type
Vorumbruchmodus Int32, Umbruchmodus
Nachumbruchmodus Int32, Umbruchmodus
Anzahl der Keyframes Int32
Keyframes Float Keyframe

Float-Keyframe

Ein Float-Keyframe speichert Tangent- und Gewichtswerte neben der grundlegenden Zeit und dem Wert.

`Section` type
Time Float32
Wert Float32
InTangent Float32
OutTangent Float32
InWeight Float32
OutWeight Float32
WeightedMode Int32, Gewichtetmodus

Boolesche Kurve

Boolesche Kurven sind einfache Sequenzen von Ein-/Aus-Werten. Auf jedem Keyframe kippt der Wert der Kurve sofort.

`Section` type
Vorumbruchmodus Int32, Umbruchmodus
Postumbruchmodus Int32, Umbruchmodus
Anzahl der Keyframes Int32
Keyframes Boolescher Keyframe

Boolescher Keyframe

Ein boolescher Keyframe speichert nur einen Zeit- und Wert.

`Section` type
Time Float32
Wert Float32

Umbruchmodus

Die Semantik der Modi "Pre- und Post-Wrap" folgen 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 am Anfang des Clips zurückgesetzt.
2 Loop: 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ück pong.
8 ClampForever: Gibt die Animation wieder. Wenn es das Ende erreicht, wird der letzte Frame wiedergegeben und niemals nicht mehr wiedergegeben.

Gewichtete 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 bei der Berechnung des vorherigen Kurvensegments in "InWeight" ein.
2 Out: Schließen Sie outWeight ein, wenn Sie das nächste Kurvensegment berechnen.
3 Beide: Schließen Sie beim Berechnen von Kurvensegmenten inWeight und outWeight ein.