Animace postav ve hrách

Posted: 26/02/2013 by Jack in Úvahy

Příprava nového, plnohodnotného postu mi trvá déle, než jsem čekal (i díky dovolené na horách), ale je totálně na cestě. Fakt. Mezitím si můžete přečíst moji semetrálku z roku 2009 pro předmět “Počítačová grafika v aplikacích IS”. Nechal jsem ji tak, jak jsem ji napsal, se všemi chybami, překlepy, nepřesnostmi a podobně.

Úvod

Cílem této práce je seznámit čtenáře s vývojem zobrazování postav v počítačových hrách a nastínit budoucí směr vývoje. Na počítačové hry jsem se zaměřil proto, že právě tam se objeví většina nových postupů a právě tam je nejtěžší je implementovat. Ve filmech nebo statické fotografii máte dostatek času na vytvoření scény, nejste nijak závažně limitováni výpočetní silou nebo časem a spoustu nedostatků můžete zakrýt různými technikami – šikovnou prací s osvětlením, kamerou, střihem apod. V počítačových hrách je vše tvořeno v reálném čase, na spoustě různých sestav o různém výkonu a musíte být připraveni na každou možnost, kterou budou chtít hráči prozkoumat.

Sprajty

Jak tedy dostaneme do počítačové hry postavu? Jednoduše. Nakreslíme si ji. Sprajt je obyčejný, dvojrozměrný rastrový obrázek, který je zasazený do nějaké větší scény, ať už dvojrozměrné nebo trojrozměrné. Využívají průhlednost, indexované barvy a transformace jako zvětšování a zmenšování, otáčení, překlápění a v některých případech i detekce kolizí. Jejich výhodou je to, že nejsou náročné na výpočetní výkon a jejich implementace je poměrně jednoduchá, mezi nevýhody patří pracnost na vytváření a nedostatek detailů. Protože je pro každý úhel pohledu potřeba vytvořit nový sprajt, jsou sprajty nejvhodnější k zobrazování objektů, které vypadají ze všech stran stejně (a nebo alespoň podobně), objektů, u kterých je jedno, ze které strany se na ně díváme a nebo objektů, které existují pouze krátkou dobu. I v nejmodernějších hrách a filmech se sprajty používají například k zobrazení trávy, ohně, jisker a tak podobně.
Jsou čtyři základní způsoby, jak vytvořit sprajt:
Ručně – Sprajty se nakreslí v nějakém grafickém programu. Tyto sprajty vypadají „kresleně“ a je těžké dosáhnout iluze hloubky.

Porovnání sprajtů z her Street Fighter 2 (1991) a Super Street Fighter 2 Turbo HD Remix (2008)

Rotoskopie – Nejdříve se zdroj sprajtu natočí na film, a poté se políčko po políčku překreslí. Sprajty tak vypadají o něco realističtěji a trojrozměrněji, na druhou stranu je ale problém natočit takto nějaké speciální efekty.

Johnny Cage ze hry Mortal Kombat (1992)

Hlínová animace – Ve spolupráci s rotoskopií, částečně řeší problém speciálních efektů.

Goro ze hry Mortal Kombat (1992)

Předrenderované 3D modely – Vytvoří se 3D modely, složitější, než by bylo možné renderovat v reálném čase na cílové konfiguraci, a z nich se vytvoří sprajty. Tento způsob se příliš neuchytil, protože je pro něj potřeba vytvořit 3D model, rozpohybovat ho, a poté se z něj udělá sprajt, který ztratí velké množství detailů.
Na pomezí 2D a 3D grafiky stojí ještě jeden způsob, který se poprvé objevil ve hře Another World – dvourozměrná vektorová grafika. Nedávno byla tato hra znovu vydána pro Windows a právě díky tomu bylo možné hrát ji i ve vyšším rozlišení bez kostičkování obrazu. Tento způsob byl ve své době převratný, bohužel se ale neuchytil.

Another World (1991)

3D modely

