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?
Odpowiedzi:
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.
źródło