Aktuality  |  Články  |  Recenze
Doporučení  |  Diskuze
Grafické karty a hry  |  Procesory
Storage a RAM
Monitory  |  Ostatní
Akumulátory, EV
Robotika, AI
Průzkum vesmíru
Digimanie  |  TV Freak  |  Svět mobilně

Grafické enginy her a reálný svět

23.2.2012, Pavel Kovač, článek
Grafické enginy her a reálný svět
V tomto článku se podíváme na enginy moderních her, porovnáme si je s reálným světem a se softwarovými rendery. Doba pokročila a dnešní hry již vypadají velice reálně. Čím se tedy liší od reálného světa a moderních rendering systémů? Doplněno o 4 kapitoly.
Aktualizováno 23.2.2012: Přidány kapitoly Depth Of Field a Motion Blur, Post efekty, Deffered shading a také Softwarové a filmové rendery.




Slovíčka pro začátek


Nejdříve si uvedeme krátký slovníček výrazů, které v tomto článku budu používat. Ti, kdo se v 3D pohybují, jistě už většinu těchto pojmů znají, a tak je klidně mohou přeskočit. Ostatní si však raději pročtěte alespoň některé fráze. Jde však pouze o opravdu stručný souhrn pojmů, které musíte bezpodmínečně znát pro orientaci v tomto článku, přičemž ty ostatní jsou vysvětleny dále.
  • Pixel = bod v obraze
  • Polygon = obecně jde o 2D mnohoúhelník. Ve hrách se často používá pouze trojúhelník, protože je pro grafickou kartu nejjednodušší zpracovávat.
  • Vertex = vrchol polygonu
  • Edge = hrana polygonu
  • Textura = bitmapa určená pro namapování na 3D model
  • RayTracing = metoda sledování paprsku
  • Render = v podstatě jde o vizualizaci dat, resp. přenesení modelu do 2D bitmapy. Existují softwarové rendery a hardwarové rendery. Softwarové jsou přesnější, počítá je procesor, ale trvají výpočetně mnohonásobně déle. Hardwarový render je použit pro náhledy a ve hrách.
  • Shader = program určený pro zpracování v grafické kartě
  • VertexShader = Provádí transformaci vertexů v jádře grafické karty. Např. posouvá pozici vstupního vertexu. Nikdy nové vertexy však nevytváří!
  • PixelShader = Po provedení programu z VertexShaderu je aplikován PixelShader, který namapuje texturu a aplikuje různé efekty jako je BumpMapping apod. Stará se např. i o odlesky atd.

Tak to je opravdu jen základní výčet pojmů. Pro naše účely však dostačuje.


Polygonální model


Začněme pěkně popořádku. Drátový model je základní stavební kámen pro každou dnešní moderní 3D hru. V reálném světě jsou objekty tvořeny z atomů, molekul apod. Všechny tyto mikročástice se spojí dohromady a podle jejich vlastností získává objekt barvu, průhlednost atd. Ve hrách a obecně ve 3D grafice však takto tvořit samozřejmě nelze. Proto se vymyslel polygonální model.

Polygonální model si lze představit jako různě v 3D prostoru poskládané trojúhelníky, které se svým uspořádáním snaží přiblížit reálnému objektu. Protože jsou však tyto polygony dost velké (u postav mají řádově několik centimetrů dlouhou hranu), tak se nemůžeme dostat na tak kvalitní model jako v reálném světě. Postupem času se sice modely hodně zjemňují (rozuměj zmenšují se ony trojúhelníky), ale stále se velikost polygonů od atomů liší o několik řádů.




Klasický polygonální model lidské hlavy




Vystínovaný polygonální model lidské hlavy




Vystínovaný a otexturovaný model lidské hlavy


Na prvním obrázku je vidět drátový model lidské hlavy. Všimněte si, že je opravdu tvořen z trojúhelníků, povšimněte si také jejich velikosti. Na druhém obrázku je ten samý model vystínován pomocí Gouraudova stínování. Na posledním obrázku je model již potažen texturou a opět vystínován pomocí Gouraud. Tento způsob vytváření 3D modelů se používá již delší dobu a aplikuje se dodnes (i když v poslední době se již často používá Phongovo stínování). Samozřejmě se používají jistá vylepšení pro vzhled, ale o tom si povíme něco později. Nyní berme v potaz pouze jednoduchý plošný model složený z trojúhelníků, který potáhneme texturou a vystínujeme pomocí velmi jednoduchého Phongova stínování.

Vidíte, že model jako takový je velice jednoduchý a teprve textura mu dodává na realističnosti. Takto vypadaly hry v době DirectX 6, kdy ještě neexistovaly Pixel a Vertex Shadery. Maximum, co šlo u takovýchto modelů používat, byla průhledná textura, která se používala např. na roztrhané vlajky vlající na stožáru apod. Dnes je však situace zcela jiná a je třeba se podívat na další technologie, které se používají u moderních her.


Zvrásnění povrchu (BumpMapping a jemu podobní)


