Technologie 3D grafiky: Jakým kouzlem se tvoří obraz?

Současné hry by se neobešly bez sestavování trojrozměrné scény. Za tímto procesem je ale celá řada technologií a složitých výpočtů. Pronikněte do tajů prostoru.
Kapitoly článku

Ohnout nebo roztáhnout

Následujícím krokem na cestě za 3D scénou je průchod geometry shadery. Součástí vstupních dat už není pouze jeden vrchol, ale všechny vrcholy tvořící některý ze základních útvarů – jeden vrchol pro bod, dva pro čáru nebo tři pro trojúhelník. Výjimkou není ani přiložená informace o přilehlých útvarech (opět ve formě definujících vrcholů), které mohou mít vliv na výstupní data. Je-li vstupem sada vrcholů, stejné je to také s výstupem po zpracování. Vzniklé vrcholy mohou tvořit jednu z topologií tristrip, linestrip nebo pointlist.

Tristrip
Trojúhelníková síť je z hlediska využití paměti nejlepší, ve speciálních případech je ale nutno použít sérii čar nebo bodovou mapu

První topologie je sérií navazujících trojúhelníků, které mají vždy dva vrcholy společné. Vzniklá plocha je optimální z hlediska využití paměti, protože počet vrcholů je výrazně zredukován – pro přidání dalšího trojúhelníku do topologie stačí jediný nový vrchol. Linestrip je analogií pro čáry, z matematického hlediska nejde o nic jiného, než lomenou čáru. Poslední topologie je prostým seznamem izolovaných bodů a z hlediska tvorby plochy je zcela nevhodná. Využívá se ale pro některé speciální prvky scény (hvězdy, tečkování) – na každý bod je možno v pozdějších fázích samostatně aplikovat texturu.

Detaily lepší než reálné

Geometry shader může s body programově manipulovat, není díky tomu nutné model ručně upravovat, ale lze programově přidávat nebo ubírat vrcholy, posouvat je apod. Tyto možnosti nabývají na dramatickém významu ve spojitosti s částicovými systémy, kdy dokáží programově tvořit oheň, tekoucí vodu, pohyb trávy, vlasů, kožešiny apod. S tím je úzce svázán geometry instancing – schopnost replikovat již vytvořený objekt se stejnými vlastnostmi.

Particles
Částicové systémy shaderů dokážou strojově replikovat objekty, náhodná povaha vody, ohně nebo dýmu přidává na realističnosti

Na podobných základech staví také teselace, která má přímou podporu na úrovni hardwaru a do pipeline s příchodem DirectX 11 přibyly další shadery Hull a Domain (Tesselation control a evaluation v případě OpenGL). Podobně jako v případě Geometry shaderů také zde dochází ke změně geometrie, účelem však je přidat detaily, které jsou z velké části generovány náhodně podle předepsané metodiky, takže vzniklé povrchy působí přirozeně a neopakovatelně.

Důležitou oblastí využití geometry shaderů jsou fyzikální výpočty – deformace, pohyb apod. Kupříkladu poškození aut v závodních hrách tak může být neopakovatelné, vypočtené na základě konkrétní havárie (bavíme se však pouze o geometrickém modelu, množství textur bude omezené). Totéž platí pro přirozené deformace při dotyku těla, mimiku apod. Výpočet geometry shaderů je náročný, pro jejich plnohodnotné využití (včetně teselace) bude nutné mít výkonnou kartu s podporou DirectX 11.

Postupně k rasterizaci

Výstup geometry shaderů může být přímo zpracován dalším krokem, kterým je rasterizace, mezikrokem ale může být uložení do paměti, kdy jsou data rozložena do jednotlivých seznamů pro body, čáry a trojúhelníky. Ty lze využít při dalším zpracování stejných dat (částicové systémy), kdy se o vše postará grafická karta sama bez zbytečného zatěžování procesoru, který by bez výstupu do paměti musel opětovně data dodat (all-GPU particle systems). Uložená data navíc mohou být v případě potřeby odeslána jak k okamžité rasterizaci, tak jako nový vstup do pipeline.

 
Pro plynulé hraní musí grafická karta vypočítat barvu více než 60 milionů pixelů za sekundu
 

Ve fázi rasterizace se poprvé objevují obrazové body – pixely. Plochy mezi vrcholy jsou vyplněny a na základě postavení modelu jsou zahozeny ty části, které nejsou z pohledu kamery viditelné (clipping). Také všechny vektorově definované objekty jsou převedeny na pixely, pro každý bod jsou vypočteny jeho souřadnice na vznikající dvourozměrné scéně (viewport). Souřadnice jsou ovšem tři, nechybí osa Z pro určení vzdálenosti od kamery (hloubky), která se bude hodit pro výpočty efektů a světla. Důležitým krokem rasterizace je také rozhodnutí, jakým způsobem (a zda vůbec) budou aplikovány pixel shadery, do kterých je předáno řízení.

Témata článku: , , , , , , , , , , , , , , , , , , , , , , , ,