Time Editor

Narzędzie do łączenia animacji

Pan Animator napisał 26 września 2019 | AnimacjaMaya

Jako animatorzy pod presją czasu nieustannie staramy się poprawiać nasz workflow. Zmieniamy go w zależności od projektu, aby zanimować coś szybciej i lepiej. Narzędzie Time Editor w Autodesk Maya jest właśnie jedną z opcji w przyspieszaniu procesu animacji.

Ale co to jest Time Editor?

No słuchajcie! Time Editor to względnie nowe narzędzie pozwalające na łączenie różnych animacji i ich późniejsze edytowanie. Taki Trax Editor (starsi majowcy wiedzą o co chodzi), ale tym razem działa! Na początek sami tworzymy małą bibliotekę animacji (no nie spodziewaliście się, że Maya za nas będzie animować, nie?) złożoną na przykład z cyklu chodu, biegu i stania w miejscu. Na podstawie tych animacji tworzymy klipy animacyjne. Czyli zapisujemy na przykład taki cykl chodu do pliku. W Time Editor, zaciągamy te pliki i układamy fragmenty animacji wedle własnego uznania. Na przykład postać idzie kawałek, a potem staje w miejscu. Time Editor (z naszą lekką pomocą) zrobi ładne przejście z cyklu chodu do stania w miejscu.

Jest to też doskonale narzędzie do zarządzania animacjami motion capture. Właściwie chyba zostało do tego stworzone, ale znając mnie nie zdziwicie się, że ten fakt dalej już przemilczę. Każdy plik mocap staje się nowym klipem, więc już na start mamy dużo animacji do użycia.

Im więcej mamy takich gotowych klipów, tym więcej i szybciej nowych animacji możemy stworzyć.
Widzę wstępne zainteresowanie, więc naturalnie rodzi się pytanie…

Jak używać Time Editor?

Na potrzeby omówienia możliwości najważniejszych funkcjonalności Time Editora stworzymy krótką scenkę złożoną z prostych animacji:

Cykl rozglądania się na szybko zanimowałem, natomiast chód został wygenerowany przy użyciu skryptu do rigowania – Advanced Skeleton. Priorytetem dla mnie było szybkie pokazanie narzędzia, a nie piękna animacja. Także bez czepiania się, ha!

Przygotowanie

Zanim utworzymy pierwsze klipy musimy naszą animację odpowiednio przygotować.

Na co szczególnie zwrócić uwagę:

  • Animacja musi być już skończona. Po utworzeniu klipu nie możemy już edytować animacji.
  • Upewniamy się, że loopy w pierwszej i ostatniej klatce mają identyczną pozę. Wtedy mamy idealny cykl. Tu zaskoczenia nie ma.
  • Chody i biegi powinny poruszać się do przodu. Nie w miejscu jak na bieżni. O tym za chwilę.
  • Używamy systemu IK albo FK. Niby da się blendować różnie stworzone klipy, ale to proszenie się o kłopoty.
  • Wszystkie constraints, animation layers i tym podobne wypiekamy. Czyli w animation layers robimy merge z base animation, a constraints wystarczy zwykły bake keys.
    Time Editor wczytuje tylko zwykłe klucze animacyjne.
  • Oczywiście używamy tego samego riga lub z podobną hierarchią i nazewnictwem. W razie czego można przepiąć animację na inny rig (opcja remap), ale wiecie jak to w Maya… raz zadziała, raz nie.
  • Warto stworzyć set (Create -> Sets -> Set) dla wszystkich kontrolek (oprócz root – głównej kontrolki) w rigu. Osobiście korzystam z selection sets w animBot. Na podstawie tego seta będziemy łatwo i szybko tworzyć klipy, no i mamy pewność, że przypadkowo nie pomniemy jakiejś kontrolki.

Tworzenie klipów

Ok, no to jedziemy! Jeżeli wszystko przygotowaliśmy uwzględniając powyższą listę to spokojnie możemy stworzyć klip animacyjny.

Jak mówiłem w tym wpisie stworzymy prostą animację złożoną z kilku klipów. Naszą pracę najpierw zaczniemy od przygotowania właśnie tych klipów. Później będziemy nimi żonglować.

