Specifica del formato di file binario dell'animazione di input

Struttura complessiva

Il file binario dell'animazione di input inizia con un numero intero a 64 bit. Il valore di questo numero in notazione esadecimale è e può essere usato per identificare 0x6a8faf6e0f9e42c6 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 utilizzato 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 di animazione vedere la sezione relativa alla versione

Versione 1.1

I dati di animazione di input sono costituiti da tre valori booleani che indicano se l'animazione contiene dati Camera, Hand e Eye Gaze, 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 posizione della fotocamera Booleano
Ha dati della mano Booleano
Ha lo sguardo fisso Booleano
Fotocamera Curve di posizione Solo se La posizione della fotocamera è true
Mano tracciata a sinistra Curva booleana Solo se Has Hand Data è true
Mano tracciata a destra Curva booleana Solo se Has Hand Data è true
Avvicinamento della mano verso sinistra Curva booleana Solo se Has Hand Data è true
Avvicinamento delle dita a destra Curva booleana Solo se Has Hand Data è true
Giunzioni della mano a sinistra Curve di posizione giunzione Solo se Has Hand Data è true
Giunzioni della mano a destra Curve di posizione giunzione Solo se Has Hand Data è 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 di posizione
Mano tracciata a sinistra Curva booleana
Mano tracciata a destra Curva booleana
Avvicinamento della mano verso sinistra Curva booleana
Avvicinamento delle dita a destra Curva booleana
Giunzioni della mano a sinistra Curve di posizione giunzione
Giunzioni della mano a destra Curve di posizione giunzione

Curve di posizione giunzione

Per ogni mano viene archiviata una sequenza di curve di animazione congiunte. Il numero di giunzioni è fisso e viene archiviato un set di curve di posizione per ogni giunzione.

Sezione Tipo
Nessuno Curve di posizione
Polso Curve di posizione
Palm Curve di posizione
ThumbMetacarpalJoint Curve di posizione
ThumbProximalJoint Curve di posizione
ThumbDistalJoint Curve di posizione
Descrizione comando Curve di posizione
IndexMetacarpal Curve di posizione
IndexKnuckle Curve di posizione
IndexMiddleJoint Curve di posizione
IndexDistalJoint Curve di pose
Suggerimento indice Curve di pose
MiddleMetacarpal Curve di pose
MiddleKnuckle Curve di pose
MiddleMiddleJoint Curve di pose
MiddleDistalJoint Curve di pose
Suggerimento intermedio Curve di pose
RingMetacarpal Curve di pose
RingKnuckle Curve di pose
RingMiddleJoint Curve di pose
RingDistalJoint Curve di pose
Descrizione comando Curve di pose
PinkyMetacarpal Curve di pose
PinkyKnuckle Curve di pose
PinkyMiddleJoint Curve di pose
PinkyDistalJoint Curve di pose
PinkyTip Curve di pose

Curve di posizione

Le curve di posizione 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 Float Curve
Rotazione X Float Curve
Rotazione Y Float Curve
Rotazione Z Float Curve
Rotazione W Float Curve

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 Float Curve
Origine Y Float Curve
Origine Z Float Curve
Direzione X Float Curve
Direzione Y Curva float
Direzione Z Curva float

Curva float

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

Sezione Tipo
Modalità di pre-ritorno a capo Int32, modalità di ritorno a capo
Modalità post-wrapping Int32, modalità di ritorno 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 all'ora 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 semplici sequenze di valori on/off. In ogni fotogramma chiave il valore della curva viene capovolto immediatamente.

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

Fotogramma chiave booleano

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

Sezione Tipo
Ora Float32
valore Float32

Modalità di ritorno a capo

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 il tempo raggiunge la fine del clip di animazione, la riproduzione del clip viene interrotta automaticamente e l'ora viene reimpostata all'inizio del clip.
2 Ciclo: quando il tempo raggiunge la fine del clip di animazione, il tempo continuerà all'inizio.
4 PingPong: quando il tempo raggiunge la fine del clip di animazione, il tempo esegue il 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 riprodurre.

Modalità ponderata

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

valore Significato
0 Nessuno: esclude sia inWeight che outWeight durante il calcolo dei segmenti della curva.
1 In: Includere inWeight durante il calcolo del segmento della 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.