Hlavní navigace

Vykreslování 3D scén grafickým akcelerátorem Intel 740

21. 1. 2010
Doba čtení: 12 minut

Sdílet

V dnešní části seriálu o architekturách počítačů se budeme zabývat způsobem vykreslování prostorových (3D) scén grafickým akcelerátorem Intel 740 spolu s podrobnějším popisem celého vykreslovacího řetězce (rendering pipeline) i některých unikátních vlastností tohoto grafického akcelerátoru.

Obsah

1. Vykreslování 3D scén grafickým akcelerátorem Intel 740

2. Podporované grafické režimy

3. Výstup na televizor

4. Organizace paměti využívané grafickým akcelerátorem Intel 740

5. Grafický řetězec provádějící vykreslování 3D scén

6. Setup Engine

7. Scan Converter

8. Texture Pipeline

9. Color Calculator

10. Odkazy na Internetu

1. Vykreslování 3D scén grafickým akcelerátorem Intel 740

V předchozí části seriálu o architekturách počítačů jsme si mj. popsali i základní 2D operace, které jsou podporovány na grafickém akcelerátoru Intel 740. Jedná se především o podporu blokových přenosů obrazu bez zatížení mikroprocesoru, které je prováděné funkčními bloky nazvanými Fixed Blitter (BLT) a Stretch Blitter (STRBLT) spolu s možnou aplikací některých rastrových operací (maskování bitů logickou operací AND, aplikace bitové operace XOR, konverze z a do různých formátů pixelů, expanze barev, zvětšení či zmenšení obrázku, výplň částí obrazu aj.) v průběhu blokového přenosu. Mezi další podporované 2D operace patří zobrazení kurzorů myši, jejichž velikost se může pohybovat od 32×32 pixelů až po „maxikurzory“ majícími velikost 128×128 pixelů. Tato část grafického akcelerátoru Intel 740 je poměrně intenzivně využívána operačními systémy při zobrazení grafického uživatelského rozhraní (například přesuny oken lze realizovat sekvencí blokových operací prováděných modulem Fixed Blitter).

pc9508

Obrázek 1: Grafická karta s čipem Intel 740. Jedná se o jednu z prvních grafických karet, která dokázala v plné míře využít vlastností přenosového kanálu AGP (Accelerated Graphics Port).

Minule jsme si taktéž řekli, že vykreslovací řetězec (rendering pipeline nebo pouze pipeline) provádějící veškeré grafické operace je na akcelerátoru Intel 740 rozdělen do dvou relativně nezávisle pracujících částí – část provádějící 2D operace (viz předchozí odstavec) a část určenou pro vykreslování prostorových (3D) scén. Dnes se budeme zabývat popisem druhé části vykreslovacího řetězce, tj. zpracováním prostorových scén: výpočtem osvětlení, Gouraudovým stínováním, texturovací jednotkou (včetně popisu MIP map), rasterizační jednotkou, operací s barvami při rasterizaci těles atd. Zajímavá je také organizace paměti využívaná tímto grafickým akcelerátorem, která sice využívala všech předností přenosového kanálu AGP (z pohledu firmy Intel se jednalo o technologické demo), na druhou stranu však chyba v návrhu způsobila, že vykreslování složitějších otexturovaných těles mohlo být zpomaleno kvůli neustálým přesunům dat mezi operační pamětí počítače a grafickým akcelerátorem.

pc9602

Obrázek 2: Bloková struktura čipu Intel 740 spolu s jeho vstupními a výstupními rozhraními a interními přenosovými kanály.

2. Podporované grafické režimy

Grafický akcelerátor Intel 740 umožňoval použití mnohem většího počtu grafických režimů, než tomu bylo u minule a předminule popsaného grafického akcelerátoru Voodoo 1. Je to ostatně logické – zatímco Voodoo 1 byl určen pouze pro vykreslování prostorových scén s tím, že o běžné zobrazení grafického uživatelského rozhraní se postará běžná grafická karta (VGA, SVGA) zapojená do „série“, byl grafický akcelerátor Intel 740 vybaven, jak jsme si již řekli, 2D i 3D částí, přičemž doba přístupu do video paměti i rychlost digitálně-analogového převodníku umožňovala dosáhnout mnohem vyšších rozlišení i obnovovacích frekvencí obrazu (dnes se již tato veličina díky použití LCD monitorů nezvyšuje, ovšem při využití monitorů vybavených obrazovkami CRT se za ergonomické frekvence považovalo minimálně 75 Hz, raději však 85 Hz). V následující tabulce jsou vypsána jak podporovaná rozlišení, tak i maximální obnovovací frekvence obrazu při použití různých barevných hloubek (minimální obnovovací frekvence jsou rovny 60 Hz a v některých režimech pouze 56 Hz):

