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


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

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

Byl detekován AdBlock

Pctuning je komunitní web, jehož hlavním příjmem je reklama. Zvažte prosím vypnutí AdBlocku, ať můžeme všem čtenářům i nadále přinášet kvalitní herní zpravodajství, články a videa.

Děkujeme!

Váš tým Pctuning