V předchozí části jsem mluvil o předrenderovaných modelech. Co to ale vlastně znamená? Jak takový model vůbec vzniká a z čeho se skládá?

Drátěný model Lary Croft ze hry Tomb Raider (1996)

Na začátku je vertex. To je bod v prostoru určený třemi souřadnicemi. Samotný vertex, ani dvojice vertexů která vytvoří úsečku, nás příliš nezajímají, protože mají nulovou šířku a nebyly by vidět. Ze tří vertexů ale vznikne trojůhelník – polygon. Ten už má plochu, a tak z nich můžeme například vytvořit krychli (2 trojúhelníky na čtverec, 6 čtverců na krychli = 12 polygonů), a máme první jednoduchý 3D model. Na to, abychom vytvořili model, který bude mít tvar člověka, potřebujeme jen o pár (desítek tisíc) polygonů víc.

Vystínovaný model Lary Croft ze hry Tomb Raider (1996)

Teď máme něco, co vypadá jako hrubě otesaná socha. To proto, že na polygony sice dokážeme aplikovat nasvícení, ale na barvu a jemnější detaily potřebujeme ještě texturu. Textura je klasický 2D rastrový obrázek, do kterého se 3D model „zabalí“ a to mu dodá na realističnosti, barvě a detailech. Dále můžeme na povrch modelu aplikovat různé efekty,např. lesklost, zvrásnění povrchů a podobně. Tím dostaneme zase o něco realističtější vzhled.

Otexturovaný model Lary Croft ze hry Tomb Raider (1996)

Teď, když jsme zabalili model do textury, máme něco, co vypadá jako oblečená figurína. Čím se člověk liší od figuríny? Hýbe se! A jak tedy rozhýbat 3D model? Můžeme pro každý vertex nastavovat polohu v čase a způsob, jakým se má dopočítat cesta mezi původním a novým bodem (př: bod A se může pohybovat do bodu B po přímce, a nebo třeba po kružnici se středem v bodě C). Ale to je velice pracné, zvláště u modelů s velkým počtem polygonů. Proto se používá hlavně tam, kde nejde uplatnit skeletální animace, tj. například na animaci látky, výrazů ve tváři apod.

Skeletální animace

Pro postavy se využívá skeletální animace. Skelet (neboli kostra) je model, který slouží jako zjednodušení pohybové soustavy objektu, který modelujeme. U modelu člověka (nebo jiného živého tvora) by jako základ sloužila páteř, kyčelní klouby, kolena, kotníky, ramena, lokty, zápěstí a hlava. Složitost se může lišit – páteř může být jeden celek a nebo složena klidně ze všech 34 obratlů. Čím složitější model, tím větší přesnost pohybů, ale zároveň větší pracnost animace, takže je potřeba najít rozumný kompromis. Jednotlivé části jsou spolu propojeny, takže když pohneme jednou částí těla, části na ní závislé se pohnou také. A jak se to aplikuje na model? Vertexy nemusí mít polohu definovanou pouze absolutně, můžeme tedy určovat polohu (a pózu) modelu tak, že polohu jednotlivých vertexů nadefinujeme relativně ke kostře, takže když se pohne kostra, pohne se celý model.
Poté už je jen otázka, jak rozpohybovat kostru. Zde opět můžeme animovat každý vertex samostatně, můžeme použít techniky jako je motion capture a nebo můžeme použít software pro dynamickou generaci pohybu.
Motion capture určitě znáte. Herec nebo kaskadér na sobě mají speciální oblek s reflexními body na kloubech a dalších místech (podle toho, jak detailní používají kostru), kamerou se nasnímá jejich pohyb a ten se pak přenese na kostru.
Výhodou skeletální animace je možnost jednoduché animace a možnost transformovat pohyby na jiné kostry (např. pokud chceme použít stejné pohyby pro kostru, která má třeba delší nohy apod.), nevýhodou pak to, že se nejedná o přesnou reprezentaci pohybové soustavy – kostra nezahrnuje všechny kosti, nezohledňuje jejich pohyblivost a vůbec nepočítá se svaly – takže animace nemusí být úplně realistická. Navíc, když už máme všechno hotovo, pak máme pouze paletu pohybů podobně, jako u sprajtů a když potřebujeme pohyb, který v této paletě není, musíme použít pohyb podobný nebo obecný. V této podobě pak model také není schopný dynamicky se přizpůsobovat okolí – např. pokud na to nemá nadefinovanou pózu, na nakloněné ploše bude stát nebo ležet úplně stejně, jako na rovné.

