Polopatě - rendering 3D scény (a jak to přibližně funguje) | Kapitola 4
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).
Zde je pro pochopení trochu obtížnější oblast - nemám zde totiž žádný rozumný automobilový příměr - v této fázi bychom totiž museli rám našeho auta potáhnout gumovou folii a slisovat na lisu pod určitým úhlem do zcela speciální "placky" - kde bychom každému bodu plochy přidali údaj "hloubky" - tj. jak daleko od čelní stěny lisu na začátku lisování ležel. Ehm... to přirovnání kulhá na všechny čtyři...
Tento obrázek jsem uvedl dříve... a teď si to představte že je toto auto takto "slisované"...
Posuďte sami jestli jsem použil správné přirovnání: s použitím všech dostupných údajů provádí rasterizér na vstupu celou řadu optimalizací jako np. ořezání obrazu "mimo oblast pohledu" (tzv. Clipping). Následuje krok, při kterém se mezi vertexy vytvářejí poprvé plošky - v tomto kroku se dosud prostorový 3D model jakoby "fotí" - z 3D prostoru se vytvoří speciální "ořezaný a upravený" 2D pohled s odpovídající perspektivou. Po tomto kroku se v našem obraze poprvé objevují body "výplně" našeho dosud prázdného vertexového rámu - pixely.
Po tomto kroku každý bod všech plošek získá jak souřadnice "pohledu" (viewport): X a Y v ploše "fotografie" tak souřadnici Z, která říká, jak "hluboko" daný bod od "čelní" plochy kamery leží. Veškeré parametry jsou do jednotlivých pixelů elementárních plošek v tomto kroku "rozpuštěné" / interpolované. Je důležité vědět, že rasterizér ještě v tomto kroku nevytváří jediný konsolidovaný obraz, ale spíše vzájemně se překrývající pixely tvořené vrstvičky vytvářené z jednotlivých elementárních plošek.
Z-buffer - aneb 3D rendering před pixel shadery
Velmi důležitým prvkem, který dříve v této fázi hrál zásadní roli, byl tzv. Z-buffer. Ten byl vytvářený pro celou scénu a udával "hloubku" jednotlivých bodů obrazu. Následující obrázek vysvětluje jeho podstatu:
Zde je scéna...
Ve výše uvedeném příkladu ilustrují odstíny šedi (hodnoty z-bufferu jsou skalární, čili jednorozměrné) vzdálenost od čelního plánu - čím tmavší, tím dále daný pixel leží. Z-buffer byl dříve využíván k takzvanému Z-testu, kdy se rozhodovalo, které plošky obrazu dále zpracovávat a které už ne (část obrazu je vždy na odvrácené straně objektu, objekty se navíc překrývají). Pro zvídavé - u novějších her je často vytvářen efektový "Stencil Buffer".
Rasterizér jako přípravna pro Pixel Shadery
Dnes rasterizér připravuje data (vytváření Z-bufferu v této fázi není vždy nutné) a nakonec vyvolává odpovídající Pixel Shadery. Je na tvůrcích obsahu, jakou část "práce" budou chtít vykonat ve fázi rasterizace a jakou svěří Pixel Shaderům.
Pokud jste pochopili tento krok, pak Vám další kroky přijdou jako poměrně snadné...