Hlavní stránka Hardware Grafické karty Jak pracuje grafická karta - základy 3D
Jak pracuje grafická karta - základy 3D
autor: Vopička Ondřej , publikováno 30.6.2005
Jak pracuje grafická karta - základy 3D
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. {mospagebreak title=Základní pojmy}
V první řadě chci zdůraznit, že nejsem žádný uznávaný odborník v oblasti grafiky. Mé znalosti interních pochodů grafické logiky při zpracovávání scény ze zakládají pouze na mém vlastním samostudiu (to zní divně, ale je to tak). Omlouvám se všem profi-grafikům za případný špatný výklad termínů či nepřesný překlad do češtiny.

Jak pracuje grafická karta - základy 3D
Na simulaci virtuálního 3D světa pracuje v GPU celá řada výpočetních jednotek...

Základní pojmy

V počítačové 3D grafice se používá definování scény pomocí modelování povrchů těles - jedná se o tzv. povrchovou reprezentaci (B-rep, Boudary representation). Pro věrné zobrazení reality to většinou stačí (málokdy vidíme dovnitř předmětů - výjimkou by snad mohla být skleněná koule s bublinkami, ale i to se dá v 3D namodelovat). Poznámka: povrchovou reprezentaci 3D grafiky můžete ověřit tehdy, dostane-li se "pozorovatel", například chybou enginu, dovnitř nějakého objektu (virtuální budovy, auta, modelu hráče...).

Povrch těles se dále modeluje soustavou navzájem spojených mnohoúhelníků - častěji se používá označení "polygony" (polygons). Zřídkakdy se používají složitější plochy (i když dnešní akcelerátory je už "umí") - dnešní 3D modely jsou téměř výlučně složité mnohostěny. Zjednodušení povrchů jde dokonce tak daleko, že se od vykreslovacího systému už většinou posílají jenom trojůhelníky.*

V paměti počítače je síť trojúhelníků uložená jako matice 3D souřadnic (x, y, z: zřídkakdy se používá jiná reprezentace) všech vrcholů (vertices). Pro každý trojúhelník se jen pamatuje, které tři vrcholy mu patří. Vrcholy tělesa nesou ještě další důležité informace jako barvu, normálový vektor, texturovou souřadnici (viz. dále). Běžné modely obsahují stovky (jednoduché modely) až milióny vrcholů (obrovské objekty, celá scéna).

Povrchová reprezentace objektů je do tohoto okamžiku něco jako papírový model slepený z malých polygonů. Další kvalitu tomuto modelu přinese až tzv. texturovaní. Dnešní postupy ještě zahrnují další metody (Pixel shadery), klasické texturování ale spočívá v pokrývaní polygonů malými barevnými "tapetami" - těmto tapetám říkáme textury. Textury jsou vzorky podlahy, vozidel, výstroje, nápisy, povrch obličeje, zbraní, budov...

*Problém spojený s nahrazením reálných těles (například koule) mnohoúhelníky spočívá v tom, že čím přesnější napodobení (aproximaci) chceme dosáhnout, tím větší počet trojúhelníků musíme použít - tím pomalejší bude ale vykreslování modelu grafickou kartou. Proto se dnes používají metody (například tzv. bump mapping, případně nanášení tzv. normálové mapy), kdy na jednoduché modely sestavené z menšího počtu trojúhelníků je možné nanést vrstvu která napodobuje další detaily 3D modelu (svaly na obličeji, krunýř, vnitřek ucha, kachličky).

Jak pracuje grafická karta - základy 3D
Před samotným renderingem probíhá dlouhý vývoj, kdy se předem ve specializovaných
animačních programech připraví veškeré 3D modely postav i objektů.

Fáze grafického zpracování

