Condividi tramite


Formato di file di animazione di input - MRTK2

Struttura complessiva

Il file binario dell'animazione di input inizia con un numero magic intero a 64 bit. Il valore di questo numero nella notazione esadecimale è 0x6a8faf6e0f9e42c6 e può essere usato per identificare i file di animazione di input validi.

Gli otto byte successivi sono due valori Int32 che dichiarano il numero di versione principale e secondario del file.

Il resto del file viene occupato dai dati di animazione, che possono cambiare tra i numeri di versione.

Sezione Tipo
Numero magico Int64
Numero di versione principale Int32
Numero di versione secondaria Int32
Dati animazione vedere la sezione version

Versione 1.1

I dati di animazione di input sono costituiti da tre valori booleani che indicano se l'animazione contiene dati fotocamera, mano e sguardo fisso, seguiti da una sequenza di curve di animazione. Le curve presenti dipendono dai valori di questi valori booleani. Ogni curva può avere un numero diverso di fotogrammi chiave.

Sezione Type Note
Ha la posa della fotocamera Boolean
Contiene i dati della mano Boolean
Ha sguardo fisso Boolean
Fotocamera Curve pose Solo se has camera pose is true
Mano tracciata a sinistra Curva booleana Solo se i dati della mano sono true
Mano tracciata a destra Curva booleana Solo se i dati della mano sono true
Avvicinamento delle mani a sinistra Curva booleana Solo se i dati della mano sono true
Avvicinamento delle mani a destra Curva booleana Solo se i dati della mano sono true
Articolazioni a mano sinistra Curve di posa congiunta Solo se i dati della mano sono true
Articolazioni della mano destra Curve di posa congiunta Solo se i dati della mano sono true
Sguardo fisso Curve di raggio] Solo se ha sguardo fisso è true

Versione 1.0

I dati di animazione di input sono costituiti da una sequenza di curve di animazione. Il numero e il significato delle curve di animazione sono fissi, ma ogni curva può avere un numero diverso di fotogrammi chiave.

Sezione Tipo
Fotocamera Curve pose
Mano tracciata a sinistra Curva booleana
Mano tracciata a destra Curva booleana
Avvicinamento delle mani a sinistra Curva booleana
Avvicinamento delle mani a destra Curva booleana
Articolazioni a mano sinistra Curve di posa congiunta
Articolazioni della mano destra Curve di posa congiunta

Curve di posa congiunta

Per ogni mano viene archiviata una sequenza di curve di animazione congiunta. Il numero di articolazioni è fisso e un set di curve di posa viene archiviato per ogni articolazione.

Sezione Tipo
Nessuno Curve pose
Polso Curve pose
Palm Curve pose
ThumbMetacarpalJoint Curve pose
ThumbProximalJoint Curve pose
ThumbDistalJoint Curve pose
Descrizione personale Curve pose
IndexMetacarpal Curve pose
IndexKnuckle Curve pose
IndexMiddleJoint Curve pose
IndexDistalJoint Curve pose
Descrizione indice Curve pose
MiddleMetacarpal Curve pose
MiddleKnuckle Curve pose
MiddleMiddleJoint Curve pose
MiddleDistalJoint Curve pose
Descrizione centrale Curve pose
RingMetacarpal Curve pose
RingKnuckle Curve pose
RingMiddleJoint Curve pose
RingDistalJoint Curve pose
Descrizione circolare Curve pose
PinkyMetacarpal Curve pose
PinkyKnuckle Curve pose
PinkyMiddleJoint Curve pose
PinkyDistalJoint Curve pose
PinkyTip Curve pose

Curve di posa

Le curve di posa sono una sequenza di 3 curve di animazione per il vettore di posizione, seguite da 4 curve di animazione per il quaternione di rotazione.

Sezione Tipo
Posizione X Curva float
Posizione Y Curva float
Posizione Z Curva float
Rotazione X Curva float
Rotazione Y Curva float
Rotazione Z Curva float
Rotazione W Curva float

Curve di raggio

Le curve di raggio sono una sequenza di 3 curve di animazione per il vettore di origine, seguite da 3 curve di animazione per il vettore di direzione.

Sezione Tipo
Origine X Curva float
Origine Y Curva float
Origine Z Curva float
Direzione X Curva float
Direzione Y Curva float
Direzione Z Curva float

Curva float

Le curve a virgola mobile sono curve bézier completamente complete con un numero variabile di fotogrammi chiave. Ogni fotogramma chiave archivia un valore di ora e una curva, nonché tangenti e pesi sul lato sinistro e destro di ogni fotogramma chiave.

Sezione Tipo
Modalità pre-wrapping Int32, modalità a capo
Modalità post-wrapping Int32, modalità a capo
Numero di fotogrammi chiave Int32
Fotogrammi chiave Fotogramma chiave float

Fotogramma chiave float

Un fotogramma chiave float archivia i valori di tangente e peso insieme al tempo e al valore di base.

Sezione Tipo
Ora Float32
Valore Float32
InTangent Float32
OutTangent Float32
InWeight Float32
OutWeight Float32
WeightedMode Int32, modalità ponderata

Curva booleana

Le curve booleane sono sequenze semplici di valori on/off. In ogni fotogramma chiave il valore della curva si capovolge immediatamente.

Sezione Tipo
Modalità pre-wrapping Int32, modalità a capo
Modalità post-wrapping Int32, modalità a capo
Numero di fotogrammi chiave Int32
Fotogrammi chiave Fotogramma chiave booleano

Fotogramma chiave booleano

Un fotogramma chiave booleano archivia solo un valore e un'ora.

Sezione Tipo
Ora Float32
Valore Float32

Modalità di wrapping

La semantica delle modalità Pre-e Post-Wrap segue la definizione WrapMode di Unity . Sono una combinazione dei bit seguenti:

Valore Significato
0 Impostazione predefinita: legge la modalità di ripetizione predefinita impostata più in alto.
1 Una volta: quando l'ora raggiunge la fine della clip di animazione, il clip smetterà automaticamente di riprodurre e il tempo verrà reimpostato all'inizio della clip.
2 Ciclo: quando l'ora raggiunge la fine della clip di animazione, l'ora continuerà all'inizio.
4 PingPong: quando l'ora raggiunge la fine della clip di animazione, il tempo ping pong tra l'inizio e la fine.
8 ClampForever: riproduce l'animazione. Quando raggiunge la fine, continuerà a riprodurre l'ultimo fotogramma e non smetterà mai di giocare.

Modalità ponderata

La semantica della modalità ponderata segue la definizione WeightedMode di Unity .

Valore Significato
0 Nessuno: escludere sia inWeight che outWeight durante il calcolo dei segmenti della curva.
1 In: includere inWeight durante il calcolo del segmento di curva precedente.
2 Out: includere outWeight durante il calcolo del segmento di curva successivo.
3 Entrambi: includere inWeight e outWeight durante il calcolo dei segmenti della curva.