jak-pracuje-graficka-karta-zaklady-3d
Hardware Článek Jak pracuje grafická karta - základy 3D

Jak pracuje grafická karta - základy 3D | Kapitola 2

Vopička Ondřej

Vopička Ondřej

30. 6. 2005 00:00 32

Seznam kapitol

1. Základní pojmy 2. Zpracování geometrie 3. Pixelové operace, rasterizace

Upravená verze: Nové grafické čipy už obsahují více tranzistorů (GeForce 7800 obsahuje 302mil. tranzistorů) než poslední super-duper 64-bitové procesory a ne vždy je zřejmé, co tyto kvanta tranzistorů vlastně dělají. Jak vlastně vzniká 3D scéna, které kroky musí proběhnout a co se při nich v grafické kartě děje? Pokud chcete pochopit základní otázky spojené s 3D renderingem, pak je tento článek určený právě pro vás.

Reklama
Vstupem do další fáze, tedy geometrického zpracování je již matematicky připravený obraz. Známe polohu objektů, jejich rozčlenění na základní plošky tzv. polygony (které jsou definovány ještě v 3D prostoru) a údaje o osvětlení scény. Vrcholy (společné pro několik trojúhleníků) objektových polygonů (povětšinou 3-úhleníky, ve složitější scéně i 4-úhelníky) se nazývají vertexy a jejich souřadnice mají v celém geometrickém postupu zásadní postavení. Je-li scéna takto matematicky připravena (představte si, že chcete namalovat obrázek na milimetrový papír a vedle na skicák si zatím napíšete přesné polohy všech vrcholů, ale ještě nic nerýsujete), můžou všechny údaje postoupit do geometrické jednotky (které se také říká Vertexová jednotka).

Jak pracuje grafická karta - základy 3D
i Zdroj: PCTuning.cz
Takto nějak může vypadat vertexový rozklad objektu. U statického obrazu si geometrická jednotka většinou vystačí se souřadnicemi vertexů (vrcholů), avšak u obrazů dynamických, kdy v dalším framu (obrazu) je rozložení jiné, jsou vertexy doplněny ještě o informace o směru pohybu či rotaci.

Práce Geometrické jednotky:

Mezi základní operace geometrické jednotky patří Transformace a Osvětlení (Transform & Lighting engine, T&L engine - dnes už tyto funkce mají na starosti Vertex Shadery od 1.0 do 3.0). Mezi první grafické čipy s hardwarovou podporou T&L patřily první karty řady nVidia GeForce a od této doby přebírá grafické jádro 3D akcelerátoru stěžejní část geometrických úkolů (dříve dopočítával transformace i osvětlení procesor počítače).

Práci Geometrické jednotky se říká Geometry processing, nebo pre-Rendering Setup a někdy také Vertex processing, což souvisí s uvedením grafických karet s programovatelným jádrem. Ke slovu se v tomto případě dostávají tzv. Vertex Shadery o kterých se ještě zmíním.

Transformování scény

Transformování se aplikuje na jednotlivé polygony a má za úkol převést obraz z virtuální 3D scény (která je v tzv. světových souřadnicích) na zobrazovanou 2D projekci - soustavu která je spojená s pozorovatelem. Předpokládá se, že osa pohledu leží v ose "z" - tato osa slouží při výpočtu viditelnosti jako vzdálenost od pozorovatele - osy "x" a "y" se transformují tak, aby scéna vyplnila požadovaný výřez na obrazovce (osy x a y se dají použít přímo k vykreslení).

Dále vstupuje na scénu první aktivní subproces transformace nazývaný Visibility subsystem. Jelikož se obraz převádí z 3D do 2D pomocí lineární perspektivy, kdy je po celou operaci zapotřebí uchovávat informace o všech, tedy i o těch ve finále nezobrazených polygonech, zasahuje visibility subsystém již během procesu transformování scény a efektivně odstraňuje nepotřebné informace (tzv. Culling) - jedná se především o odstranění polygonů odvrácených od pozotovatele. Clipping je zase odstranění všech objektů ležících mimo "zorný jehlan".

Hierarchické transformace

Moderní grafické akcelerátory dokážou počítat transformace mezi soustavami hierarchicky propojených lokálních souřadných soustav (svět - objekt - subobjekt - součást, například: svět - vozidlo - otáčející se kulometná věž - rotující hlaveň). Tento postup může usnadnit práci hlavnímu procesoru a je možný mj. i díky programovatelným jednotkám "Vertex shaders".

Výpočet osvětlení na úrovni geometrického modelu

Výpočet osvětlení probíhá souběžně s transformováním scény a patří mezi ty nejsložitější operace. V prvé řadě je tu fakt, že zřídka kdy přichází světlo jen z jednoho bodu a pod jedním úhlem. Dynamické scény s mnoho světly vyžadují např. při 8-mi světlech 8x více výpočtů než při výpočtu světla jednoho.

Každá projekce světla se skládá ze dvou částí - spekulární a difúzní (Specular and Diffuse Light). Difúzní část určuje jak se povrch objektu chová po dopadu světla a jak je světlo intenzivní na jeho bezprostředním okolí. Spekulární osvětlení počítá s odrazem světla od samotného objektu, od jeho okolí a s tzv. Surface repressing - závislostí intenzity, barvy a polohy světla na úhlu pohledu.

Jak pracuje grafická karta - základy 3D
i Zdroj: PCTuning.cz

Levý obrázek určuje vzhled objektu po osvětlení jen Difúzní částí.

