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. |