Rozlišení 8bpp 16bpp (hi-color) 24bpp (true color)
320× 200 85 Hz 85 Hz 85 Hz
320× 240 85 Hz 85 Hz 85 Hz
512× 384 85 Hz 85 Hz 85 Hz
640× 350 85 Hz 85 Hz 85 Hz
640× 480 85 Hz 85 Hz 85 Hz
800× 600 85 Hz 85 Hz 85 Hz
1024× 768 85 Hz 85 Hz 85 Hz
1280×1024 85 Hz 75 Hz ×
1600×1200 75 Hz × ×

Jak je z výše uvedené tabulky patrné, některé kombinace rozlišení a barevné hloubky nejsou podporovány. Jedná se o omezení dané rychlostí grafického řetězce při načítání hodnot pixelů z framebufferu a jejich posílání na digitálně-analogový převodník. Například v grafickém režimu s rozlišením 1600×1200 pixelů, barevnou hloubkou 8bpp (maximálně 256 barev, jde o grafický režim s barvovou paletou) a obnovovací frekvenci obrazu 75 Hz je nutné za jednu sekundu načíst a přenést celkem 1600×1200×75=­144000000 bajtů, tj. cca 137 MB, přičemž digitálně-analogový převodník zabudovaný na čipu má mezní frekvenci 220 MHz.

3. Výstup na televizor

Kromě generování signálů kompatibilních s počítačovými monitory (podpora „analogového“ rozhraní používaného kartami VGA a SVGA) umožňuje grafický akcelerátor Intel 740 i výstup obrazu na televizor. Ovšem samotný čip 740 negeneruje přímo video signál určený pro připojení televizoru (S-video apod.). Namísto toho je vybaven specializovanou dvanáctibitovou datovou sběrnicí určenou pro připojení čipu, který se o generování potřebných signálů postará sám. Jedná se například o čip BT869 firmy Rockwell (podobné čipy však produkují i další výrobci). Po zmíněné dvanáctibitové sběrnici se přenáší informace o jednotlivých pixelech kódované v běžném 24bitovém formátu RGB. Při výstupu na televizor jsou podporována následující rozlišení:

Rozlišení
320×200
320×240
640×400
640×480
720×480
720×576
800×600
pc9603

Obrázek 3: Způsob propojení grafického akcelerátoru Intel 740 s čipem BT869 (Rockwell), který zajišťuje generování signálů pro televizory.

4. Organizace paměti využívané grafickým akcelerátorem Intel 740

Grafický akcelerátor Intel 740 při své práci (přesněji řečeno při vykreslování trojrozměrných scén) využívá dva typy pamětí – paměť nainstalovanou přímo na grafické kartě a část operační (hlavní) paměti počítače, která může obsahovat regiony mapované do adresového prostoru grafické karty. V paměti nainstalované na grafické kartě je uložen celý framebuffer, tj. především přední i zadní barvový buffer a paměť hloubky (front (color) buffer, back (color) buffer, Z-buffer/depth buffer), přičemž zadní barvový buffer může být zdvojený, což umožňuje například použití tripple bufferingu (viz předchozí díly tohoto seriálu, v nichž jsme si vysvětlili princip double bufferingutripple bufferingu). Oba zadní barvové buffery i paměť hloubky může být vymazána blokovým zápisem, což samozřejmě urychluje celý proces vykreslování (při běžném postupu vykreslování se jak právě aktivní zadní buffer tak i paměť hloubky maže před začátkem vykreslování každého nového snímku, pouze při realizaci některých efektů se tento výmaz neprovádí).

