10. Wstęp do animacji

Animacja komputerowa, ktorą znamy na co dzień z reklam telewizyjnych, filmów animowanych i gier komputerowych znajduje szerokie zastosowanie również w nauce, edukacji, medycynie i przemyśle. Profesjonalna animacja najwyższej klasy (np. produkcja filmów animowanych) wymaga stosowania najdroższych high-endowych systemów wykorzystujących najnowsze rozwiązania algorytmiczne i techniki programistyczne, ale w wielu dziedzinach wystarczające może okazać się zastosowanie aplikacji mniej kosztownych, a nawet bezpłatnych, jak np. Blender. Niniejszy rozdział jest przeglądem najczęściej stosowanych rozwiązań, ze szczególnym uwzględnieniem możliwości najbardziej popularnych, dostępnych we wszystkich systemach.

Animacja jest to zmiana pewnej właściwości w czasie:

  • położenia obiektu w przestrzeni 3D, wliczając w to również obroty
  • kształtu obiektu, w tym np. skali obiektu
  • jego barwy i przezroczystości
  • jego tekstury
  • położenia kamery i jej parametrów (np. ogniskowej)
  • parametrów ruchu (np. prędkości i przyśpieszenia) obiektu
  • parametrów ruchu kamery
  • i wielu innych, mogących podlegać zmianom, atrybutów obiektu bądź śledzącej go kamery.

Poniżej omówione zostaną w bardzo dużym skrócie techniki, które służą do wizualizacji tych zmian we współczesnych systemach do animacji 3D. 


Animacja kluczowa (ang. key framing) jest bezpośrednim przeniesieniem do animacji komputerowej zasad stosowanych w animacji tradycyjnej. Osoba zajmująca się animacją - animator musi mieć kontrolę nad całością zmian. Tylko w wyjątkowych sytuacjach animator musi tworzyć kolejne klatki (ramki) animacji krok po kroku, ręcznie wprowadzając wszelkie zmiany. Na ogół główny animator (keyframer) tworzy tylko tzw. klatki kluczowe, charakterystyczne dla sceny, zaś wszystkie klatki pomiędzy kluczowymi wykonują zwykli animatorzy. Dzięki komputerom i programom do animacji 3D, żmudny proces tworzenia klatek międzykluczowych nie musi być wykonywany przez człowieka, gdyż jest wynikiem interpolacji wykonywanej przez komputer.

 

Każda klatka kluczowa stworzona metodą komputerowego modelowania sceny przez animatora wnosi ze sobą informację o wartościach różnych atrybutów (zmiennych) w danej chwili czasowej, przypisanej do klatki (klatki projektuje się względem tzw. osi czasu, ang. timeline). Jeżeli pomiędzy kolejnymi klatkami kluczowymi pewien atrybut ulega zmianie, program musi dokonać interpolacji jego wartości w zadanym przedziale czasowym.

Interpolacja polega więc na wyznaczeniu krzywej przechodzącej przez zadane punkty określone przez wartości atrybutów w wybranych chwilach czasowych, gdyż na tej podstawie można wyznaczyć dowolną ilość klatek pośrednich. Zwykle chcemy, by zmiany następowały w sposób płynny, czyli krzywa taka powinna być gładka. Najczęściej do interpolacji stosuje się więc krzywe gładkie złożone z krzywych wielomianowych 3 stopnia (znane nam z lekcji 8), np. krzywe sklejane trzeciego stopnia:

Rysunek 72. Przykład interpolacji międzykluczowej funkcją sklejaną. Przejście pomiędzy każdymi dwiema klatkami obiektu opisane jest funkcją wielomianową trzeciego stopnia. Na osi rzędnych mogą być wartości dowolnego atrybutu obiektu, nie tylko np. jego wysokość z, ale też np. jego kąt obrotu względem którejś z osi, jego skala lub kolor.

 

Należy podkreślić, że krzywa, którą system generuje w wyniku interpolacji, nie może być dowolna - musi być jednoznaczną funkcją czasu: każdej chwili czasowej może odpowiadać tylko jedna wartość atrybutu.

 

Jeśli chcemy uzyskać lepszą kontrolę nad sposobem zmian atrybutów w czasie i nie dopuścić do powstania klatek pośrednich wyglądających mało realistycznie (co może być niekiedy efektem interpolacji), można "ręcznie" wpłynąć na przebieg krzywej interpolującej. Najczęściej użytkownik używając edytora wykresu może modyfikować poszczególne segmenty funkcji interpolującej, reprezentowane jako krzywe Béziera 3 stopnia, za pomocą punktów kontrolnych. Zwykle może też sobie zażyczyć, by interpolacja była prostsza, liniowa (funkcja interpolująca jest wówczas łamaną łączącą węzły interpolacji) albo dla uzyskania specjalnych efektów celowo wprowadzić ostrza na gładkiej funkcji interpolującej.

