Mo₧nosti modernφch 3D grafick²ch akcelerßtor∙

Hardwarov² fotorealismus

GrafickΘ akcelerßtory prod∞laly za poslednφ t°i roky neuv∞°iteln² pokrok. Hlavnφ podφl na tΘto skuteΦnosti mß slibn∞ se rozvφjejφcφ trh s poΦφtaΦov²mi hrami a zejmΘna s hernφmi konzolami. Obrovsk² rozvoj hernφho pr∙myslu vedl k zßsadnφm rozÜφ°enφm pr∙myslov²ch standard∙ DirectX a OpenGL, co₧ usnadnilo a otev°elo cestu pro v²voj na poli grafick²ch akcelerßtor∙. V nßsledujφcφm povφdßnφ si ukß₧eme novΘ mo₧nosti grafick²ch akcelerßtor∙ vzhledem k poslednφm verzφm standard∙, tedy vzhledem k verzφm DirectX 9.0 a OpenGL 2.2.

Galerie obrßzk∙

Grafick²m akcelerßtorem rozumφme grafickou kartu, kterß umo₧≥uje krom∞ rastrovΘho v²stupu na obrazovku i hardwarovΘ urychlenφ n∞kter²ch grafick²ch operacφ. Je naprosto samoz°ejmΘ, ₧e dneÜnφ grafick² akcelerßtor (dßle jen GA) urychluje operace, jako jsou prßce s okny (vykreslovßnφ, posuv, zv∞tÜovßnφ, p°ekr²vßnφ), s obrßzky (BitBlt, zv∞tÜovßnφ, p°evody barevn²ch palet), s fonty (vyhlazovßnφ, rasterizace, rotace...), s vektory, s videem, s kurzorem myÜi aj., tedy struΦn∞ °eΦeno 2D obrßzkovΘ a vektorovΘ operace.

Pro kancelß°skou prßci tyto operace jist∞ dostaΦujφ, ale nßroΦnφ u₧ivatelΘ a pokroΦilΘ programovΘ nßstroje ji₧ vy₧adujφ vφce. V²robci hardwaru si u₧ivatele pohotov∞ rozd∞lili na kancelß°sky orientovanΘ u₧ivatele (GA mß jen 2D podporu), na pr∙myslovΘ u₧ivatele (GA podporuje i 3D operace, ale bez nßroku na vizußlnφ kvalitu v²stupu) a na hrßΦe (GA podporuje mimo°ßdn∞ nßroΦnΘ 3D operace s d∙razem na grafickou kvalitu v²stupu). Paradoxn∞ nejv∞tÜφ nßroky na HW vybavenφ majφ prßv∞ ährßΦiô, co₧ ale nenφ v souladu se skuteΦnostφ, ₧e pr∙myslovφ u₧ivatelΘ za vyÜÜφ v²kon v CAD aplikacφch p°iplatφ snßze ne₧ domßcφ u₧ivatelΘ. Postupem Φasu se tedy hranice p°irozen∞ posunuly a v²kon GA pro pr∙myslovou a hernφ sfΘru je srovnateln². Jako vedlejÜφ efekt modernizace a pokroku v operaΦnφch systΘmech se posunula la¥ka i u kancelß°sk²ch aplikacφ, a tak se pokroΦilΘ GA s 3D akceleracφ vyskytujφ i v Φist∞ äkancelß°skΘô komunit∞. V praxi to znamenß, ₧e dnes ji₧ nenajdete GA bez alespo≥ zßkladnφ podpory 3D zobrazenφ.

3D akcelerace operacφ je zalo₧ena na pr∙myslov²ch standardech DirectX (Microsoft) a OpenGL (SGI). Bez t∞chto standard∙ by nebylo mo₧nΘ programovat aplikace s tφm, ₧e p°i pou₧itφ p°φsluÜnΘho GA budou jejich 3D a 2D operace v²znamn∞ urychleny. Pro in₧en²rskΘ aplikace je pravidlem po₧adavek standardu OpenGL, zejmΘna pro jeho portabilitu (je p∙vodn∞ napsßn pro unixovΘ prost°edφ a dnes je navφc k dispozici na platformßch Mac i PC) a p°ehlednost (v²vojß°∙m se jednoduÜeji tvo°φ novΘ aplikace). V hernφm pr∙myslu se setkßvßme zejmΘna s po₧adavkem na DirectX, kde je nejv∞tÜφ devizou Üirokß podpora firmy Microsoft a s tφm spojenΘ konsekvence. Oba zmi≥ovanΘ standardy majφ prakticky shodnΘ vlastnosti a v²vojß°i jsou Φasto nuceni vyvφjet pro ob∞ platformy. Je velmi smutnΘ, ₧e se nepoda°ilo realizovat projekt Fahrenheit, kter² m∞l za ·kol oba standardy spojit v jeden (Microsoft z projektu odstoupil s odkazem na nedostateΦn∞ rychl² v²voj na stran∞ SGI...).

