Gothic 3 a jeho technologie
Autor: Vilém Otte
Vydáno: 18.4.2008
Osvětlení
Žádná z her zatím bohužel nepoužila dynamickou simulaci reálného osvětlení (šíření fotonů v prostoru), ovšem jsou osvědčené metody, jak dosáhnout přímého (popř. nepřímého, tzv. okolního, osvětlení). Gothic 3 používá pouze přímé osvětlení + statickou konstantu pro okolní světlo pomocí tzv. Phong/Blinnova modelu osvětlení. Nejprve se bavme o tzv. dopadovém světle - to spočítáme jako kosinus úhlu mezi přímkou od světla k danému trojúhelníku a přímkou po normále trojúhelníku (normála je kolmice k rovině, resp. N-úhleníku) - neboli tzv. operace N dot L (skalární součin normalizované normály a normalizovaného vektoru od bodu světla k trojúhelníku nám dá kosinus úhlu mezi nimi). Dále se podívejme na tzv. odražené světlo - které lze vidět např. na vodě, to spočítáme jako kosinus úhlu mezi součtem normalizovaných vektorů od kamery k trojúhelníku plus od světla k trojúhelníku (tzv. Half vektor) a normálou daného trojúhelníku, výsledek umocníme na číslo rovné lesklosti povrchu (předtím však "ořízneme" funkční hodnoty na 0.0 - 1.0, místo -1.0 - 1.0). Tyto koeficienty poté vynásobíme s texturou barvy (tzv. diffuse map), resp. Texturou odrazivé barvy (tzv. specular map). Toto osvětlení nám vyústí ve výsledek osvětlení po vertexech (popř. v pixelech, pokud vše provádíme na každém pixelu - např. v pixel shaderu, ovšem bez nerovností)
Několik světel simulovaných Phong/Blinnovýnm modelem světla
Normálové mapování (dále normal mapping)
Normal mapping je technologie, kdy se místo normály trojúhelníku použije pixel z normal mapy. Existují 2 způsoby normal mapping - statické v prostoru objektu, nebo dynamické v tangenoidálním prostoru (angl. Tangent space). Gothic 3 používá tangent space normal mapping, protože jeho modely nejsou orientovány pouze jedním směrem. Pro tento způsob potřebujeme znát nejen normálu, ale i další tzv. perpendikulární vektory k ní (kolmé vektory k normále) - tzv. tangenoidní vektory. Těch je nekonečně mnoho, my však potřebujeme jenom dva, jeden ve směru od 1. bodu v trojúhelníku ke 2. bodu v trojúhelníku - tzv. tangent vector - a druhý od 1. bodu v trojúhelníku ke 3. bodu v trojúhelníku - tzv. bitangent, někdy nazýván také binormal, vektor (který je též roven vektorovému součinu tangent vektoru a normály). Abychom získali světlo natočené správně k normal mapě (což je jednodušší a rychlejší operace než natáčet normal mapu ke světlu), musíme normalizovaný směr světla od bodu světla k trojúhelníku vynásobit maticí, ve které jsou ve sloupcích po sobě uloženy vektory tangentu, bitangentu a normály (v řádcích jsou tedy jejich rozměry X, Y a Z plus komplexní hodnota W). V Phong/Blinnově osvětlovacím modelu stačí nahradit směr světla tímto směrem světla (tzv. směr světla v texturovém prostoru) a normálovou mapu místo normály trojúhelníku. (Half vektor se bude násobit také touto maticí pro normálové mapování odraženého světla).
Na tváři orka lze pozorovat efekt normal mapping, Postavy (a nejen postavy - i ostatní objekty ve scéně) zase vrhají stín na okolí pomocí shadow mappingu
Stínové mapování
Odpočineme si od vysvětlování Phong/Blinnova modelu světla a jejich obměn a vrhneme se na to, jak se dělají stíny (pro vás v reálu samozřejmost, pro raytracing pozitivní lidi také - ale ten je složitý dosáhnout v reálném čase, pro rasterizaci je třeba používat nějakou osvědčenou fintu). K těm se v Gothic 3 použila metoda stínového mapování a projekce dynamických texturových bufferů, namísto stínových těles (viděny např. ve hře Doom 3), je to více-fázový algoritmus (má 2 fáze). V první fázi se nastaví kamera do pohledu směrem ze světla k hráči a uloží do textury vzdálenost pixelů v hloubkovém bufferu od bodu světla (resp. kamery). Ve druhé fázi, promítneme tuto texturu z bodu světla směrem k hráči, tzn. Projektována je pouze nejbližší vzdálenost od světla k objektům (ta uložená v textuře!), tam kde nebude sedět se skutečnou vzdáleností od světla je stín (tzv. depth compare - česky porovnání hloubek). Tato metoda je rastrově založená, a je nutné stín rozmazávat, aby nebyl pixelizovaný. Bohužel v Gothic 3 byl proveden pouze malý filtr rozmazání, takže stíny nejsou dokonalé (rozmazání je jedna z nejnáročnějších operací!). Pro bodové světla je nutné promítat rovnou 6 stínových map - do každé ze stěn "krychle" kolem bodu světla. Pozn. Rozmazání stínových map je náročné při standardním stínovém mapování (protože provádíme O(n*n) operací pro rozmazání), lze však použít rozptylové mapování stínů (tzv. variance shadow mapping), kde je potřeba pouze O(n) operací, bohužel se však zde musí řešit pomoci pravděpodobnosti a Čebyševovy nerovnosti, která je často numericky nestabilní - je nutné používat další výpočty pro odstranění problémů (i přesto je však tato metoda mnohem rychlejší).
Refrakce a reflekce
Reflekce a refrakce (neboli odrazy a lomy okolí na objektech) jsou důležitou součástí reálného světa - to je jeden z hlavních mezníků, který ještě pořád dělí PC grafiku her a reálný svět. Gothic 3 si v tomto případě nevede úplně nejlépe, ale není na tom ani nejhůře (pro obrovský dynamický svět je na tom velice dobře!) - nejvíce patrné jsou tyto jevy na vodní hladině (popř. kovu na zbrojích a zbraních, lesklých mramorových podlahách, zrcadlech, atd.), budu se věnovat hlavně vodní hladině - bohužel okolí nakonec neodráží (což je docela škoda), avšak jde v ní vidět lom pod hladinou, který se chová víceméně fyzikálně správně, čímž mě Gothic 3 docela překvapil (pro statický svět, jako v případě Half Life 2 je to jednodušší a méně náročné). Jde zde hlavně o tzv. disorci povrchu pod vodní hladinou - kdy používáte normálovou mapu (resp. Pokud chcete být korektnější tak tzv. DUDV mapu, jenž je derivací normálové mapy) a posouváme koordináty pro povrch pod hladinou, který máme uložený v textuře (renderujeme veškerý povrch pod hladinou do dalšího texturového bufferu) abychom mohli lehce "offsetovat" texturu.
Refrakce ve vodě vypadá velice realisticky, škoda že chybí odraz okolí
Depth of Field (dále jen DOF)
Česky tzv. hloubka ostrosti, ti co se věnují fotografování pravděpodobně vědí, že se jedná o zaostřování scenérie. V Gothic 3 byl implementován statický DOF, kdy je vzdálené okolí rozmazáno a blízké okolí je ostré. Jedná se o po procesní efekt, který rozmazává v závislosti na vzdálenosti pixelu v hloubkovém bufferu od kamery. Jelikož se jedná o po procesní efekt, není možné provést antialiasing pomocí hardwaru (na dnešních kartách by to bylo možné pomocí multisamplingu v render bufferech - např. GeForce 8800 GTX už tuto funkci podporuje), bylo by sice možné ho provést ručně pomocí multisamplingu, nebo kvalitnějšího supersamplingu - bohužel však je tato implementace celkem náročná na provedení tak, aby běžela v reálném čase.
Viditelný efekt hlouby ostrosti - postava je zaostřena, ruiny v dálce rozostřené
Bloom efekt
Jedná se o efekt, který slouží k tomu, aby zářivé objekty ve scéně opravdu zářily, je to buď cílený produkt (v případě Gothic 3), nebo vedlejší produkt plnohodnotného renderování za vysokého dynamického rozsahu (angl. High dynamic range rendering = HDRR = HDR). Efekt se provádí tak, že zmenšíme finální buffer na poloviční velikost, umocníme na druhou a přičteme k finálnímu bufferu (a protože byl zmenšen, dochází k malé pixelizaci, ta se řeší malým rozmazáním bloom textury) - to nám zajistí, že světlé oblasti "září" a tmavé oblasti se nám zdají skutečně tmavé. Plnohodnotné HDRR by nám dalo jako vedlejší produkt také provádění změny celkové světelnosti scény bez ztráty barevného rozsahu.
Viditelný bloom efekt především mezi nebem a vzdáleným hradem zvaným Vengard
Ageia PhysX
Fyzikální balík NovodeX fyziky nám ukazuje pouze velmi malou část svých celkových schopností v této hře (i tak je Gothic 3 fyzikálním modelem opravdu špičkou), můžeme vidět zbraně, zvířata, atd. jak se velmi realisticky chovají při dopadech pomocí fyziky pevných těles a tzv. ragdoll fyziky. Nebyly však použity další vychytávky NovodeX fyziky jako např. měkká tělesa (soft bodies), dynamika kapalin (fluid dynamics), simulace oblečení (cloth), plechu (metal cloth), atd. Pozn. Sám s fyzikou NovodeX už nějakou dobu pracuju a sám můžu poznamenat, že je to jeden z nejlepších, ne-li nejlepší ze všech dostupných fyzikálních modelů. Doufám že Nvidia bude v tomto prvenství pokračovat i nadále potom, co koupila firmu Ageia. Takže nezbývá mi než říct - zvolili jste velmi dobře Piranha Bytes.
Umělá inteligence
Gothicy vždy měli umělou inteligenci naskriptovanou a i u třetího dílu vsadili na tuto osvědčenou metodu. Na rozdíl od Oblivionu se jim inteligence nechovala v některých chvílích zvláštně (což dynamická umělá inteligence často dělává), nýbrž se vždy chovala tak, jak chtěli - ve výsledku bylo chování o něco málo více uvěřitelné, ovšem po nějaké době se stalo rutinním (naštěstí Gothic 3 má docela velkou oblast, takže to nešlo moc vidět).
Co nás čeká dál?
V odvětví grafiky je celkem jasno - ATI i NVidia zůstanou u své zaběhnuté rasterizace, budou zvětšovat počet render bufferů, zrychlovat karty a zvětšovat paměť. Já sám jsem velkým zastáncem raytracingu, který má velmi krásnou budoucnost, osobně nyní používám hybridní vykreslovací systém - který bude dle mě výsledkem kombinace těchto metod, každá má své klady i zápory, proto se budeme snažit využívat klady a odstranit zápory obou metod. Každopádně abych nakousl něco z budoucnost RPG her a jejich grafických technologií obecně, přikládám pár screenshotů z chystaného projektu na hybridní vykreslovací metodě. Samozřejmě budou přibývat nové efekty - jako nepřímé osvětlení z okolí, realistické vody, fyzikálně správných stínů, hustšího porostu, větších textur, vyššího počtu polygonů, více světel, více realističtějších částic, atd. Jak bude např. vypadat The Elder Scrolls 5? Gothic 4? RPB? A ostatní RPG hry? - to je zatím vše v moci programátorů.
Následně nahlédněme do věšteckého okénka fyzikálních efektů - určitě můžeme očekávat reálně se vlnící oblečení, správnou dynamiku kapalin, rozsekávání předmětů, poškozování plechu na rytířích, a další. NovodeX fyzika od NVidie už vše toto podporuje (podobně je na tom i Havok od Intelu), jenom záleží jak moc si autoři s jejich fyzikálním modelem poradí.
Umělá inteligence také pozadu nezůstane, neuronové sítě, jež se sami učí určitě najdou uplatnění především v RPG hrách, kdy už nebude hráč jedinou postavou, která rozvíjí své schopnosti. Dokonce nebude ani jediná postava, která se seznamuje s ostatními, komunikuje s nimi, plní zadání jejich úkolů, nebo jen tak povídá v hospodě.
Budoucnost RPG her vypadá velice krásně, pokud na ni budou i nadále pracovat lidé z Piranha Bytes, Bethesda Softworks, Spellbound, ...





