O společnostiProduktyObchodPodpora
Moravské přístroje
Hlavní stránka
O společnosti
Stažení software
Stažení dokumentů
Produkty
Control Web
Strojové vidění VisionLab
Kamery DataCam a osvětlovače DataLight
Průmyslový počítačový systém DataLab
Vědecké kamery
Speciální technika
Ceník
Aktivace produktů
Služby
Školení
Zakázková řešení
Podpora
Volba kamery a objektivu pro Strojové vidění
Control Web - Ukázkové aplikace

Hlavní stránkaProduktyProgramový systém Control Web3D grafika a GPU computing

Krásný nový svět programovatelných GPU
 Architektura grafické pipeline se dlouhá desetiletí měnila jen velmi pozvolna. Grafické adaptéry sice byly stále více integrované, výkonnější a levnější, ale principy činnosti byly v zásadě stále tytéž. Až v posledních několika letech došlo k prudkému obratu - moderní grafické procesory jsou nyní programovatelné. Pojďme si ukázat alespoň trochu z toho, co tyto nové možnosti přináší vykreslovacímu stroji systému Control Web.

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

barva není v ploše polygonu interpolována, ale po počítána zvlášť pro každý fragment

shader umožní zcela eliminovat vliv barvy pozadí při zrcadlení na bumpmapových plochách

osvětlování po fragmentech zvyšuje realističnost vzhledu textur

povrchy plasticky reagují na dopadající světlo

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.

prostorové stíny se postupně ztrácejí v mlze

shader umožňuje kontrolu nad tonalitou stínů

Poznámka:

Na programovatelných GPU se nám bez přehánění otevírají nové obzory. Nic zde není předem striktně nalinkováno. Problémy můžeme řešit mnoha způsoby a můžeme vymyslet řadu neobvyklých i dosud nepublikovaných algoritmů a postupů. Záleží jen na naší invenci. Např. v tomto případě pro korektní výpočet barvy fragmentů stínů v mlze potřebujeme informaci o míře zamlžení daného pixelu. Před během stínového shaderu si tedy vytvoříme luminanční texturu, pro kterou informaci o zamlžení necháme plně akcelerovaně vytvořit pomocí grafického hardware (do textury vše vykreslíme černě na bílém pozadí a s bílou barvou mlhy). Tento průchod je jednak velmi rychlý (je zcela vypnuto osvětlování i aplikace materiálů a textur) a jednak je zařazen jen při souběhu prostorových stínů a mlhy. Tuto texturu pak použijeme ve shaderu. Vše je velmi rychlé, ušetříme spoustu výpočtů na každý fragment (tyto výpočtu musí dělat v případě potřeby např. shadery bumpmap atd.), a výsledek je vzhledově velmi dobrý.

i geometricý výpočet objemu stínu provádí program v GPU

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

 
 | O společnosti | Produkty | Podpora | Stažení software | Stažení dokumentů | 
Moravské přístroje, a.s., Masarykova 1148, Zlín-Malenovice, 76302