Tvůrci grafického akcelerátoru Intel 740 zvolili při jeho návrhu poněkud diskutabilní způsob ukládání textur. Namísto uložení textur přímo v paměťových modulech umístěných na grafickém akcelerátoru (jako je tomu například u již popsaného grafického akcelerátoru Voodoo 1) se textury ukládaly do operační paměti, ze které byly v průběhu vykreslování postupně přenášeny do grafického vykreslovacího řetězce (pipeline) s využitím přenosového protokolu, který umožňoval prokládání informací o jednotlivých texelech dalšími přenášenými daty, například informacemi o souřadnicích vrcholů jednotlivých trojúhelníků, normálových vektorech, barvách atd. Na první pohled by se mohlo zdát, že se jedná o dobře navrženou technologii, protože tvůrci prostorových scén, které se měly pomocí tohoto grafického akcelerátoru vykreslovat, již nebyli omezeni kapacitou paměti instalované přímo na grafické kartě (což mj. dovolovalo použít poměrně velké textury o rozlišení až 1024×1024 texelů) a rychlost samotného AGP se zdála být dostatečná na to, aby grafický akcelerátor nebyl při vykreslování brzděn nedostatkem dat.

To je samozřejmě do jisté míry pravda, ovšem ve skutečnosti bylo čtení dat (texelů) z operační paměti a jejich následný přenos na grafický akcelerátor v některých případech až osmkrát pomalejší, než načítání z paměťových modulů umístěných přímo na grafické kartě (samozřejmě v závislosti na parametrech operačních pamětí a použitém čipsetu, Intel 740 je běžně vybaven 64bitovým rozhraním pro připojení SDRAM s frekvencemi 66 a 100 MHz), což se jasně ukázalo například při porovnání reálné výkonnosti Intelu 740 s některými dalšími grafickými akcelerátory, zejména Voodoo 2 nebo slavné NVidia RIVA TNT (více informací o tomto grafickém akcelerátoru si uvedeme v některé z dalších částí tohoto seriálu). Právě kvůli tomuto technologickému nedostatku (výhodnější by bylo mít některé textury uložené v operační paměti a ty častěji používané na grafickém akcelerátoru) nebyl grafický akcelerátor Intel 740 tak úspěšný, jak se předpokládalo při jeho uvedení na trh počátkem roku 1998, takže se jeho masová výroba ukončila již po cca osmnácti měsících (i přes velmi pěkně navrženou 2D část).

5. Grafický řetězec provádějící vykreslování 3D scén

Ve druhé části článku si popíšeme funkce prováděné grafickým řetězcem akcelerátoru Intel 740 určeným pro vykreslování prostorových scén. Struktura tohoto řetězce je zobrazena na čtvrtém obrázku. Z tohoto obrázku je patrné, že vykreslovací řetězec obsahuje čtyři bloky, které pracují souběžně (každý ovšem s jinými daty) a relativně nezávisle na sobě; navíc je možné každý z bloků programově konfigurovat. Jedná se o následující blo­ky:

  1. Setup Engine
  2. Scan Converter
  3. Texture Pipeline
  4. Color Calculator
pc9604

Obrázek 4: Struktura vykreslovacího řetězce grafického akcelerátoru Intel 740.

6. Setup Engine

Do tohoto bloku vstupují data popisující geometrii vykreslovaných trojúhelníků a úseček, včetně dalších atributů těchto geometrických objektů (primitiv). Tyto údaje jsou běžně uložené v operační paměti, odkud si je grafický akcelerátor načítá a přenáší přes port AGP. V rámci předzpracování geometrických dat dochází například ke konverzím do jednotného formátu či výpočtům dalších potřebných hodnot (například vzdálenost od pozorovatele je konvertována podobným způsobem, jaký jsme si popsali u grafického akcelerátoru Voodoo 1), přičemž přesnost výpočtů s geometrickými informacemi (souřadnicemi) je větší, než velikost jednoho pixelu, což znamená, že chyba vzniklá například zaokrouhlením či ořezáním, nepovede ke vzniku nežádoucího vizuálního artefaktu. V tomto bloku se také provádí odstranění těch trojúhelníků, které jsou odvrácené od pozorovatele (back face culling nebo též pouze culling). Rozhodnutí, zda je nějaký trojúhelník potenciálně viditelný či zcela neviditelný (odvrácený), se provádí poměrně jednoduše zjištěním polohy jeho normálového vektoru vůči pozorovateli.

pc9605_

Obrázek 5: Datová struktura známá pod jménem triangle strip (pruh trojúhelníků) umožňuje uchovávat informace o povrchu tělesa v částečně optimalizované formě, protože u trojúhelníků ležících uvnitř pruhu (nikoli na jeho začátku) se zaznamenává souřadnice pouze jednoho vrcholu.

7. Scan Converter