3D akcelerace äminulostiô

Zßkladem 3D akcelerßtoru je grafick² procesor û GPU (Graphics Processor Unit) û, kter² je ulo₧en spolu s grafickou pam∞tφ na kart∞ grafickΘho akcelerßtoru. ┌kolem GPU je zpracovßvat geometrickß data a zobrazovat je na monitoru. Zobrazenφ 3D scΘny pomocφ GA p°edpoklßdß, ₧e povrch 3D objektu je aproximovßn v²hradn∞ pomocφ troj·helnφk∙ (nebo N-·helnφk∙). P°i zobrazovßnφ grafick²m akcelerßtorem se pro ka₧dou 3D scΘnu opakuje nßsledujφcφ postup: Troj·helnφky slo₧enΘ z vrchol∙, texturovacφch sou°adnic a normßlov²ch vektor∙ (kolmice k povrchu) jsou spolu s texturami p°eneseny do GA, kde jsou nejprve transformovßny do obrazov²ch sou°adnic, pak rasterizovßny (tj. jsou vykresleny do pam∞ti hloubky), nßsledn∞ jsou stφnovßny (je pou₧ita textura a zjednoduÜenΘ stφnovßnφ) a v²sledek je prolnut s ji₧ vykreslenou scΘnou (je °eÜena viditelnost a zßkladnφ obrazovΘ operace jako zv∞tÜenφ apod.).

Uveden² zp∙sob zobrazenφ 3D scΘny pomocφ pam∞ti hloubky (Z-buffer nebo takΘ Depth-buffer) se v HW akceleraci pou₧φvß ji₧ od ran²ch zaΦßtk∙ grafiky (osmdesßtß lΘta). Standardnφ 3D zobrazenφ povrchu t∞les pomocφ GA bylo d°φve zalo₧enΘ pouze na zjednoduÜenΘm stφnovßnφ pomocφ Phongova a Gourardova modelu. Tyto matematickΘ modely jsou vÜak na hony vzdßleny od fotorealistickΘho zobrazenφ. Pro dosa₧enφ kvalitativn∞ vyÜÜφho v²sledku v²robc∙m her nezbylo ne₧ rozÜi°ovat zobrazenφ nejr∙zn∞jÜφm nestandardnφm obchßzenφm GA nebo kompletnφm v²poΦtem zobrazenφ na CPU poΦφtaΦe.

V roce 2000 vÜak doÜlo k v²znamnΘmu zlomu na poli GA, kter² umo₧nil programßtor∙m zasßhnout do v²slednΘho 3D zobrazenφ scΘny pomocφ CPU. Tento zlom byl zap°φΦin∞n zejmΘna vydßnφm balφku Microsoft DirectX 8, kter² byl logick²m d∙sledkem p°φpravy hernφ konzoly Microsoft XBox ve spoluprßci s p°ednφmi v²robci grafickΘho hardwaru. Balφk DirectX 8 v²znamn∞ posunul i v²voj (do tΘ doby znaΦn∞ strnulΘho) standardu OpenGL, jeho₧ rozÜφ°enφ do verze 1.2 a pozd∞ji 2.0 (zejmΘna na popud firmy Apple a v²vojß°∙ grafickΘho hardwaru) vytvo°ilo ·pln∞ novΘ mo₧nosti multiplatformnφch grafick²ch aplikacφ.

Firmy ATI a nVidia, hlavnφ ährßΦiô na trhu, jako prvnφ implementovaly nov² koncept do sv²ch grafick²ch akcelerßtor∙ a tφm zaΦal jejich boj o nejrychlejÜφ implementaci grafickΘho procesoru, sb∞rnic a pam∞tφ. SpoleΦnost ATI zasadila firm∞ nVidia zßsadnφ rßnu, kdy₧ p°ekvapila vΦasnou a kvalitnφ HW implementacφ rozÜφ°enφ DirectX 9.0 (a OpenGL 2.0), ale nVidia svou ztrßtu postupn∞ dotßhla a novΘ grafickΘ procesory obou renomovan²ch v²robc∙ se dr₧φ na srovnatelnΘ v²konovΘ hladin∞.