Tabela 2. Przykład funkcji interpolującej po dokonaniu edycji - teraz zmiany atrybutu w pobliżu klatek kluczowych następują wolniej, natomiast szybsze są przejścia pomiędzy klatkami.

 

Za pomocą edycji funkcji interpolujących (w Blenderze noszących nazwę krzywych IPO) można animować materiały, tekstury, można odzwierciedlić np. migotanie światła w scenie i wpływać na przyspieszanie i zwalnianie tempa animacji. Każda z funkcji interpolujących może być edytowana niezależnie od innych. Taki sposób wpływania na przebieg animacji nazywa się najczęściej animacją wykresową.

 

W najprostszych systemach interpolacja pomiędzy klatkami kluczowymi wykonywana jest automatycznie i użytkownik nie może ingerować w przebieg funkcji interpolującej.

 

Zupełnie innym sposobem wyznaczania kolejnych klatek animacji jest animacja ścieżkowa. Pozwala ona na animację tylko tych atrybutów, które związane są z przestrzenią 3D, czyli na animację położenia obiektu i/lub kamery. Tę najbardziej popularną opcję posiadają wszystkie systemy do animacji, niezależnie od ich wielkości.

Animacja ścieżkowa polega na zdefiniowaniu krzywej będącej torem (ścieżką) poruszającego się obiektu bądź kamery. Krzywa taka może być dowolnie usytuowana w przestrzeni 3D. Ścieżki modeluje się w systemie tymi samymi technikami, co wszelkie inne krzywe, a więc jako krzywe przechodzące przez zadane punkty w przestrzeni 3D lub jako krzywe zadane wierzchołkami kontrolnymi.

 

Rysunek 73. Przykład definicji ścieżki dla prostej animacji ścieżkowej - tor piłki zadany krzywą przestrzenną.

Na ogół dodatkowo można ingerować w ścieżkę ruchu, na przykład nakazać obiektowi (lub kamerze) poruszanie się wzdłuż ścieżki, tak żeby wybrany wektor związany z obiektem był skierowany równolegle do stycznej do ścieżki ruchu. Będzie to przypominało efekt "patrzenia się" przedmiotu wzdłuż ścieżki ruchu. Można też usytuować obiekt względem ścieżki w inny sposób, np. zmusić, by w trakcie ruchu po ścieżce zawsze był zwrócony w stronę innego zdefiniowanego w scenie obiektu (ruchomego lub nieruchomego). Zwykle można też dodatkowo kontrolować prędkość i przyspieszenie obiektu poruszającego sie po trajektorii. W analogiczny sposób można animować ruch kamery względem ścieżki, uzyskując dodatkowe efekty filmowania sceny ruchomą kamerą.

Aby zdefiniować usytuowanie obiektu względem ścieżki, animator zwykle posługuje się lokalnym układem współrzędnych (zwykle określanym w systemach jako tzw. pivot), związanym z obiektem. Względem osi tego układu definiuje się też obroty i skalę obiektu w danej chwili czasowej.

Animację ścieżkową zwykle łączy sie z animacją kluczową: w wybranych miejscach ścieżki można ustawić klatki kluczowe, które pozwalają na modyfikację wybranych atrybutów obiektu (skala, obrót, przezroczystość itp.) w trakcie jego ruchu po ścieżce.

Obiekty poddawane animacji ścieżkowej i/lub kluczowej mogą być tworzyć strukturę hierarchiczną: definiując jakiś obiekt jako podrzędny względem innego powodujemy, ze wszelkie transformacje dokonywane na obiekcie nadrzędnym będą dotyczyły również obiektu podrzędnego, który oprócz tego może mieć zdefiniowane swoje własne, lokalne transformacje. Przykładowo samochód może poruszać się po wybranym torze, a jego koła, jako obiekty podrzędne, oprócz ruchu po torze mogą wykonywać ruch obrotowy wokół swoich osi. Struktura hierarchiczna w przypadu złożonych scen i obiektów może być bardzo rozbudowana.

Animacja hierarchiczna często wiąże się z definiowaniem tzw. obiektów proxy (dostępnych np. w Rhino). Jeżeli chcemy animować całą grupę równorzędnych obiektów, to zamiast żmudnie każdy z nich np. przypisywać do ścieżki, możemy zdefiniować dla nich jeden wspólny punkt, leżący w ich pobliżu (tzw. punkt proxy) i do niego, jako podrzędne, przypisać wszystkie obiekty tej grupy. Wszelkie akcje odnoszące się do obiektu proxy (punkt proxy ma przypisany mu lokalny układ współrzędnych, więc pełni rolę obiektu) są wykonywane na wszystkich podłączonych do niego obiektach podrzędnych.