Druhým blokem, ze kterého se skládá vykreslovací řetězec grafického akcelerátoru Intel 740, je blok, v němž dochází k rasterizaci trojúhelníků a úseček na jednotlivé fragmenty, tj. na pixely nesoucí i další důležité atributy, především jejich hloubku (vzdálenost od pozorovatele). Rychlost rasterizace je konstantní, tj. do značné míry nezávislá na velikosti trojúhelníků a úseček, které do tohoto bloku vstupují (zpracovány jsou i degenerované trojúhelníky). Při rasterizaci se provádí interpolace některých atributů zadaných pro jednotlivé trojúhelníky či úsečky – jedná se především o interpolaci barvy (Gouraudovo stínování) a interpolaci hloubky/vzdálenosti od pozorovatele (použito při Z-bufferingu). Maximální rychlost generování fragmentů je rovna 66 milionům za sekundu, ovšem při využití některých grafických efektů (realizovaných na dále popsaných blocích) se rychlost snižuje k hodnotám cca 45–55 milionů fragmentů za sekundu.

pc9606

Obrázek 6: Další datová struktura umožňující zmenšit množství dat potřebných pro uložení geometrie těles. V tomto případě se jedná o takzvaný triangle fan, neboli trs trojúhelníků.

8. Texture Pipeline

Třetím blokem vykreslovacího řetězce je blok nazvaný Texture Pipeline. Jedná se o poměrně složitý blok, který je určen pro zpracování texelů načítaných z operační paměti počítače. Výstupem tohoto bloku je barva ležící vždy v barvovém prostoru RGB (nezávisle na formátu uložení textury), která je posléze přenesena do bloku nazvaného Color Calculator, kde může být přiřazena jednomu čí více fragmentům. Již v předchozích kapitolách jsme si řekli, že textury jsou uložené v operační paměti počítače, nikoli v paměťových modulech nainstalovaných přímo na akcelerátoru. Grafický akcelerátor Intel 740 podporuje mnoho formátů textur, založených jak na barvovém prostoru RGB, tak i na prostoru YUV, s nímž jsme se již také v předchozích dílech tohoto seriálu seznámili. Kromě toho mohou být texely uloženy ve formě indexů do barvové palety. V následující tabulce jsou uvedeny některé často používané formáty uložení textur (resp. texelů):

Označení Význam
Palettized Texely jsou uložené ve formě indexů do palety
1555 ARGB 1 bit průhlednost, R, G, B mají pět bitů
0565 ARGB bez průhlednosti, R a B pět bitů, G šest bitů
4444 ARGB 4 bity pro průhlednost, R, G i B
0422 YUV 4 bity pro luminanci, 2 bity pro obě chrominance
0555 YUV 5 bitů pro luminanci i obě chrominance
1544 YUV 1 bit průhlednost

Velikost textur se může pohybovat v rozsahu 1×1 texel až 1024×1024 texelů. Grafický akcelerátor Intel 740 podporuje mj. i použití MIP map, jejichž barevný formát je shodný s formátem běžných textur (viz tabulka uvedená výše) a i jejich rozlišení může dosahovat maximálně 1024×1024 texelů. Při požadavcích na co největší kvalitu výsledného obrázku je možné zapnout bilineární interpolaci použitou při výpočtu barev jednotlivých fragmentů na základě barev přečtených ze dvou nejbližších úrovní MIP mapy. Pokud je naopak preferována vyšší rychlost vykreslování, je možné buď MIP mapy nepoužívat (textura má jen jednu úroveň velikosti), nebo vybírat texely pouze z jedné úrovně MIP mapy, ovšem s tím rizikem, že při pohybu tělesa (typicky při jeho přibližování a vzdalování) může na jeho povrchu docházet k nepříjemnému poblikávání některých pixelů.

pc9509

Obrázek 7: Při použití MIP mappingu je textura uložena v rekurzivní podobě naznačené na tomto obrázku. Můžeme zde vidět rozdělení textury na trojici obrázků, z nichž každý obsahuje pouze jednu barvovou složku a ve zbylém čtverci je umístěna tatáž textura, ovšem zmenšená na polovinu (čtvrtinu, osminu atd.) svého původního horizontálního i vertikálního rozlišení. Texturovací jednotka při vykreslování vybírá na základě vzdálenosti objektu od pozorovatele dvojici texelů (z nejbližší vyšší a nižší úrovně MIP mapy), ze kterých následně pomocí lineární interpolace vypočte barvu fragmentu, což znamená, že při práci s jediným fragmentem je zapotřebí provést hned několik přístupů do texturovací paměti.

