Animacja 3D

Opis i założenia przedmiotu

Ten wykład i cały przedmiot jest przygotowany dla osób, które trochę już znają grafikę komputerową tworzoną w Blenderze. Najlepiej skończyć kurs Grafika 3D (cały semestr), który prowadzę w ramach innego przedmiotu. Czasami trafia się grupa źle zapisana, z powodów logistycznych lub niektóre osoby trafiają "przypadkiem". Stanowi to duży problem, ponieważ na tym przedmiocie, już na pierwszych zajęciach mówimy o ANIMACJI, a zatem trzeba znać przynajmniej podstawy - umieć poruszać się po programie, dodawać/edytować obiekty, itp. Jeżeli wymaga tego bardzo wiele osób, czasami robię dodatkowe zajęcia "wyrównawcze", ale tacy, którzy nic nie ogarniają są niestety niemile widziani, ponieważ będą się męczyć, i hamować resztę grupy, która wchodząc ma odpowiednie przygotowanie. Po prostu - zapamiętaj: NIE zaczyna się nauki matematyki od całek i różniczek, tylko od prostych podstaw! I tu właśnie tak jest. Jest to przedmiot, który jest KONTYNUACJĄ innego przedmiotu. Jeżeli jesteś początkujący i nie znasz grafiki, rozważ proszę wybór najpierw grafiki.

O czym jest tu mowa

W programie, który czasami realizuję (mniej lub bardziej w pełni) są następujące zagadnienia:

Wstęp

Przypominam, jak pracować w Blenderze. Nawet mimo założenia, że przedmiot jest dla obytych i zaznajomionych, zawsze warto pewne rzeczy wspomnieć. Czasami także ostatnie zajęcia z Grafiki były dość dawno (dzielą je np. wakacje), i program sam z siebie zmienił się trochę, więc warto pokazać i omówić wersję z którą będziemy następnie pracować. Tego typu zajęcia pozwalają mi się lepiej zorientować kogo mam w sali lub w grupie - i na jakim poziomie możemy rozmawiać.

Podstawy animacji opartej o klatki kluczowe

Omawiam tutaj pierwsze najważniejsze elementy i ustawienia Blendera dotyczące pracy z animacjami. Poznajemy następnie ideę "klatek kluczowych", odnoszę się czasem do historii animacji oraz technologii, które zostały wypracowane już wiele lat temu w studiach np. Disneya. Ćwiczenia, które wykonujemy na tym etapie to proste zarządzanie jednym lub kilkoma niezależnymi parametrami, takimi jak położenie lub rotacja lub skala obiektu, do wykonania jakichś jego zmian lub ewolucji w czasie. Najprostszy przykład to np. animacja klocka przesuwanego po X z pozycji -10 do +10. Tłumaczę wtedy na czym polega interpolacja, poznajemy też zachowanie Blendera, który automatycznie dodaje przejściowe zmiany prędkości (ease-in, ease-out). Próbujemy także powalczyć z tym tworząc ruch po okręgu, za pomocą klatek kluczowych dodawanych do położenia w dwóch osiach. Bardziej zaawansowanym grupom, które dobrze ogarniają ten materiał daję czasami trudniejsze zadania, np. zrobienie ruchu rakiety w pełnej przestrzeni 3-wymiarowej (trzeba kontrolować 3 osie oraz czas). Zwykle jest tyle roboty i materiału na tych zajęciach, że nie wystarcza go na nic innego.

Kontrola ruchu za pomocą edytorów klatek kluczowych