Jak pracuje grafická karta - základy 3D

  • Příprava aplikace
    • Pohyby těles, simulace virtuálního světa,
    • Rozhodování o tom, které části jsou nejdůležitější (LoD),
    • Rozdělení na polygony / Tesselace
      (rozdělení složitých povrchů na povrchy nižšího řádu),
  • Geometrie - většina operací je prováděná nad jednotlivými ploškami ve virtuálním 3D prostoru (nad polygony, častěji nad elementárními trojúhelníky):
    • Geometrické operace v 3D, projekce, ořezávaní, transformace,
  • Rasterizace - má za úkol převést geometrická data (trojúhelníky, body a čáry) do rastrové podoby. Patří zde:
    • Triangle Setup (určení pixelů náležejících trojůhleníkům),
    • Shading (stínování)
    • Texturování nebo nasazení Pixel Shaderů
    • Fog, Alpha Test, Depth buffering, Antialising
    • Zobrazení scény
První fází je samotná inicializace grafického rozhraní. Jedná se především o detekci aktuálního nastavení ovladačů grafické karty, zjišťují se proměnné prostředí - rozlišení, barevná hloubka, zda-li je podporovaný AntiAliasing, komprese textur a podobně. Pro jednotlivé objekty se zjišťuje úroveň detailů (LoD, Level od Detail). Tato fáze se někdy nazývá Pre-Rendering definition.

V této části nebývá ještě uvedeno v činnost 3D jádro grafické karty a obrazovka bývá zpravidla černá (s typickým probliknutím) nebo se zobrazeným 2D obrázkem (rastrovým bitmapovým obrázkem).

{mospagebreak title=Zpracování geometrie}
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
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
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
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
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
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
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
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

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

{mospagebreak title=Pixelové operace, rasterizace}

Triangle setup

Po transformaci scény následuje tzv. Triangle Setup (v této fázi jsou polygony již virtuálně osvíceny a vystínovány). Jedná se o rozklad obrazu na trojúhelníky ležící již v ploše obrazu. Jedná se tedy o obraz jakoby zachycený na plochém filmu, přičemž vrcholy trojúhelníků nesou stále informace potřebné pro úspěšné aplikování pixelových operací - informace o poloze, intenzitě a jasu... Stínování povrchu je dáno právě intenzitou stínu jednotlivých vertexů.

Práce texturovací jednotky

Jak pracuje grafická karta - základy 3D

Pod pojmem textura rozumíme dvourozměrný obrázek, který je určen k potahování předmětů a vytváření jejich reálného vzhledu. Vstupem do Texturovací části grafického pochodu je transformovaný a na trojúhelníky rozdělený osvícení a nastínovaný objekt (zpravidla ve stupních šedi, či v některém základních barevných tónů - RGB).

Textura tudíž slouží jako tapeta, vzor povrchu, kterým se daný předmět potáhne (a může se jednat klidně o poloprůhlednou texturu vody, či kouře a nejen o klasickou představu cihlové zdi).

Jak pracuje grafická karta - základy 3D Jak pracuje grafická karta - základy 3D
Projekce scény je rozdělena na logické trojúhelníky (vlevo)
jež se texturují dle daného schématu do konečné podoby (vpravo).

V 95% případů nestačí klasická jedna textura jako mapa, reprezentující povrch objektu. Při zobrazení např. stínového přechodu se na texturu umísťují další a další vrstvy poloprůhledných textur (LightMap), které dávají objektu světelně přechodový vzhled (viz. kapitola o stínování). Problematické jsou vždy poloprůhledné a nesouvislé textury jako je kouř, voda, sklo, atd. V jednom cyklu tak vyvstává nutnost nanést až několik textur najednou, např. Textura + Průhledná textura + odrazová textura, atd. Obecně jsou na jednom pixelu navršeny až tři textury, při texturování složitějších částí jako již zmiňovaná voda může počet vrstev 6 i více.

Čím více dokáže grafická karta v jednom cyklu nanést textur na pixel (Multitexturing), tím je větší pravděpodobnost, že celá operace texturování pixelu bude zvládnuta v tom samém cyklu.

Práce Pixel Shaderů

