Na současných grafických kartách máme ukryt druhý počítač - a
v některých ohledem dokonce výkonnější než ten na hlavní desce.
Díky široké a rychlé paměťové sběrnici a vysoce paralelní architektuře
dosahují grafické procesory (GPU - Graphics Processing Unit)
nepřekonatelných datových toků a vysokých výkonů při výpočtech
s plovoucí řádovou čárkou (jsou obvykle optimalizovány pro
4-bytová float čísla). Např. GPU NVidia GF6800 má 220 milionů
tranzistorů, 256-ti bitovou sběrnici, 6 paralelních vertexových
procesorů a 16 paralelních fragmentových procesorů. Výkon a možnosti
jsou skvělé, na druhé straně se ale GPU vyrovná nejvýkonnějším CPU
také ve spotřebě elektrické energie (a to už tak skvělé není). Ale asi
nemůžeme chtít, aby výkonnější motor měl menší spotřebu než motor
slabší.
Co získá uživatel
Získáváme stručně řečeno kvalitnější obraz. Pomocí kódu pro GPU
lze vytváře obrazové efekty, které nebyly s grafickými
akcelerátory s pevně danou funkčností dosažitelné nebo lze
efektivně řešit problémy, které by dříve představovaly neúměrnou
zátěž pro CPU.
Jedním z obvykle nejvíce viditelných použití shaderů je
bumpmapping. Osvětlení povrchy textur v tangenciálním
prostoru bylo možno do jisté míry možno řešit i pomocí
rozšíření OpenGL na grafických kartách s pevnou funkčností.
Použití shaderů zde odstraňuje řadu omezení a umožňuje použít
lepší algoritmy a dosáhnout tak kvalitnějšího obrazu než
u jakýchkoliv jiných řešení.
Dalším příkladem užitečnosti shaderů může být zdánlivě docela
prostá animace kymácení stromů ve větru. Zde by bylo možno
v principu vše řešit i bez programovatelné GPU. Úloha
však vede na takové množství algebraických výpočtů (násobení
vektorů maticemi), že počítat vše pomocí CPU by nebylo příliš
rozumné. Výkon paralelních vertexových procesorů přináší pro CPU
(a tím pro celou v reálném čase běžící aplikaci) velmi
přínosné odlehčení.

stromy se kymácejí ve větru - scéna vypadá živěji
(i když na statickém obrázku to tak nevypadá)
Zajímavou ukázkou využití shaderu pro zdokonalení obrazu jinými
způsoby nedosažitelného je vyřešení kombinace prostorového stínu,
vytvořeného ve stencil bufferu jednoprůchodovým algoritmem,
s mlhou. Obvykle se u těchto technik vytváření stínů
využívá dvou vykreslovacích průchodů, jeden pouze pro ambientní
světlo a druhý pro kompletní osvětlení. U jednoprůchodového
algoritmu, použitého ve vykreslovacím stroji systému Control Web,
ušetříme cenný výkon eliminací nutnosti ambientního vykreslovacího
průchodu. Oba postupy mají své přednosti i nevýhody,
jednoprůchodový algoritmu je však vždy rychlejší, a náš
vykreslovací stroj je silně orientován a optimalizován na
maximalizaci výkonu. Obvykle se řídíme pravidlem, že výkon má
přednost - vše je nutno vykreslovat v reálném čase. Významnou
chybou jednoprůchodového algoritmu je jeho neslučitelnost se
zamlženým obrazem scény. V okamžiky zatmavovaných míst se
stíny již běžným způsobem není k dispozici informace
o míře zamlžení jednotlivých fragmentů (pixelů) obrazu.
Dochází tak k nesprávnému temnutí i vzdálených a tedy
hodně zamlžení pixelů. Tento problém lze opět vyřešit pomocí
fragmentového shaderu.
Každé pro má i svá proti
Přínosy programovatelných GPU pochopitelně silně převažují nad
nevýhodami, přesto zde ale můžeme zmínit několik aspektů těchto
jinak skvělých technologií.
Uživatele se týká nevýhoda jen jediná - povrchy jsou shaderem
vykreslovány obvykle o něco pomaleji, než je tomu
v případě pevné grafické pipeline. A to i tehdy,
je-li shader napsán docela dobře (navíc je zde riziko nekvalitně
napsaného kódu, to je ale věc programátora a uživatel to nemůže
nijak ovlivnit). Pro úplnost je ale zde třeba dodat, že na druhé
straně lze kódem shaderu řešit mnoho výpočtů, které dříve musela
řešit CPU, a to naopak může přinést výrazné urychlení.
Pro architekturu systému Control Web přináší shadery řadu
komplikací (to nás jako uživatele naštěstí vůbec netíží :-).
Především systém musí fungovat na veškerých počítačích i se
starými a málo výkonnými grafickými kartami. Proto veškeré
vykreslovací mechanismy využívající programovatelnost GPU musí mít
v systému alternativu i pro grafiku s pevnou
funkčností. Dokonce často musí být těchto alternativ několik. To
proto, že každá grafická karta má jiná rozšíření a jiné
schopnosti, kterých vykreslovací stroj umí využívat. Vždy však
musí být k dispozici varianta, kdy grafická karta neumí nic
navíc. 3D grafika tedy vždy funguje, někdy však mohou některé
efekty vypadat hůře, někdy mohou být vykreslovány pomaleji nebo
mohou být nahrazeny jednodušším povrchem. Široký rozsah platforem
a zpětná kompatibilita je i zde jedním z hlavních
návrhových cílů systému.
Jaká bude budoucnost?
Budoucnost počítačové grafiky bude určitě patřit
programovatelným grafickým procesorům. Moderní počítač má dnes
všeobecně použitelnou CPU (samozřejmě s více jádry :-)
a programovatelnou GPU, která se relativně samostatně stará
o tvorbu obrazu. To, že počítač dokáže vytvářet
fotorealistický třírozměrný obraz v tzv. filmové kvalitě bude
brzy naprostou samozřejmostí.
RC mailto:rc@mii.cz
|