Dela via


Filformat för indataanimering – MRTK2

Övergripande struktur

Binärfilen för indataanimering börjar med ett magiskt nummer på 64 bitar. Värdet för det här talet i hexadecimal notation är 0x6a8faf6e0f9e42c6 och kan användas för att identifiera giltiga indataanimeringsfiler.

De följande åtta byteen är två Int32-värden som deklarerar filens huvud- och delversionsnummer.

Resten av filen tas upp av animeringsdata, som kan ändras mellan versionsnummer.

Avsnitt Typ
Magiskt nummer Int64
Huvudversionsnummer Int32
Delversionsnummer Int32
Animeringsdata se avsnittet version

Version 1.1

Indata för animering består av tre booleska värden som anger om animeringen innehåller kamera-, hand- och Eye Gaze-data, följt av en sekvens med animeringskurvor. De kurvor som finns beror på värdena för dessa booleska värden. Varje kurva kan ha olika antal nyckelrutor.

Avsnitt Typ Kommentarer
Har kameraställning Boolesk
Har handdata Boolesk
Har ögonöga Boolesk
Kamera Posekurvor Endast om har kameraställning är sant
Handspårad vänster Boolesk kurva Endast om Har handdata är sant
Handspårad höger Boolesk kurva Endast om Har handdata är sant
Handknip vänster Boolesk kurva Endast om Har handdata är sant
Hand som kläms åt höger Boolesk kurva Endast om Har handdata är sant
Handfogar vänster Gemensamma posekurvor Endast om Har handdata är sant
Handfogar höger Gemensamma posekurvor Endast om Har handdata är sant
Ögonöga Strålekurvor] Endast om Has Eye Gaze är sant

Version 1.0

Animeringsdata för indata består av en sekvens med animeringskurvor. Antalet och innebörden av animeringskurvor är fasta, men varje kurva kan ha olika antal nyckelrutor.

Avsnitt Typ
Kamera Posekurvor
Handspårad vänster Boolesk kurva
Handspårad höger Boolesk kurva
Handknip vänster Boolesk kurva
Hand som kläms åt höger Boolesk kurva
Handfogar vänster Gemensamma posekurvor
Handfogar höger Gemensamma posekurvor

Gemensamma posekurvor

För varje hand lagras en sekvens med gemensamma animeringskurvor. Antalet leder är fast och en uppsättning posekurvor lagras för varje led.

Avsnitt Typ
Ingen Posekurvor
Handled Posekurvor
Palm Posekurvor
ThumbMetacarpalJoint Posekurvor
ThumbProximalJoint Posekurvor
ThumbDistalJoint Posekurvor
Tumtopp Posekurvor
IndexMetacarpal Posekurvor
IndexKnuckle Posekurvor
IndexMiddleJoint Posekurvor
IndexDistalJoint Posekurvor
Indextips Posekurvor
MiddleMetacarpal Posekurvor
MiddleKnuckle Posekurvor
MiddleMiddleJoint Posekurvor
MiddleDistalJoint Posekurvor
Mellantips Posekurvor
RingMetacarpal Posekurvor
RingKnuckle Posekurvor
RingMiddleJoint Posekurvor
RingDistalJoint Posekurvor
Ringtips Posekurvor
PinkyMetacarpal Posekurvor
PinkyKnuckle Posekurvor
PinkyMiddleJoint Posekurvor
PinkyDistalJoint Posekurvor
PinkyTip Posekurvor

Posekurvor

Posekurvor är en sekvens med 3 animeringskurvor för positionsvektorn, följt av 4 animeringskurvor för rotationskvaternionen.

Avsnitt Typ
Position X Flyttalskurva
Position Y Flyttalskurva
Position Z Flyttalskurva
Rotation X Flyttalskurva
Rotation Y Flyttalskurva
Rotation Z Flyttalskurva
Rotation W Flyttalskurva

Strålkurvor

Ray-kurvor är en sekvens med 3 animeringskurvor för ursprungsvektorn, följt av 3 animeringskurvor för riktningsvektorn.

Avsnitt Typ
Ursprung X Flyttalskurva
Ursprung Y Flyttalskurva
Ursprung Z Flyttalskurva
Riktning X Flyttalskurva
Riktning Y Flyttalskurva
Riktning Z Flyttalskurva

Flytkurva

Flyttalskurvor är fullfjädrade Bézier-kurvor med ett variabelt antal nyckelrutor. Varje nyckelbildruta lagrar en tid och ett kurvvärde, samt tangenter och vikter till vänster och höger i varje nyckelbildruta.

Avsnitt Typ
Förinställt radbytesläge Int32, wrap-läge
Läge efter radbyte Int32, wrap-läge
Antal nyckelrutor Int32
Nyckelrutor Flyttalsnyckelram

Flyttalsnyckelram

En flyttalsnyckelram lagrar tangent- och viktvärden tillsammans med den grundläggande tiden och värdet.

Avsnitt Typ
Tid Float32
Värde Float32
InTangent Float32
OutTangent Float32
InWeight Float32
Utvikt Float32
WeightedMode Int32, viktat läge

Boolesk kurva

Booleska kurvor är enkla sekvenser med on/off-värden. På varje nyckelbildruta vänds värdet för kurvan omedelbart.

Avsnitt Typ
Förinställt radbytesläge Int32, radbytesläge
Efter radbrytningsläge Int32, radbytesläge
Antal nyckelramar Int32
Nyckelrutor Boolesk nyckelram

Boolesk nyckelram

En boolesk nyckelram lagrar bara en tid och ett värde.

Avsnitt Typ
Tid Float32
Värde Float32

Radbrytningsläge

Semantiken för pre- och post-wrap-lägen följer Unity WrapMode-definitionen . De är en kombination av följande bitar:

Värde Innebörd
0 Standard: Läser standardrepetitionsläget högre upp.
1 En gång: När tiden når slutet av animeringsklippet slutar klippet automatiskt att spelas upp och tiden återställs till början av klippet.
2 Loop: När tiden når slutet av animeringsklippet fortsätter tiden i början.
4 PingPong: När tiden når slutet av animeringsklippet pingar tiden pong tillbaka mellan början och slutet.
8 ClampForever: Spelar upp animeringen. När den når slutet fortsätter den att spela den sista ramen och slutar aldrig spela.

Viktat läge

Semantiken i viktat läge följer Unity WeightedMode-definitionen .

Värde Innebörd
0 Ingen: Undanta både inWeight eller outWeight vid beräkning av kurvsegment.
1 I: Inkludera inWeight vid beräkning av föregående kurvsegment.
2 Ut: Inkludera outWeight vid beräkning av nästa kurvsegment.
3 Båda: Inkludera inWeight och outWeight vid beräkning av kurvsegment.