Pozor! Osvětlení se musí logicky rozdělit na dva mezikroky. První osvětlení se počítá před samotnou transformací (aplikuje se na 3D scénu a souvisí s geometrii a Vertex Shadery), další osvětlení je pak dopočítáno na 2D obraz rozdělený na trojúhelníky (souvisí s rasterizací a potažmo s Pixel Shadery).

Zdroje světla

Jak pracuje grafická karta - základy 3D
i Zdroj: PCTuning.cz

Princip lineárního nekonečného osvětlení. Matematicky nejjednodušší metoda.
Zdroj světla je v každém bodě nekonečný a stejně intenzivní.

Jak pracuje grafická karta - základy 3D
i Zdroj: PCTuning.cz

Bodový zdroj světla. Komplexnější osvětlení, kde intenzita světla klesá v závislosti na vzdálenosti od zdroje.
Důraz je rovněž kladen na správný výpočet stínů vrhaných okolními objekty.

Jak pracuje grafická karta - základy 3D
i Zdroj: PCTuning.cz

Bodový cíl světla. Osvětlení např. bodovými lampami bývá matematicky nejsložitější.

Ještě než scéna, teď již osvětlená a rozdělená na logické trojúhelníky (Triangle Setup Definition), přejde do texturovací části grafického procesu, je nutno určit ke každému vertexu hloubku stínování (tzv. Shading). Stínování patří mezi funkce T&L (případně je vykonávano Vertex Shadery) a stejně jako transformace s osvětlením probíhá souběžně ke všem procesům. U nových grafických karet souvisí již

stínování

s novými funkcemi, nazvanými Shader instructions (DirectX 8.0 - 9.0). Ve fázi geometrického procesu přebírá valnou část práce se stínováním část geometrické jednotky nazvaná Vertex Shader.

Obecně známe dva druhy stínování - Gouraudovo a Phongovo:

Jak pracuje grafická karta - základy 3D
i Zdroj: PCTuning.cz
Gouraudovo stínování je nejjednodušším modelem stínového výpočtu. Intenzita barvy je spočítána pouze pro Vertexy (vrcholy trojúhelníka) a interpolována přes jeho povrch. (Severní vrchol je tmavý, vrcholy základny světlé = povrch se stínuje do černé barvy směrem k hornímu vrcholu).

Jak pracuje grafická karta - základy 3D
i Zdroj: PCTuning.cz
Phongův stínovací model vychází z nezávislého stínování každého pixelu. Pokud se toto stínování hodlá využívat je nutné držet informace o stínovaných pixelech po celou další fázi texturování. Matematicky je Phongovo stínování daleko náročnější na výpočetní výkon, avšak nabízí věrnější stínový přechod.

Jak pracuje grafická karta - základy 3D
i Zdroj: PCTuning.cz

Jen pro ilustraci předběhněme a ukažme k čemu vůbec stínování je. První trojúhelník je již otexturovaný (což se děje v následující fázi o které je pojednáno níže) a druhý je vystínovaný. Sloučením obou trojúhelníků získáme vystínovanou texturu (jedná se o primitivní multitexturing).

Jak pracuje grafická karta - základy 3D
i Zdroj: PCTuning.cz

Na tomto obrázku se velmi dobře demonstrují veškeré výše uvedené skutečnosti.

Práce Vertex Shaderů (VS)

Zmínil jsem se o tom, že vertexy, tedy vrcholy polygonů, nesou stěžejní informace nutné k transformaci virtuální scény z 3D prostoru na 2D projekci a mají důležitou funkci i při výpočtu osvětlení a stínování. K ulehčení práce se soustavou vertexů při transformaci a všech s tím spojených "srandiček" slouží dnes primárně Vertex Shadery.

Poprvé se Vertex Shadery objevily u GeForce3 jednotky a tehdy nazvané nFiniteFX, dnes již dokáže pracovat s Vertex Shadery každá novější grafická karta.

Aplikace VS spočívá v předdefinovaných efektech a posloupnostech (vlastně mikro-programech), které se aplikují na každý vrchol který vstoupí do řetězce geometrického zpracování. Jelikož jsou Vertex Shadery plně programovatelné jednotky, není nic jednoduššího, když si aplikace během inicializační fáze "nahraje" předdefinované efekty a procedury, které si ve fázi transformace a osvětlení "zavolá" na pomoc.

Dva druhy shaderů - vertex a pixel shadery

Vertex i dále zmíněné Pixel Shadery pracují na všech úrovních grafického postupu (na některých efektech pracují samostatně, na některých odděleně). Pokud je potřeba zasáhnout ve fázi geometrické použijí se Vertex Shadery (VS), ve fázi texturovací přijdou ke slovu Pixel Shadery (PS) - tyto mikro-programy se aplikují na každý pixel zobrazované scény.

Shadery jsou používány pro zobrazování fotorealistických povrchů a triků typu:

  • Deformace povrchu (tlakem, tahem, kroucením, magnetickým polem),
  • Potahování pružnými plochami (např. kůže),
  • Morfing objektů,
  • Simulace vodní hladiny,
  • Mlha, kouř,
  • Lámání světla přes sklo, odraz světla ve vodě...
Z hlediska výkonu 3D akcelerátoru jsou důležité zejména Pixel Shadery (o nic pojednáme dále). Vertexové operace nejsou totiž na výpočetní výkon tak náročné, jako operace nad jednotlivými pixely.

Předchozí
Další
Reklama
Reklama

Komentáře naleznete na konci poslední kapitoly.

Reklama
Reklama