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


Reálný svět - pokračujeme se stavbou karosérie

Data jsou už připravená a můžeme z nich začít stavět (v této fázi maxímálně) vnitřní rám auta - máme přece k dispozici pouze podrobná geometrická data.

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

Každá místo ve kterém dochází ke spojení rámu nazvěme jeho "vertexem" (vrcholem). Rám ve finále nebude vidět - jen je základem pro umístění dalších karosářských prvků. Každý vrchol "rámu" má má určený karosářský dílec, který bude na něj (a jakým způsobem) později namontovaný... V reálném světě se konstrukční rám pokrývá laminátem nebo plechem - v počítačovém světě se takový model pokrývá speciálním obrázkem - texturou.

Od seznamu dat k sestavení rámu...

Rám auta podle našeho připraveného seznamu sestavují roboti typu...ehm "Vertex Shader". Každý takový "VS" robot zpracovává v daném okamžiku pouze jeden bod rámu, kdy musí ze vstupních dat daný bod "umístit" do konkrétního prostoru výrobní linky (jedna se o "transformaci") a správně jej propojit ze sousedními vrcholy (pak přechází k bodu dalšímu a dalšímu...). Čím složitější je konstrukce rámu (čím má model více prvků), tím je zatížení "Vertex Shader" robotů vyšší.

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

3D zobrazení - Vertex Shader Stage

...už víme, že každý bod v 3D prostoru je nazýván vertexem (vrcholem). A právě v první skutečné fázi "výroby" 3D obrázku působí Vertexové procesory. Ty jako výstupní hodnoty poskytují (podle potřeb aplikace) upravené vertexy.

Tech speak: S vertexem je spojená celá řada parametrů - nejdůležitějším je pochopitelně jeho umístění ve zvolených souřadnicích, dalšími parametry je vztah vertexu k jeho okolí a jeho hierarchie v celkovém kontextu (trojúhelníku, linie, pruhu - Leading Vertex). Vertex také sebou nese další důležité parametry (v mnoha případech je jim například osvětlení, použitá textura).

Zatímco naše "automobilové" vertex shadery postavily rám, a svou práci víceméně ukončily, počítačové Vertex Shadery mají mnohem více funkcí. Podívejme se na některé ukázkové příklady:

Výpočet osvětlení

Herní aplikace často dříve počítaly osvětlení objektu pomocí relativně nenáročné metody, kdy se pro daný objekt počítalo osvětlení pouze v místech vertexů (Per-Vertex Lighting) a zbytek bodů na ploše se prostě interpoloval (osvětlení přecházelo postupně z hodnoty "a" do "b"). Výpočet osvětlení byl dříve výpočetně náročný a tato berlička umožňovala spočítat osvětlení jen v relativně málo bodech "vertexového rámu".

Jako byste na výše uvedený rám auta zasvítili reflektory, opsali si hodnoty osvětlení a zbytek plochy později (po pokrytí texturami v dalším kroku) vystínovali tím způsobem, že uděláte mezi dříve naměřenými hodnotami osvětlení postupné "lineární" přechody.

Polopatě - rendering 3D scény (a jak to přibližně funguje)
Zde je síťový model, kde jsou barvy na ploškách
přepočítávány interpolací z krajních bodů...

Poznámka: pro dokonalejší osvětlení je třeba v pozdějším procesu použít metodu "Per-Pixel Lighting", která počítá osvětlení pro každý pixel plochy - v tomto případě se nepoužívají Vertex- ale Pixel-shadery.

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

Pohyb a deformace (části) objektu

Vertex Shadery dokážou podle zvoleného "shader-programu" měnit pozici jednotlivých vertexů. Představte si namodelované stébla trávy kdy vrcholky stébel ovlivňuje speciální "shader" - ve výsledku pak dostanete například ve větru se vlnící trávu (hladinu...).

Dalšími aplikacemi Vertex shaderů jsou různé deformace objektů (včetně deformace optického prostoru) - například opilecké nebo drogové "vize" ve hrách.

Speciální efekty

Existuje další široké pole využití vertex shaderů - jako příklad uveďme generování stínů. Pro zjednodušení se podobný stín (jaký vidíte na obrázku) generuje jako dodatečná šedá poloprůhledná textura která je "položená" na texturu podkladu.

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

Korektní obrys takového stínu může generovat pixel shader...

Vytváření zvrásněné vertexové sítě

Jelikož parametrem Vertex Shaderu mohou být (od DirectX 9c) i textury, je možné vytvořit vertexovou (geometrickou) síť deformovanou podle speciální výškové (tzv. displacement) textury, ve které jas pixelu znamená výšku tohoto bodu.

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

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

Na obrázku vpravo a dole jsou realisticky vyhlížející vlny tvořené speciální "hloubkovou" texturou která ovlivňuje geometrický tvar vln...

Vertex Shadery - závěr

Co je důležité vědět: Vertex procesory jsou procesory, kterými prochází každý z vertexů - elementárních vrcholů 3D modelů, které jsou do grafického jádra posílány pomocí tzv. pipeline. Ve vertex procesoru lze měnit nejen cílové umístění daného vertexu (Transformation), ale i jeho základní barvu barvu a osvětlení (Lighting), vypočítat normály, atd. Vertexový procesor na vstupu získává vstupní vertex (s údaji "z přípravny" jako je VertexID a InstanceID) a na výstupu poskytuje podle záměrů programátora upravený... ale také pouze jediný vertex.



 
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.