Obsah
1. Grafické akcelerátory určené pro vizualizační a grafické algoritmy
2. Grafické subsystémy s podporou vykreslování plošných primitiv
3. Řadiče vektorových displejů
4. Grafické karty určené převážně pro CAD aplikace
5. Grafický akcelerátor TIGA
6. Obsah dalšího pokračování tohoto seriálu
1. Grafické akcelerátory určené pro vizualizační a grafické algoritmy
V této podkapitole si popíšeme nejčastěji používané nebo jiným způsobem zajímavé možnosti grafické akcelerace (tj. urychlení) vybraných vizualizačních a grafických algoritmů. Vzhledem ke značné rozsáhlosti tohoto tématu nejsou popsány zdaleka všechny do dnešní doby navržené nebo realizované možnosti akcelerace počítačové grafiky. Z hlediska stručnosti je zde proveden určitý výběr, ve kterém se snažím popsat ty nejvíce používané či nejzajímavější metody grafické akcelerace. Nejprve si řekněme, ve kterých oblastech má smysl grafickou akceleraci používat:
- První, a dnes zcela jistě nejvíce používanou oblastí využití grafické akcelerace je nutnost zobrazovat grafické informace v časově kritických aplikacích (v literatuře často označovaných time critical applications), mezi něž patří například moderní trojrozměrné počítačové hry a v neposlední řadě i aplikace virtuální reality (například tréninkové letecké programy v NASA, aplikace v leteckém a automobilovém průmyslu atd.). Tyto aplikační oblasti budu v dalším textu označovat pojmem interaktivní grafika, protože je v nich kladen důraz na poměrně rychlé změny ve scéně, které korespondují s interaktivním vstupem uživatele. V těchto aplikacích je velmi důležitým ukazatelem především počet zobrazitelných snímků za sekundu, který by měl – z psychologického i fyziologického hlediska (vlastnosti sítnice lidského oka) – v případě interaktivních aplikací dosahovat hodnoty alespoň patnácti snímků za sekundu (FPS – frames per second). V případě, že je počet snímků nižší než výše uvedená hodnota, ztrácí uživatel dojem plynulosti. Grafické akcelerátory pro urychlení interaktivní grafiky jsou v dnešní době zdaleka nejpoužívanější, zejména pro svoji relativní jednoduchost a poměrně kvalitní vizuální výsledky.
- Druhou oblastí, ve které se používají grafické akcelerátory, je tvorba fotorealistické grafiky, v dnešní době používaná zejména ve filmovém průmyslu (filmy, reklamy atd.). Zde se používají buď výše zmíněné metody využívané v interaktivní počítačové grafice, nebo častěji metody počítající s globálním osvětlením scény, které jsou však při programové implementaci značně náročné na výpočetní výkon procesoru. Urychlení může být dosaženo buď paralelním zpracováním animace (například po jednotlivých snímcích – zde je možné použít oblíbené a relativně levné „procesorové farmy”), nebo použitím specializovaného grafického akcelerátoru, který se však svými vlastnostmi i svým interním uspořádáním diametrálně odlišuje od grafických akcelerátorů z první skupiny. Tato třída grafických akcelerátorů však není příliš rozšířena, nicméně s postupně se zvyšujícím stupněm integrace a rychlosti číslicových obvodů lze očekávat její výraznější uplatnění i mimo „profesionální” oblast.
- Další současnou oblastí použití grafických akcelerátorů je urychlení nestandardních (resp. méně častých) postupů renderování prostorových scén. Z těchto postupů jmenujme zejména zobrazování objemových elementů (voxelů) či využití částicových systémů (particle systems) a ploškových elementů (surfelů). Tyto metody, které úzce souvisejí se způsobem reprezentace těles v prostorových scénách, jsou prozatím určeny pro speciální aplikace, v budoucnu však lze očekávat jejich širší využití.
Postupný vývoj grafických akcelerátorů (a obecně i grafických subsystémů počítačů) samozřejmě odráží i možnosti a požadavky kladené na současnou výpočetní techniku. V minulosti bylo pro náročnější grafické aplikace (CAD systémy) nutné podporovat zejména vykreslování plošných vektorových primitiv, ponejvíce úseček. Pro počítačové hry se naopak používaly specializované metody pro podporu rychlého pohybu jednoduchých plošných rastrových objektů (spritů), rozšířené možnosti pohybu celého obrazu (horizontální, vertikální či všesměrový scrolling) a možnost vykreslování do druhého – neviditelného – bufferu (double-buffering). S rychlým nástupem multimédií v první polovině devadesátých let bylo stále více podporováno i zobrazování videa. Ze začátku šlo pouze o funkce pro rychlé zobrazování bitmap a pixmap (takzvaný blitting), k těmto funkcím se však následně přidaly i funkce pro komprimaci a dekomprimaci videa, například dle některého z existujících standardů MPEG. Soudobé aplikace interaktivní počítačové grafiky v sobě zahrnují virtuální realitu a trojrozměrné hry, pro které bylo zapotřebí vytvořit specializované akcelerační moduly založené na zobrazování otexturovaných polygonů. V budoucnosti můžeme naopak očekávat rozvoj grafických akcelerátorů pro práci s objemovou grafikou (voxely), popř. i s ploškovými elementy (surfely), jelikož stále narůstají požadavky na zpracování dat získaných z prostorových skenerů a zařízení pro zkoumání vnitřních struktur materiálu (například rentgeny, CT, MR, ultrazvukové snímače apod.).
V dalších kapitolách si postupně popíšeme funkci grafických akcelerátorů určených pro jednotlivé metody vykreslování.
2. Grafické subsystémy s podporou vykreslování plošných primitiv
Grafické subsystémy určené pro podporu vykreslování plošných primitiv (tj. zejména úseček a lomených čar, ale i například textu zobrazovaného pomocí vektorů) můžeme z dnešního pohledu na výpočetní techniku hodnotit jako zastaralé. Na jedné straně dosáhl výpočetní výkon současných mikroprocesorů takové úrovně, že závislost na tyto úzce specializované grafické subsystémy vykreslování spíše zpomaluje (špatně navržené aplikační rozhraní, neexistence některých důležitých funkcí apod.). Na straně druhé lze pro vykreslování základních plošných primitiv použít prostředků nabízených nám soudobými akcelerátory trojrozměrné grafiky, které podporují i další možnosti práce s 2D grafikou: double-buffering, ořezávání (cutting), barevné přechody (color blending) a vyplňování obrazců vzorkem (texturou) – bližší informace o těchto technikách jsem uvedl v seriálu o grafické knihovně OpenGL.
3. Řadiče vektorových displejů
S trochou nadsázky si dovolím napsat, že prvními grafickými subsystémy pro podporu a urychlení zobrazování vektorové grafiky byly řadiče vektorových displejů. Vektorové displeje (viz první díl tohoto seriálu), jež představují předchůdce dnes výhradně používaných rastrových displejů, byly určeny pro vykreslování obrazců složených z různě dlouhých a orientovaných úseček – vektorů. Zobrazování probíhalo na běžné obrazovce typu CRT s elektromagnetickým (TV obrazovky) nebo elektronickým (obrazovky pro osciloskopy) vychylováním elektronového paprsku. Na rozdíl od rastrového řízení CRT obrazovky, při kterém se elektronový paprsek pohybuje postupně po jednotlivých řádcích (či ob dva řádky v případě prokládaného režimu), bylo možné u vektorových displejů s elektronovým paprskem libovolně pohybovat, podobně jako u některých osciloskopů s vyvedenými svorkami pro řízení horizontálního i vertikálního vychylování.
Řízení elektronového paprsku však neprováděl přímo ovládací program (driver) či uživatelská aplikace, jelikož tehdejší procesory neměly pro toto řízení dostatečný výpočetní výkon. Místo toho se využívalo specializovaného grafického subsystému. Nejprve se do paměťového bufferu (někdy nazývaného zobrazovací soubor či display list) na tomto subsystému uložily počáteční a koncové souřadnice vektorů a následně řízení elektronového paprsku převzal k tomu určený řadič (generátor úseček – line/vector generator), který obsahoval dva analogové či digitální integrátory souřadnic; jeden pro vertikální a druhý pro horizontální směr. Vzhledem ke konstantní době dosvitu použitého luminoforu v CRT obrazovce bylo možné zobrazit pouze omezený počet vektorů, který závisel na jejich celkové délce a také vzájemné návaznosti (optimální bylo vykreslování vzájemně pospojovaných vrcholů, tj. polyčar – v minulosti bylo navrženo několik metod, které prováděly uspořádání vykreslovaných dat podle jejich vzájemné polohy). Rychlost překreslování se podle typu luminoforu pohybovala od 30 do 60 snímků za sekundu.
Velkou přednost měly vektorové displeje (oproti rastrově orientovaným displejům) ve vysoké rozlišovací schopnosti, která při přesnosti až čtyř úseček na milimetr dosahovala na některých zařízeních hodnoty 4096×4096 adresovatelných bodů. Musíme si přitom uvědomit, že stínítko monochromatické CRT obrazovky je svou podstatou analogové, protože před vlastním luminoforem se nenachází žádná dírkovaná maska či drátky jako v případě barevné obrazovky (u té se používají tři typy luminoforů svítících různými barvami). Maximální rozlišení je tedy u monochromatických obrazovek dáno velikostí zrnek luminoforu a mírou rozostření elektronového paprsku, podobně jako u „analogového“ filmu. Vektorové displeje se v současné době kromě specializovaných aplikací téměř nepoužívají, protože mají několik závažných nevýhod, zejména praktickou nemožnost zobrazit složitější nebo vícebarevnou grafiku s barevnými přechody. Také hlavní nevýhody rastrových displejů (tj. potřeba relativně velkého množství rychlé video paměti a přesného zaměřování paprsku na CRT obrazovce) jsou již překonány, nehledě na fakt, že moderní LCD jsou orientovány čistě rastrově a vektorovou informaci na nich nelze přímo zobrazit, zejména vinou pomalého přepínání řádků.
4. Grafické karty určené převážně pro CAD aplikace
S neustále rostoucím využíváním výpočetní techniky v průmyslových aplikacích se však ukázala potřeba rychlého vykreslování vektorových dat (úseček, polyčar, textů) i na rastrových displejích. Zejména se jednalo o různé aplikace typu CAD a CAM, ve kterých se při tvorbě výkresů používají především lomené čáry a texty vykreslené s pomocí vektorových fontů (požadavky na CAD systémy v sobě samozřejmě odrážely i možnosti používané tiskové technologie, zejména velkoformátových perových plotterů). Pro tyto účely byly vytvořeny specializované grafické karty, které kromě své základní funkce, tj. zobrazování rastrové grafiky, podporovaly i vykreslování jednotlivých úseček a v některých případech i lomených čar (polyčar). Z těchto grafických karet jsme si v předcházejících částech jmenovali například trojkartu PGC. Postupným vývojem se možnosti grafických karet tohoto typu zvyšovaly, takže bylo možné vykreslovat i další složitější tvary, zejména kruhové a eliptické oblouky, vyplněné kružnice, trojúhelníky, mnohoúhelníky, parametrické křivky a vektorový text. Také se rozšířily možnosti nastavování atributů vykreslovaných tvarů, zejména šířky čáry, vzorku čáry (plná, čárkovaná, apod.), barvy, stylu výplně a barvy výplně.
Tyto grafické karty se lišily především mírou své závislosti na hlavním procesoru počítače a jeho operační paměti. Jednodušší typy těchto grafických karet například neobsahovaly vlastní paměť pro vektorová data, pouze interpretovaly příkazy, které kartě posílal hlavní procesor. Složitější karty již měly zabudovanou paměť pro uložení vektorových dat ve formě takzvaných display-listů, se kterými se setkáme i v dalším textu věnovaném grafickým akcelerátorům určeným pro zobrazování prostorové grafiky. Tyto karty již byly značně nezávislé na hlavním procesoru, protože bylo možné vektorová data nahrát do grafické karty v blokovém režimu (block transfer, burst) a poté nezávisle na paralelně běžícím vykreslování provádět další výpočty. V současné době se velká část výkresové dokumentace připravuje již přímo v trojrozměrném prostoru s návazností na CAM systémy a automatickou výrobu pomocí NC strojů. Pro vykreslování se tedy používají 3D grafické akcelerátory popsané v dalších pokračováních tohoto seriálu.
Programová podpora grafických karet vykreslujících plošná vektorová primitiva existuje například i v operačních systémech Microsoft Windows. V těchto systémech je možné některé základní vykreslovací operace provádět buď programově, nebo přes ovladač grafické karty přímo na této kartě. Mezi operace, které lze přes ovladač provádět na grafické kartě, patří:
- ořezání obrazce obdélníkem
- změna měřítka
- vykreslování bitmap
- vykreslování bitmap se změnou měřítka
- vykreslování úseček s různou tloušťkou a stylem čáry
- vykreslování kružnic, elips a kruhových výsečí
- vykreslování uzavřených a případně i vyplněných polygonů
- práce s textem
- skrolování textu
5. Grafický akcelerátor TIGA
Jedním z modernějších typů grafických akcelerátorů z popisované kategorie je grafická karta TIGA, což je zkratka plného názvu Texas Instruments Graphics Architecture). Tato karta je zajímavá především striktním oddělením video paměti (VRAM) z adresového prostoru mikroprocesoru. Vzhledem k tomu, že mikroprocesor nemá k této paměti přímý přístup, jsou veškeré vykreslovací operace řízeny grafickým procesorem (v této kartě se jedná o procesor TMS34010 nebo TMS34020). Oproti jednodušší grafické kartě IBM 8514A je u karty TIGA také přítomna paměť, do které je možné nahrávat podprogramy pro řízení vykreslování. Tato paměť se podle svého významu nazývá Program RAM. Grafická karta TIGA podporovala rozlišení 1024×768 pixelů, narozdíl od minule popsané karty IBM 8514/A se však obraz na monitoru zobrazoval neprokládaně, což mu zajistilo větší stabilitu. Zjednodušené schéma grafické karty TIGA je, spolu s jejím začleněním do celého výpočetního systému, uvedeno na následujícím obrázku.
Zjednodušené schéma grafického adaptéru TIGA
6. Obsah dalšího pokračování tohoto seriálu
V dalším pokračování tohoto seriálu si popíšeme typické zástupce jednotlivých kategorií grafických subsystémů, jež podporují vykreslování rastrové grafiky.