9. Color Calculator

Posledním blokem použitým na grafickém akcelerátoru Intel 740 při vykreslování prostorových scén, je blok nazvaný Color Calculator. Jak již název tohoto bloku naznačuje, dochází v něm k výpočtu barev jednotlivých fragmentů s následným uložením fragmentů (které projdou několika testy, viz další text) do framebufferu, tj. do zadního barvového bufferu a/nebo do paměti hloubky (Z-bufferu). Barva každého fragmentu může být vypočtena z několika zdrojů – barvy již uložené ve framebufferu (realizace poloprůhledných povrchů), barvy samotného fragmentu vypočtené na základě lineární interpolace (Gouraudovo stínování) či konstantního stínování, barvy načtené z textury (texturování) v bloku popsaném v předchozí kapitole, barvy mlhy vypočtené na základě vzdálenosti fragmentu od pozorovatele atd. Všechny uvedené barvy jsou smíchány na základě takzvané míchací funkce (blending function), jejíž parametry jsou zadané programátorem. Před uložením fragmentu do framebufferu může být navíc porovnána jeho hloubka s hloubkou uloženou v paměti hloubky (Z-bufferu), takže některé fragmenty jsou z dalšího zpracování odstraněny (jsou to většinou ty fragmenty, které leží dále od pozorovatele, ovšem funkci paměti hloubky lze změnit).

CS24_early

pc9608

Obrázek 8: Rozmazání příliš blízkých a naopak příliš vzdálených objektů ve scéně. Jedná se o grafický efekt, který je možné (za cenu poměrně výrazného zpomalení vykreslování) realizovat i na grafickém akcelerátoru Intel 740.

10. Odkazy na Internetu

  1. Intel i740
    http://en.wikipedia.org/wiki/Intel740
  2. Intel i740 Datasheet
    ftp://download.intel.com/support/graphics/intel740/29061902.pdf
  3. Intel740™ Graphics Accelerator P854 Hardware
    ftp://download.intel.com/support/graphics/intel740/29062202.pdf
  4. S3 Savage
    http://en.wikipedia.org/wiki/S3_Savage
  5. Savage (S3)
    http://www.economy-point.org/s/savage-s3.html
  6. 3dfx Interactive
    http://en.wikipedia.org/wiki/3dfx_Voodoo_Graphics
  7. Intel 860@cpu-collection
    http://www.cpu-collection.de/?l0=co&l1=Intel&l2=i860
  8. S3 Graphics
    http://www.s3graphics.com/en/index.aspx
  9. TSENG ET6000 Performance Page
    http://dani75.tripod.com/TSENG.htm
  10. Tseng Labs Ships ET6000 Advanced Graphics Chip, Announces Additional Manufacturing Sources
     http://www.encyclopedia.com/doc/1G1-18088868.html
  11. CyberMax chooses Tseng Labs' ET6000 Graphics and Video Controller for Max and ProMax Series PCs
     http://findarticles.com/p/articles/mi_m0EIN/is_1996_Oct_9/ai_18754932/
  12. Intel i860
    http://en.wikipedia.org/wiki/Intel_860
  13. Intel i860 64-Bit Microprocessor
    http://www.microprocessor.sscc.ru/i860.html
  14. 25 Microchips That Shook the World
    http://www.synbio.org.uk/scientific-computing-news/1351.html
  15. Sprite (computer graphics)
    http://en.wikipedia.org/wiki/Sprite_(computer_grap­hics)
  16. Sprite (počítačová grafika)
    http://cs.wikipedia.org/wiki/Sprite_(počítačová_gra­fika)
  17. Wikipedia: Video Display Controller
    http://en.wikipedia.org/wiki/Video_Display_Controller
  18. 3dfx Voodoo1 PCI
    http://www.v3info.de/english/html/v1.shtml
  19. Glide 2.2 Programming Guide
    http://www.gamers.org/dEngine/xf3D/glide/glidepgm.htm
  20. Glide API
    http://en.wikipedia.org/wiki/Glide_API

Byl pro vás článek přínosný?

Autor článku

Vystudoval VUT FIT a v současné době pracuje na projektech vytvářených v jazycích Python a Go.