Ragdoll fyzika

Teď máme model s předdefinované animacemi, který můžeme zasadit do hry. Pokud to bude nějaká střílečka, budeme potřebovat nějakou animaci smrti, tak vytvoříme nějaký efektní pád pozadu k zemi. Co se ale stane, když náš model umře například na vrcholku úzkého schodiště? Místo toho, aby se skutálel dolu, provede animaci onoho efektního pádu a skončí buď napůl ponořený do zdi, a nebo bude viset ve vzduchu nad schody. Jak to tedy udělat, aby náš model reagoval na okolí, alespoň při smrti nebo podobných animacích? Použijeme „ragdoll fyziku“
Poprvé se ragdoll fyzika ve hře objevila v titulu Jurassic Park: Trespasser vydaném v roce 1998. O co se přesně jedná? Máme-li model s kostrou, můžeme místo předem připravené animace nechat program, aby vypočítal, jak by se model s kostrou choval pod účinky gravitace a jak by kolidoval s prostředím. Tento proces byl v roce 1998 výpočetně příliš náročný, nicméně již o několik let později se ragdoll fyzika uchytila. Název „ragdoll“ – hadrová panenka docela odpovídá – modely, které toto využívají se zhroutí bez života k zemi a často zůstanou v nepřirozených, někdy až komických pózách. Bylo potřeba několik vylepšení, aby se dosáhlo toho efektu, který je v dnešních hrách standartem


Nejprve bylo potřeba omezit pohyby kostry tak, aby odpovídaly skutečným kloubům namísto úplné volnosti ve všech třech osách, jak tomu bylo doposud.
Poté se začala používat technika, kdy se nejprve přehrála předpřipravená animace (takže model mohl být chvíli ponořen do zdi), po jejím skončení se aplikovala ragdoll fyzika a model se dostal do realistické pozice
V současné době se používá systém, kdy se přehraje předpřipravená animace, ale její výstup je omezen tím, co fyzikální systém dovolí. To produkuje velice realistický výsledek, ale je to nejnáročnější na výpočetní sílu, protože je potřeba počítat jak animaci, tak fyziku.

Dynamická syntéza pohybů

I když máme ve hře ragdoll fyziku, ve chvílích, kdy ji nevyužíváme jsme stále odkázáni na paletu pohybů, které jsme si naanimovali. Pokud mám pouze jednu animaci švihnutí mečem, budou všechny postavy švihat meči stejně, bez ohledu na to, jak jsou postavy silné nebo jak jsou meče těžké. To samé platí o chůzi a běhu s nákladem, o skocích a dopadech a vlastně všech ostatních pohybech. Ostatně ono i obyčejné udržování rovnováhy je samo o sobě malým biomechanickým zázrakem. V předchozím odstavci jsem zmínil, že lze mísit předpřipravenou animaci s ragdoll fyzikou, je to možné aplikovat i na jiné animace? Odpověď zní: „Ano, ale…“