Novß generace grafick²ch akcelerßtor∙

Architektura novΘ generace grafick²ch akcelerßtor∙ je zalo₧ena na proudovΘm zpracovßnφ dat (data streams), kde lze pevn∞ zakotvenΘ funkce pro geometrickß data ovlivnit pomocφ tzv. Vertex Shaders a pro rastrovß data pomocφ tzv. Pixel Shaders. V²vojß°i tak mohou pomocφ VS a PS aktivn∞ programßtorsky zasßhnout do architektury p°edchozφ generace GA a tφm mφt plnou kontrolu nad grafick²m v²stupem.

Vlastnφ idea programovßnφ VS a PS je znaΦn∞ p°evzata z jazyk∙ pro stφnovßnφ, jako je Pixar RenderMan (RIB) nebo Stanford Real-time Shading Language (SRSL). Tyto jazyky umo₧≥ujφ kompletn∞ p°eprogramovat elementßrnφ stφnovacφ algoritmy pro existujφcφ grafickΘ programy. Dφky nim lze dosßhnout maximßlnφ obecnosti ·rovn∞ renderingu, a to od jednoduchΘho zobrazovßnφ ploÜek a₧ po nejslo₧it∞jÜφ simulaci anizotropickΘho nebo sklen∞nΘho povrchu. Prßv∞ psanφ äshadersô, jak se t∞mto elementßrnφm stφnovacφm program∙m °φkß, je zßkladem v²vojov²ch center uvnit° velk²ch firem, jako jsou Pixar, ILM, Dream Works, Digital Domain, Weta Digital aj.

VS a PS jsou elementßrnφ programy urΦenΘ pro zmφn∞nΘ samostatnΘ v²poΦetnφ jednotky GA, kterΘ pracujφ s omezenou instrukΦnφ sadou podobnou assembleru. Vzhledem k tomu, ₧e VS a PS jsou souΦßstφ slo₧it∞jÜφ, proudovΘ struktury, oznaΦujφ se tyto programy jako fragmentovΘ programy (Fragment Programs, Codes).

Vstupem fragmentov²ch program∙ je tzv. vertex stream (sada vrchol∙ troj·helnφk∙ pro VS) a pixel stream (pixely troj·helnφk∙ pro PS). VS a PS jsou omezeny nejen velikostφ vstupnφch dat, ale i pam∞tφ GA a maximßlnφ dΘlkou programu, proto₧e hardware GA musφ provΘst elementßrnφ program shaderu pouze v omezenΘm Φase. ProblΘm kapacity programu je °eÜen na ·rovni paralelnφho zpracovßnφ vφce v²poΦetnφmi jednotkami (GA zpravidla obsahuje Φty°i a vφce paralelnφch jednotek pro PS a pro VS). InstrukΦnφ sada pro VS a PS pracuje pln∞ vektorov∞ (tj. barva je reprezentovßna Φtve°icφ RGBA, vrchol troj·helnφku je dßn sou°adnicemi XYZ a p°φpadn∞ dalÜφm parametrem), navφc je p°izp∙sobena pro stφnovßnφ, tudφ₧ lze v jednom kroku poΦφtat elementßrnφ operace, jako je vzdßlenost vektor∙, maticovΘ nßsobenφ, ·bytek vzdßlenostφ aj.

V²sledn² v²stup otev°enΘ architektury GA ovliv≥ujφ oba fragmentovΘ programy VS a PS souΦasn∞, ale p°esto jsou n∞kterΘ v²stupy dominantn∞ vytvo°eny jednφm ze shader∙. V nßsledujφcφch odstavcφch se pokusφme ukßzat ·lohu obou fragmentov²ch program∙ odd∞len∞.

Vertex Shaders