Są to jedne z kluczowych zajęć. Uczymy się na nich, jak zrobić animację piłki spadającej ze schodów, w taki sposób, aby piłka podskoczyła kilka razy, oczywiście tocząc się. Chodzi też o to, jak podejść do zadania, w przypadku, gdy mamy zabronione zjawisko poślizgu, zatem trzeba jakoś sprytnie wyliczyć obroty piłki i skorelować je z przesuwaniem się jej w co najmniej dwóch osiach. To klasyczne zadanie jak się okazuje, wymyśliłem je jednak sam. Potem dopiero zobaczyłem, że pojawia się ono na wszystkich bez mała kursach animacji. Zadanie to jest rozbudowane o analizę ruchu oraz sposoby edycji krzywych ruch w edytorze Graph Editor (kiedyś IPO Curves o ile pamiętam). Uczymy się jak zmieniać charakter ruchu, kontrolować przyspieszenia i opóźnienia, i jak zbudować poprawnie zjawisko rzutu ukośnego, z którym mamy tutaj do czynienia. To fajne, dobre i bardzo wdzięczne zadanie, ponieważ w pewien sposób oh4warza nawet wykresy ruchu. Dochodzi do tego kontrola uchwytów krzywych oraz różne rodzaje interpolacji krzywych, wracamy także do tematu poprzedniego - ruchu po okręgu i ustalamy co w tym ruchu jest ważne. Jeżeli grupa jest na to gotowa, pokazuję także jak zrobić ruch zapętlony w nieskończoność, a gdy jeszcze nie mają ludzie dosyć i jest na to czas - omawiamy modyfikatory krzywych ruchu, które przydają się do generowania ruchu opartego o wzory matematyczne lub losowość. Czasami jednak nie mówię o modyfikatorach krzywych na tym etapie, bo zadanie z ruchem kuli jest dla niektórych wystarczająco trudne.

System więzów

Zachęcam na tym etapie ludzi do zrobienia animacji małego Układu Słonecznego w formie gwiazdy centralnej, jednej planety krążącej wokół niej z jednym księżycem. Taki mały układ studenci są już w stanie zrobić, natomiast czai się w tym pułapka. Chodzi o nachylenie orbity księżyca do płaszczyzny ekliptyki. Gdy wszystko porusza się w jednej płaszczyźnie, nie ma problemów. Jeżeli jednak chcemy, aby orbity były nachylone pod jakimś kątem, napotykamy na pierwszy przejaw problemu Gimbal Lock. Opowiadam wtedy o tym zjawisku, wspominam Williama Hamiltona który opracował transformacje obrotu w przestrzeni 3D i badamy zjawisko rotacji i jej wpływu na orientację. Bardziej zaawansowane grupy, które trochę rozumieją matematykę wzbogacam o temat kwaternionów, a z naprawdę zaawansowanymi możemy nawet przyjrzeć się macierzom rotacji, aby zrozumieć, dlaczego rotacje o taki sam kąt ale w różnej kolejności osi mogą prowadzić do różnych orientacji. Tego typu zajawka normalnie wystarcza na osobne zajęcia, ale nie koncentrujemy się na tym zbytnio, ponieważ czas poznać Contraints. Pokazuję, jak można skopiować ruch jednego elementu do drugiego elementu, dzięki czemu wystarczy zrobić animację tylko jednego obiektu, aby inne mogły z tego korzystać. Budujemy prosty statyw fotograficzny na którym umieszczona jest kamera, która automatycznie śledzi ruch dowolnego poruszającego się obiektu (TrackTo). Wtedy także przydaje się rozumienie problemu blokady przegubu (Gimbal Lock). Opracowujemy następnie element koła od parowozu z korbą, które poruszane jest przez obiekt Empty, na który nałożona jest rotacja. Cała reszta elementów tworząca przegub korbowy ma poruszać się z wykorzystaniem tej rotacji. Jednym obiektem zatem sterujemy, a na scenie rusza się wszystko. Czasami daję tutaj zadanie takie jak zrobienie konwersja ruchu obrotowego na ruch po kwadracie lub zachęcam do zrobienia strzałek, które z różną prędkością "patrzą" za wskazywanym obiektem. Możliwości jest tutaj sporo. Ciekawym zadaniem jest animacja platformy jadącej po wałkach, które obracają się w kierunku ruchu. Ich ruch posuwisty jest jednak oczywiście wolniejszy niż platformy, która przesuwa się po nich. Takie układy doskonale sprawdzają się w animowaniu maszyn, fabryk i różnych urządzeń technicznych. Najbardziej zaawansowanym proponuję we własnym zakresie opracować lub pomyśleć o zrobieniu Przegubu Cardana (chociaż do tego mogą być potrzebne następne zajęcia).

