Hlavní navigace

Budoucnost 3D grafiky: GPGPU a raytracing

16. 3. 2008

Sdílet

Zdroj: Redakce

Náročné výpočty: vícejádrové CPU, nebo GPU?

V posledních letech jsme svědky nebývalého zájmu o využití ohromného paralelního výkonu GPU pro účely nad rámec klasických výpočtů pro 3D grafiku. Grafické procesory (GPU) prošly vývojem od jednoduše implementované grafické pipeline k flexibilním, programovatelným, paralelním počítačům.

Stejně tak se vyvíjela i 3D grafika, aby zvládla rozmanité grafické počítačové aplikace. GPU jsou nyní považovány za „grafické výpočetní“ enginy, protože mnohé z fixních operačních instrukcí grafické pipeline se staly programovatelnými. A to jsme viděli teprve začátek této transformace.

GPU vedou vývoj k víceprocesorovému zpracování

Programovatelné a flexibilní GPU jsou jedny z nejvýkonnějších výpočetních zařízení na naší planetě. Od roku 2000 zpracovávají jednotlivá jádra v GPU data s použitím IEEE pohyblivé desetinné čárky stejně jako CPU („opravdové počítače“). FLOPS výkon (výpočetní výkon v pohyblivé desetinné čárce) dnešních GPU je vyšší a roste rychleji než u posledních vícejádrových CPU.  

Tato vlastnost vzbudila pozornost komunity výpočetní techniky. Vlastně celý tento nový obor, který vznikl, byl pojmenován GPGPU, General Purpose Processing on GPUs (obecné výpočty na GPU), využívá výkonu GPU pro i další aplikace než jen grafiku. Nedávno bylo představeno společností NVIDIA programovací prostředí CUDA (Compute Unified Device Architecture), které by mělo pomoci GPU výpočtům. CUDA umožňuje programovat negrafické aplikace pro grafické procesory pomocí jazyka C. 

Nejenom GPU, ale všechny procesory procházejí vývojem. Vidíme to i na komplikovaném přechodu od jednoho k víceprocesorovým CPU. Díky problémům s odváděním tepla a spotřebou proudu již není možné vyvíjet rychlejší CPU, které poběží na vyšší frekvenci. Je ale poměrně jednoduché přidat na jeden čip více jader – tím však jednoduchost končí.

Pro programátory není snadné pochopit jak efektivně naprogramovat aplikace pro procesory s více jádry. Rovněž poprvé za několik desetiletí nemůžou programátoři prostě čekat 18 až 24 měsíců na to, že se zdvojnásobí rychlost procesorů a jejich jednovláknový program poběží dvakrát rychleji. 

Napříč odvětvím probíhá snaha o pročištění algoritmů tak, aby fungovaly co nejlépe na počítačích s procesory s více jádry a zároveň mají programátoři k dispozici výkonný nástroj v podobě GPU Computing. V dnešní době jen málo aplikací a programů těží z CPU s více jádry. Naopak model programování GPU, podporovaný API grafiky a programovacím jazykem C, je přímý a jednoduchý.

Ačkoli je využití GPU pro řadu paralelních výpočetních úkonů přirozeným vývojem, snaha o propojení zjevně paralelního výkonu grafiky s vícejádrovými procesory je náročné – sdružení tolika procesorů nedá dohromady integrovaný paralelní procesor. GPU sestává z mnoha paralelních procesorových jader integrovaných tak, aby od základu spolupracoval.


Tesla C870: 128 paralelních procesorů pro zpracování kódu vycházejícího z jazyka C

Dá se říct, že grafické procesory jsou vícejádrovými procesory již více než deset let. V roce 1998 byl například zkonstruován grafický čip Riva TNT, který měl dvě pixel pipeline a dvě jednotky pro mapování textur. Od té doby pokračujeme ve stejných stopách – současný čip GeForce 8800 má 128 procesorových jednotek. Nejenom, že má 128 procesorových jader, ale každé jádro může zároveň zpracovávat mnoho vláken nebo kopií programu.

