Polopatě - rendering 3D scény (a jak to přibližně funguje) | Kapitola 3
Seznam kapitol
Pokud Vám z Geometry, Pixel, Vertex shaderů, textur a jednotek ROP jde hlava kolem, nezoufejte, v následujícím bloku se pokusím (s pomocí jednoho automobilového příkladu) přiblížit, jak funguje moderní grafická karta (navíc DirectX 10).
V táto fázi by se v naši automobilové 3D dílně na rámu našeho připravovaného auta musely začít dít zajímavé věci. Roboti typu "Geometry Shader" by zde museli rám podle potřeby ještě upravovat - například vytvořit nové vertexy dodatečným ohnutím trubek, případně by části karosérie zcela zrušily.
3D zobrazení - Geometry Shader Stage
Poznámka: Geometry Shadery (GS) jsou novinkou rozhraní DirectX 10 (Shader Model 4.0) - a i když ze začátku nebudou tyto funkce příliš využívané, jedná se o novou funkci s největším potenciálem. A ještě jedna důležitá připomínka: nezapomeňte, že postupujeme grafickou pipeline postupně - nenechejte se zmást následujícími obrázky, které už zobrazují výsledný (tedy renderovaný) obraz. Geometry Shadery stále působí v rámci geometrické fáze a jejich výsledkem je soustava (i když np. desítek tisíc) vertexů!
Zatímco Vertex Shader má na výstupu vždy jeden jediný vertex, Geometry shader může tyto vertexy podle potřeby (tedy programově) generovat (Geometry Amplification) nebo zcela rušit. To je pro programátory toužící nahrazovat ruční práci chytře napsanými programy čirá rajská hudba.
Předpokládanými "velkými" budoucími aplikacemi Geometry Shadeů budou:
Částicové systémy
Pohyb fyzikálně věrného velkého počtu malých částic (kdy v příkladu níže voda dopadá na povrch a dále stéká, přičemž si vytváří cestičky podle povrchu) je ve hrách dnes obtížně realizovatelným úkolem.
V budoucnu geometry shader spočítá veškerou fyziku pohybu částic (vody, úlomků) a procesor bude mít čas věnovat se jiným úkolům.
Změna geometrie - teselace...
...a procedurální tvorba povrchu
Zde grafická karta nejen renderuje (zobrazuje) povrch, ale zároveň ho také vytváří, což také šetří čas procesoru. Jedná se o procedurální tvorbu založenou zčásti na náhodných datech, takže se povrch nikdy neopakuje.
Výpočetně náročné vytváření pohybující se kůže, vlasů nebo kožešiny čeká na budoucí hry a aplikace. Pomocí geometry shaderů bude možné také simulovat takový efekt jakým je zarůstání nebo porůstání hladkých ploch (porůstání vegetací, rezivění, bobtnání, vrásnění).
Instancing...
Úkolem instancingu je automaticky generovat / kopírovat prvky obrazu tak, aby se nimi programátor nemusel zabývat "ručně". Instancing je možný dnes a běžné se také používá na programové úrovni - například hra Far Cry například používá 4 typy trávy, 12 typů keřů a 8 typů stromů (pro stromy 500 až 1600 polygonů v instanci). Geometry shadery mohou celou záležitost posunout do jiné roviny.
Geometry shadery v nejbližší praxi
Ještě ale nejásejte - geometry shadery jsou velmi náročné na výpočetní výkon (+ náročné na přenos dat mezi pamětí a grafickým procesorem) - budou proto na začátku využívané ke zdánlivě jednoduchým věcem:
Motion Blur
Například pro generování rozmazaného obrysu rychle se pohybujících objektů (np. zde meče), kdy geometry shader vygeneruje ve směru pohybu nové "natažené" body a upraví průhlednost textur.
Korektní "Motion Blur" - nepohybující části jsou ostré
Geometricky korektní "Cube Mapping"
(SO) Stream Output
Důležitou novinkou rozhraní Direct3D 10 je tzv. "Stream output". V minulosti bylo do paměti grafické karty možné možné ukládat jen pixely - nyní je zde možné (s pomocí Geometry Shaderu) ukládat i geometrická data a následně je využívat a zpracovávat.
Co je důležité vědět: Vertex a dále i Geometry Shadery, přes všechny výše uvedené obrázky, působí v rámci geometrické fáze tvorby obrazu a jejich výsledkem je soustava (i když np. desítek tisíc) vertexů! Vertex Shadery jsou pro tvorbu obrazu nezbytné, ale jejich vstupem a výstupem je vždy jen jeden vertex. Geometry shadery mohou vertexy nebo soustavy vertexů rušit a modifikovat. Geometry shadery mají přístup pro ukládaní dat do paměti grafické karty - Stream Output.