Drivery

Dochodzimy tutaj do największego zaawansowania kombinacji różnego rodzaju ruchu, ponieważ możemy animować praktycznie dowolną rzecz, dowolny parametr jakiegoś obiektu, biorąc jako wejście ruch innego elementu. Pozwala nam to uzależnić np. wysokość obiektu od obrotów innego, albo zamienić kolor materiału na skalowanie tekstury. Na tym etapie pokazuję tylko część magii, która jest zrozumiała w świetle omówionych wcześniej tematów. Pokazuję ograniczenia Constraints, oraz swobodę i złożoność rozwiązania jakim są drivery. Pokazuję najpierw jak za pomocą Driverów osiągnąć ten sam efekt, jaki dają Constraints, a potem jak można dany efekt dodatkowo zmodyfikować. Robimy następnie, po omówieniu paru prostych przykładów, większy obiekt, który składa się z zestawu kół zębatych. Jest to Przekładnia Planetarna. Trudno zrobić animację takiego złożonego obiektu na samych Constraints, zatem używamy Driverów, w dodatku ustawiają ruchy kół tak, aby były wyliczone w zależności od swojej wielkości (wyrażonej przez liczbę zębów). Takie rozwiązanie jest średnio skomplikowane ale pozwala na zrobienie dynamicznych i poprawnych animacji o bardzo dużym stopniu skomplikowania. Osoby bardzo zaawansowane dostają do samodzielnego zrobienia Przegub Cardana, o którym czasem wspominam już na poprzednich zajęciach, a czasami np. zrobienie dynamicznej drabiny, której odsuwanie od ściany wydłuża ją, dodając automatycznie odpowiednią liczbę szczebli. Poznanie funkcji Driverów daje studentom bardzo duże możliwości w zakresie bardzo swobodnego definiowania ruchu i jego zmian w czasie. Dosłownie, można wpisać swoje własne równania, aby obiekty wykonywały dokładnie 2022-1552784649taki ruch, jaki chcemy. Czasami wzbogacam ten materiał także o zastosowania Custom Properties, ale zwykle opóźniam mówienie o tym aż do momentu aż dochodzimy do rigu ręki.

System kości

Ten temat jest często długo oczekiwany i wręcz pożądany przez studentów. Wprowadzam go dopiero teraz, na tym etapie, ponieważ z grubsza znane już pewne zależności, które możemy wprowadzić pomiędzy obiektami. Nie dziwi zatem operacja tworzenia Parenta (parentowanie - tworzenie obiektów zależnych przestrzennie od siebie). Pokazuję zmianę układu współrzędnych i wynikające z tego zjawiska, które trudno uzuyskać inaczej, np. rotację kuli w spłaszczonej przestrzeni, co wywołuje efekt skoszenia (ang. skew). Następnie omawiam sposoby tworzenia hierarchii obiektów bazując na jakimś trywialnym obiekcie, np. na Cube. Korzystając z kilku klocków tworzę łańcuch, który bardzo przypomina działaniem łańcuch kości. Następnie tworzę pierwszą kość, i tłumaczę czym ona jest, pokazuję sposoby jej wyświetlania, porównuję z krawędzią z modelu bmesh, i robimy dokładnie taką samą hierarchię kości jak w przypadku kostek. Te zajęcia dotyczą kości na poziomie wstępnym, pomagającym się z nimi oswoić, i generalnie to wystarcza. Grupy, które chcą więcej, dostają wyjaśnienia jak można kości przypisać do siatki obiektu i następnie użyć tych kości do deformacji siatki. Robi się to przez Parentowanie, ale z dodatkowymi ustawieniami. Jeżeli czas na to pozwala, to tłumaczę wtedy jak przypisać/przywiązać łańcuch kości do siatki. Omawiam wtedy definiowanie i poprawianie wag wierzchołków. Ten temat czasami odkładam na później, gdy budujemy już człowieka który ma się ruszać - tam bardzo widać wszystkie niedoskonałości i łatwiej też pracować na takim wyraźnym przykładzie. Tym, którzy chcą więcej zalecam spróbowanie zbudowania przekładni planetarnej lub korby ale z wykorzystaniem kości.

