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ć?
Odpowiedzi:
Mieszanie animacji postaci jest bardziej ogólne i może być używane do:
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 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.
źródło
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 ...
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.
źródło