reklama
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.

Softwarové rendery (architektonické apod.)


Na rozdíl od herních enginů jsou softwarové rendery koncipovány zcela odlišným způsobem. U her se používá dost výrazných berliček a zkratek, kdežto klasický softwarový render (dnes už možnost urychlení pomocí GPU) se snaží být co nejvíce fyzikálně korektní. Snaží se přiblížit emisi fotonů z různých zdrojů světla a jejich odrazů od objektů ve scéně. Naopak hry obvykle používají pouze přímé osvětlení a pro navození realističnosti pouze přidávají Ambient Occlusion. Jak tedy tyto běžné rendery pracují?


Fáze první

Emise "fotonů" (neboli paprsků) ze zdrojů světla. Těchto paprsků je obvykle vysíláno několik miliónů, paprsky se odrážejí od objektů, získávají různou barvu a postupně jsou pohlcovány v závislosti na objektu (na který dopadnou) a počtu odrazů. Takovýto výpočet se běžně nazývá Ray Tracing (RT). Tradiční RT však počítá s velmi malým paprskem, který když dopadne, vytvoří obvykle bod o velikosti jednoho pixelu. Architektonické rendery však nevytvoří místo o velikosti jednoho pixelu, ale řádově výrazně větší. Tím si ušetří práci a distribuci světla ve scéně provedly za co nejkratší čas. Paprsky se různě mezi sebou překrývají a následně interpolují. Díky tomu vzniká velmi měkký dojem ze scény.




- princip LightTrace -


Tato metoda se zpravidla nazývá LightTrace, či jednoduše GI (GI je sice obecný název, ale řada renderů je používá právě pro tento princip).

Z tohoto principu však jasně vyplývá, že nelze vypočítat osvětlení pro malé detaily (obvykle různé spáry apod.). Paprsky by musely být výrazně menší a muselo by jich být také mnohonásobně víc. Výpočet je velmi náročný, a tak si to moc dnešní počítače nemohou dovolit. Proto nastupuje druhá fáze.


Fáze druhá

Druhá fáze přistupuje k osvětlení výrazně odlišným způsobem. Paprsky nejsou vysílány ze zdroje světla, ale z kamery. Tím se jejich počet výrazně eliminuje a doba výpočtu závisí hlavně na požadovaném rozlišení a složitosti scény. Popišme si cestu jednoho paprsku vyslaného z kamery. Tento paprsek se při kolizi s nějakým objektem rozpadne na určitý počet dalších paprsků (obvykle do 100). Tyto paprsky putují následně scénou a mají velmi omezený počet odrazů (třeba pouze jeden nebo vůbec žádný). Tyto paprsky nejsou schopny zohlednit celou scénu (respektují aktuální pohled kamery) a všechny zdroje světla. Starají se pouze o dokreslení detailů a jemných stínů. Teorie je sice výrazně složitější, ale podrobně se jí věnovat není záměrem tohoto článku.




- druhá fáze osvětlení -


Tyto metody se obvykle nazývají Final Gather, IrradianceMap apod.

Po těchto dvou základních fází často nastupuje fáze Ambient Occlusion (ta však není "povinná"), kterou už znáte z herních enginů. Všechny tyto fáze se složí do jedné výsledné a proběhne finální výpočet obrázku s Antialiasingem, měkkými stíny atd. Zde čtenář "Keymaster" poznamenal, že efekt AO se aplikuje ještě před celým výpočtem GI. To je pravda jen z části. Záleží totiž na použití a požadovaném efektu AO. Někdy se totiž AO používá ve smyslu "dirt" a v tomto případě je třeba aplikovat na začátku. V praxi se však používá AO (opravdu AO a ne dirt) až na konci.


Efekty Motion Blur a Depth Of Field

Tyto efekty se v architektonických renderech obvykle počítají opět pomocí RT a tím dochází k dalšímu zpomalení výpočtu. U rozmazání pohybu je třeba navíc počítat se sub-framy. U lineárního pohybu to není tak důležité, ale u rotačního je třeba spočítat i několik sub-framů, aby byl efekt rozmazání pohybu korektní. Pokud se totiž např. točí vrtule helikoptéry a v jednom snímku má rotaci 0 stupňů a v druhém např. 120 stupňů, efekt rozmazání pohybu bez sub-framů by jí interpoloval, jako lineární pohyb. Musejí se tedy dopočítat sub-framy. Více na následujícím obrázku.




- Motion Blur bez a s výpočtem sub-framů -


Efektu DOF jsme si již věnovali v předchozích kapitolách, a tak to už není třeba opakovat.


Fyzikální rendery

Dalším odvětvím jsou striktně fyzikálně založené rendery, jako je Maxwell, Octane, FryRender (znáte např. z testů FryBench), Arion Render (FryRender pro GPU+CPU). Tyto rendery využívají vlnovou povahu světla, pracují velmi dobře např. s disperzí, kaustikou a podávají opravdu realitě podobné výsledky. Pokud máte kvalitní textury a dobrý model, tak prakticky nepoznáte render od fotografie. Vycvičené oko to s pomocí Photoshopu samozřejmě může dokázat, ale na první pohled je to dost složité.