Vstupem pro VS je proud vrchol∙ zobrazovan²ch dat (vertex streams) s p°φsluÜn²mi parametry, v²stupem VS je p°em∞n∞nß struktura vektor∙ s p°φsluÜn²mi normßlami, barvami vrchol∙, texturovacφmi sou°adnicemi apod. Interpretace vstupnφch dat tedy pln∞ zßvisφ na vlastnφm podprogramu VS. Vytvo°en² program m∙₧e chßpat zadanß vektorovß data jako vrcholy troj·helnφk∙ (asi nejΦast∞ji), ale takΘ jako °φdicφ body vytvß°enΘ plochy nebo procedurßlnφho t∞lesa. Pro ilustraci obecnosti tΘto implementace si uvedeme n∞kolik p°φklad∙ vlastnostφ v²stup∙ VS:

Vr₧enΘ stφny objekt∙. Ze znalosti pozice sv∞tla a geometrie t∞lesa se vytvo°φ neviditelnΘ stφnovΘ t∞leso (tzv. shadow volume extrusion), kterΘ se v dalÜφ fßzi pou₧ije p°i v²poΦtu zastφn∞n²ch bod∙.

Zrcadlenφ objekt∙. Pro ploÜnß zrcadla platφ, ₧e odraz v nich je toto₧n² s obrazem, kter² vznikne, pokud se na scΘnu dφvßme ze sprßvnΘho pohledu äuvnit° zrcadlaô. Pomocφ VS tak lze vytvo°it änovou scΘnuô, kterß je v∙Φi pozorovateli zrcadlovß, a vznikne tak efekt zrcadlovΘho povrchu, ve kterΘm se odrß₧ejφ okolnφ objekty. Snadno tak lze nap°φklad vytvo°it vodnφ hladinu, kterou lze navφc procedurßln∞ zvlnit.

Komprese geometrie. Sb∞rnicφ projdou komprimovanß data, kterß dφky VS na v²stupu äexpandujφô do plnΘ Üφ°e. P°φkladem mohou b²t parametrickΘ plochy, jako nap°φklad BSpline, NURBS nebo stßle vφce pou₧φvanΘ subdivision surfaces.

Procedurßlnφ t∞lesa a deformace. Na vstupu VS je pouze äkostraô geometrie s p°φsluÜn²mi parametry a v²sledek je do v²slednΘ podoby modifikovßn podle interakce, dynamiky apod. NejΦast∞jÜφ je vytvo°enφ deformacφ v kolmΘm prostoru povrchu (reßlnΘ vln∞nφ a zm∞ny geometrie t∞les, vφtr). Specißlnφm p°φpadem jsou pak procedurßlnφ t∞lesa (fraktßly, stromy, voda, ohe≥), kterß se vytvo°φ a₧ na zßklad∞ VS poΦφtanΘho na GPU.

Zobrazenφ chlup∙. Povrch t∞lesa se specißlnφm VS programem pokryje ächlupyô (vytvo°φ se specißlnφ elementßrnφ t∞leso ve sm∞ru normßl).

Specißlnφ stφnovßnφ v zßvislosti na pohledu pozorovatele. Nap°φklad osv∞tlovßnφ scΘny specißlnφm stφnovacφm algoritmem, konturovΘ stφnovßnφ (zd∙razn∞nφ hraniΦnφ geometrie û hran t∞les) aj. K uveden²m p°φklad∙m je t°eba si uv∞domit, ₧e pro VS jsou stßle omezenΘ prost°edky programovßnφ (zatφm max. 128 instrukcφ fragmentovΘho programu). I p°es omezenφ lze vytvß°et celΘ procedurßlnφ plochy typu rostliny, louky, postavy, bubliny apod., a to vÜe na GPU, tedy nezßvisle na CPU poΦφtaΦe, kter² ji₧ m∙₧e paraleln∞ zpracovßvat jinΘ ·lohy.  

Pixel Shaders

V²stupnφ proud dat z VS p°echßzφ do rasterizeru, kter² vykresluje ka₧d² zobrazovacφ troj·helnφk do pam∞ti GA. Proud dat z rasterizeru (tzv. pixel stream) je vstupem  pro Pixel Shader (PS). Vstupnφ proud dat obsahuje mj. texturovacφ sou°adnice, polohu bodu, p°φsluÜnosti k troj·helnφku aj. V²stupem zpracovßnφ PS jsou ji₧ v²stupnφ barvy pixel∙ s p°φsluÜnou pr∙hlednostφ (alfa kanßl) a hloubkou (z-buffer). Pomocφ podprogramu PS lze ovlivnit celkovou interpretaci v²slednΘho zobrazenφ a vytvo°it tak naprosto specißlnφ algoritmus stφnovßnφ ka₧dΘho bodu, kter² bude vytvo°en jen pro dan² ·Φel. NejlΘpe si ukß₧eme p∙sobnost PS op∞t na p°φkladech.

