Animacje szkieletowe VMD

Z Rainsted
Skocz do: nawigacji, wyszukiwania

Format pliku Vocaloid Motion Data (VMD) jest używany do zapisu animacji modeli używanych w programie animującym MikuMikuDance (Polygon Movie Maker).

Używane łańcuchy tekstowe o stałej długości mają dodatkowe bajty wypełnione zerami.

Nagłówek pliku

Plik rozpoczyna się sygnaturą o 30 znakach, która może być użyta do określenia wersji programu, którym plik został utworzony. Sygnatura to "Vocaloid Motion Data file" dla programu MikuMikuDance 1.30 (przed wersją "Multi-Model"). Albo "Vocaloid Motion Data 0002", jeśli plik został utworzony późniejszymi wersjami MikuMikuDance (Multi-Model Edition).

Następnie jest nazwa modelu, dla którego animacje są przeznaczone. Dla starych wersji VMD zajmuje 10 bajtów, 20 bajtów dla nowszej. Jeśli nazwa modelu wczytanego do MikuMikuDance nie pokrywa się z zapisaną w VML, program wyświetla komunikat ostrzegawczy. W takim przypadku animowane będą jedynie kości o zgodnych nazwach.

Animacje kości

Po nagłówku umieszczona jest tabela klatek kluczowych (ang. keyframes) dla kości. Pierwsze 4 bajty określają liczbę pozycji w tabeli. Uwaga! Współrzędne podane są względem domyślnego ustawienia kości modelu. Dla każdej pozycji w tabeli utworzona jest poniższa struktura o długości 111 bajtów:

Typ danych Bajtów Znaczenie wartości
char[15] 15 Zakończona zerem nazwa animowanej kości. Typowo w języku japońskim, z kodowaniem Shift-JIS. Po znaczniku końca mogą występować przypadkowe wartości.
int 4 Numer klatki. Ponieważ klatki animacji niekoniecznie muszą istnieć dla każdej klatki ruchu, podczas animowania należy interpolować ruch pomiędzy podanymi klatkami kluczowymi, według załączonych krzywych.
float 4 Współrzędna X kości, rośnie w lewą stronę modelu (prawą sceny).
float 4 Współrzędna Y kości, rośnie w górę.
float 4 Współrzędna Z kości, rośnie do tyłu modelu (tyłu sceny).
float 4 Współrzędna X kwaternionu obrotu.
float 4 Współrzędna Y kwaternionu obrotu.
float 4 Współrzędna Z kwaternionu obrotu.
float 4 Współrzędna W kwaternionu obrotu.
byte[64] 64 64 bajty dla interpolacji. Każdy bajt jest z przedziału <0,127>. Pary bajtów są współrzędnymi wektorów kontrolnych dwuwymiarowej krzywej Béziera trzeciego stopnia. Najczęściej występujące wartości to 20 i 107 (dla interpolacji liniowej). Krzywe dotyczą ruchu od poprzedniej klatki.

Animacje siatki

Po animacji kości umieszczona jest animacja siatki modelu. Również rozpoczyna się 4 bajtami, określającymi liczbę klatek zapisanych w tabeli. Dla każdej klatki jest poniższa struktura:

Typ danych Znaczenie wartości
char[15] Zakończona zerem nazwa animowanej siatki.
byte[4] (unsigned int) Numer klatki.
byte[4] (float) Wartość w przedziale od 0.0 do 1.0, określająca skalę, z jaką należy zmodyfikować siatkę.

Sortowanie pliku

Poszczególne pozycje w tabelach mogą być umieszczone w przypadkowej kolejności. W celu uzyskania wydajniejszej animacji (w symulatorze) wskazane jest posortowanie tabeli według numeru klatki w grupach dla każdej kości. Dzięki temu łatwiej odszukać początkową klatkę danej kości i przechodzić do kolejnej. Również łatwiej rozpoznać ostatnią klatkę, gdyż w kolejnej pozycji jest nazwa innej kości. Sortowanie należy wykonywać poprzez porównanie łańcuchów znakowych z rozróżnieniem wielkości liter, a przy zgodności łańcuchów porównać numery klatek.

Kość-matka

Niektóre modele posiadają główną kość (ang. mother, jap. 全ての親). Pozwala ona w łatwy sposób przemieszczać postać względem środka sceny (np. wykonywać obroty całego modelu wokół zewnętrznej osi). Nie umożliwia tego środkowa kość (ang. center, jap. センター), do której przymocowany jest tułów (środek masy postaci, na wysokości pępka). Przemieszczanie kości środkowej powoduje, że stopy pozostają w tym samym miejscu, a kość główna przemieszcza również stopy.