1 / 37

system do animacji postaci w grach komputerowych

system do animacji postaci w grach komputerowych. plan prezentacji. ważne pytania cele systemu animacji obliczanie klatki interpolacja graf animacji zapętlanie animacji przejścia wyzwalacze wdrażanie animacji i przykładowe rozwiązanie. ważne pytania.

naida-vang
Download Presentation

system do animacji postaci w grach komputerowych

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. system do animacji postaci w grach komputerowych Rafał Rudnicki Vertex 2010

  2. plan prezentacji • ważne pytania • cele systemu animacji • obliczanie klatki • interpolacja • graf animacji • zapętlanie animacji • przejścia • wyzwalacze • wdrażanieanimacji i przykładowe rozwiązanie Rafał Rudnicki Vertex 2010

  3. ważne pytania • czy będziemy korzystać z motion capture? czy tylko animacje tworzone ręcznie? • czy interesuje nas fizyka animacji / efekty IK? • czy postać będzie składała się z kilku siatek? • czy chcemy mieć jej bounding-boxa i czy ma być to AABB czy OBB? • czy chcemy mieć ładne przejścia między animacjami? czy sami je zrobimy? • czy chcemy mieć animacje proceduralne (np. postać chodzi ale mierzy ręką w stronę wroga)? Rafał Rudnicki Vertex 2010

  4. cele systemu animacji • animacja oparta o animację kości • oddzielenie wyglądu siatki od jej animacji • łatwe dodawanie obsługi animacji postaci do istniejącego kodu gry 3D • oddzielenie animacji od logiki animacji • umieszczene animacji i logiki animacji w zasobach tak, by unikać potrzeby rekompilacji kodu gry • proste sterowanie animacją Rafał Rudnicki Vertex 2010

  5. cele systemu animacji (2) • płynna animacja • (maksymalne) wykorzystanie GPU Rafał Rudnicki Vertex 2010

  6. animacja • animowane modele = model + animacja • dla podejścia mesh skinning (w tym SSD) kluczowy jest szkielet • szkielet = pozycje i orientacje kości + hierarhia kości Rafał Rudnicki Vertex 2010

  7. obliczanie klatki animacji • w pliku - jak trzymać kości? • w przestrzeni rodzica • w przestrzeni modelu • przestrzeń rodzica: • lepsza interpolacja międzyklatkowa w przypadku łańcuchów kości (uwzględnia obrót rodzica) • szkelet przetwarzany BFS/DFS od korzenia – słabe zrównoleglanie • przestrzeń modelu • można przetwarzać równolegle • nie umożliwia efektów typu IK liczonych realtime • jeżeli nie potrzebne nam IK to oszczędzimy sporo mocy Rafał Rudnicki Vertex 2010

  8. obliczanie klatki animacji (2) • skąd pochodzą dane: • z pliku • z modułu fizyki / AI • z mixu różnych źródeł • liczy się aby co klatę otrzymać zestaw macierzy • dobry system animacji nie rysuje niczego – zestaw końcowych macierzy (+ inne dane) wystarcza = przenośność i elastyczność Rafał Rudnicki Vertex 2010

  9. obliczanie klatki animacji (3) • geometria dopasowuje się do szkieletu • SSD (Skeletal Subspace Deformation) • uwaga na błędy na łokciu / kolanie Rafał Rudnicki Vertex 2010

  10. obliczanie klatki animacji (4) • w praktyce wystarczają max. 4 kości na wierzchołek (tak zrobił ID Software w MD5) co bardzo cieszy GPU • animacja dzieje się w Vertex Shaderze np. GLSL: skinned_position += weights.x * (boneMatrices[int(matrixIndices.x)] * gl_Vertex); skinned_position += weights.y * (boneMatrices[int(matrixIndices.y)] * gl_Vertex); ... Rafał Rudnicki Vertex 2010

  11. interpolacja klatek • dane animacji mają skończoną dokładność • mając dane dot. klatki m i n musimy: • obliczyć chwile tn i tm odpowiadające tym klatkom • obliczyć w jakim stopniu (0 – 1) zmiksować dane • potrzeba przechowywać dane m i n • wraz ze zmianą klatki obliczać tylko te, które nie są jeszcze wyliczone/które się zmieniły • być może m i n będą dotyczyć różnych animacji Rafał Rudnicki Vertex 2010

  12. interpolacja klatek (2) Rafał Rudnicki Vertex 2010

  13. interpolacja klatek (3) Rafał Rudnicki Vertex 2010

  14. interpolacja klatek (4) Rafał Rudnicki Vertex 2010

  15. interpolacja klatek (5) • efekt interpolacji międzyklatkowej: • płynniej • mniejsza ilość danych (do 8x niezauważalna) • mniejsza szczegółowość animacji Rafał Rudnicki Vertex 2010

  16. interpolacja klatek (6) • macierze czy inne reprezentacje? • (w SSD) przed wysłaniem należy przemnożyć przez odwrotną macierz kości w rest pose Rafał Rudnicki Vertex 2010

  17. interpolacja klatek (7) • macierze: • 3x4 lub 4x4 „dobre” dla GPU • słabo się intepolują (liniowo wzór jest skomplikowany, w praktyce nie da się bez konwersji na inne typy) • wektor pozycji + wektor Eulerowski / axis-angle: • „dobre” dla GPU • słabo interpolowane (błędy) • wektor + kwaternion • przed wysłaniem do GPU należy przerobić na macierz • bardzo dobrze interpolowane (lerp + slerp) Rafał Rudnicki Vertex 2010

  18. interpolacja klatek (8) • pozycja – interpolowana liniowo (lerp, mix) – zachowanie prędkości liniowej • orientacja – interpolowana sferycznie (slerp, mix) – zachowanie prędkości kątowej Rafał Rudnicki Vertex 2010

  19. grafy animacji • typowa gra akcji: • stanie, bieg do przodu, odskok do tyłu, chodzenie do przodu, skakanie, pochylenie się, chodzenie pochylonym, krok w prawo / lewo, atak bronią palną, atak bronią krótką, zmiana broni, radość po zabiciu, przeżywanie bólu, śmierć • dla gracza liczy się zarówno jakość animacji jak i czas trwania przejścia • „wojny” o to, by w FPP przejścia były krótkie – zmiana broni w Quake III to 0.6s Rafał Rudnicki Vertex 2010

  20. grafy animacji (2) • prosty przykład: • ile trwa „oryginalna” animacja walk/stand_cycle? • ile może trwać? Rafał Rudnicki Vertex 2010

  21. zapętlanie animacji (cykle) • w zależności od źródła danych: • jeżeli animację tworzymy ręcznie to mamy szansę ją idelanie zapętlić • jeżeli źródłem jest motion capture to nie • tak samo przy animacjach proceduralnych Rafał Rudnicki Vertex 2010

  22. zapętlanie animacji (cykle) (2) • rozwiązanie – self fading (wygładzanie) • musimy je robić od pierwszego przejścia przez koniec pętli(podczas pierwszego przejścia przez początek pętli jest dobrze) • parametr - długość Rafał Rudnicki Vertex 2010

  23. zapętlanie animacji (cykle) (3) Rafał Rudnicki Vertex 2010

  24. przejścia • gracz naciska klawisz (wyzwalacz) → • animacja dochodzi do pewnego momentu (może być natychmiast) → • (opcjonalnie) odgrywane jest przejście do nowego stanu animacji → • odtwarzana jest nowa animacja Rafał Rudnicki Vertex 2010

  25. przejścia (2) • automatyczne wyznaczanie przejść w systemach opartych o motion capture • skomplikowane.. ;/ Rafał Rudnicki Vertex 2010

  26. przejścia (3) • problem: ile to trwa? czy jest grywalne? • po podzieleniu cyklu na kilka części można szybciej dojść do przejścia • np. prawa-lewa noga, lewa-prawa noga dla chodzenia • idealnie pozwolić na natychmiastowe odtwarzanie przejścia • ale w wielu przypadkach źle to wygląda • skomplikowanie (ilość animacji/przejść) ~ 1/jakość Rafał Rudnicki Vertex 2010

  27. przejścia (4) • problem 2: nie da się natychmiast przejść z animacji leżenia do animacji biegania • problem 3: nie da się z biegu natychmiast zatrzymać Rafał Rudnicki Vertex 2010

  28. przejścia (5) • cześć przejść można wyliczyć, część trzeba samemu stworzyć • dla animacji mocap można je łatwo „zdobyć” • efekt: • przejść jest duuużo • animacje cykli muszą być porozdzielane na wiele kawałków • należy stworzyć graf legalnych przejść pomiędzy węzłami (logika animacji) • ciężko to utrzymać i sporo się trzeba napracować Rafał Rudnicki Vertex 2010

  29. przejścia (6) • parametry: • długość (czasem definiuje początek i koniec) • charakterystyka czasowa Rafał Rudnicki Vertex 2010

  30. przejścia (7) Rafał Rudnicki Vertex 2010

  31. wyzwalacze • kiedy przejść? • input od gracza • fizyka • AI • koniec animacji • funkcja bool fun(void) – wyzwalacz • rejestracja wyzwalaczy – mapa <string, callback> Rafał Rudnicki Vertex 2010

  32. wyzwalacze (2) • kiedy przejść? • zaraz po naciśnięciu • odczekać do przejścia • co jeżeli wyzwalacz został uruchomiony po idealnym momencie? • przejść z mniejszą długością • czekać na następny Rafał Rudnicki Vertex 2010

  33. wdrażanie animacji do gry np. Blender: • stworzenie modelu / animacji • być może skorzystanie z animacji mocapowych • eksport do wybranych formatów (opcjonalny edytor:) • stworzenie przejść • stworzenie logiki przejść (grafu) silnik gry / kod gry: • uaktualnianie pozy • wyświetlanie Rafał Rudnicki Vertex 2010

  34. wdrażanie animacji do gry (2) • przykładowy eksporter Rafał Rudnicki Vertex 2010

  35. wdrażanie animacji do gry (3) edytor Rafał Rudnicki Vertex 2010

  36. wdrażanie animacji do gry (4) pSModelData md = loadModelDataFromFile("ludwig.model"); model = createModelFromModelData(md); pSGraphDatagd = loadGraphDataFromFile("ludwig_walk-run_lowres_2.graph"); pSGraph graph = createGraphFromGraphData(gd); pSAnimation animation = createNullAnimation(); setAnimationGraph(animation, graph); setAnimationSource(animation, AnimationSource::GRAPH); setAnimationStartND(animation, "walk_passing P-L"); registerTransitionTrigger("KEYUP_A", checkKeyUpA); registerTransitionTrigger("KEYDOWN_A", checkKeyDownA); ... setAnimationState(animation, AnimationState::PLAY); Rafał Rudnicki Vertex 2010

  37. wdrażanie animacji do gry (5) // kod w pętliczasu ... advanceAnimation(animation, time - lastTime); updateModel(animation, model); ... // kod w funkcji wyświetlającej ... glLoadIdentity(); drawAnim(model, transformMatrix); ... Rafał Rudnicki Vertex 2010

More Related