Pomocφ PS lze vytvß°et nap°φklad nßsledujφcφ stφnovßnφ povrch∙: metalickΘ, brouÜenΘ, textilnφ, hrbolatΘ (bump), pr∙svitnΘ, Fresnelovy nebo obecn∞ anizotropickΘ a zß°ivΘ povrchy. Mezi speciality souΦasn²ch aplikacφ pat°φ simulace k∙₧e, mrak∙, oblohy, vody, vln, reflexφ, refrakcφ, okolnφho mapovßnφ apod. PS lze navφc v²hodn∞ vyu₧φt pro post-processing image a videoefekty, jako nap°φklad detekce hran, kolorovßnφ, morfologii, segmentaci obrazu apod. V reßlnΘm Φase tak lze provßd∞t °adu operacφ, kterΘ byly do tΘ doby v²sadou nßkladn²ch specializovan²ch karet.

Pro hernφ pr∙mysl je v²znamnß aplikace PS pro procedurßlnφ textury, kde je mo₧nΘ pou₧φt nap°φklad fraktßlnφ ÜumovΘ povrchy, bun∞ΦnΘ automaty, texture-bombing aj.

Pro PS fragmentovΘ programy platφ (podobn∞ jako pro VS) znaΦnΘ omezenφ co do poΦtu instrukcφ (zatφm maximßln∞ 22), kterΘ je dßno mj. i mnohonßsobn∞ vyÜÜφm poΦtem zpracovßvan²ch dat. Uvnit° architektury GA je v∞tÜinou alespo≥ dvakrßt vφce PS (resp. texturovacφch) jednotek ne₧ pro VS.

PokroΦilΘ zobrazovßnφ pomocφ GPU

Spojenφm PS i VS vznikajφ opravdu pokroΦilΘ algoritmy stφnovßnφ, pro n∞₧ se v₧ilo oznaΦenφ GPU rendering. Pomocφ GPU lze nynφ realizovat °adu nadstandardnφch zobrazovacφch technik v reßlnΘm Φase. Za vÜechny uve∩me n∞kolik p°φklad∙.

Techniky NPR (Nonphotorealistic Rendering) p°edstavujφ stßle ₧ßdan∞jÜφ änefotorealistickß zobrazenφô 3D scΘny. Pomocφ NFR je scΘna zobrazena nap°φklad technikou p°ipomφnajφcφ ruΦnφ malbu, perokresbu, tu₧ku nebo obecn∞ konturovou kresbu (cartoon). NPR zobrazenφ lze pomocφ GPU dosßhnout nap°φklad dφky hranov²m filtr∙m PS v kombinaci se stφnov²m t∞lesem VS (generßtoru kontur rozhranφ t∞leso-stφn).

Techniky IBR (Image-Based Rendering) zobrazujφ 3D scΘny pomocφ sady fotografiφ nebo obecn∞ 2D obraz∙. IBR zahrnuje i osv∞tlovacφ modely, pro n∞₧ se vyu₧φvajφ sv∞telnΘ mapy okolφ (tzv. Light-Probes). D∙kazem toho, ₧e v²poΦty pomocφ PS a VS jsou opravdu mocnΘ, je demo od pr∙kopnφka IBR Paula Debevece (obr. 4). ScΘna se sklen∞n²mi a zrcadlov²mi koulemi, nasv∞tlenß reßln²m okolnφm sv∞tlem, je poΦφtßna v reßlnΘm Φase v rozliÜenφ 1280 x 1024. P°i v²poΦtu je vyu₧it kompletn∞ p°epracovan² Ward∙v stφnovacφ model. Stejn² v²poΦet trvß programu Radiance °ßdov∞ minuty na jeden obrßzek...

Procedurßlnost zobrazenφ pomocφ GPU umo₧≥uje nap°φklad algoritmicky äochlupitô povrch libovolnΘho t∞lesa i s p°φsluÜn²mi dynamick²mi vlastnostmi. Demo v²vojß°e Tomohideho Kana (obr. 5) pou₧φvß VS pro generovßnφ p°φsluÜnΘ normßlovΘ plochy, PS se pak starajφ o textury a v∞rnΘ zobrazenφ anizotropickΘho povrchu ka₧dΘho zobrazenΘho chloupku. Procedury PS umo₧≥ujφ generovat i procedurßlnφ obrazy, jak²mi jsou Mandelbrotovy nebo Juliovy fraktßly.