GeForce 8800 zpracovává najednou více než 12 000 vláken, z nichž každé zpracovává pixely, vrcholy a trojúhelníky. Zkuste si přestavit takovou paralelní součinnost na dvou nebo čtyřjádrovém procesoru. To prostě není možné. Nad rámec více než 12 000 vláken s pixely nebo vertexy existují další souběžné operace, které jsou zpracovávány GPU. 

Výpočty texturových map, rasterizace, odstranění skrytého povrchu u Z-bufferu, prolínání barev pro průhlednost, anti-aliasing (vyhlazování hran) – všechny tyto procesy probíhají současně. Bez tohoto specializovaného hardwaru, který je obsažen v každém GPU, aby vykonával tyto operace, by bylo potřeba stovek, ne-li tisíců procesorových jader, aby se vyrovnaly výkonu jediného GPU.

Raytracing vs. GPU a budoucnost 3D na PC

Některé blogy a zprávy v médiích naznačují, že budoucnost 3D grafiky je založená na raytracingu (vykreslování metodou sledování paprsku), a proto výkon rasterizace (běžné formy renderingu) není důležitý. Ačkoli jsme velkými fandy interaktivního sledování paprsku (interactive raytracing – IRT), toto sledování stále ještě vyžaduje značný výkon. 

Je raytracing připraven pro mainstreamové využití?

IRT a další nápady, kterými v současnosti zabýváme, nabídnou návrhářům GPU dobrých deset příležitostí k inovaci. Ale spíše než se držet konceptu „začneme od píky“, kloníme se k tomu, že je potřeba zužitkovat masivní investice různých oborů do technologií OpenGL a DirectX.

Věříme, že cennější jsou ty architektury, které se dají rozšiřovat než ty, které chtějí otřást zavedenou základnou. Jedná se o x86, Windows, HTML a TCP/IP. Zachování těchto investic je rovněž důležité pro udržení produktivity současných aplikací a vývojářů a zároveň pro podpoření investic do budoucích aplikací. Navíc sledování paprsku není všelékem, nebo cílem, který by stál sám o sobě, ale spíše způsobem, jak do budoucna vytvářet lepší obrázky jednodušším způsobem. 

Ačkoli někteří lidé budou tvrdit, že raytracing je přesnější nebo „to jediné správné“, jak raytracing, tak rasterizace jsou aproximací fyzikálního jevu odrazu světla od povrchu. Ani jeden není podstatně lepší nebo horší – jsou prostě jiné. Tři možné důvody pro osvojení raytracingu jsou: 1.) jednoduchost programování, 2.) rychlejší vizuální efekty a 3.) možnost lepších vizuálních efektů. Proberme si každý z těchto důvodů samostatně.

1.)    Jednoduchost programování je stejně důležitým prvkem pro 3D grafiku jako pro spoustu dalších aplikací. O sledování paprsku se říká, že je pro programátory snadnější než rasterizace, protože sledování paprsku může udělat vše jednoduchým a sjednoceným způsobem. Ačkoli je pravda, že paprsky mohou být sledovány u všech možných efektů, není to jednoznačně nejlepším a nejrychlejším přístup.

2.)    Raytracing nikdy nebude tak rychlý jako hardwarová rasterizace pro potřeby viditelnosti (tj. pro objekty, které oko vidí přímo). Zároveň bychom samozřejmě chtěli anti-aliasing (tj. vyhlazování hran). Raytracing toto dokáže prostým sledováním většího množství paprsků, ačkoli je to náročnější a pomalejší, než povolit GPU, aby toto vykonalo pomocí rasterizace a vyhrazeným hardware pro anti-aliasing. 

3.)    Jedním z efektů, kterého lze rasterizací docílit, i když poměrně obtížně, jsou stíny. Je velmi komplikované vytvořit jasně ohraničené stíny, aniž by jejich okraje nebyly zubaté. V podstatě neexistují robustní řešení pro měkké stíny nebo odpovídající efekty vícenásobného odrazu světla. Zároveň tím, jak se světlo odráží od povrchu a dopadá na další objekty, každý objekt v záběru funguje současně jako zdroj světla i překážka (lépe řečeno objekt, který blokuje světlo). Aby mohl být vytvořen „dokonalý“ obrázek, bylo by potřeba sledovat paprsky ze všech bodů každého objektu ve všech směrech. Spousta paprsků by byla potřeba pro simulování odráženého světla. I přesto, že je to jednoduchý koncept, je to více práce než je praktické s využitím současných CPU.

