Dwanaście prac animatora
w projektowaniu gier komputerowych
Czy dwanaście żelaznych zasad animacji filmowej obowiązuje również w projektowaniu gier komputerowych?
Każdy, kto zetknął się z tworzeniem animacji, na pewno słyszał o słynnych dwunastu żelaznych zasadach animacji — the Principles of Animation. Sformułowali je weterani studia Disneya, Frank Thomas i Ollie Johnston, i opublikowali w książce The Illusion of Life w 1981 roku. Do dziś edukację animatora rozpoczyna się właśnie od tego zagadnienia.
Reguły te są ponadczasowe, ponieważ nie dotyczą stylizacji kojarzonej ze studiem Disneya i nie narzucają żadnych trendów w wyglądzie animowanych postaci. Dotyczą ludzkiej percepcji i pomagają stworzyć animację w taki sposób, aby nasz wzrok bez trudu łączył ze sobą pojedyncze rysunki, dając złudzenie płynnego ruchu.
Pytanie, na które odpowiada ten tekst, brzmi: czy zasady stworzone z myślą o filmie obowiązują również w tworzeniu animacji do gier komputerowych — miejsca, w którym o kadrze, tempie i kontroli nad postacią decyduje nie reżyser, lecz gracz? Każdą z dwunastu zasad sprawdzamy tu w konfrontacji z realnymi narzędziami i mechanizmami Unreal Engine.
Zgniatanie i rozciąganie
Squash and StretchW klasycznej animacji 2D i filmowym 3D animator ma niemal absolutną swobodę w deformowaniu kształtu postaci — pod jednym warunkiem: musi zachować jej całkowitą objętość. Gdy postać rozpłaszcza się o ziemię, staje się niższa, ale szersza. Nic nie znika i nic nie przybywa, tylko zmienia kształt. Dzięki temu widz odczytuje w obiekcie elastyczność i widzi siły, które na niego działają — a iluzja pędu i mocy uderzenia staje się dużo silniejsza.
Gry o stylizowanej oprawie graficznej mogą w prosty sposób zyskać wiarygodnie działające deformacje obiektów, tworzone za pomocą deformatorów Control Rig, takich jak Sculpt, Lattice Deformer czy Camera Space Lattice.
Antycypacja
Anticipation — przygotowanie do ruchuAntycypacja to przygotowanie widza na nadchodzącą akcję — ugięcie kolan i zamach przed oddaniem ciosu czy skokiem. Bez niej ruch w animacji 2D i 3D wygląda mechanicznie, płasko i bez mocy. Efekt ten świadomie wykorzystywano już na początku XX wieku, między innymi w filmie Podróż na Księżyc.
Przygotowanie do ruchu nie musi polegać wyłącznie na zmianie położenia — równie dobrze może odbywać się przez rotację i skalę. Świadczy o tym choćby pozorny morfing dwóch różniących się od siebie obiektów, rozpisany na zaledwie sześciu klatkach kluczowych: bez antycypacji wygląda jak zwykłe przejście, z antycypacją nabiera ciężaru i intencji.
W grach komputerowych, gdzie responsywność sterowania jest priorytetem, antycypację trzeba świadomie ograniczać. Gracz oczekuje natychmiastowej reakcji na swój ruch na padzie — dłuższy cykl przygotowania zostanie odebrany jako opóźnienie sterowania i zepsuje rozgrywkę. Dlatego przygotowanie do ruchu skraca się w animacji postaci gracza, a wydłuża w animacji przeciwników sterowanych przez sztuczną inteligencję (NPC) — dzięki temu ich intencje pozostają czytelne i dają graczowi czas na podjęcie własnej decyzji. Wiąże się z tym kolejna zasada.
Inscenizacja i kadrowanie
StagingW animacji filmowej inscenizacja to w całości decyzja reżysera: światło, kompozycja, prowadzenie wzroku widza dokładnie tam, gdzie tego chce. W grze to gracz decyduje, w którą stronę skieruje spojrzenie. Twórca gry nie narzuci już kadru, na który gracz ma patrzeć — może jednak zaprojektować postać tak, by pozostawała rozpoznawalna niezależnie od kąta, z jakiego się na nią patrzy. Przykładem jest Team Fortress, gdzie inscenizację przeniesiono z kompozycji kadru na poziom projektu postaci.
Ciekawym narzędziem dla animatorów jest wtyczka Odyssey firmy Praxinos. Wcześniej firma ta oferowała osobny produkt do storyboardów — EPOS — ale Odyssey ma znacznie szersze zastosowanie. To kompletny zestaw narzędzi 2D działający bezpośrednio w Unreal Engine: pozwala rysować, malować i animować klatka po klatce wewnątrz edytora, obsługuje warstwy rastrowe i wektorowe, onion skinning oraz automatyczne klatki pośrednie, a także adnotacje i szkice nanoszone wprost na sceny 3D. Dla inscenizacji najciekawsza jest możliwość budowania storyboardu w samym silniku, z gotowym poziomem gry jako tłem, i zamiany go w animatik lub sekwencję (Level Sequence). Dzięki temu kadrowanie planuje się od razu w docelowej przestrzeni — zamiast szkicować je osobno i dopiero potem przenosić do gry. Wtyczka jest darmowa, dostępna na Fab dla Unreal Engine 5.6+.
W grze inscenizacja przestała być domeną wyłącznie animatora — wymaga współpracy z level designerem oraz artystami odpowiedzialnymi za dźwięk, światło i efekty specjalne. Cała sztuka i wypełnienie tej zasady polega na kierowaniu uwagą gracza przy pomocy dostępnych narzędzi.
Straight Ahead Action i Pose to Pose
dwie techniki animowaniaW tradycyjnej animacji technika „straight ahead” polega na rysowaniu akcji klatka po klatce, bez wcześniej wyznaczonego celu — to najbardziej spontaniczna z technik. Animuje się w ten sposób długie włosy, odstające elementy ubioru i tym podobne: ruch wychodzi płynny i organiczny, choć trudny do opanowania, bo animator odkrywa go dopiero w miarę posuwania się naprzód. „Pose to pose” jest jej przeciwieństwem: najpierw powstają główne pozy kluczowe, a dopiero potem systematycznie wypełnia się przerwy między nimi (in-betweens — co często robi asystent animatora). Kosztem spontaniczności zyskuje się pełną kontrolę nad sceną.
Przez dziesięciolecia animacja w grach była cyfrowym odpowiednikiem tego drugiego podejścia. Maszyna stanów (State Machine) rozstrzygała, jak postać ma przejść ze stanu A, na przykład biegu, do stanu B, na przykład skoku — za pomocą zdefiniowanych przejść (crossfade) między stanami, a każdy stan mógł dodatkowo wewnętrznie mieszać animacje przez blend space. Problem w tym, że wraz z rozwojem projektu taka struktura robiła się coraz trudniejsza do opanowania. Każdy nowy ruch mnożył liczbę możliwych przejść.
Motion Matching odwraca tę logikę i jest bliższy właśnie technice „straight ahead” — tyle że napędza ją nie animator, lecz dane animacji. W Unreal Engine mechanizm ten działa we wtyczce Pose Search, stanowiącej alternatywę dla maszyn stanów i blend space’ów: dobiera potrzebne do animacji pozy z bazy danych bez konieczności ręcznego rozpisywania logiki przejść i ich blendowania. Zamiast mapować przejścia, animator dostarcza silnikowi jak największą bazę animacji. W trakcie rozgrywki, w czasie rzeczywistym, silnik buduje zapytanie złożone z dwóch części: z pożądanej trajektorii oraz z aktualnej pozy bohatera — która noga dotyka ziemi, jakie są wektory ruchu i prędkości poszczególnych kości — a następnie przeszukuje bazę w poszukiwaniu klatki, która najwierniej kontynuuje bieżący ruch.
Ta swoboda ma jednak swoją cenę. System jest mało odporny na wady w szkielecie: wymaga spójnej orientacji kości, poprawnie ustawionej osi „przodu” postaci i zgodności pozy referencyjnej między szkieletem a animacjami. Rozjazd na którymś z tych poziomów potrafi przekłamać kierunek ruchu. Dlatego, paradoksalnie, najbardziej „organiczna” i pozornie spontaniczna z technik animacji tradycyjnej w grach jest zarazem tą, która najmniej wybacza błędy u podstaw.
Podążanie za ruchem i zazębianie ruchu
Follow Through and Overlapping ActionNawet w animacji tradycyjnej to fizyka w czystej postaci: im masa postaci większa, tym więcej energii potrzeba, aby ją ruszyć z miejsca lub zatrzymać. Nic nie może zatrzymać się od razu, chyba że uderzy w ścianę — ale wtedy wkracza już squash and stretch, zasada numer jeden. Zwykła obserwacja wystarczy, by zauważyć, że gdy postać gwałtownie zatrzymuje się po biegu, elementy takie jak włosy, fragmenty ubrania, a nawet klatka piersiowa kontynuują ruch siłą rozpędu i wyhamowują z niewielkim opóźnieniem względem reszty ciała.
Przeniesiona wprost z filmu do gry, zasada ta zderza się z tym samym problemem co antycypacja: oczekiwanie na dokończenie animacji może zostać poczytane za brak responsywności.
Dla elementów takich jak włosy, spódnice czy długie uszy z pomocą przychodzi wtyczka Kawaii Physics, która działa na pojedynczym węźle AnimGraph, bez pełnej symulacji fizycznej silnika.
Użycie wtyczki jest tanie obliczeniowo, a efekt wystarczająco przekonujący, by rozwiązanie to znalazło zastosowanie w komercyjnych tytułach takich jak Stellar Blade czy Wuthering Waves. Jej ograniczeniem jest reagowanie wyłącznie na ruch i rotację szkieletu postaci, a nie na fizyczne przeszkody w świecie ani ciosy przeciwnika.
Dla reakcji obejmujących całe kończyny potrzebna jest wtyczka Physics Control, dostępna od Unreal Engine 5.1 i istotnie dopracowana w wersji 5.5: pozwala animatorowi zdefiniować dla wybranych kości fizyczne napędy typu spring-damper (parametry strength i damping) i regulować wagę blendu między symulacją Chaos a sztywnym szkieletem.
Akceleracja i hamowanie
Slow In and Slow OutPodobnie jak w poprzedniej zasadzie, punktem wyjścia jest fakt, że żaden organizm ani maszyna nie osiąga pełnej prędkości w ułamku sekundy ani nie zatrzymuje się w miejscu jak wryty. Stopniowe wchodzenie i wychodzenie z ruchu buduje wrażenie masy.
W grze problem polega na tym, że postać może zatrzymać się w dowolnym momencie, a animacja kroków ma z góry ustaloną długość. Najprostsze, ale już przestarzałe rozwiązanie — przyspieszanie odtwarzania animacji biegu proporcjonalnie do prędkości postaci — daje efekt widocznego poślizgu stóp.
Distance Matching zapobiega problemowi u źródła: zamiast dopasowywać animację do czasu, dopasowuje ją do dystansu — silnik wie, ile zostało postaci do zatrzymania, i wybiera dokładnie tę klatkę animacji, w której noga trafia we właściwe miejsce. Foot Lock, budowany na prostszym węźle Two Bone IK, działa już po fakcie: gdy stopa dotknie ziemi, zostaje do niej „przyklejona”, a reszta nogi dociąga się do tej pozycji, maskując ślizganie, które i tak by się pojawiło.
Można też stosować oba rozwiązania naraz — Distance Matching ogranicza problem, a Foot Lock łapie to, co jeszcze może się pojawić, zwłaszcza przy skrętach i przejściach między animacjami.
Ruch po łukach
ArcsRuch ciał — nie tylko organicznych — ma kształt łuku. Tak pracują stawy i pivoty w urządzeniach. Tymczasem sygnał z pada czy klawiatury to skok o dziewięćdziesiąt stopni bez żadnego stopniowania: zmiana kierunku z „prosto” na „w bok” następuje natychmiast. Próba rozwiązania tego problemu przez mieszanie animacji biegu naprzód i biegu w bok w zwykłym blend space 2D daje efekt żartobliwie nazywany „chodem kraba” — postać sunie po przekątnej bez żadnego ciężaru rotacyjnego, jakby ślizgała się bokiem.
Dziś problem ten rozwiązują dwa narzędzia pracujące razem. Orientation Warping obraca nogi i stopy tak, by trafiały we właściwy kierunek nowej ścieżki, podczas gdy kręgosłup koryguje ułożenie tułowia, żeby postać nie wyglądała na wykręconą. Steering z kolei płynnie „doprowadza” kierunek, w który faktycznie zwraca się ciało, do kierunku zadanego przez gracza — zamiast skoku o dziewięćdziesiąt stopni dostajemy łagodny łuk rozłożony w czasie.
Akcja drugoplanowa
Secondary ActionAkcja drugoplanowa to coś, co postać robi obok głównego ruchu. Stosuje się ją, żeby dodać postaci coś, co powie o niej więcej. Może to być poprawianie włosów w biegu, kołysanie torbą, balansowanie rękami na nierównym terenie. Problem w grze: jest mało prawdopodobne, aby ktoś chciał przygotować osobną animację na każdą kombinację — marsz z bronią, marsz bez broni, w deszczu, z tarczą…
Rozwiązaniem dla prostszych przypadków jest Layered Blend per Bone — mieszanie animacji osobno dla różnych partii szkieletu. Górna połowa ciała gra osobną animację (na przykład przeładowanie broni), a dolna w tym samym czasie porusza się niezależnie, sterowana przez Motion Matching czy zwykłą lokomocję. Nie trzeba nagrywać każdej kombinacji — wystarczy, że obie warstwy nałożą się na siebie.
Rytm i rozstaw klatek
Timing and SpacingTiming to czas potrzebny postaci na wykonanie danej czynności, liczony w klatkach. Spacing to sposób, w jaki klatki kluczowe animacji są rozstawione na osi czasu, przyspieszając lub zwalniając przebieg ruchu. Czas trwania zależy od masy postaci: ciężki, wielki stwór potrzebuje więcej czasu, żeby unieść ramię, niż zwinny bohater na zadanie swojego ciosu.
W grze walki ten prosty przepis nie zawsze działa dobrze, ponieważ długość animacji ataku to już nie tylko kwestia estetyki, ale część balansu rozgrywki: liczby klatek startu, aktywności i odzyskania kontroli. Wydłużenie animacji, żeby cios „wyglądał” ciężej i mocniej, może zepsuć ten balans.
Hit-Stop na ułamek sekundy zamraża klatkę w momencie trafienia — zderzenie nagle „zawiesza się” w powietrzu, zanim akcja wraca do normalnego tempa. Time Dilation robi podobną robotę, ale zamiast całkowitego zatrzymania gwałtownie spowalnia upływ czasu dla całej gry na moment uderzenia. Oba triki można połączyć z drganiem kamery i wibracją pada przy tym samym zdarzeniu trafienia.
Wyolbrzymienie
ExaggerationPodobnie jak w animacji filmowej, wyolbrzymienie — nieraz aż do przesady — jakiegoś ruchu lub kształtu służy podkreśleniu i zaakcentowaniu akcji, którą oglądamy na ekranie. W animacji do gier komputerowych zastosowanie znajdują tu wcześniej omówione triki: morfing elementów, projektowanie postaci i projektowanie samej rozgrywki. Zasada ta przestaje być domeną wyłącznie animatorów i staje się elementem, nad którym pracują również pozostali członkowie zespołu.
Bryła i objętość
Solid DrawingW klasycznej animacji ta zasada dotyczy tworzenia rysunkowych postaci w płaskiej przestrzeni w taki sposób, aby sprawiały wrażenie posiadania trzeciego wymiaru — realnej objętości i punktu oparcia. W grze 3D problem wraca w najbardziej dosłownej postaci: jeśli stopa postaci na schodach czy pochyłości zatopi się w kamieniu albo zawiśnie w powietrzu, wygląda to słabo.
Unreal Engine rozwiązuje ten problem systemem, który sprawdza teren, zanim pokaże klatkę na ekranie. Slope Warping — węzeł z tej samej rodziny co Stride i Orientation Warping — działa w parze z prostym IK nóg. Dzięki temu jedna, zwykła animacja chodu wystarcza na płaskim terenie, schodach i pochyłościach naraz — nie trzeba nagrywać osobnej animacji na każdy kąt nachylenia, a postać zawsze wygląda, jakby faktycznie dotykała ziemi. Silnik koryguje trzy rzeczy naraz: obniża miednicę, jeśli jedna noga stoi wyżej niż druga, ugina kolano nogi wchodzącej pod górę i przekręca samą stopę, żeby jej spód przylegał do nachylonego terenu.
Atrakcyjność
AppealW skrócie: i w filmie, i w grze chcemy, aby postać mogła w pełni być częścią świata, jaki dla niej stworzyliśmy. Dzieje się tak, jeśli animacja naszej postaci łączy w sobie wszystkie jedenaście wcześniejszych zasad, bez błędów, które zniszczyłyby jej wiarygodność. Appeal to charyzma postaci — jej sylwetka, sposób chodzenia, wszystkie drobne animacje, które pozwalają odróżnić ją od innych. To wszystko sprawia, że zapada w pamięć gracza.
Przy projektowaniu gier, dla oszczędności pracy i pamięci, dziesiątki różnych postaci mogą dzielić ten sam zestaw animacji. Rozwiązaniem w architekturze Motion Matching jest system Choosers i Proxy Tables — mechanizm, który zamiast sztywno zaszytej logiki „jeśli-to” pozwala kontekstowo podmieniać źródło animacji w locie. Gdy postać dostaje status „ranny” albo „zmarznięty”, Chooser wychwytuje tę zmianę i podmienia bazę animacji, z której korzysta Motion Matching, na inną — zgarbioną sylwetkę i powłóczącą nogę. To wszystko bez przepisywania grafu animacji od nowa. Ten sam szkielet i ten sam system potrafi więc zachowywać się zupełnie inaczej w zależności od kontekstu, co realnie oddaje jednostkowy charakter postaci mimo współdzielonych zasobów.
Dwanaście zasad Thomasa i Johnstona przetrwało wszystkie te lata, ponieważ trafnie nazwały problemy, z jakimi mierzy się każdy animator. Te problemy nie znikają wraz ze zmianą technologii. Grafika komputerowa nie zastąpiła animatora inżynierem — zmieniła tylko medium, w którym animator, obok ołówka i kartki papieru, sięga dziś po blueprinty i krzywe interpolacji klatek kluczowych.
Panel pytań i odpowiedzi
Publikacja towarzyszy prelekcji o tym samym tytule. Jeśli po lekturze zostały pytania — o konkretną zasadę, o wtyczkę Unreal Engine albo o to, gdzie te dwie dziedziny się jeszcze rozjeżdżają — to jest właśnie ten moment.
Zadaj pytanie autorowiAUTORA
Grzegorz Proniewski
Autor tekstu i prelekcji „Dwanaście prac animatora w projektowaniu gier komputerowych”. Miejsce na notkę biograficzną — dorobek, afiliacje, linki do portfolio.