DalÜφm p°φkladem pokroΦilΘho v²stupu jsou zvln∞nΘ (bump), pr∙hlednΘ a zrcadlovΘ povrchy, kterΘ vyu₧φvajφ krom∞ standardnφch textur tzv. normßlovΘ mapy a pomocn² buffer (stencil plane) pro zobrazenφ zrcadlen²ch povrch∙.

Na GPU se poda°ilo p°enΘst i nejpokroΦilejÜφ techniky zobrazenφ, jako je sledovßnφ paprsk∙ (ray-tracing) a metody globßlnφho osv∞tlenφ (global illumination). Dφky t∞mto technikßm je mo₧nΘ v souΦasnΘ dob∞ zobrazit (tΘm∞°) v reßlnΘm Φase (asi 5 snφmk∙/s) äp°esnΘô vr₧enΘ stφny, radiozitu, mnohonßsobnΘ odrazy, lomy sv∞tla, m∞kkΘ stφny aj.

Programovßnφ GPU

Programovßnφ GPU je mo₧nΘ od standard∙ OpenGL 1.2 a DirectX 8. V prvnφch verzφch standard∙ nalezneme °adu omezenφ co do velikosti vstupnφch dat i co do p°esnosti prom∞nn²ch a vektor∙ (celoΦφselnΘ hodnoty jednoduchΘ p°esnosti). ╪adu omezenφ p°ekonßvajφ poslednφ verze standard∙, tj. OpenGL 2.0 a DirectX 9.0, kde vektorovß data jsou obecnΘ matice a vstupnφ data jsou v obecnΘm neceloΦφselnΘm formßtu. UvedenΘ vlastnosti d∞lajφ z GPU obecn², vektorov∞ a rastrov∞ orientovan² koprocesor kompetitivnφ s CPU.

Vytvß°et fragmentovΘ programy pro PS a VS nenφ snadnΘ. Je nutnΘ si uv∞domit, ₧e program je v₧dy spouÜt∞n jen äjednosm∞rn∞ô (proudov∞), musφ se provΘst v p°edem omezenΘm Φase a navφc se musφ poΦφtat na vφce v²poΦetnφch jednotkßch najednou. Proudov² zp∙sob provßd∞nφ neumo₧≥uje p°φm²m zp∙sobem implementovat smyΦky a v∞tvenφ (je t°eba vytvß°et vφcepr∙chodovΘ älineßrnφô programy). P°i psanφ program∙ je t°eba dbßt i na omezenou velikost texturovacφ pam∞ti (dnes max. 128 MB), kam se musφ vejφt nejen geometrie, textury, pomocnΘ buffery a vlastnφ fragmentovΘ programy, ale tΘ₧ vytvo°enß procedurßlnφ t∞lesa a obecn∞ vÜechny v²stupy PS a VS.

Pro psanφ fragmentov²ch program∙ si lze vybrat hned n∞kolik jazyk∙. Microsoft integroval do svΘho Visual Studia jazyk HLSL (High-Level Shader Language), kter² svou strukturou p°ipomφnß takov² ämaticov² assemblerô. Lze vÜak vyu₧φt i trochu älidÜt∞jÜφô jazyky, jako je CG (podporovßn firmou nVidia), kter² p°ipomφnß jazyk C a umo₧≥uje programßtorsk² komfort vΦetn∞ generovßnφ smyΦek, v∞tvenφ aj. DalÜφ mo₧nostφ je zmi≥ovan² jazyk SRSL nebo specializovanß prost°edφ, jak²mi jsou ATILLA, ShadeLab nebo knihovna SUSHI od v²vojß°∙ firmy ATI.

V²robci HW se p°edhßn∞jφ v otev°enosti sv²ch produkt∙ a dodßvajφ zdarma specißlnφ nßstroje pro lad∞nφ PS a VS. Nap°φklad firma ATI dodßvß zajφmav² nßstroj Render Monkey, kter² mj. umo₧≥uje importovat 3D scΘny vΦetn∞ textur a interaktivn∞ zkouÜet naprogramovanΘ nebo vlastnφ VS a PS shadery. PodobnΘ prost°edφ pro lad∞nφ fragmentov²ch program∙ mß i firma nVidia pod nßzvem Render Machine. V brzkΘ dob∞ se jist∞ objevφ i nßstroj pro p°φm² p°evod jazyka RenderMan (RIB) do fragmentov²ch program∙. NaznaΦuje to skuteΦnost, ₧e nVidia nedßvno zakoupila spoleΦnost Exluna, kterß mj. vyrßb∞la populßrnφ zobrazovacφ program BMRT, interpretujφcφ prßv∞ rozÜφ°en² jazyk RIB.