Paralelní hardware GPU může rovněž sledovat paprsky. Vytvořit snímek, který je znatelně lepší než který by se podařilo dnes vytvořit pomocí rasterizace je nelehký, ale dosažitelný úkol. A to je vzrušující – když děláte v oboru počítačové grafiky, nejste nikdy hotoví. Vždy je na čem pracovat. 

Obrázek katedrály, který vidíte níže, je ve dvou verzích. První obrázek, který vidíte, lze vytvořit jak pomocí rasterizace, tak raytracingu. Nebyly použity žádné speciální efekty pro vytvoření stínů nebo správného osvětlení:

Obrázek 2 je vyrenderován se správným globálním osvětlením. To je efekt, který zobrazuje odrazy světla mezi objekty. Zadní část katedrály – za světlem – je osvětlena odrazem světla od objektů před lampou. Oba obrázky jsou mimochodem vytvořeny pomocí GPU. GPU dnes může vytvořit jakýkoli obrázek, který může vytvořit CPU, ať už pomocí rasterizace nebo raytracingu. Kombinace speciálního GPU hardwaru a API rozhraní (DirectX a OpenGL) s výpočetní grafikou má své opodstatněné výhody.


Obrázek 1: Bez výpočtů globálního osvětlení (global illumination)


Obrázek 2: S global illumination

GPU to zvládne všechno

Debata, jestli dělat grafiku za pomoci rasterizace nebo raytracingu, je stejně stará jako obě technologie. Ta debata se pomalu změnila na raytracing vs. GPU. Ale srovnávat přístup (sledování paprsku) se zařízením (GPU) je trochu zvláštní. To je jako se ptát, jestli je lepší benzín, nebo auto. Pravděpodobně nejlepší odpovědí na obě otázky je „obojí“.

CS24

Nejenom, že GPU zvládá efektivně rasterizaci s využitím konvenční programovatelné API pipeline, ale výpočetní výkon GPU slibuje i zvládnutí jiných renderovacích přístupů. Je pravděpodobné, že vývojáři her, filmová studia, animátoři a umělci využijí všech výhod sledování paprsků a rasterizace i dalších technik. Proč si vybírat, když můžete mít všechno? A překvapivě nejlepší GPGPU aplikací bude… 3D grafika!

O autorovi

David B. Kirk, Ph.D. — Hlavní vědecký pracovník             

David Kirk pracuje jako hlavní inženýr ve společnosti NVIDIA od ledna 1997. Pod jeho vedením se stala grafická technologie NVIDIA jednou z nejoblíbenějších platforem zábavního průmyslu. V roce 2006 byl Dr. Kirk zvolen do americké Národní akademie technických věd (National Academy of Engineering - NAE) za jeho roli v zavádění výkonných grafik do osobních počítačů. Zvolení do NAE je jedno z nejvyšších odborných ocenění, které může inženýr získat.

V roce 2002 získal Dr. Kirk cenu SIGGRAPH Computer Graphics Achievement Award. V letech 1993 až 1996 pracoval Dr. Kirk jako hlavní vědecký pracovník a vedoucí technologického oddělení ve frimě Crystal Dynamics, která vyvíjí video hry. Od roku 1989 až do 1991 byl Dr. Kirk zaměstnán jako inženýr v Apollo Systems, divizi Hewlett-Packard.

Dr. Kirk je držitelem padesáti patentů a žádostí o udělení patentu vztahujícím se k grafickému designu, zároveň publikoval více než padesáti článků o grafické technologii. David B. Kirk získal tituly B.S. a M.S. v oboru strojní inženýrství na Massachusettském technologickém institutu (Massachusetts Institute of Technology), tituly M.S. a Ph.D. pak získal v oboru informatika na Kalifornském technologickém institutu (California Institute of Technology).