Przechodzimy do sceny z animacją i.. zaczynamy od zapisania pliku. Zwykły CTRL + S. Proces tworzenia klipu jest nieodwracalny. Jak stworzymy klip i go później usuniemy to także stracimy animację. Znaczy dalej te dane gdzieś będą, ale nie na kontrolkach. Bo to właśnie do klipu Maya przenosi wszystkie klucze. Jedynym sposobem przerzucenia kluczy z powrotem na kontrolki to Bake (o tym za chwilę), który jeszcze tak średnio działa. Ciężko na tym coś dalej animować. Dlatego dla bezpieczeństwa lepiej zapisać sobie taką scenę, by mieć do czego wrócić i łatwo coś poprawić.

Ok, to zaznaczamy wszystkie kontrolki, które mają znaleźć się w klipie. Może to być każda kontrolka z rigu, może to być tylko ciało, tylko twarz albo jakaś inna dowolną część. Zależy jak pracujemy. Następnie odpalamy Time Editor (Windows -> Animation editors -> Time Editor).

Przy pierwszym odpaleniu wita nas piękne okienko:

time editor

Teraz wystarczy wcisnąć duży plusik – Add selected content from the scene. Jeżeli już coś wcześniej grzebaliśmy w Time Editor i nie ma już tego okienka to tworzymy klip przez File -> Add animation from scene selection.

Na jednym z track pojawi taki fikuśny klocek. To jest właśnie nasz animation clip. Dla porządku na start zmieńmy jego nazwę. W tej i innych scenach gdzie go użyjemy będziemy już od razu wiedzieć jaką animację w sobie on niesie.
Prawy klik na klip i wciśnij Rename. W nowy okienku wpisz nazwę klipu.

Teraz jak zaznaczymy kontrolkę, która jest w klipie to w channel box zobaczymy kanały podświetlone na pomarańczowożółtawo… No tak jak po lewej stronie. To znaczy, że tymi kanałami steruje Time editor. Nie mamy już możliwości edycji animacji czy póz. Przynajmniej nie jak do tej pory.

Zapisywanie klipów

No dobra! Nasz klip jest już gotowy na eksport! Zaraz użyjemy go w innej scenie. Dla pewności możemy odtworzyć animację (już normalnie, na time line) i zobaczyć czy wszystko siedzi.

Teraz wystarczy prawy klik na klip i wciskamy Export selected clips (options box [ ]). Wybieramy format Maya ascii – najbardziej uniwersalny format. W odróżnieniu od *.fbx przeniesie też nazwę klipu.

No i co? Klikamy Export! Myślę, że warto zapisywać wszystkie klipy w jednym miejscu. Będzie mniej nawigowania w następnych etapach pracy.

Po stworzeniu klipu nie zapisujmy sceny lub jak bardzo chcemy to zapiszmy jako kolejną wersję. Jak wspominałem tworzenie animation clips to proces nieodwracalny. W najlepszym przypadku dostaniemy wszystko wypieczone co klatkę. Cały proces eksportu to pół minuty pracy, więc nie jest to coś co za wszelką cenę chcemy zapisywać.

Tę czynność powtarzamy dla każdej animacji. To znaczy dla każdego loopa czy tez animacji, którą będziemy zaraz wstawiać. No i jeżeli zapisujemy mimikę oddzielnie to także zapisujemy do innego pliku.

Przy większej wprawie cały ten proces, który opisałem w ostatnich dwóch punktach można ogarnąć w max 30 sekund:

Importowane klipów

No dobra. Naprodukowaliśmy się klipów to czas je teraz użyć.

Tworzymy nową scenę na której będziemy wszystko składać. Pierwsze co robimy to tworzymy referencję riga (czysty rig! Nie klip czy scena animacjna) na który to wczytamy animację.

Następnie przechodzimy do Time Editor i wciskamy duży przycisk Import content from external files albo File -> Import animation clips.

Namierzamy ścieżkę do klipu i importujemy. Maya zapyta się nas o wskazanie postaci na którą mamy wczytać animację. Z pola po prawej stronie wybieramy odpowiadający naszemu rigowi namespace. No i teraz importujemy! Pojawi się nowy, fikuśny klocek na track 1. Teraz możemy sprawdzić czy animacja poprawnie się wyczytała.