Pixel Shader je druhá základní část nových rozšířeních DirectX8 a dokáže manipulovat s objekty nejen ve fází texturování, ale už i podstatně dříve při samotném transformování scény. Stejně jako Vertex Shader (s kterým je v neustálém kontaktu a výpočty a předdefinované funkce sdílejí, či si je efektivně předávají) i Pixel Shader pracuje souběžně s texturovací jednotkou, je plně programovatelný a jeho obohacení spočívá v dílčích zásazích při texturování povrchu složitých objektů a následných odrazových a světlo-lámajících efektech.

Velká část usnadnění spočívá právě v onom multitexturingu, kdy si např. při zobrazení vodní hladiny nemusí texturovací jednotka vršit 6 textur, ale Pixel Shader jí nabídne podprogram jako Voda1, Voda1 v noci, Voda1 při bodovém světle, Voda 2, atd.., který se pak už jednoduše dotexturuje jednou, dvěmi poloprůhlednými stínovými texturami a hotovo. Mezi další vlastnosti Pixel Shaderu patří práce nad texturami jako :

  • usnadnění Phongova stínování,
  • mapování nerovností povrchu (Dot3 Bump mapping, Envirometnal Bump mapping)
  • Odrazové efekty - Difrakce a Refrakce světla, Fresnelův efekt, Cookovo osvětlení
  • Texturování kůže, vlasů, chlupů,
  • Komiksové texturování - Cartoon texturing,

Příklady

Jak pracuje grafická karta - základy 3D
Phongův model
osvětlení (per-Pixel Shading)

Jak pracuje grafická karta - základy 3D
Cook&Torrencův model
osvětlení (pro kovové povrchy)

 

Jak pracuje grafická karta - základy 3D
Fresnelův efekt
- lom světla přes vydutou čočku

 

Jak pracuje grafická karta - základy 3D
Difrakční efekt
- lom světla přes čirý krystal, matné sklo, popř. led (využito hojně u Half Life 2)

Jak pracuje grafická karta - základy 3D

Jak pracuje grafická karta - základy 3D
Nahoře je klasické texturování, dole texturování s Pixel Shaderem (srst).

Jak pracuje grafická karta - základy 3D
Cartoon rendering
- z reálné scény obrazu se vytváří komiksová karikatura

Instrukční sada Vertex a Pixel Shaderů patří mezi zásadní zlom v programování grafických pochodů, neboť neuvěřitelně usnadňuje programátorům a grafikům práci. Díky ní je tak možné zvládnout práci, která by trvala týden za jediný den a v ještě vyšší kvalitě. Bez grafických karet s podporou Shaderů se v nejbližší době některé hry neobejdou vůbec, u některých her pak bez Shaderů bude trpět kvalita obrazu, protože kdo jednou viděl technologické demo nVidia s rozbouřenou mořskou hladinou s blesky a pěnou na vodní hladině, nechce už jinak.

Renderovací jednotka

Do této části spadají konečné úpravy scény - mapování textur, alfa-test, stencil-test, Z-test (znovuodstraňování nepotřebných informacích o neviditelných pixelech), Anti-aliasing (vyhlazování) a samotný rendering (vykreslování)

O funkci Visibility subsystemu bylo již pojednáno výše. Znovu tedy připomeňme, že tato část grafické logiky se stará o sumarizaci dat o dále nepotřebných pixelech, které v průběhu pochodu 3D jádrem vypadnou, nebo nejsou v závislosti na perspektivě scény viditelné. Tento podsystém umí zasahovat do grafických výpočtů již od samotné geometrické transformace a jakmile je predikován pixel, který ve finální části nebude zobrazen - pryč s ním.

Predikce nebývá sice vždy správná, zejména jedná-li se později o multitexturing složitého povrchu, ale 80-90% "označených pixelů" je vyřazeno oprávněně (jedná se o zásadní optimalizaci grafického pochodu, neb grafické jádro nemusí zpracovávat povrchy které ve výsledném zobrazení nebudou vidět).

Klasický výpočet viditelnosti (Z-buffer)

