polopate-rendering-3d-sceny-a-jak-to-priblizne-funguje
Hardware Článek Polopatě - rendering 3D scény (a jak to přibližně funguje)

Polopatě - rendering 3D scény (a jak to přibližně funguje) | Kapitola 4

Kwolek Jirka

Kwolek Jirka

30. 4. 2007 01:00 41

Seznam kapitol

1. 3D zobrazení nejsou žádná kouzla 2. (VS) Vertex Shader Stage 3. (GS) Geometry Shader Stage 4. Rasterizer Stage 5. (PS) Pixel-Shader Stage 6. (OM) Output-Merger Stage

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

Reklama

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

Polopatě - rendering 3D scény (a jak to přibližně funguje)
i Zdroj: PCTuning.cz


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:

...a zde odpovídající z-buffer (obrázky z ixbt.com)
i Zdroj: PCTuning.cz
...a zde odpovídající z-buffer (obrázky z ixbt.com)


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

Polopatě - rendering 3D scény (a jak to přibližně funguje)
i Zdroj: PCTuning.cz

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

Předchozí
Další
Reklama
Reklama

Komentáře naleznete na konci poslední kapitoly.

Reklama
Reklama