Podstawy mieszania animacji

23

Powiedzmy, że mam ramy z postaciami, które potrafią biegać i chodzić, i oczywiście stać w miejscu.

Czy mam rację, myśląc, że mieszanie animacji to proces płynnego przechodzenia między nimi poprzez generowanie dynamicznych animacji w czasie wykonywania?

Jeśli tak, jaka jest podstawowa teoria tego, w jaki sposób to działa i jak miałbym ją wdrożyć?

SirYakalot
źródło
1
Uważam, że to tylko liniowa interpolacja między każdą kością od ostatniej klatki jednej animacji do pierwszej klatki drugiej.
anonimowo
Lub interpolacja liniowa z płynnym krokiem, jeśli chcesz średnią ważoną (:
Gustavo Maciel
@ Gustavo-Gtoknu, czy możesz wyjaśnić więcej o tym, co właśnie powiedziałeś?
SirYakalot,
wykonujesz interpolację liniową w alfie obu ramek, które mają być mieszane, odwrotnie względem drugiej. oba w funkcji czasu. Możesz płynnie wykonać krok lub użyć średniej ważonej w interpolacji, aby uzyskać inny efekt.
Gustavo Maciel

Odpowiedzi:

18

Mieszanie animacji postaci jest bardziej ogólne i może być używane do:

  • Obliczanie płynnych przejść między 2 klipami;
  • Tworzenie całkowicie nowych animacji z istniejących (potencjalnie więcej niż 2 jednocześnie);
  • Osiąganie zachowań podobnych do IK;
  • itp.

Podstawową ideą jest to, że dla dwóch identycznych szkieletów z różnymi klipami animacyjnymi dla każdego obrotu złącza obliczane są wartości pośrednie. Klipy animacji są przedstawiane za pomocą rotacji. Zatem interpolacja liniowa nie jest tym, czego powinieneś używać, jeśli chcesz uzyskać dokładne wyniki (nawet jeśli używasz kątów Eulera). Możesz na przykład użyć slerp, ale istnieją bardziej złożone rozwiązania.

Jest to złożony problem ze złożonymi rozwiązaniami. Zasadniczo, jeśli masz dwie animacje klipy A i B:

  • Jeśli A i B są zupełnie inne (łączenie skoku i pływania), są szanse, że będziesz miał dziwne / śmieszne wyniki;
  • Jeśli A i B są podobne (dwa klipy animacji chodzenia), musisz je najpierw zsynchronizować, aby połączyć je, gdy na przykład obie lewe stopy są na ziemi.
  • itp.

Jeśli jesteś zainteresowany, sugeruję zacząć od przeczytania tego artykułu, aby lepiej zrozumieć, jakie są trudności: http://graphics.cs.wisc.edu/Papers/2003/KG03/regCurves.pdf

Nie jest to najnowsza wersja, ale jest łatwa do odczytania.

Mam nadzieję, że to pomoże. Z poważaniem.

Korchkidu
źródło
5

Po pierwsze, zakładam, że mówisz o animacji szkieletu (szczególnie grafiki 3D), ponieważ mieszanie animacji dotyczy tylko animacji szkieletu. Jeśli mówisz o animacjach opartych na sprite 2D (nie określiłeś tego w swoim pytaniu), możesz prawie zapomnieć o mieszaniu animacji.

Z tym na uboczu ...

Czy mam rację, myśląc, że mieszanie animacji to proces płynnego przechodzenia między nimi poprzez generowanie dynamicznych animacji w czasie wykonywania?

Tak właściwie to znaczy, tak. Jednak zwrot „generowanie dynamicznych animacji” jest nieco mylący; przywodzi na myśl animację proceduralną i nie jest to dokładnie to, co robisz.

„Mieszanie animacji” ma miejsce, gdy przechodzisz między dwoma klipami animacji przy użyciu odrobiny obu animacji, przy czym waga jednego klipu rośnie, podczas gdy waga drugiego klipu spada. Działa to najlepiej w przypadku animacji szkieletowej, dzięki czemu obrót każdego stawu jest ustawiony na środku między animacją tego stawu w dwóch różnych klipach animacji, przy czym waga każdego klipu zmienia się w czasie. Oznacza to, że obliczysz obrót każdego połączenia, na przykład:

rotCombined = weightA*rotA + weightB*rotB

Teraz, podczas gdy mieszanie animacji działa najlepiej z animacją szkieletową, możesz to również zrobić z animacją wierzchołków (np. MD2). Jest to raczej uwaga historyczna, ponieważ niewiele nowoczesnych silników do gier używa animacji wierzchołków, ale można ustawić pozycje wierzchołków w ten sam sposób, jako ważenie między pozycją wierzchołków w dwóch różnych animacjach. Może to spowodować dziwnie wyglądające interpolacje (np. Części siatki zapadające się lub wywracające na lewą stronę), jeśli dwie animacje byłyby zbyt różne, podczas gdy animacja szkieletowa zapewnia, że ​​różne części siatki pozostają całe.

jhocking
źródło
Kiedy mówisz, że nie możesz tego zrobić z grafiką 2D, masz na myśli animację opartą na ikonkach? Próbuję dowiedzieć się, jak mieszać niektóre animacje 2D utworzone w mecanim na podstawie położenia i obrotu poszczególnych części ciała, ale nie rozumiem, dlaczego nie jest to możliwe tylko dlatego, że są 2D.
mallardz
Ponieważ nie ma sposobu, aby wygenerować nowe klatki w animacji sprite. W animacji 3D poszczególne obrazy nie są generowane z wyprzedzeniem.
jhocking
Rozumiem, ale animacja 2D nie musi polegać wyłącznie na zmianie całego duszka. Możesz skomponować obiekt z wielu duszków i animować ich obrót i położenie itp. Próbowałem dowiedzieć się, jak to zrobić, kiedy przeczytałem twoją odpowiedź, a twój pierwszy wiersz zasmucił mnie :(! Ale na szczęście okazało się, że łatwe do zrobienia w Unity i nie wyobrażam sobie trudniejszego niż mieszanie 3D dla tych, którzy toczą własne silniki
mallardz
1
ah tak, miałem na myśli animację opartą na
ikonce, zredaguję