Jak jsme rozpohybovali robota v našem PFku

Robot v našem vánočním přání vás baví. Jsme za to rádi. A jak to vlastně všechno začalo? Odborníci CESNETu vytvořili 3D model Čapkova robota pro Památník Karla Čapka ve Strži u Dobříše pro interaktivní aplikaci Robot dětem, ve které je průvodcem. Digitální robot vychází z původní postavičky z kovu a ze dřeva, kterou vývojářům zapůjčila vnučka Josefa Čapka paní Kateřina Dostálová.

„Model robota vznikl pomocí fotogrammetrie,“ vysvětluje Oldřich Linhart, hlavní animátor robota, „pro rozpohybování bylo nutné udělat několik úprav. Výstupem fotogrammetrie byl model robota v jedné pevné poloze, tzv. T-pose. Nejprve bylo zapotřebí izolovat jednotlivé fragmenty a rozdělit robota na oddělené rigidní části – hlavu, trup, paže a tak dále. Tyto jednotlivé oddělené části jsem pak zpracovával. Musel jsem dávat pozor, aby například při pohybu rukou v kloubu do jiné pozice, než v jaké byla nafocena, nevznikl virtuální otvor do robota, protože pohybem se odhalí zóna, která nebyla při procesu focení vidět a nebyly tedy zaznamenány žádné informace o její struktuře či geometrii. Navíc bylo třeba ručně domodelovat chybějící části a zároveň pro ně dotvořit texturu, tedy barvu.“

Oldřich připravoval animaci robota v rámci své bakalářské práce, kterou psal během stáže v týmu Svena Ubika v CESNETu. V současné době je už naším kolegou, nedílnou součástí týmu Oddělení technologie pro síťové aplikace.

Zatímco ve Strži se robot digitálně pohyboval v zahradě okolo památníku a navigoval návštěvníky na významná místa spojená s Karlem Čapkem, ve vánočním přání sdružení CESNET má jinou úlohu. Podle plánu musel postavit logo, vánočně ho vyzdobit a slavnostně nasvítit. To znamená hodně nových, ale i neobvyklých pohybů.

Oldřich k tomu dodává: „Musel jsem vytvořit ovládací kostru, pomocí které lze robota rozpohybovat a animovat. Kostra se skládá z kostí (někdy se říká kloubů), kde každá kost zodpovídá za pohyb určité části. Robot je rozdělený na 14 rigidních fragmentů (každá končetina je ze 3 částí plus trup a hlava). Prostřednictvím algoritmických výpočtů se definuje pozice a rotace jednotlivých kostí. Můžeme to tedy popsat stylem „chci, aby robot natáhl ruku ke kostce“ místo určování „paže bude v této pozici, předloktí v této pozici, ruka v této pozici.“

Obrázky 1 a 2 právě toto vyobrazují. Červené kruhy značí dopřednou kinematiku, kde se musí určit rotace kostí od paže až k ruce, zatímco modré kuličky určují „robotův cíl“ a zbytek kostí se vypočítá.
Animace se zaznamenává pomocí klíčových snímků, mezi nimiž se pozice interpoluje. Každá kost ukládá vlastní klíčové snímky. Proto je složité vyjádřit, kolik je použito pohybů v animaci.

Na obrázku 3 lze vidět rozhraní. Časová osa určuje snímky v animaci. Šedé kruhy na časové ose značí klíčové snímky kostí (každý řádek představuje jednu kost). Interpolaci, která dopočítává pozici kostí mezi klíčovými snímky, lze upravovat pomocí grafového editoru (vpravo uprostřed), vyznačená červená křivka vyjadřuje, jak se mění rotace jedné kosti v jedné ose mezi klíčovými snímky.

Obrázek 1                                       Obrázek 2                                       Obrázek 3

„Animace jednoho pohybu robota záleží nejvíce na zkušenostech animátora a složitosti daného pohybu. Vytvářet základní pohyby mi zpočátku trvalo několik hodin, ale vylepšovat je, doplňovat další detailní pohyby a dělat drobné úpravy, to bylo často otázkou dní,“ přiznává Oldřich. Ve spolupráci s kolegou Jiřím Kubištou se postupně proces zrychlil.

„Ve videohrách se často vytvoří základní pohyby, které se potom míchají dohromady (přechody z jedné animace do druhé, například z běhu do chůze), ale takto míchané pohyby obvykle nevypadají příliš dobře, proto jsem vše animoval ručně,“ dodává Oldřich.

Co se týče výpočetního výkonu, samotné rozpohybování robota není v tomto ohledu náročné. Výpočetní výkon je důležitý zejména pro finální render, kdy se vykresluje robot ve vysoké kvalitě (samotný robot je složen ze zhruba 536 000 vrcholů a 1 067 000 polygonů/trojúhelníků). Zároveň se vykresluje scéna, kde jsou pro realistické zobrazení potřebné složité výpočty pro použité materiály, osvětlení a podobně.