Warsztat.GDCompo!ProjektyMediaArtykułyQ&AForumOferty pracyPobieranie

Opisz napotkaną sytuację, a redakcja niezwłocznie znajdzie rozwiązanie!

wyślij anuluj

Kontroler animacji

Kontroler animacji steruje pracą obiektów, używając danych animacji i programu w specjalnym formacie opisującego animację. Następny krok: interaktywny kontroler animacji, reagujący na zdarzenia.


  • Daniel Krakowiak (@IcyTower) 08 lutego 2015 21:02
    Wow, Świetne! Animacja wygląda na dużo lepszą niż w dzisiejszych grach. Mógłbyś opowiedzieć trochę więcej o tym?
  • Tomasz Dąbrowski (@Dab) 08 lutego 2015 23:35
    Chętnie. Ale od razu zastrzegam, że żaden ze mnie ekspert jeżeli chodzi o animacje. To mój pierwszy projekt gdzie wziąłem się za nie na poważnie. :)

    Z tymi dzisiejszymi grami to bym nie przesadzał. Jest sporo takich które wyglądają obłędnie jeżeli chodzi o animacje (np. ostatni Tomb Raider) i które pokazują jak duży podstęp mamy w temacie.

    Zrobić podstawową animację szkieletową jest stosunkowo łatwo. W zasadzie wystarczą dwie animacje - stania w miejscu i chodzenia - żeby za pomocą zapętlenia i blendingu można było zasymulować szeroki zakres ruchów. Prosto to zakodować, nie potrzeba wielu assetów, ale nie wygląda to niestety zbyt naturalnie. Szczególnie łatwo to zauważyć obracając się w miejscu - sporo gier (nawet starszych AAA) po prostu obraca postać wokół osi Y bez wykonywania żadnych ruchów.

    Ja tutaj próbowałem trochę innego podejścia z użyciem większej liczby animacji. Zamiast blendować podstawowe ruchy, użyłem animacji w wielu wariantach: ruszanie na wprost, ruszanie o 90 w prawo, zwrot o 180 stopni itp. Wygląda to znacznie lepiej i naturalniej, niestety są dwa poważne problemy. Pierwszy to dostępność materiału źródłowego. Używam teraz około setki animacji i mimo obsługi wielu różnych ruchów wciąż znajduje przejścia które są problematyczne. A jeżeli chcemy mieć swobodny ruch w 360 stopniach to od tego nie uciekniemy.

    Ale to akurat jest mniejszy problem. Największą przeszkodą są lagi w sterowaniu. Weźmy na przykład animację chodzenia. Trwa ona u mnie sekundę i dzieli się na 2 fazy (na początku lewa noga w górze, w połowie prawa noga w górze, na końcu znowu lewa w górze i animacja się zapętla). Teraz tak: mam dwa warianty animacji zatrzymania w miejscu, od lewej i od prawej nogi. Ale co jeżeli jestem np. w 0.7s pętli? Muszę albo dociągnąć te 0.3s do końca, albo blendować. A to i tak dość łatwy przypadek - co jeżeli np. robimy zwrot o 180 stopni?

    Wszystko zależy od rodzaju gry. Gdybym robił grę klikaną (jak w dawnych przygodówkach) to użyłbym tego systemu w tej formie, bo po pierwsze opóźnienia mniej rzucałyby się w oczy, a po drugie znając z góry ścieżkę animacji można sobie kompensować poszczególne segmenty (np. przyspieszenie animacji o 1% żeby trafić w miejsce docelowe z dokładnością co do piksela). "Niestety" robię grę w której steruje się postacią bezpośrednio i nigdy nie wiem jaki będzie za chwilę input gracza. Dlatego póki co ten system stosuję tylko częściowo, a przez resztę czasu używam zwykłego blendowania. W przyszłości na pewno będę chciał rozbudować ten system, ale jest milion innych rzeczy do zrobienia w grze i bardzo ograniczona ilość czasu na nie. ;)
  • Daniel Krakowiak (@IcyTower) 09 lutego 2015 19:04
    Dzięki za pełną odpowiedź! System działa bardzo fajnie. Ale pewnie przygotowanie tylu animacji jest ciężkie. Co do łączenia niektórych animacji to nie są to raczej wady Twojego systemu. Co zrobić skoro nie wiesz jak długo ktoś będzie szedł naprzód? Gdybyś to wiedział mógłbyś postawić np. mniejszy krok. Sam nie wiem.. W każdym razie, kawal dobrej roboty :)
  • Maurycy Zawistowski (@Harvester) 15 lutego 2015 15:41
    Ładnie to wygląda, tworzysz animacje na podstawie nagrań z kamer ? Chodzi mi o bodajże swego rodzaju motion capture. Może dodałbyś przy animacjach specjalne berakpointy na których animacja może się zatrzymać, albo z nich płynnie przejść do innej opcji. W sumie ruch ciała przy bieganiu jest symetryczny, można byłoby robić animację np. biegania i po jej ukończeniu uruchamiać nową symetryczną, wtedy przejście z biegu do nawrotu o 180st zależne byłoby tylko od tego czy ostatnia animacja była normalna czy symetrycznie odwrócona. Wtedy zależnie od animacji postać zawracałaby w lewą stronę lub w prawą :)
  • Tomasz Dąbrowski (@Dab) 26 lutego 2015 10:31
    Te animacje kupiłem na Unity Asset Store, podejrzewam że bazują na mocapach. Akurat zawracanie jest już przygotowane do startu w obie strony, ale to dalej jakieś ~0.4s opóźnienia w najgorszym przypadku. Nie ma lekko! :)
  • Napisz komentarz:
    Aby dodać swój komentarz, musisz się zalogować.
Screen dodał:
Tomasz Dąbrowski
05.02.2015 15:36:43

Projekt:
G&D

Kategoria:
Algorytm naukowy/inżynierski

Punkty:
726

Ocenili na plus:

Warsztat używa plików cookies. | Copyright © 2006-2017 Warsztat · Kontakt · Regulamin i polityka prywatności
build #ff080b4740 (Tue Mar 25 11:39:28 CET 2014)