Popularny sposób animacji „ruchu” dla animacji cyklu marszu

13

Właśnie zamieściłem to na forach artystów Blendera, zanim zdałem sobie sprawę, że prawdopodobnie otrzymam lepszą odpowiedź od odbiorców bardziej związanych z tworzeniem gier, więc przepraszam za zamieszczanie postów! To z właściwych powodów :)

Jestem programistą próbującym ożywić postać idącą do projektu gry, używając Ogre. Zrobiłem bardzo prosty cykl marszu w Blenderze i wyeksportowałem go do Ogre, i gra w porządku. W porządku, mam na myśli, że to działa, ale straszne ślizganie się stopy. Wynika to z tego, że właśnie animowałem spacer w miejscu (u źródła) w Blenderze i oczywiście nie wiem, jaka to „prędkość spaceru” odpowiada, więc kiedy poruszam postacią w grze, ruch nie jest niekoniecznie musi pasować do ruchu stóp w animacji.

Więc moje pytanie brzmi: jakie jest normalne podejście do tego rodzaju rzeczy? W pracy używamy Mayi, a animatorzy animują specjalny węzeł „moveTrans”, który reprezentuje „pozycję” postaci (lub zlecają eksporterowi wygenerowanie jej dla nich z ruchu węzła głównego), a następnie gra może to przeczytać aby wiedzieć, jak szybko animacja porusza postacią. Tak więc w pliku Majów postać pójdzie naprzód o jeden cykl, a ten dodatkowy węzeł podąży za nimi wraz z nogami. Nie widziałem czegoś takiego w krainie open source i na pewno nie ma na to żadnego przepisu w skrypcie Ogre Exporter. Co zwykle robicie dla tego faceta?

Ben Hymers
źródło
1
Oto dyskusja z fantastycznymi objaśnieniami pojęcia: blog.wolfire.com/2011/08/…
Ben Hymers

Odpowiedzi:

10

Można to zrobić na dwa sposoby: rootowanie lub „w kodzie”.

W przypadku ruchu root masz dokładnie to, co sugerujesz w węźle „moveTrans”. Ruch tego obiektu służy do określania szybkości odtwarzania cykli marszu. Być może będziesz w stanie przeprowadzić wyszukiwanie wsteczne, aby dowiedzieć się, że jeśli chcesz być w pozycji X, w jakiej klatce musisz być. Ale prawdziwą zaletą ruchu root jest to, że aby uzyskać naprawdę realistyczne animacje, należy wziąć pod uwagę fakt, że ruch nie jest prawdziwą ścieżką liniową. Prawdziwi ludzie poruszają się ze zmienną prędkością w czasie, a może tasują trochę w lewo i prawo, czy cokolwiek innego.

Mixamo zrobił dobry przykład z kontrolą ruchu korzenia za pomocą Unity. Tutaj jest wideo: http://vimeo.com/12052874

Teraz ruch root ma swoje wady. Może to być trudne z takimi rzeczami, jak próba zmuszenia animacji „chodzenia” do pracy na schodach (idealnie byłoby mieć osobną animację wspinania się po schodach / drabinie i wykonywać cały ruch w tym celu również w animacji). Nie jestem też do końca pewien, jak IK naprawdę się w to gra, jeśli w ogóle.

Teraz robienie tego „w kodzie” jest o wiele łatwiejsze od strony programowania. Sugeruję, aby najpierw upewnić się, że wszystkie jednostki są spójne. Na przykład 1 jednostka w Mayi, a gra ma 1 metr. Następnie zachęcasz artystów do animowania chodzącej postaci (wraz z ruchem do przodu). Użyj tego, aby obliczyć szybkość animacji i wyeksportować animację bez prędkości do przodu. Użyj tego, aby dowiedzieć się, jak szybko odtworzyć animację. Jeśli więc animacja marszu z prędkością 1x wynosi 5 m / s, a chcesz, aby odtwarzacz biegł z prędkością 7 m / s, po prostu odtwarzaj z prędkością 7/5 = 1,4x. Jeśli Twój model jest skalowany w górę lub w dół, pomnóż szybkość odtwarzania animacji przez odwrotność skali. Facet z połowy wysokości będzie musiał przejść dwa razy szybciej, aby poruszać się z taką samą prędkością, jak facet w skali 1x.

Tetrad
źródło
Nie widziałem Root Motion Computer od Mixamo, ani nie słyszałem, żeby to tak nazywało, więc dziękuję za link i wyjaśnienie! Zasadniczo jest tak, jak myślałem, albo ożywaj to jawnie, albo automatycznie generuj, albo w czasie kompilacji, albo w czasie wykonywania. Chyba będę musiał to sam zakodować w skrypcie eksportera. Jedną z rzeczy, które teraz mega mnie mylą, jest ruch, który zmienia się w trakcie jednego cyklu - jak, u licha, chciałbyś go oderwać od gry? „Poruszanie się z prędkością 5 m / s” oznacza teraz coś innego… A zmiany kierunku będą koszmarem dla AI! Być może najlepiej zastosować ruch ageracyjny?
Ben Hymers
Zabrakło znaków; Zaczekam chwilę, zanim oznaczę to jako zaakceptowane, aby uzyskać więcej opinii. Dziękuję za odpowiedź!
Ben Hymers
W przypadku ruchu root nie kontrolujesz bezpośrednio prędkości odtwarzacza. Tak naprawdę masz kontrolę nad odtwarzaniem szybkości animacji, a następnie pozwalasz animacji na bezpośrednią kontrolę nad wartością z przodu. Podany przeze mnie przykład 5 m / s dotyczył tradycyjnego sposobu rozwiązywania przesuwania stopy, polegającego na dopasowaniu szybkości odtwarzania do prędkości poruszania się i przy założeniu stałej prędkości.
Tetrad
Jako programista rozgrywki to brzmi jak kompletny koszmar :) Kontrolujesz animatorów nad czymś tak ważnym, jak prędkość ruchu czegokolwiek animowanego? Nie, dziękuję! Wolę wyodrębnić informacje, aby je odwrócić i ustawić szybkość odtwarzania animacji na podstawie prędkości ruchu, a nie odwrotnie. Dlatego ruch nieliniowy wprawia mnie w zakłopotanie i być może jest to dobry powód, aby zrobić to na odwrót.
Ben Hymers
Gah, przeklinaj Stack Exchange za wpisanie komentarza o próbie rozpoczęcia nowej linii ... Już miałem powiedzieć, że nawet jeśli pozwolisz animacji sterować ruchem, nadal będzie to problem np. Dla postaci AI. Co jeśli próbują dojść do punktu, ale ich animacja ruchu skleja się z boku na bok (powiedzmy, że jest to pijana animacja zataczania się)? Skąd mogą wiedzieć, w którą stronę skierować się?
Ben Hymers