Grafické karty a grafické akcelerátory (18)

29. 6. 2005
Doba čtení: 8 minut

Sdílet

Celý dnešní díl seriálu o grafických kartách a grafických akcelerátorech je věnován problematice grafických akcelerátorů určených pro vykreslování prostorových těles, jejichž povrch je složen z plošných polygonů, speciálně trojúhelníků. Probereme si i jejich časový vývoj od relativně jednoduchých systémů k systémům složitějším.

Obsah

1. Rozdělení grafických akcelerátorů určených pro zobrazování povrchů těles složených z polygonů

    1.1 Zobrazení těles bez textur
    1.2 Základní podpora textur
    1.3 Současná práce s více texely, kombinace textur
    1.4 Aplikace pokročilejších grafických algoritmů
    1.5 Současné grafické akcelerátory

2. Možnosti budoucího vývoje grafických akcelerátorů vykreslujících povrch těles
3. Rozšíření možností grafických akcelerátorů
4. Obsah dalšího pokračování tohoto seriálu

1. Rozdělení grafických akcelerátorů určených pro zobrazování povrchů těles složených z polygonů

Podle schopností grafických akcelerátorů vykreslujících povrch těles složených z polygonů provádět během vykreslování různé grafické algoritmy a vizuální efekty můžeme zavést jejich hrubé rozdělení, které reflektuje i jejich časový vývoj od relativně jednoduchých systémů k systémům složitějším.

1.1 Zobrazení těles bez textur

Nejjednodušší grafické subsystémy umožňují zobrazovat plošné (jak jinak) trojúhelníky promítnuté z prostoru na obrazovku. Tyto trojúhelníky mohou být vyplněné buď konstantní barvou, nebo barevným přechodem. Výpočet barvy celé plošky nebo jednotlivých vrcholů je však nutné provést pomocí mikroprocesoru počítače. Tyto grafické systémy potřebují pro svou práci poměrně malé množství video paměti, přičemž je tato paměť využita pouze pro buffer barev (color buffer), paměť hloubky (depth buffer), popř. při použití dvou bufferů barev (double bufferingu) i pro zadní barvový buffer (back buffer). Texturování není přímo podporováno, proto se tyto akcelerátory používaly především pro podporu zobrazení trojrozměrných modelů v různých CAD systémech. Pro aplikace virtuální reality a počítačové hry je však absence texturování kritická. Na personálních počítačích nebyly tyto typy grafických akcelerátorů nikdy příliš rozšířeny, představují však základ, na kterém si designéři mohli prakticky ověřit základní postupy akcelerace grafických algoritmů.

1.2 Základní podpora textur

Složitější grafické subsystémy přidávají k výše popsaným schopnostem i možnost pokrývat zobrazované trojúhelníky texturami, tj. celobarevnými rastrovými obrázky. Textury lze také kombinovat s původní barvou trojúhelníků, takže texturování i osvětlení lze provádět současně (texture blending a modulace textur). Tento typ grafických akcelerátorů již má větší požadavky na kapacitu video paměti, která je z části využita i pro uložení textur. Pokud není na grafickém akcelerátoru dostatek volné paměti pro textury, musí se tyto postupně přenášet z operační paměti počítače, což může značným způsobem zpomalovat vykreslování a zbytečně zatěžovat celý počítač (určitým vylepšením zde byl přechod od sběrnice PCI k rychlejšímu portu AGP). Mezi představitele těchto grafických akcelerátorů patří přídavné karty 3Dfx Voodoo Graphics 1 a 2, které již obsahovaly jednotku označovanou jako TMU – Texture Memory Unit. Dále můžeme do této skupiny zařadit grafické karty Matrox Mystiquea nVidia Riva 128, popř. i 128ZX.

1.3 Současná práce s více texely, kombinace textur

V následující generaci grafických karet (resp. grafických čipů) bylo snahou jejich tvůrců co nejvíce urychlit vykreslování. Toho může být dosaženo, samozřejmě kromě prostého zvýšení taktovacího kmitočtu grafického čipu, i rozšířením datové šířky sběrnice na grafické kartě. Potom je možné vykreslovat více pixelů současně či počítat a kombinovat barvy z více textur. Představitelem této generace grafických akcelerátorů jsou karty s čipy Riva TNT a Riva TNT2, kde bylo možné buď vykreslit dva pixely v jednom taktu, nebo jeden pixel, na kterém byly kombinovány dvě textury (jedná se o takzvané multitexturová­ní). Dále sem patří již dříve zmiňované čipy ATI Rage 128 a Matrox G400.