Tato technologie přišla prakticky jako první efekt do 3D her, který výrazně posunoval kvalitu obrazu kupředu. BumpMapping dokáže opravdu hodně, dokáže nasimulovat jemné zvrásnění povrchu, aniž by byl modifikován a zesložiťován polygonální model. Samotný BumpMapping se ve velké míře používá dodnes a to jak u her, tak u 3D grafiky jako takové.



Model bez BumpMapy



Model s BumpMapou


Všimněte si okrajů objektu, který je i při použití BumpMapy stále hladký. Nemodifikuje se tedy polygonální model, ale jde pouze o efekt. Také stín vržený objektem s BumpMappingem je hladký a odpovídá polygonálnímu modelu. Obvykle to není na škodu, protože BumpMapping se používá na detaily v podobě vrásek v obličeji, či lehce vystouplého písma SPZky. Odrůda BumpMappingu je NormalMapping, který je vlastně to samé, akorát vzniká trochu jiným způsobem.

U NormalMappingu se textura vytváří z vysokopolygonálního modelu. Tato textura "normál" se poté namapuje na polygonální model s počtem polygonů i o několik řádů nižším než u původního modelu. BumpMapping a NormalMapping mají společnou nevýhodu. Zvrásnění vytvořené těmito metodami nevrhá na sebe (self-shadowing) stíny, a tak toto zvrásnění nevypadá moc reálně u povrchů, které jsou výškově hodně zvrásněné.


Použití Displacement


V 3D programech se dost často používá Displacement, který teseluje (zesložití) polygonální model před finálním renderingem a poté polygony posune ve směru normály. V tomto případě se již jedná o zesložitění polygonálního modelu, a tak se musí počítat s větší zátěží pro procesor.




Ukázka BumpMappingu


U her se však usídlila jiná technologie, která neteseluje objekty, ale využívá PixelShadery. Teselace přišla až později a je výhradou několika málo objektů. Ve své podstatě jde o podobnou technologii jako u BumpMappingu, avšak jde na to trochu víc kulišácky. Sice stále nezvrásňuje povrch jako takový a pokud se použije na jednoduchý jeden polygon, bude to stále z pohledu ze strany pouze přímka. Parallax Occlusion Mapping, tak zní celý název této moderní technologie, která se začíná usídlovat v dnešních hrách (používá ji CryEngine 2, Unreal Engine 3 a ze zatím nepotvrzených zdrojů i Source Engine u Half-Life 2 - Epizoda 2). Parallax Occlusion Mapping využívá metodu sledování paprsku, kdy se vyšle paprsek od pozorovatele a jakmile dopadne na povrch s Paralax Occlusion Mappingem, tak se aplikují transformace, resp. jde o čisté posunutí tohoto pixelu o nějakou hodnotu závislou na textuře Parallax Occlusion Mappingu.





Na předchozím schémátku je znázorněno, jak vzniká Parallax Occlusion Mapping ve 2D prostoru. Hlavní výhodou je fakt, že Parallax Occlusion Maping dokáže vrhat stíny sám na sebe (self-shadowing). Díky tomu se dá použít i na povrchy hodně zvrásněné, aniž by nevypadaly reálně. Často se tato technologie používá na dlažbu, kamennou cestu, cihlovou zeď bez omítky apod.




Ukázka Parallax Occlusion Mapingu v demu ATI - ToyShop


V demu od ATI ToyShop se zaměřili právě na Parallax Occlusion Mapping, který zde použili na kde co. Nejvýraznější je použití na kamenném chodníku, který se tváří skutečně hodně prostorově a prakticky nemáte šanci poznat, že se nejedná o čistě polygonální model, ale o PixelShader efekt.


Teselace


V dnešních moderních hrách se již teselace a potažmo pravý displacement používá. Jeho využití se však omezuje na několik málo objektů ve scéně. Obvykle se používá na postavy, kde dokáže domodelovat detaily na přilbě, pásek je opravdu vystouplý z kalhot apod. Bohužel teselace má jedno velké úskalí. Musí se totiž aplikovat na celý objekt. Zní to jako nepodstatný problém, ale je třeba si uvědomit, že ve hrách se snaží okolní prostředí vytvářet z co nejmenšího počtu objektů. Ušetří se totiž tak nemalé množství paměti (nemusíte držet polohu tisíců objektů, ale třeba jen stovky). Také se lépe řeší kolize a obecně fyzika. nesmíme také zapomínat na mršku v podobě železné košile u designérů. Ty zkrátka jsou nějakým způsobem zvyklí pracovat a krájet objekty jen pro drobnou změnu povrchu nemá smysl. Představuje to zkrátka práci navíc co využije/ocení mizivé množství lidí.




- teselace v masivním měřítku -


Vznikají tak občas komické situace, kdy je aplikována teselace na objekty resp. jejich části které to vůbec nepotřebují. Bohužel se musejí designéři teprve s tímto prvkem naučit zacházet a hlavně musí přijít teprve další generace herních enginů, které s teselací budou počítat už od počátku a nebude to přidaná funkce na poslední chvíli.
Doporučujeme náš velký přehled desktopových grafických čipů.