Zobrazované objekty - čáry, trojúhelníky a body se rozdělí na jednotlivé pixely a pro každý pixel se určí jeho viditelnost samostatně - porovnává se "vzdálenost" pixelu s informacemi uloženými v tzv. Z-bufferu a provádí tzv. test hloubky: Z-Test. Dojde-li systém k závěru, že pixel bude v 3D scéně překreslen, vyřadí ho. Současné nejnovější trendy hovoří o tzv. Deferred rendering, tedy metodice, která přímo zakazuje do pixelového průchodu pouštět ve finální fázi nezobrazené pixely. Obvyklé problémy nastávají s klasickými případy poloprůhledných objektů -> k překreslení dochází tady vždy, je však nutno ho co nejvíce eliminovat.

Mapování textur, filtrování

Filtrování se provádí má za úkol dostát hladké návaznosti z textury na texturu. Tuto návaznost není složité dopočítávat uvnitř souvislé plochy, problém nastává s texturami na rozhraní (přechod z horizontu na oblohu, animace vesmírné lodě na tmavém pozadí poseté hvězdami..).

Filtrování (mapování textur) se liší dle počtu stupňů - Bilineární, Trilineární a Anizotropické. Na slabších kartách postačí filtrování bilineární, od GeForce3 a výše můžeme bez razantnější ztráty rychlosti renderingu použít filtrování trilineární, nejsložitější anizotropické pak nabízí nejlepší vizuální dojem bez ztráty výkonu jen na silných grafických kartách typu Radeon 9700 a výše (pozn. je nejlépe nastavit 8xAF, jelikož rozdíl oproti 16xAF je stěží viditelný).

Dále se není třeba bát použití tzv. brilineárního filtrování (optimalizovaného), které poskytuje srovnatelnou kvalitu s klasickým trilineárním, ale toto platí jen pro hry, protože pro profi aplikace je stále potřeba použít filtrování bez optimalizací (bez artefaktů a zkreslení).

AntiAliasing

K vyhlazení zubatých hran na rozhraní dvou nespojitých zobrazení (aliasingu) se používá tzv. vyhlazovací filtrování: Anti-Aliasing (AA). Ošklivé zubaté hrany byly vždy problém a o metodách jejich vyhlazování se vědělo už dříve, ale zátěž na výkon grafické karty byla tak vysoká, že bylo nejprve potřeba aby dospěl samotný hardware. Dnes, s kartami jako Radeon X800 či GeForce 6800 si již Anti-Aliasing můžeme vychutnávat, aniž by klesla spojitost zobrazování (fps - počet obrázků za vteřinu) pod únosnou mez (cca 40-60 fps).

Princip AA není vždy jednoduchý (stále se hledají metody jak dosáhnout hladkého, a při tom v celé ploše ostrého zobrazení) - pro ilustraci si uveďme si jen jeden z jednoduchých principů, jak se zbavit ošklivého aliasingu: SuperSampling, zvětší problematickou část 2x až 4x a v této zvětšené podobě jednoduše interpoluje přechodové "chybějící" či nevhodně barevné pixely. Následuje Re-Sampling a zmenšení na původní velikost, která má 2x až 4x méně zubaté hrany než předchozí obraz.

Jak pracuje grafická karta - základy 3D
Zde se můžete podívat na jednoduchý 4x sampling vzorku.
Každý chybějící pixel vznikne "zprůměrňováním" okolních 4 pixelů.

Pokud je Anti-Aliasing aplikován najednou na celý obraz, hovoříme o FSAA (Ful Screen Anti-Aliasing) nebo o HRAA (High-Resolution Anti-Aliasing). Karty s čipem Radeon využívají technologii SmoothVision. U silných grafických karet je možné nastavit 2x,4x i 6x AA, u nVidia jsou k dispozici ještě alternativní módy AA : První (starší) s podivným názvem QuinCunx, který sice neubírá tak drasticky výkon 3D karty, ovšem jeho kvalita je někde kolem a pod úrovní 2x A-A. Novější AccuView AA používají starší GeForce4 Ti a nabízí daleko lepší kvalitu zobrazení než Quincunx (na úrovni 4x AA).