Wszystkie klipy są w Outlinerze. Nawet jak usuniemy je z Time Editor! Rozwiń nodę timeEditor -> Sources. Stąd możemy przeciągnąć je na track.

Zaimportujmy pozostałe klipy. Jeżeli rozdzielaliśmy ciało i twarz z jednej animacji na oddzielne pliki to przeciągamy je jeden pod drugi na różnych trackach. Teraz znowu możemy sprawdzić czy wszystko siedzi. Następnie w celu lepszej organizacji zaznaczamy te dwa klipy i je grupujemy. Prawy klik na jeden z zaznaczonych klipów i Group. Lub prościej – CTRL + G. Od razu zmieńmy jej nazwę. Nie chcemy mieć samych Group1, Group2, Group 3… Time Editor teraz wcisnął te klipy w jedną grupę.

Po jej rozwinięciu zobaczymy dwa nowe track z ułożonymi klipami. Super! Możemy dalej działać!

Łączenie animacji

Przejdźmy teraz do najlepszych rzeczy, które oferuje Time Editor. Złączymy ze sobą dwie animacje.

Zakładam, że w Time Editor mamy już zaimportowane wszystkie potrzebne klipy. Teraz wystarczy ułożyć je w kolejności w jakiej chcemy, żeby finalna animacja wyglądała. Ja na przykład chcę, żeby idąca postać zatrzymała się w miejscu.

Najpierw więc będzie loop chodu, późnej loop stania i rozglądania się. W takiej kolejności układam klocki na tym samym track. Grupy czy klipy – nie ma znaczenia. Wszystko co łączymy musi być na tym samym poziomie. Zwróćmy uwagę żeby klocki stykały się ze sobą. Teraz spójrzmy na końcówkę animacji chodu. Zobaczmy na jakiej fazie chodu jesteśmy. Zależy nam na znalezieniu nogi która albo właśnie stanęła albo za chwilę to zrobi. To będzie nasz taki punkt wspólny z następna animacją – staniem. Zaznaczamy kontrolkę (lub kość, jeżeli łączymy animację samych kości) kostki tej nogi. Najpewniej będzie to po prostu kontrolka IK nogi. Teraz wyciskamy Match poses with relocator match clips

Pojawi się nowe okno ze szczegółowymi ustawieniami match:

Matching object to właśnie obiekt do którego Maya przesunie animację. Taka wytyczna. Powinna być tam wcześniej zaznaczona przez nas kontrolka. Jeżeli jej nie ma to zaznaczmy ją i wciśnijmy przycisk add

Następnie mamy Root Objects. Tymi obiektami Maya poruszy cały rig i spasuje go do Matching object. Time editor za nas zasugeruje obiekty, którymi trzeba poruszyć. Najczęściej będą to jakieś randomowe rzeczy. No dobra, ujmę to tak: Maya nie radzi sobie dobrze z doradzaniem roota, więc trzeba jej pomóc. W większości przypadków wystarczą kontrolki, które poruszają się w świecie. Czyli IK stóp (ewentualnie rąk), biodra, być może pole vectory kolan. W ułatwieniu: wszystkie kontrolki, które są potrzebne, żeby poruszyć rigiem do przodu. Zaznaczamy je i dodajemy do naszej listy root objects.

O dodanym relocatorze poinformuje nas strzałka przy nazwie klipu

Z reszty ustawień wszystko zostawiamy domyślnie. Teraz upewniamy się, że w Time Editor nasz klip, który będziemy dopasowywać jest zaznaczony i klikamy Match!

Postać powinna wskoczyć w odpowiednie miejsce i działa to zaskakująco dobrze! Jeżeli łączenie nam się jednak nie podoba to możemy je poprawić. Zaznaczamy stworzony właśnie Relocator w Outliner i przesuwamy/rotujemy aż przejście animacji siądzie.

Ale chwila, niby przejście wygląda dobrze, ale coś tam jednak nie gra… A no tak! Postać jest we właściwym miejscu, ale przejście między klipami jest z klatki na klatkę. Trzeba to wygładzić! Chwytamy za klip ze staniem i przeciągamy go w kierunku klipu z chodem.