Vyu₧itφ GPU v praxi

Je z°ejmΘ, ₧e pokroΦilΘ zobrazovßnφ pomocφ GPU vyu₧φvajφ zejmΘna v²vojß°i poΦφtaΦov²ch her (nap°. poslednφ verze her Doom nebo Unreal Turnament). Obrovskou sφlu pokroΦil²ch v²poΦt∙ na GPU vÜak dnes vyu₧φvajφ i äseri≤znφô pr∙myslovΘ aplikace, nap°φklad ÜpiΦkovΘ 3D modelovacφ a kompoziΦnφ programy Maya (Alias) a Softimage (Avid). Oba zmφn∞nΘ programy obsahujφ mo₧nost tzv. real-time preview, p°i nich₧ jsou scΘny zobrazovßny pomocφ GPU a p°φsluÜn²ch real-time shader∙ (PS a VS programy). V²sledek real-time preview je mnohdy kvalitativn∞ shodn² s opravdov²m programov²m zobrazenφm (software rendering), p°iΦem₧ je minimßln∞ dvacetkrßt rychlejÜφ. Omezujφcφm faktorem pro plnΘ vyu₧itφ je pouze velikost texturovacφ pam∞ti a äÜφ°eô sb∞rnice. Vyu₧itφ GPU pro preview ji₧ implementujφ i dalÜφ v²vojß°i, jako nap°φklad NaN (Blender 3D), Maxon (Cinema 4D) aj.

Ji₧ tento rok se objevily i prvnφ implementace grafick²ch akcelerßtor∙ pro PDA a mobily. Prvnφ portace standardu OpenGL pro PDA je na sv∞t∞, a tak se s VS a PS setkßme i na p°enosn²ch kapesnφch poΦφtaΦφch. Zde bude v²voj jeÜt∞ ovlivn∞n omezen²m rozliÜenφm, kterΘ vy₧aduje dalÜφ standardizaci.

Co bude dßl...

Konstatovßnφ, ₧e u₧ prakticky ka₧d² kancelß°sk² PC je vybaven 3D grafick²m akcelerßtorem, ji₧ dnes asi nikoho nep°ekvapφ. P°esto si jist∞ vzpomφnßte, ₧e p°ed t°emi lety to jeÜt∞ nebylo b∞₧nΘ a pro mnohΘ to bylo i t∞₧ko p°edstavitelnΘ. SouΦasnΘ grafickΘ karty a standardy vÜak zaΦφnajφ p°ekonßvat nejednu predikci grafick²ch optimist∙ a neuv∞°itelnΘ se stßvß skuteΦnostφ û novΘ akcelerßtory obsahujφ obecnΘ implementace pokroΦil²ch zobrazovacφch algoritm∙, kterΘ se dnes pou₧φvajφ tΘm∞° v²hradn∞ pro specißlnφ efekty ve filmech a v reklamßch.

Rychlost sb∞rnic grafick²ch adaptΘr∙ dosahuje 2,1 GB/s, GPU je ji₧ dnes v²poΦetn∞ rychlejÜφ ne₧ CPU, poΦet paralelnφch aritmetick²ch jednotek je Φty°i a vφce, grafickß pam∞¥ je 256 MB... Zdßlo by se, ₧e krom∞ pam∞ti, paralelnφch jednotek a rychlosti GPU ji₧ nenφ co vylepÜovat. Logicky vyvstßvß otßzka: Co bude dßl?

Odpov∞∩ je nejasnß, ale sm∞r v²voje naznaΦujφ poslednφ v∞deckΘ konference, jako je Siggraph nebo Rendering Workshop 2003. Na nich se ji₧ neprobφrala klasickß tΘmata zobrazenφ 3D scΘn pomocφ grafick²ch adaptΘr∙. Hlavnφm tΘmatem se stalo vyu₧itφ GPU jako specializovanΘho, vektorov∞ orientovanΘho koprocesoru pro äseri≤znφ v²poΦtyô a simulace. Modernφ architektura umo₧≥uje pomocφ GPU poΦφtat kolize objekt∙, nelineßrnφ optimalizace, nebo dokonce soustavy lineßrnφch rovnic. Ale o tom zase n∞kdy p°φÜt∞...