Moderní karty ATi a nVidia mají kvalitu AA velmi dobrou a to bez zásadního dopadu na výkon (když nebereme úvahu nejvyšší módy ATi 6x a nVidia 8x). Na nejnovější kartě nVidie GeForce 7800GTX je podporován tzv. Transparentní Anti-Aliasing, který dovoluje vyhladit hrany objektů s transparentními texturami jako listí či tráva. Tato metoda AA využívá jak Multi-Samplingu tak i Super-Samplingu, který je o poznání kvalitnější, ale má rovněž největší dopad na výkon.

Rendering

Po průchodem všemi předcházejícími kroky získává obraz konečně svou finální podobu a může postoupit do vykreslovací (renderovací) fáze, ve které je celá operace podstoupena do videopaměti (framebuffer). Zde se ukládá nejen ucelený a hotový frame, ale současně se mažou i nepotřebné informace, poněvadž geometrická jednotka už pracuje s obrazem dalším. Dynamické zobrazení scény pracuje s dnešními grafickými kartami na velmi vysokých rychlostech. Během jedné vteřiny dokáže provést výpočet a vykreslení stovky i více hotových framů, což jsou desítky miliónů trojúhelníků a miliardy pixelů (hovoříme o tzv. Fill rate - schopnosti předávat hotové otexturované pixely do framebufferu).

  • Pixel fill rate (MPixels/sekundu) - znamená kolik pixelů je schopna grafická karta předat za jednu sekundu do framebufferu
  • Texel fill rate (MTexels/sekundu) - znamená kolik texturových elementů (Texelů) je schopna grafická karta natáhnout z paměti během jedné vteřiny. Tyto termíny bývají velmi často zaměňovány zejména v reklamních materiálech grafického čipu. Počet Texelů / s je vždy větší, často se jako míra porovnání i počet trojúhelníků za vteřinu (triangles / sec.), zpravidla v desítkách mil. / vteřinu.
Všechny popsané fáze postupu práce se scénou slučuje grafické jádro do jednotného modelu a operace popsané v tomto článku patří mezi opravdu ty základní. Celý proces je samozřejmě mnohem složitější a komplikovanější, ale doufám, že Vám toto malé pojednání objasnilo alespoň některé základní principy tak složitého procesu, jakým zobrazování grafické 3D scény je.

Čerpáno ze serverů www.reactorcritical.com, www.3dchipset.com, www.guru3d.com, www.bionicinfo.com...

Vynikajícím zdrojem informací jsou přednášky MFF UK v Praze (Hardware pro počítačovou grafiku PGR019)

 
Komentáře k článku
RSS
Pouze registrovaní uživatelé mohou přidat komentář!
30.6.2005 18:54:45   0.0.0.xxx 1619
U obrázků s tygrem udává popisek výraz "vlevo a v pravo" , ale obrázky jsou nad sebou. :-)

Jinak zajímavé, těžce jsem nechápal:-)
Raději bych vyděl nějaký test HW než článek o Aple a 3D.
Nebo alespoň sepsat to, co sa zatím ví o FUDO.