Skacząca piłka

Gdy kości już są trochę zrozumiałe, przystępujemy do tworzenia tzw. Rigu piłki, która może skakać i jednocześnie zmieniać swój kształt, spłaszczając się, ale zachowując objętość. Taka piłka może się też obracać, jednocześnie pozostając spłaszczona w wybranej osi. Nie da się takiej uzyskać za pomocą samego tylko prostego skalowania. Rig składa się ze struktury kilku kości, które tworzą mechanizm, pozwalający taką piłkę swobodnie animować. Przy okazji tłumaczę na czym polega niepożądane zjawisko Counter-Animacji, oraz pokazuję jak można kości zastąpić obiektami o dowolnym kształcie, tworząc rig, który wygląda estetycznie, i nie przeszkadza animatorowi w pracy. Dużo jest takich elementów, które powodują, że tzw. Quality of Life zwiększa się gdy przygotować schemat rigu porządnie. Dlatego czasami tłumaczę, jakie powinny być cechy dobrego rigu, i jakie zasady przyświecać powinny osobom, które taki rig przygotowują. W zasadzie nie różni się to zbytnio od przygotowania maszynerii poruszającej manekinem na zamówienie.

Rig FK/IK

W tej części wprowadzam zagadnienia takie jak Forward Kinematics, oraz Inverse Kinematics. Są to bardzo podstawowe i bardzo powszechne sposoby animacji systemu kości, a całość rozwiązujemy na przykładzie rigu ręki, w której można płynnie przechodzić od FK do IK i z powrotem. Wprowadzam nowy typ constrainu - Inverse Kinematics oraz solver, który pozwala kontrolować ugięcie i skręcenie łokcia (lub kolana). Pojawia się tutaj pojęcie Kości Deformujących oraz Mechanizmowych, oraz zaczynamy korzystać z wzajemnie wykluczających się Bone Constraints do sterowania łańcuchem kości. Ten wykład jest bardzo ważny bo pokazuje pewne średnio-zaawansowane metody pracy z rigiem i sposoby tworzenia bardziej zaawansowanych konstrukcji. Ostatecznie w tej części wprowadzam także pojęcie Custom Properties, dzięki której można sterować wieloma więzami (ang. Constraints) z jednego miejsca, ustawiając ich wpływ na zasadzie 0/1 lub płynnie, "analogowo". Bardziej zaawansowane grupy mają także prezentację i przedstawiony sposób, jak można oprogramować panele w Blenderze tak, aby w ich interfejsie użytkownika pojawiły się odpowiednie kontrolki sterujące rigiem z poziomu łatwo dostępnego miejsca (bez potrzeby przekopywania się przez zagłębione panele w poszukiwaniu odpowiedniego suwaka). Tego typu materiały są jednak dla zaawansowanych, i rzadko się zdarza, że grupa jest w stanie taką wiedzę przyswoić za jednym zamachem. Te rozwiązania o których mowa przedstawiałem też na jednej z krótkich konferencji Blendera o nazwie Blender Days, prowadzonej w minionych latach na naszym Wydziale.

Rig stopy