Problém je v tom, že předchozí činnosti jsou mnohem náročnější, než prosté úmrtí. Ne výpočetně, ne animačně, ale v tom, že se do nich ve skutečnosti zapojují nejen kosti, ale i svaly a nervová soustava. Když chceme, aby skok vypadal reálně, musíme vzít nejdřív v úvahu, že se nejdříve díváme, kam skočíme, pak se odrazíme a po dopadu udržujeme rovnováhu. Toto všechno musíme do hry nasimulovat, aby všechny možné skosy vypadaly reálně. Jistě, je to výpočetně složité, ale daleko větší problém je zjistit, jak se vlastně lidé (a jiní tvorové) v takovýchto situacích chovají, jak se rozhodují, jaké typické pohyby vykonávají apod. V roce 2006 se poprvé objevil engine na dynamickou syntézu pohybů – euphoria od firmy NaturalMotion. Ten v sobě spojuje simulaci kostry, svalové a nervové soustavy a vznikl jako komerční aplikace výzkumu Oxfordské univezity v oblasti zoologie.
V době psaní této práce byl engine euphoria integrován pouze do dvou her, GTA 4 a Star Wars: Force Unleashed. Oba dva tituly jsou vysokoprofilové a vysloužily si poměrně vysoká hodnocení jak od kritiků, tak od spotřebitelů, takže se snad v blízké budoucnosti dočkáme integrace do dalčích her. Mezitím si můžeme vyzkoušet možnosti této technologie v programu endorphin, který je v „učební verzi“ k mání zdarma a nemá ani zdaleka tak vysoké hardwarové nároky, jako výše zmíněné tituly.


Endorphin je program, který umožňuje pózování modelů, vytvoření prostředí a jejich rozpohybování. Jde tam hlavně o vytvoření realisticky vypadajícího pohybu a jeho export do jiných animačních programů, takže modely jsou nízkopolygonové a neotexturované. V tomto ohledu se s programy, jako je Poser nebo DAZ Studio nemůže rovnat, oproti nim má ale spoustu jiných výhod. Obsah si tvoříte sami – není vůbec nic těžkého z několika základních geometrických tvarů vytvořit schodiště se zábradlím, stůl s židlemi a další rekvizity, takže je nemusíte za drahé peníze dokupovat. Na oficiálních stránkách jsou k dispozici video tutorialy, podle kterých je opravdu jednoduché naučit se tento program používat, takže jeho vyzkoušení můžu jen doporučit, neboť se domnívám, že právě tohle je směr, kterým se bude počítačová animace v budoucnosti ubírat.

Uncanny Valley – Zlověstné údolí

V této práci jsem se věnoval tomu, jak vytvořit co nejrealističtejší obraz člověka ve virtuálním světě. Bohužel, nebyly by to počítače, aby se někde neobjevil nějaký neočekávaný háček. V tomto pípadě se jedná o fenomén tzv. „Zlověstného údolí“ . Čím víc se nějaká reprezentace člověka podobá skutečnému člověku, tím více se lidem líbí. V okamžiku, kdy je podoba už téměř dokonalá, však nastává prudký propad, k takovémuto „téměř dokonalému“ obrazu člověka pak může divák chovat negativnější emoce než k něčemu, co člověka připomíná jen málo. Věřím, že přesné účinky tohoto fenoménu jsou individuální, já sám můžu potvrdit, že na mne působí hodně negativně některé modely z programů, jako je Poser nebo DAZ 3D.


Toto samozřejmě představuje další překážku ve vývoji 3D modelů, není to ale naštěstí úplně špatná věc. Jednak je možné vytvářet modely, které jsou za „Zlověstným údolím“, jednak se také tvoří hry, které nevsázejí na totální realismus (spolu s jeho univerzálním pravidlem „Realita je hnědá“), ale na silnější uměleckou stylizaci a často vypadají jako z kreslených či plastelínově animovaných filmů.
Navíc, hry a filmy prakticky vždy vyprávějí nějaký příběh a tím vytvářejí prostor pro fantazii. U starých her s nekvalitní grafikou stačilo některé detaily pouze naznačit, a zbytek si doplnil divák sám, podle toho, jak zrovna ten příběh prožíval. Pokud budeme mít naprosto dokonale modely, které si budeme moci prohlédnout zblízka z každého úhlu, zbyde nějaký prostor pro představivost?

Advertisements

Zanechte komentář

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s