30.6.2005 19:09:21   0.0.0.xxx 1917
o grafiku se nezajimam ale specular bych neprelozil jako spekulativni, jinak clanek celkem zajimavy, urcite to dalo hodne prace.....
30.6.2005 19:56:22   0.0.0.xxx 1818
docela dobrý... dneska si leckde můžeme prohlídnout obrázek kde je schéma čipu a prd víme co to znamená tak je dobře že budu aspoň základně vědět kde se co děje...
30.6.2005 20:30:02   0.0.0.xxx 1719
konečně pořádnej článek o tom co to vůbec 3D je a co všechno 3D efekty a textury využívaj.. chválim
30.6.2005 20:44:03   0.0.0.xxx 1819
Dobry, doufam ze se brzo dockame pokracovani!!!
30.6.2005 21:19:12   0.0.0.xxx 1818
Takže možná v Pá a příští týden...
30.6.2005 23:47:56   0.0.0.xxx 1719
Samozrejme mas pravdu. Autor at prosim opravi, ze to neni spekulativni, ale spekularni (je to od slova speculus, coz znamena kuzel).
1.7.2005 07:07:09   0.0.0.xxx 1818
Nejdřív jsem čekal nějakou blbost,
ale tohle byl super článek na dost vysoké úrovni.
Dost dobrý.
1.7.2005 07:46:36   0.0.0.xxx 1818
"Pipeline" neznamená "najednou" i když laicky by se to tak dalo nazvat...
1.7.2005 08:10:31   0.0.0.xxx 1818
Je mi líto autora, že si s tím dal tolik práce a snahy, ale musím říct, že tenhle článek je naprostá hrůza. Autor nemá naprosto žádné tušení, jak to funguje.
Téměř žádná věta není správně !!! To je jedna dezinformace vedle druhé. Míchání jablek s hruškama a naprostý guláš.
Ono by se to chtělo i trochu zamyslet a ne jen papouškovat všechno, co kdo kde napsal.
Naprostý vrchol je pak kapitola o texturování. Proboha, počet pipelines nemá nic společného s multitexturingem.
Současné čipy mají 1 text. jedn./pipeline a při potřebě více vzorkovaní se prostě použije více taktů.
Dále pixel shadery a vertex shadery jsou umístěny v úplně jiné části pipeline a nijak nespolupracují. VS pracují s vrcholy a PS s pixely.
Taky shadery jsou (skoro) normální programy s intrukcemi jako sčítání, násobení apod. a ne nějaké předdefinované efekty.
Další věc - DOOM3 shadery vůbec nepotřebuje (důkaz: pusťte si ho na GF1/2/4MX).
Nejlepší perla na závěr je ta, že v obraze mohou vznikat náhodné chyby - NAPROSTÝ NESMYSL (pokud ovšem netaktujete) !!!.
ATI Crossfire a Tile Based Rendering - dvě naprosto odlišné věci, které se jen podobně jmenují :-)
A mohl bych pokračovat ještě do zítřka...

BTW: "Vertex" (mn. č. "Vertices") se česky jmenuje "vrchol"

Sry, ale tohle jsem už vážně nemohl vydržet. Tenhle článek má totiž zápornou informační hodnotu...
1.7.2005 08:15:49   0.0.0.xxx 1994
Rozbalit komentářPříspěvek byl automaticky zabalen pro velké množství negativních hlasů.
1.7.2005 09:36:05   0.0.0.xxx 1817
Článek je pěkně rozvržený, jsou v něm pěkné obrázky a některé pasáže problematiku srozumitelně vysvětlují, ale je tam strašně moc chyb.

"spekulativní" vs spekulární se na PCT už nejednou probíralo (třeba článek o Doom3).

pak jsem nějak nepochopil spojení transformace, osvětlení a texturování s Rivou TNT? možná moje chyba :-)

počet v taktu nanesených textur závisí na počtu texturovacích jednotek/pipeline. Pouze v některých případech (pár čipů od nVidie a 3Dfx) to nelze jednoduše stanovit (flexibilní architektura např. 4x1 / 2x2 atp.). Takže GF2/3/4 2 vrstvy, Radeony řady 7000 tři vrstvy, řada 8000 + 9100 dvě vrstvy a jediný běžný čip, který zvládá víc než R7x00 je parhelia (4-vrstvý multitexturing). Pro dosažení většího počtu vrstev je zapotřebí více taktů (pokud není čip flexibilní, jak jsem zmínil výš)