Jest to temat opcjonalny, który realizuję dość rzadko. Nie jest on kluczowy, ale w przypadku bardzo zmotywowanych grup na wysokim poziomie czasami omawiam skomplikowany rig nogi, a konkretnie stopy. Stopa jest specyficznym elementem, w którym występuje ruch wahadłowy w przód i w tył, z różnym efektem ustawienia elementów stopy. Na przykład stopa pochylana do przodu musi mieć ugięte na powierzchni podłoża palce, a odgięcie jej do tyłu już tego nie wymaga. Jest tu zatem sytuacja złożona i asymetryczna, powodująca że ruch w jedną stronę zachodzi inaczej niż ruch w drugą stronę. Mamy też tutaj możliwość zaimplementowania możliwości ruchowych bujania stopą na boki, skręcania jej w osi piszczelowej, itp. Jest to jeden z najbardziej skomplikowanych rigów, które w ogóle kiedykolwiek omawiam i zdarzyło się tylko raz czy dwa razy, że grupa w ogóle była zdolna zrozumieć i przyswoić takie tematy. Następnych, jeszcze bardziejs skomplikowanych rigów, np. kręgosłupa nie omawiam, ponieważ nie są to tematy na podstawowy kurs animacji, a raczej nadają się na przedmiot monograficzny o nazwie Rigowanie Zaawansowane. Kto wie, może kiedyś taki przedmiot powstanie?

Skinning

Jedną z ważnych czynności które należy wykonać tworząc animowaną postać, jest związanie jej z systemem kości. Na tych zajęciach daję studentom gotowe modele postaci, i zadanie polega na powiązaniu ich z systemem kości tak, aby ten system pozwalał modyfikować ruchy danej postaci. Proces ten przypomina obrastanie ciałem gołych kości, i dlatego nazywa się go Skinning, czyli pokrywanie szkieletu skórą. Jest tam sporo niuansów, zatem mówię o obwiedniach kości (Bone Envelopes), metodzie temperaturowej (Bone Heat), sporo jest o wagach wierzchołków, łączeniu, edytowaniu wag, definiowaniu grup wierzchołków oraz o różnych rodzajach parentowania, czyli przywiązywania kości do mesha. W zadaniach daję często do zrobienia (oprócz prostych modeli) także normalny, złożony model człowieka, do powiązania a kośćmi w sposób "produkcyjny". Takiego modelu można następnie używać w dalszej pracy. Na tym etapie studenci mogą już samodzielnie wykonać swoje własne modele i zrigować je w sposób umożliwiający sprawną animację.

Walk Cycle

Jest to jedno z najważniejszych zagadnień w animacji postaci ludzkich i zwierzęcych. Analizujemy sposób w jaki człowiek chodzi, czyli jak przemieszczają się względem siebie jego kości. Przyglądamy się miednicy, linii ramion, ruchom rąk i nóg, przenoszeniu ciężaru ciała i kołysaniu się. Korzystamy z referencji, które kiedyś nagrałem z pewną grupą studentów, oraz z tego, co znajduje się w Internecie. Badamy różne style chodzenia, i zadanie w tej części polega na samodzielnym zrobieniu własnego walkcycle - czyli chodzącej równym krokiem postaci. Animację taką po zapętleniu można wykonywać zawsze gdy ktoś "idzie" a płynność i naturalność tego ruchu nie są takie łatwe do oh4worzenia. Jest to trudne zadanie, ale daje bardzo wiele, ponieważ uczy także etapów animowania w ogóle: fazy blokowania pozycyjnego, czasowego, tuningu i stylowania. Omawiamy także Action Editor na tym etapie (jeżeli nie wspomniałem o nim wcześniej), i tworzymy różne sekwencji animacji, np. różne style chodzenia.

Pose Library

