Format pliku animacji wejściowej — MRTK2
Ogólna struktura
Plik binarny animacji wejściowej zaczyna się od 64-bitowej liczby całkowitej. Wartość tej liczby w notacji szesnastkowej jest 0x6a8faf6e0f9e42c6
i może służyć do identyfikowania prawidłowych plików animacji wejściowych.
Następne osiem bajtów to dwie wartości Int32 deklarujące numer wersji głównej i pomocniczej pliku.
Pozostała część pliku jest pobierana przez dane animacji, które mogą ulec zmianie między numerami wersji.
Sekcja | Typ |
---|---|
Numer magiczny | Int64 |
Numer wersji głównej | Int32 |
Numer wersji pomocniczej | Int32 |
Dane animacji | zobacz sekcję wersji |
Wersja 1.1
Dane animacji wejściowej składają się z trzech wartości logicznych, które wskazują, czy animacja zawiera dane aparatu, dłoni i wzroku, a następnie sekwencję krzywych animacji. Obecne krzywe zależą od wartości tych wartości logicznych. Każda krzywa może mieć inną liczbę klatek kluczowych.
Sekcja | Typ | Uwagi |
---|---|---|
Ma posesję aparatu | Wartość logiczna | |
Zawiera dane ręczne | Wartość logiczna | |
Ma spojrzenie na oko | Wartość logiczna | |
Aparat fotograficzny | Pozuj krzywe | Tylko wtedy, gdy pozycja Kamery ma wartość true |
Ręka śledzona w lewo | Krzywa logiczna | Tylko wtedy, gdy dane ręka ma wartość true |
Ręka śledzona w prawo | Krzywa logiczna | Tylko wtedy, gdy dane ręka ma wartość true |
Przypinanie dłoni w lewo | Krzywa logiczna | Tylko wtedy, gdy dane ręka ma wartość true |
Ręczne szczypanie w prawo | Krzywa logiczna | Tylko wtedy, gdy dane ręka ma wartość true |
Stawy ręczne w lewo | Krzywe stawów | Tylko wtedy, gdy dane ręka ma wartość true |
Stawy ręczne w prawo | Krzywe stawów | Tylko wtedy, gdy dane ręka ma wartość true |
Spojrzenie oczu | Krzywe promienia] | Tylko wtedy, gdy spojrzenie oczu jest prawdziwe |
Wersja 1.0
Dane animacji wejściowej składają się z sekwencji krzywych animacji. Liczba i znaczenie krzywych animacji jest stała, ale każda krzywa może mieć inną liczbę klatek kluczowych.
Sekcja | Typ |
---|---|
Aparat fotograficzny | Pozuj krzywe |
Ręka śledzona w lewo | Krzywa logiczna |
Ręka śledzona w prawo | Krzywa logiczna |
Przypinanie dłoni w lewo | Krzywa logiczna |
Ręczne szczypanie w prawo | Krzywa logiczna |
Stawy ręczne w lewo | Krzywe stawów |
Stawy ręczne w prawo | Krzywe stawów |
Krzywe stawów
Dla każdej ręki jest przechowywana sekwencja wspólnych krzywych animacji. Liczba stawów jest stała, a zestaw krzywych pozy jest przechowywany dla każdego stawu.
Sekcja | Typ |
---|---|
Brak | Pozuj krzywe |
Nadgarstka | Pozuj krzywe |
Palm | Pozuj krzywe |
ThumbMetacarpalJoint | Pozuj krzywe |
ThumbProximalJoint | Pozuj krzywe |
ThumbDistalJoint | Pozuj krzywe |
Etykietka palca | Pozuj krzywe |
IndexMetacarpal | Pozuj krzywe |
IndexKnuckle | Pozuj krzywe |
IndexMiddleJoint | Pozuj krzywe |
IndexDistalJoint | Pozuj krzywe |
Etykietka indeksu | Pozuj krzywe |
MiddleMetacarpal | Pozuj krzywe |
MiddleKnuckle | Pozuj krzywe |
MiddleMiddleJoint | Pozuj krzywe |
MiddleDistalJoint | Pozuj krzywe |
Etykietka środkowa | Pozuj krzywe |
RingMetacarpal | Pozuj krzywe |
RingKnuckle | Pozuj krzywe |
RingMiddleJoint | Pozuj krzywe |
RingDistalJoint | Pozuj krzywe |
Etykietka pierścieniowa | Pozuj krzywe |
PinkyMetacarpal | Pozuj krzywe |
PinkyKnuckle | Pozuj krzywe |
PinkyMiddleJoint | Pozuj krzywe |
PinkyDistalJoint | Pozuj krzywe |
PinkyTip | Pozuj krzywe |
Pozowanie krzywych
Krzywe pozy to sekwencja 3 krzywych animacji dla wektora położenia, a następnie 4 krzywe animacji dla kwadternionu rotacji.
Sekcja | Typ |
---|---|
Położenie X | Krzywa zmiennoprzecinkowa |
Położenie Y | Krzywa zmiennoprzecinkowa |
Położenie Z | Krzywa zmiennoprzecinkowa |
Obrót X | Krzywa zmiennoprzecinkowa |
Obrót Y | Krzywa zmiennoprzecinkowa |
Obrót Z | Krzywa zmiennoprzecinkowa |
Obrót W | Krzywa zmiennoprzecinkowa |
Krzywe promienia
Krzywe promieni to sekwencja 3 krzywych animacji dla wektora pochodzenia, a następnie 3 krzywe animacji dla wektora kierunku.
Sekcja | Typ |
---|---|
Źródło X | Krzywa zmiennoprzecinkowa |
Źródło Y | Krzywa zmiennoprzecinkowa |
Źródło Z | Krzywa zmiennoprzecinkowa |
Kierunek X | Krzywa zmiennoprzecinkowa |
Kierunek Y | Krzywa zmiennoprzecinkowa |
Kierunek Z | Krzywa zmiennoprzecinkowa |
Krzywa zmiennoprzecinkowa
Krzywe zmiennoprzecinkowe są w pełni funkcjonalne krzywe Bézier ze zmienną liczbą klatek kluczowych. Każda ramka kluczowa przechowuje czas i wartość krzywej, a także tangensy i wagi po lewej i prawej stronie każdej ramki kluczy.
Sekcja | Typ |
---|---|
Tryb wstępnego zawijania | Int32, Tryb zawijania |
Tryb zawijania | Int32, Tryb zawijania |
Liczba klatek kluczowych | Int32 |
Klatek kluczowych | Ramka zmiennoprzecinkowa |
Zmiennoprzecinkowa ramka kluczowa
Ramka kluczowa zmiennoprzecinkowa przechowuje styczne i ważone wartości obok podstawowego czasu i wartości.
Sekcja | Typ |
---|---|
Godzina | Float32 |
Wartość | Float32 |
InTangent | Float32 |
OutTangent | Float32 |
Waga | Float32 |
Waga wychodząca | Float32 |
WeightedMode | Int32, tryb ważony |
Krzywa logiczna
Krzywe logiczne to proste sekwencje wartości wł/wył. Na każdej ramce kluczowej wartość krzywej jest natychmiast przerzucana.
Sekcja | Typ |
---|---|
Tryb wstępnego zawijania | Int32, Tryb zawijania |
Tryb zawijania | Int32, Tryb zawijania |
Liczba klatek kluczowych | Int32 |
Klatek kluczowych | Ramka logiczna |
Ramka logiczna
Ramka logiczna przechowuje tylko czas i wartość.
Sekcja | Typ |
---|---|
Godzina | Float32 |
Wartość | Float32 |
Tryb zawijania
Semantyka trybów pre-i post-Wrap są zgodne z definicją WrapMode aparatu Unity . Są one kombinacją następujących bitów:
Wartość | Znaczenie |
---|---|
0 | Ustawienie domyślne: Odczytuje domyślny tryb powtarzania ustawiony wyżej. |
1 | Raz: gdy czas osiągnie koniec klipu animacji, klip zostanie automatycznie zatrzymany, a czas zostanie zresetowany do początku klipu. |
2 | Pętla: gdy czas osiągnie koniec klipu animacji, czas będzie kontynuowany na początku. |
4 | PingPong: Kiedy czas osiągnie koniec klipu animacji, czas będzie ping pong z powrotem między rozpoczęciem a końcem. |
8 | ClampForever: odtwarza animację. Kiedy dobiegnie końca, będzie nadal grać ostatnią ramkę i nigdy nie przestać grać. |
Tryb ważony
Semantyka trybu ważonego jest częścią definicji Unity WeightedMode .
Wartość | Znaczenie |
---|---|
0 | Brak: wyklucz zarówno w wadze, jak i na wagę podczas obliczania segmentów krzywej. |
1 | W: Uwzględnij w wadze podczas obliczania poprzedniego segmentu krzywej. |
2 | Wyjmij: uwzględnij wagę podczas obliczania następnego segmentu krzywej. |
3 | Oba: uwzględniane są w kategorii Waga i Waga podczas obliczania segmentów krzywej. |