1.4 Aplikace pokročilejších grafických algoritmů

Vývoj pokračoval dále ke grafickým akcelerátorům, které aplikují pokročilejší grafické algoritmy. Jedná se například o podporu takzvaného T&L (transform and lighting) popsaného v další části tohoto seriálu, postupné skrývání objektů v mlze (fog), antialiasing a s ním částečně související podporu akumulačního bufferu (accumulation buffer). Důležitá je také plná podpora display listů, které umožňují do paměti grafického akcelerátoru seskupit větší množství dat (například souřadnic vrcholů, jejich normál a souřadnic do textury), a tato data potom vykreslit zavoláním jednoho jednoduchého příkazu. Výhoda použití display listů spočívá zejména v úspoře dat, která je potřeba přenést po sběrnici. Typickým představitelem této generace grafických akcelerátorů jsou grafické karty s čipy nVidia GeForce 256 a jeho další verzí GeForce DDR, která je osazena rychlými paměťmi typu DDR.

1.5 Současné grafické akcelerátory

Grafické akcelerátory vyvíjené v současnosti mají zabudovánu podporu pro téměř všechny metody používané pro zobrazování těles v hraniční reprezentaci s využitím lokálních osvětlovacích modelů. K již dříve popsaným vlastnostem se přidávají metody komprimace a dekomprimace textur, multitexturování, trojrozměrné textury (jejich použití je prozatím limitováno rychlostí přístupu do paměti s uloženými texturami), sofistikovaný (většinou adaptivní a anizotropní) antialiasing, výpočet osvětlování na úrovni pixelů (per pixel lighting), interpolace polohy vrcholů, výpočet stínů (shadow mapping) a mapování prostředí (environment mapping). Za zmínku stojí především podpora trojrozměrných (objemových) textur a osvětlování na úrovni pixelu, pomocí kterého lze vykreslit například zdánlivě hrbolaté textury (bump mapping). Také se rozšiřuje podpora pro proudové zpracování rastrových obrázků – jedná se o takzvaný Imaging Subset, který lze použít například pro pokročilou modulaci textur.

Do této kategorie moderních grafických čipů patří čipy nVidia GeForce 3 s programova­telným jádrem a zejména profesionální grafická karta 3DLabs P10 obsahující nezvykle vysoký počet na sobě relativně nezávislých procesorů, které spolu komunikují po přepínatelné mřížce (komunikace po „jednorozměrné” sběrnici by skutečný výpočetní výkon těchto procesorů značně degradovala).

2. Možnosti budoucího vývoje grafických akcelerátorů vykreslujících povrch těles

Další vývoj v této oblasti směřuje především k postupné paralelizaci co největšího množství algoritmů použitých při vykreslování. Již dnes je například podporováno mapování několika texelů (typicky čtyř) v jednom strojovém cyklu. Paralelizaci je možné provést také na vyšší úrovni a počítat samostatně například několik snímků, nebo celý snímek rozdělit na části, kde každá se vykreslí s využitím jednoho grafického procesoru. Tato myšlenka byla realizována již u grafických akcelerátorů Voodoo, které mohly být zapojeny do PC ve dvojici, jeden akcelerátor vykresloval liché řádky, druhý akcelerátor řádky sudé.

Takto pojatý princip dělby práce grafických čipů má tu výhodu, že oba akcelerátory provedou vykreslení v prakticky stejném čase, protože liché řádky se od sudých v reálných scénách svou složitostí prakticky neliší. Nevýhodou je, že se musí celá geometrie scény i s texturami kopírovat do obou akcelerátorů, což vyžaduje prakticky dvojnásobné množství video paměti (samotný objem dat přenesených na grafické akcelerátory však není zdvojnásoben, protože na PCI sběrnici může data číst více zařízení současně). Z důvodu snížení potřebné kapacity video paměti (a také kvůli problémům při antialiasingu) jsou navrhována další schémata rozdělení vykreslování – buď je možné obrazovku rozdělit po horizontálních pruzích, nebo po blocích (dlaždicích). Zde se ovšem výrazněji projevuje rozdílná rychlost při vykreslování různých částí scény (strop či nebe je například ve skutečnosti pouze jeden otexturovaný povrch, zatímco na horizontu je umístěno velké množství detailních předmětů). Tento problém se řeší přidáním arbitru, který jednotlivé pruhy či bloky postupně rozděluje mezi jednotlivé grafické čipy. Dále lze v budoucnu očekávat spíše rozvoj pokročilejších grafických efektů, které budou grafické akcelerátory podporovat.

