Polopatě - rendering 3D scény (a jak to přibližně funguje) | Kapitola 2
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).
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.
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šší.
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.
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.
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.
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.
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.