Neplést tile-based rendering a supertiling! Supertiling je rozložení scény na obdélníky/čtverce, jejichž zpracování se přiřadí různým čipům (účel = multiprocesing). Tile-based rendering je taky rozdělení scény na menší úseky, ale dál jde o něco úplně jinýho. TBR slouží primárně k eliminaci externího z-bufferu, čímž snižuje počet přístupů do paměti a ulevuje sběrnici. Umožňuje to realizovat rychlejší z-testy (potřebné pro deferred rendering), případně MSAA bez ztráty výkonu a další výhody. Kyro I a II nebyly pokusy, to byla tile-based architektura dotažená do plně funkční podoby.

FSAA: při SS nedochází k žádné interpolaci ve vyšším rozlišení. Navíc se netýká je částí, ale celého obrazu. použití supersamplingu na části obrazu je novinka a týká se to především alpha-textur. Proč není ani zmíněn MSAA, když právě ten je tím hlavním režimem, který se za poslední tři roky používá?

HRAA je více méně marketingový termín nVidie, nemá smysl ho pokládat na stejnou úroveň jako termín FSAA. Quincunx je RGMS 2x se specifickým postfiltrem (blur - použití barvy jednoho subpixelu pro sousední pixely). AccuView je opět jen marketingový termín označující RGMS 2x, OGMS 4x, Quincunx a kombinaci SS/MS.

Tahle pasáž: "Na nejnovější kartě nVidie GeForce 7800GTX je podporován tzv. Transparentní Anti-Aliasing, který dovoluje vyhladit hrany objektů s transparentními texturami jako listí či tráva. Tato metoda AA využívá jak Multi-Samplingu tak i Super-Samplingu, který je o poznání kvalitnější, ale má rovněž největší dopad na výkon."

je naprosto správně a čtenáři by si to měli zapamatovat :-)
1.7.2005 10:17:03   0.0.0.xxx 1819

No ony vysokoskolske skripta zas tak nesrozumitelne byt nemusi.
Tady jsou slidy k prednasce "Hardware pro pocitacovou grafiku":

http://cgg.ms.mff.cuni.cz/~pepca/lectures/pdf/#pgr019
1.7.2005 10:44:36   0.0.0.xxx 1820
Opravíme spekulativní... a pokusím se něktré nejasnosti narovnat.
1.7.2005 11:03:34   0.0.0.xxx 1819
"Téměř žádná věta není správně !!!" to by zase tak nehrotil..je tam par chyb a spornych formulaci, ale to se da napravit.

Jinak add Doom 3...heat efekt taky nepotrebuje shadery coz?:-)Slovu vubec bych se vyhnul...D3 spustis i na Voodoo, dkyz an to prijde.

Jinak veci typu T&L u TNT beru navedomi a opravim.
1.7.2005 12:54:01   0.0.0.xxx 1919
Suhlas, autor by si mal zistit o veciach podrobnosti, alebo vynechat pasaze, ktorym nerozumie. Takto to posobi takmer ako referat pre strednu skolu. Inak napad a snahu si cenim, no niektore fakty by bolo treba poopravit.
1.7.2005 13:44:20   0.0.0.xxx 1719
Tak nejak v zakladech uplne chybi asi ten nejdulezitejsi, a to matematicky zaklad . Afinni a projektivni prostory, homogenni souradnice, zobrazovaci transformace, atd. atd.
1.7.2005 16:04:20   0.0.0.xxx 1820
Psal jsem, ze D3 NEPOTREBUJE shadery a ne nepodporuje. Samozrejme, ze nejake (cti oba dva) spec. efekty potrebuji shadery.
Na Voodoo spustis D3 leda tak ocesany, ale na GF1 ho spustis s kompletnim svetelnym modelem, vcetne spekularni (cesky "zrcadlove") slozky.

