Udostępnij za pośrednictwem


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.