Hlavní stránka Hardware Grafické karty Polopatě - rendering 3D scény (a jak to přibližně funguje)
Polopatě - rendering 3D scény (a jak to přibližně funguje)
autor: Kwolek Jirka , publikováno 30.4.2007
Polopatě - rendering 3D scény (a jak to přibližně funguje)

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

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:

Polopatě - rendering 3D scény (a jak to přibližně funguje)
Zde je scéna...

Polopatě - rendering 3D scény (a jak to přibližně funguje)
...a zde odpovídající z-buffer (obrázky z ixbt.com)

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



 
Komentáře naleznete na konci poslední kapitoly.
797 čtenářů navrhlo autorovi prémii: 391.3Kč Prémie tohoto článku jsou již uzavřené, děkujeme za váš zájem.
Tento web používá k poskytování služeb soubory cookie.