Pojawi się wizualna reprezentacja blendowania dwóch klipów. Teraz Time Editor postara się jak najlepiej zinterpretować przejście pomiędzy klipami. Trzeba popróbować ile klatek powinno trwać takie przejście. I tutaj znowu zaskoczenie – działa to zaskakująco dobrze! Te zaskoczenia właśnie skusiły mnie do napisania tego wpisu. Później trzeba lekko poprawić to i owo, ale jest to i tak lepsze niż robienie wszystkiego z ręki!

Cały proces w skrócie wygląda mniej więcej tak:

Warto także zaznaczyć, że blendowanie klipów to nie tylko ich nasuwanie na siebie. Oddalając klip w drugą stronę z włączonym Toggle Keep Transitions keep transitions Maya także postara się zinterpretować przejście w pustym miejscu pomiędzy animacjami.

Edytowanie klipów

Skoro już mówimy co można robić między klipami to myślę, że warto wspomnieć o edycji samych klipów.
Do dyspozycji mamy cztery tryby edycji łatwo dostępne w pasku menu:

Trim Mode

Czyli narzędzie przycinanie. Nie zmieniając oryginalnej animacji definiujemy kiedy klip się zaczyna i kończy. Możemy uciąć niepotrzebne fragmenty lub rozpocząć klip od wyznaczonego momentu. Robiliśmy to przed chwilą przy łączeniu animacji.

Scale Mode

Czyli spowalnianie i przyśpieszanie animacji. Tutaj już wpływamy na to jak będzie prezentować się animacja. Działa dobrze np. przy chodach, dopóki zmieniamy skalę o max 10%. Powyżej już dzieją się śmieszne rzeczy.

Hold Mode

Po zakończonym klipie możemy zdefiniować jak długo ostatnia poza ma być widoczna. Bardzo przydatne przy blendowaniu zbyt krótkich klipów.

Loop Mode

I na koniec chyba najważniejszy tryb. Tworzenie pętli. Przeciągając krawędź klipu definiujemy jaki czas animacja ma się powtarzać. No i jak ma to robić.

Są dwa tryby loopowania klipów.
Zaznaczamy klip i przechodzimy do Attribute Editor. We właściwościach mamy dwa możliwe tryby:

Zwykły Loop po prostu zapętli animację idealnie do pierwszej klatki. Tutaj zaskoczenia nie ma, co nie? Po przeciągnięciu mamy zwykłe podświetlenie loopowanej części klipa.
Loop Progressive zaś to ciekawsza rzecz stworzona specjalnie do chodów, biegów. Ogólnie do loopów z przemieszczeniem. Tworząc loop w tym trybie Maya obliczy przesunięcie postaci w świecie i następny, automatycznie wygenerowany cykl pętli przesunie np. o długość wykonanego kroku. Czyli za nas w nieskończoność puści postać do przodu. Loopowany fragment zostanie podświetlony z dodatkowymi strzałkami.
Są jednak dwa wymogi do spełnienia. Animacja w klipie musi poruszać się do przodu (czyli to nie jest chód w miejscu jak na bieżni) oraz nie możemy OBRACAĆ relocatora (o ile go stworzyliśmy wcześniej). Tę drugą rzecz już zgłosiłem do Autodesk i czekam na odpowiedź. Niesamowicie irytujący bug. Dam znać co z tego wyjdzie. Na razie w chodach nie używam trybu Progressive jeżeli używam relocator.

Update klipu

Dobra! Pogadali o podstawowych rzeczach w Time Editor. Wesoło się pracuje, wszystko fajnie, ale okazuje się, że animacja jaką użyliśmy w klipie nagle nie podoba się reżyserowi. Dramat? Może tylko trochę, ale do ogarnięcia!

Pierwsze co to wracamy do naszej sceny w której tworzyliśmy klip. O ile mnie posłuchaliście to macie wersję tej sceny PRZED utworzeniem klipu i cała animacja jest na kontrolkach.
Teraz wesoło sobie poprawiamy animację wedle uznania i akceptu. Po raz kolejny tworzymy klip, eksportujemy i wracamy do naszej składkowej sceny.

Tym razem nie importujemy klipu jak poprzednio. Do tej operacji wystarczy tylko Animation Source, czyli same dane o animacji, bez tworzenia klipu (i zaśmiecania sceny).