Jan Burißnek


Infotipy

www.nvidia.com            Oficißlnφ strßnky nVidie  

www.ati.com            Oficißlnφ strßnky ATI

www.debevec.org          Real-time implementace HDR renderingu pro Radeon 9700 PRO

www.opengl.org              Strßnky OpenGL

www.microsofr.com/directx            Strßnky DirectX

www.pixar.com               Strßnky spoleΦnosti Pixar (auto°i programu RenderMan)

www.bmrt.org                Strßnka programu Blue Moon Rendering Tool (nynφ zakoupen nVidiφ)

 

Galerie obrßzk∙

Schema-GAPipeline.PNG SchΘma modernφ architektury grafick²ch akcelerßtor∙, vΦetn∞ Vertex a Pixel Shaders.
Schema-PixelShader.PNG SchematickΘ znßzorn∞nφ architektury Pixel Shaderu.
Schema-VertexShader.PNG SchematickΘ znßzorn∞nφ architektury Vertex Shaderu.
VideoShader.JPG Real-time Image processing na GPU: mapovßnφ videa (pln² PAL) na zrcadlovou texturu.
Scattering.JPG PokroΦilß metoda zobrazenφ hor - rozptyl sv∞tla (scattering).
RenderMonkey.png Ukßzka grafickΘho u₧ivatelskΘho rozhranφ produktu RenderMonkey (ATI).
Refractions.JPG Ukßzka real-time shaderu pro simulaci pr∙hledn²ch refraktivnφch povrch∙ (ATI).
PixShading.JPG Ukßzka Pixel Shaderu umo₧≥ujφcφ aplikovat rozdφlnΘ parametry stφnovßnφ pro ka₧d² bod textury (vlevo jeden povrchy pro celou texturu, vpravo zm∞na parametr∙ textury pro ka₧d² bod).
Mandelbrot.png Interaktivnφ real-time v²poΦet fraktßlnφ Maldebrotovy mno₧iny pomocφ Pixel Shaderu (rychlost v²poΦtu je 85 fps).
iAtiSushi03.JPG Ukßzka interaktivnφho real-time dema ukazujφcφ pokroΦil² v²poΦet anizotropickΘho stφnovacφho modelu (ATI).
hAtiSushi01.JPG PokroΦil² real-time shader simulujφcφ objemov² stφnovavacφ model (ΦervenΘ krvinky).
gAtiSushi03.JPG Ukßzka z dema obsahujφcφ real-time pokroΦilΘ stφnovacφ modely na GPU (hrbolatß textura, zrcadlenφ, pr∙hlednost, nasvφcenφ okolφm aj.).
FurTorus02.png PokroΦilΘ vyu₧itφ Vertex a Pixel Shader∙ pro "ochlupenφ t∞lesa". Interaktivnφ demo, kterΘ p°i otßΦenφ t∞lesem respektuje dynamiku i anizotropickΘ stφnovßnφ povrchu "chlup∙".
fAtiSushi00.JPG Real-time shader simulujφcφ povrch a chovßnφ "bublin". (ATI)
cAtiSushi03.JPG Ukßzka v²stupu real-time NPR shaderu.
cAtiSushi02.PNG Ukßzka vytvß°enφ NPR stφnovßnφ pomocφ multi-vrstvΘ kompozice v²stup∙ z Vertex a Pixel Shader∙. Princip vytvß°enφ NPR stφnovßnφ je zalo₧en na detekcφch hran normßlovΘ mapy, mapy hloubky a rozhranφ objekt∙.
bAtiSushi04.JPG Ukßzka pokroΦilΘ metody stφnovßnφ technikami IBR. (Paul Debevec)
bAtiSushi03.JPG Ukßzka z interaktivnφho dema vyu₧φvajφcφ pokroΦilΘ metody stφnovßnφ technikami IBR, vΦetn∞ post-processing Pixel Shader efekt∙. (Paul Debevec / ATI)
aAtiSushi09.JPG Ukßzka z interaktivnφho dema vyu₧φvajφcφ Vertex Shaderu pro real-time simulaci pohybovΘho rozost°enφ (motion blur) a stφn∙ (shadow volumes)..