Chodzenie jest tylko jedną akcją, którą może wykonywać bohater, jednak w przypadku gry lub różnych animacji, potrzebne są również inne akcje. Action Editor pozwala jest zapisać w formie bloków danych, ale podczas tworzenia nowych akcji czasami warto mieć bibliotekę różnego rodzaju póz, jakie model może przyjąć. Służy do tego Pose Library, w której zapisujemy sobie najważniejsze pozy (główne lub przejściowe) naszego animowanego bohatera, i potem możemy z nich szybko korzystać. Technicznie takie pozy zapisują się w akcji klatka po klatce.

Non Linear Animation - NLA

Na tym etapie, gdy posiadamy już małą bibliotekę zachowań i akcji bohatera, uczymy się jak je ze sobą łączyć w jedną animację, zbudowaną z fragmentów, które nawzajem się przenikają. Tłumaczę na czym polega praca w NLA, pokazuję efekty przejścia, dodawania i przenikanie, nadpisywanie akcji, łączenie różnych akcji i razem z połączeniem ich z ruchem po krzywej np. jak zrobić człowieka chodzącego w kółko po okręgu, jednocześnie wykonującego jakieś ruchy rękoma lub ćwiczącego jakieś wygibasy. Ta sekcja uczy nas jak tworzyć długie i złożone animacje.

Shape Keys

Ten temat wchodzi zwykle wtedy, gdy już ogólne zagadnienia animacji mamy przerobione i studenci są z nimi zapoznani, ciągle jednak brakuje niektórych "elementów". Jednym z nich jest system kluczy nakładanych na kształt obiektu, czyli niedestrukcyjne ShapeKeys, dzięki którym, w połączeniu z kośćmi lub driverami, możemy zrobić tworzenie się zmarszczek wokół oczku, mimikę twarzy, lub naprężenia mięśni pod skórą. Temat ShapeKeys jest czasami przeze mnie także wykorzystywany do zrobienia animacji mówiącej twarzy i operacji pod nazwą Lip Sync - czyli synchronizacji ruchu ust z wypowiadanymi dźwiękami, które muszą do siebie pasować. Mówię wtedy o fonemach, głoskach, sylabach, i pokazuję jak można nauczyć Suzanne mówić za pomocą bardzo niewielu kliknięć. Na tym etapie pierwszy raz także stykamy się z Edytorem Wideo, którego używamy do wstawienia ścieżki dźwiękowej do Blendera.

Renderowanie animacji i VSE

Opowiadam tutaj trochę o zasadach renderowania wielu klatek i kompresji materiałów filmowych. Omawiamy sposoby optymalizacji plików bez większej straty jakości, i techniki, które pozwalają nie stracić czasu w przypadku gdy jakaś klatka wyrenderuje się źle. Pokazuję także Video Sequence Editor, w którym można złożyć całkiem niemałe filmy, dodając do nich dźwięk, przejścia, robiąc cięcia ujęć i ogólną edycję, włącznie z przenikaniem się obrazów. Można dodawać napisy do filmów, podpisy pod widocznymi w obrazie postaciami, wstawiać wiele filmów, robić ramki, przejścia, itp. Jest to duży temat, i pewne podstawy warto zaprezentować, aby potem studenci mogli łatwo douczyć się więcej funkcji. Dlatego zwykle nie omawiam Meta-Stripów, ale jeżeli już, to w powiązaniu z dodatkowymi scenami. Czasami też, ponieważ ta sekcja zawiera różne końcowe tematy, opowiadam też trochę o tym jak renderować ujęcia z wielu kamer jednoczśnie, a wtedy dochodzą w obszarze Timelinera markery aktywnej kamery (ale o tym mówię rzadko). Jest więcej zaawansownaych tematów tutaj, i bardziej specjalistycznych, jak np. baking animowanych tekstur, animacje zależne od tekstur (np. krew spływająca po ścianie, lub wypalanie dziury laserem, który pozostawia trwały lub zanikający ślad) - ale to są już rozwiązania bardziej symulacyjne, i te tematy zapowiadam na tym etapie, ponieważ w naturalny sposób prowadzą one do kolejnego przedmiotu - Symulacji 3D.