"..je tam par chyb a spornych formulaci" - spatne jsou bohuzel cele odstavce
1.7.2005 16:17:25   0.0.0.xxx 1819
NO autor se bohuzel pustil do nebezpecneho tematu, kde se omyly rozhodne netoleruji:-(...
1.7.2005 19:29:17   0.0.0.xxx 1719
Článek jsem zásadně přepracoval - doufám, že nová verze bude přesnější a srozumitelnější a bude se Vám více líbit (zabrala několik hodin práce). Díky za upozornění...
1.7.2005 19:29:50   0.0.0.xxx 1719
Článek jsem zásadně přepracoval - doufám, že nová verze bude přesnější a srozumitelnější a bude se Vám více líbit (zabrala několik hodin práce). Díky za upozornění...
1.7.2005 19:31:36   0.0.0.xxx 1919
Článek jsem zásadně přepracoval - doufám, že nová verze bude přesnější a srozumitelnější a bude se Vám více líbit (zabrala několik hodin práce). Díky za upozornění...
1.7.2005 19:32:30   0.0.0.xxx 1817
Podle toho jsem článek přepracoval... Ještě jednou díky!
1.7.2005 19:46:15   0.0.0.xxx 1618
Ještě by mě velmi zajímalo, jak dlouho to všechno počítání (hlavně antialiasing a anizo..) trvá. Mám FX5700 a tyto efekty nezapínám ne proto, že by mi snižovaly FPS, ale že to zpomaluje zobrazeni.Dobře je to vidět např. na zaostávání kurzoru při pohybu myši. Je toto patrné i u výkonnějších grafik? V tomhle vidím podstatně větší problém, než v tom, jestli se vykreslí 30 nebo 60 FPs!
1.7.2005 21:50:22   0.0.0.xxx 1819
"na některých efektech pracují samostatně, na některých odděleně"
1.7.2005 23:03:06   0.0.0.xxx 1820
ME (mohlo by to byt v pokracovani) spise zajima jak jsou 3D akceleracni cipy reseny po obvodove strance, zda je mam chapat jako jakysi shluk ruznych DSP jednotek nebo je to jenom "dalsi procesor" s nejakym vlastnim vnitrnim programem prebirajici data a "registralni" nastaveni z ovladacu, jestli treba neni uvadeni novych akceleracnich karet jenom kasparkove divadlo kdy fy. XY akorat zvedne takt nejake vnitrni CPU trochu prepise jeji vnitrni program a hura mame novinku
2.7.2005 00:29:10   0.0.0.xxx 1818
No, tenhle problém se často stává, když je hlavně CPU dost nadhodnocen nad tou grafikou. Tohle časové zpomalení způsobuje to, že karta nestíhá(hlavně fill-rate). V téhle situaci tam asi stejně více jak 30fps nebude. Poku s tim nic neudělá poslední driver, doporučuji snížit počet snímků ukládaných do framebufferu na 0(třeba rivatunerem). To pomahá.
2.7.2005 11:22:03   0.0.0.xxx 1720
Zajímavý článek, konečně jsem se něco dozvěděl o tajemných pixel shaderech. Všude na netu se to hemží články co která nová karta zvládne, jakou má super new technologii, a že shader jednotka zabere polovinu chipu, ale vysvětlení co to vlastně je leckde chybí. Takže super článek!
3.7.2005 20:35:10   0.0.0.xxx 1619
taky chci poděkovat za článek. Dost věcé mi to osvětlilo. Jen tak dál.
8.7.2005 15:27:33   81.95.106.xxx 1818
aky je medzi tymto rozdiel??

"na některých efektech pracují samostatně, na některých odděleně"
10.7.2005 15:26:43   85.160.88.xxx 1718
Jen bych dodal, ze skripta byvaj casto zastarala. Treba na FIT VUT Brno neni ve skriptech ci slajdech k zakladum grafiky o shaderech ani zminka. Pravde je ze jsou to jen zaklady, ale i tak...
19.7.2005 19:22:30   147.175.98.xxx 1918
potesujuci clanok

Redakce si vyhrazuje právo odstranit neslušné a nevhodné příspěvky. Případné vyhrady na diskuze(zavináč)pctuning.cz

60 čtenářů navrhlo autorovi prémii: 28.4Kč Prémie tohoto článku jsou již uzavřené, děkujeme za váš zájem.
Tento web používá k poskytování služeb soubory cookie.