Je tedy vidět, že výpočet v běžných softwarových renderech je výrazně složitější než u herních enginů. A to jsme zde pouze nakousli technologii a neřekli si nic např. o IradianceParticles atd. Také je třeba si uvědomit, že veškeré odlesky a prostupy světla jsou počítány pomocí RT. V těchto renderech se to tedy paprsky jen hemží a jsou naprosto odlišné od herních, které využívají metodu RT ve velmi omezené míře, pokud vůbec.

Pro porovnání rychlosti: Výpočet jednoho snímku do produkční kvality v rozlišení např. 1920x1200 může trvat na 8vláknovém PC i 1 hodinu. Na GPU se tento čas zkrátí na cca 15 min. To je tedy 0,001 FPS, což nestačí ani na tahovou strategii :-).


Technologie používané ve filmech


A protože si rozebíráme grafické enginy her a porovnáváme s reálným světem, tak je třeba se zaměřit i na další oblast. Tím jsou rendery pro filmařský průmysl. Zde se z 99 % používá slavný Pixar RenderMan. Tento render se daleko více podobá herním enginům. Používá různé zkratky, urychlení a kombinuje výpočet pomocí GPU a CPU pro odlišné efekty. Např. pomocí GPU se spočítají vlasy, chlupy a částicové systémy. Naopak pomocí CPU proběhne výpočet osvětlení a finální kompozice snímku.





Architektonické rendery jsou co nejblíže reálnému světu a pro výpočet scény jsou založeny z 90 % na výpočtu osvětlení a z 10 % na zbytkových výpočtech. Naopak filmové rendery využívají jen 10 % síly na výpočet osvětlení a zbytek na efekty a finální kompozici. Obvykle si vystačí s jednoduchým hybridem mezi Ambient Occlusion a Final Gather. Zbytek scény je osvětlen pomocí přímého zdroje světla a simulován různými efekty.

Např. rendering kůže je v architektonických renderech počítán pomocí RT v podání pravého SubSurfaceScattering (SSS). Naopak ve filmovém renderu je objekt jednoduše zvoxelován (objem je vyplněn voxely - body s určitou velikostí). Na tomto voxelovém modelu můžeme jednoduše spočítat, kolik bodů je za sebou při pohledu z kamery a tím určit konkrétní průsvitnost resp. efekt SSS. Výpočet SSS trvá tedy jen zlomek času než architektonickým renderům. Sice není zcela přesný, ale toho si nikdo ve filmech nevšimne. Hlavně že je dostatečně "měkký".

Obecně je voxelizace ve filmařských renderech (konkrétně RenderMan) používána v hojné míře. I pro výpočet osvětlení se obvykle použije voxelový model, který je pro počítač velmi nenáročný na paměť (vzpomínáte si např. na hru Terra Nova, která běžela na 486, či první díl Comanche, který poskytoval překrásný terén a běhal i na málo výkonných strojích?). Díky voxelům se mohou na objektech počítat pěkně měkké okraje či kůrky u pečiva.

Pokud není využito voxelů, využívá se např. tzv. Vertex Weight. Každý vertex modelu má přiřazenou určitou váhu a podle této hodnoty se může zabarvit difuzní barva, změnit reflexe atd. Zde si pouze musí grafik pohrát s malováním těchto hodnot na objekt (skutečně se používají štětce a přítlak tabletu).




- kreslení hodnot na vertexy v programu Maya -




- výsledný render -


Všimněte si světlejších okrajů steaku, které jsou dány právě hodnotou Vertex Weight.

Používají se také volumetrické 3D textury, ale opět s určitým omezením. Na následujícím obrázku je ukázána textura pro rendering pečiva v Ratatouille.




- volumetrická textura pro pečivo -


Všimněte si, že ona volumetrická textura na krychli sice vytváří dojem porézního materiálu, ale na svém okraji je to stále pořád striktně geometrická krychle. Díky tomu je výpočet opět urychlen a pro film se více než hodí.


Blury reflextion a refraction

Zde narážíme opět na rozdíl mezi fyzikou, architektonickým a filmovým renderem. U architektonických renderů podobajícím se fyzikálnímu chování se měkké odrazy a průsvity počítají rozpadem RT paprsku na několik desítek či stovek dalších. Naopak u filmového renderu či herního enginu se používají jednoduché shadery, která aplikují např. gaussovské rozmazání na průsvit či odraz. Tím je výpočtu velmi ulehčeno, ale opět se nepodobá realitě. Mléčné sklo totiž pro oko rozmaže jinak objekt, který je za ním v blízké vzdálenosti a jinak objekt, který je mnohem dále. Postava jdoucí k takovémuto sklu by zpočátku nebyla vůbec zřetelná, postupně by se její kontury rozjasňovaly a až by byla v nulové vzdálenosti od skla, byla by zcela ostrá. To bohužel neplatí u zjednodušených herních a filmových renderů.




- rozmazání pomocí jednoduchého shaderu ve filmu Wall-E -


Na předchozím obrázku si také můžete všimnout výrazného použití Ambient Occlusion (spodní hrana skla či v pozadí trup lodi). A takto bychom mohli pokračovat dál a dál. Principů je obrovská spousta, ale zaměření našeho webu na hardware s tím až tolik nesouvisí, a tak si to necháme zase na příště.
reklama