Rychlost používaných pamětí se naopak pravděpodobně nebude příliš zvyšovat, což ostatně odráží všeobecný trend, který můžeme sledovat i u běžných mikroprocesorů a k nim příslušejících dynamických pamětí. Z tohoto důvodu se stále více budou uplatňovat metody komprimace grafických údajů (zejména textur a souřadnic vrcholů), nebo se postupně přejde na jiné možnosti reprezentace scény, například s využitím surfelů (elementárních orientovaných plošek). Velmi významný je také fakt, že je již podporována možnost částečné programové změny zpracování jednotlivých vrcholů a fragmentů v grafickém akcelerátoru. Jedná se o takzvané vertex shadery a pixel shadery, což jsou programovatelné jednotky využívající speciální instrukční sadu, pomocí kterých lze přeprogramovat některé části grafického vykreslovacího řetězce. Tomuto velmi zajímavému tématu se budu podrobněji věnovat v dalších částech tohoto seriálu.

3. Rozšíření možností grafických akcelerátorů

Poznámka: pod pojmem moderní mám v dalším textu na mysli akcelerátory určené zejména pro počítače řady PC od roku 2000. U profe­sionálních grafických stanic je situace poněkud odlišná, jelikož vývoj v této oblasti byl včasnější. Proto se také zde zmiňovaná podpora T&L objevuje u grafických stanic o cca deset let dříve než u osobních počítačů.

Moderní grafické akcelerátory obsahují mimo jiné dva nové výpočetní bloky. Tyto bloky se podle své funkce označují T&L, resp. celým názvem Transform and Lighting (transformace a osvětlování). Jsou určeny zejména pro urychlení výpočtů lineárních transformací (aplikovaných na jednotlivé vrcholy) a dále pro výpočet osvětlení vykreslovaných plošek. Osvětlení může být podle požadované kvality a rychlosti vykreslování aplikováno také na jednotlivé vrcholy nebo dokonce na každý vykreslovaný fragment (fragmentem je označován pixel, který má kromě své barvy přiřazeny i další informace, zejména vzdálenost od pozorovatele, průhlednost apod.).

Dalším často používaným rozšířením je podpora komprimace a dekomprimace textur v reálném čase. Tato technologie umožňuje za cenu určité ztráty vizuální kvality výsledné scény ušetřit až 75 % kapacity texturovací paměti. Provádí se buď ztrátová, nebo bezztrátová komprimace. Při ztrátové komprimaci se barvy sousedních texelů mapují tak, aby na jejich uložení bylo zapotřebí menší množství bitů. Přitom se využívá empirického poznatku, že oko je citlivější na změnu světlosti než na změnu barevného odstínu (stejný princip je ostatně použit i u standardu JPEG při převodu z barvového prostoru RGB do interního barvového prostoru).

Některé pokročilejší operace, které je možné s pomocí moderních grafických akcelerátorů provádět, nejsou v současnosti podporovány v obecných grafických knihovnách OpenGL nebo DirectX. Z tohoto důvodu výrobci grafických čipů tyto knihovny rozšiřují (jedná se o takzvané extensions), což však mnohdy vede k vytváření nekompatibilních aplikací. Tuto situaci bude v budoucnu nutné vyřešit postupným vydáváním nových specifikací knihoven OpenGL i DirectX, aby tyto knihovny nezastaraly. Například OpenGL 2.0 již obsahuje podporu pro některé vlastnosti moderních grafických akcelerátorů, stejně jako knihovna DirectX.

bitcoin_skoleni

4. Obsah dalšího pokračování tohoto seriálu

V dalším pokračování tohoto seriálu si popíšeme zejména funkci specializovaných bloků na moderních grafických čipech, které provádějí transformace a výpočet osvětlení. Jedná se o takzvané bloky T&L (Transform and Lighting). Dále se budeme zabývat popisem grafických akcelerátorů, které jsou určeny pro zobrazování objemových dat, tj. těles složených z takzvaných voxelů. Na závěr si povíme, jakým způsobem je možné kombinovat video signál s grafickým uživatelským rozhraním.

Autor článku

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