Przechodzimy do File -> Import Animation Source Only.

Nawigujemy do naszego pliku i wczytujemy go do sceny.
W Outliner przechodzimy do nody timeEditor -> Sources i przeciągamy nasz nowy animation source NA klip w którym chcemy podmienić animację.
Pojawi się nowe okno:

Tutaj Maya rozpoznaje hierarchię we wczytywanym animation source oraz w klipie. Pokaże nam co udało się przepiąć z automatu, a poniżej co nie zostało podpięte. Ale… zazwyczaj wszystko działa (o ile nie dodaliśmy nowych kontrolek do klipu – wtedy trzeba je zmapować), także myślę, że spokojnie klikamy Continue.

Po tej operacji zwróćcie uwagę na to, że nazwa klipu będzie napisana kursywą.

To oznacza, że animation source tego klipu jest inny niż podczas tworzenia. Czyli… został po prostu podmieniony.

Niestety to jest jedyny sposób na podmianę animacji w klipach. Nie działa to jak referencja, że po prostu wskazujemy nowy plik lub nadpisujemy stary. No, ale chociaż działa!

Poprawianie złożonej animacji w Time Editor

Kolejnym i ostatnim krokiem do wykonania jest polishing.
Time Editor to zaskakująco dobre narzędzie do łączenia animacji, ale czasami jednak coś nie do końca pójdzie po naszej myśli. Zamiast walczyć z Time Editor np. o lepsze blendowanie klipów myślę, że łatwiej jest po prostu poprawić to już po złożeniu całej sceny. Taka warstwa poprawkowa. A jak to zrobić?

Cóż, wspomniałem o warstwach, więc chyba domyśliliście się, że będzie chodzić o Animation Layers o których to kiedyś się już naprodukowałem.
Na nasze szczęście warstwy są na samej górze animacyjnej hierarchii, więc to co na nich zrobimy to „przykryje” niedoskonałości z Time Editor.

Jest do dosyć złożony proces i chyba każdy ma swój patent na używanie animation layers, ale tylko pokrótce opiszę Wam jak wygląda mój workflow.

Warstwę poprawkową nakładam dopiero po tym jak ułożę wszystkie klipy potrzebne na stworzenie całego ujęcia. Na pewno nie wcześniej. Jak przyjdzie zmiana animacji w klipach albo będzie potrzeba skrócenia klipu to moja warstwa poprawkowa już jedną nogą znajduje się w koszu. No może tylko na razie po kostkę, ale zawsze. Staram się nie dublować sobie pracy.

Następnie zaznaczam obiekty, które chcę poprawić i tworzę nowy animation layer w trybie Additive. 90% poprawek to ślizgi stóp między chodem, a zatrzymaniem się. Czyli dokładnie to co mamy w naszej przykładowej scenie.

Teraz mogę ręcznie niwelować ślizgi przy użyciu Ghosting albo „na oko”. Czyli co klatkę przepozowuję stopę tak, by stała w miejscu. Nie jest to masakrycznie dużo roboty, bo te przejścia trwają max kilkanaście klatek, ale nie jest to też przyjemna praca.

ALE! Na szczęście mam animBot z narzędziem Copy Xform World Space o którym to kiedyś wspominałem. Zaznaczam pozycję stopy w momencie, gdy przestanie się ona poruszać – czyli przejdzie akurat na 100% do klipu, gdzie postać się rozgląda. Kopiuję położenie tej kontrolki w świecie z użyciem Xform World Space i przechodzę te kilka klatek wcześniej, zaznaczam fragment na time line, gdzie stopa powinna już stać i wciskam prawy klik na Xform -> Paste Xform World Space Bake frames.
animBot za mnie „przybije” stopę do ziemi. Ja co najwyżej mogę się skoncentrować na animowaniu łagodnego przejścia do tej pozy. Ten sam efekt możemy osiągnąć tworząc locator w miejscu stopy w docelowej pozie. Do niego constrainujemy stopę i już! Przybita do locator na amen. Potem odpinamy constraint gdy stopa ma już być w powietrzu.

Cały proces przy użyciu animBot:

Przy użyciu animation layers dodaję także zmiany w ruchu ciała. Czyli w trakcie zatrzymywania wyprostowuję sylwetkę, niweluję zbyt duży ruch na rękach, dodaję ewentualnie jakieś zabujania. Oczywiście Graph Editor bardzo w tym pomaga. Ten proces może trochę potrwać, ale to nic nie szkodzi. I tak już dużo czasu Time Editor nam zaoszczędził. Sami też możemy coś poanimować!

Takich animation layers możemy stworzyć ile potrzebujemy. Time Editor nie ma z nimi najmniejszego problemu.

No i co? Zobaczcie jak wygląda nasza finalna animacja:

Nie jest źle! Oczywiście nie jest idealnie (nigdy nie jest), ale w tym wpisie przedstawiam narzędzie, a nie sam proces animacji.

Bake

No fajnie, wręcz super! Stworzyliśmy naszą animację złożoną z kilku klipów. Teraz od nas zależy co dalej chcemy z nią zrobić. W większości przypadków pewnie wyeksportujemy geometry cache jak np. alembic albo eksport kości jak do silnika gier i skończymy pracę. Ale pokażę Wam jeszcze co zrobić jeżeli musimy przekazać naszą animację komu innemu.

Dobra! Prawy klik na zaznaczone grupy lub klipy, który chcemy wyeksportować i namierzamy opcję Bake. Interesują nas dwa sposoby wypieku animacji:

Bake to new clip and delete

Zaznaczone klipy lub grupę przeniesie w jeden klip animacyjny, a resztę wywali. Dobre przygotowanie do eksportu. Zaznaczamy klipy, które chcemy scalić w jeden, wypiekamy i gotowe! Teraz ten klip możemy wyeksportować w identyczny sposób jak robiliśmy to wcześniej i użyć gdzieś ponownie.

Używając tej metody mogę szybko stworzyć nowy klip na podstawie sceny na której przez cały wpis pracujemy:

  1. Łącze wszystkie animation layers ze sobą (Merge layers). Zostaje mi tylko BaseAnimation. Czyli tylko czyste klucze są na kontrolkach.
  2. Grupuję klipy dla każdego track oddzielnie. Twarz, palce oddzielnie. Oczywiście tylko jeżeli używałem więcej, niż jednego track.
  3. Każdą grupę piekę do nowego klipu (Bake to new clip and delete).
  4. Pozostaje tylko eksport nowych klipów animacyjnych do pliku.

Ten klip mogę zaimportować w nowej scenie i połączyć z innym klipem. Potem znowu wyeksportować i znowu połączyć. A potem.. ok, chyba wiecie o co chodzi.

Bake to scene and delete

Animację z zaznaczonych klipów lub grup przeniesie z powrotem na kontrolki i usunie wszystkie klipy z Time Editor. Czyli odcinamy się od Time Editor i możemy spokojnie, normalnie, po swojemu animować na kluczach tak jak to zawsze robiliśmy. Pięknie, prawda? Jest jednak haczyk. Taki Bake czasami się zagalopuje i nam postawi klucz co klatkę, przez co dalsza praca nad animacją może być utrudniona. Nie mówię, że niemożliwa, ale potrzeba trochę animacyjnej akrobatyki.

Podsumowanko

Dotarliśmy do końca! Wyszedł długi wpis, a nawet nie omówiłem wszystkich możliwości Time Editora. Jest to narzędzie młode (wprowadzone stosunkowo niedawno do Majki), ale działa zaskakująco dobrze! Tym wpisem chciałbym najbardziej zachęcić już doświadczonych animatorów, którzy poprzez wspomnienia Trax Editora nawet nie spojrzeli na Time Editor. Dajcie jemu szansę! Młodych animatorów nie muszę zachęcać, chyba jeszcze nie poznali Traxowego piekiełka.

Przedstawiłem prosty, ale bardzo produktywny workflow. Omówiliśmy tylko podstawowe narzędzia i ich łatwe zastosowania. Ale ile czasu oszczędzi w tworzeniu dłuższych animacji! Time Editor to moje odkrycie ostatnich miesięcy i na pewno jeszcze wrócę do niego na blogu. W międzyczasie gorąco polecam obejrzenie tutoriali Stevena Roselle z Autodesk lub przeczytanie oficjalnej dokumentacji. Powodzenia!

Max rig by AdvancedSkeleton