Zuby zahladím, zn. zadarmo to nebude

Léčba pacienta jménem Nízká úroveň detailů pomocí nového přípravku Hardwarové T&L byla úspěšná a na řadu tak může přijít další pacient jménem Nízká kvalita obrazu. Jeden z druhů léčby představuje tajemně znějící zkratka FSAA – Full Scene Anti-Aliasing. Způsob jeho aplikace, projevy působení a případné kontradikce jsou tématem následujícího článku.
Léčba pacienta jménem Nízká úroveň detailů pomocí nového přípravku Hardwarové T&L byla úspěšná a na řadu tak může přijít další pacient jménem Nízká kvalita obrazu. Jeden z druhů léčby představuje tajemně znějící zkratka FSAA – Full Scene Anti-Aliasing. Způsob jeho aplikace, projevy působení a případné kontradikce jsou tématem následujícího článku.

Stručně a jasně
Nízká rozlišovací schopnost současných monitorů má na kvalitu obrazu nepříznivý vliv – hrany objektů jsou zubaté, objekty mění svoji velikost nebo dokonce ztrácejí některé detaily. Tyto jevy (obrázek 1) jsou označovány jako aliasing, jejich potlačení pak anti-aliasing. Slova Full Scene znamenají, že anti-aliasing se vztahuje na celý obraz, nikoliv jen na jeho část, jak je tomu např. u vyhlazování hran – edge anti-aliasing.

Obrázek 1 – Aliasing

V horní části obrázku jsou umístěny různé objekty, v dolní části je pak zobrazeno, jak budou vypadat na obrazovce monitoru. Zleva doprava můžete postupně vidět vznik zubatých hran, změnu velikosti objektu v závislosti na poloze a ztrátu (vypadnutí) velmi malého objektu.

Jak to funguje
Podíváte-li se opět na obrázek, je příčina aliasingu zřejmá. Grafická karta určí barvu bodu odpovídajícího středu pixelu, kterou mu poté přiřadí. Je také vidět, že s rostoucím rozlišením se plocha pixelu zmenšuje a jeho barva tak lépe reprezentuje oblast, kterou pokrývá. Vyšší rozlišení však problém aliasingu nevyřeší, jednak je tu omezení dostupného rozlišení ze strany monitoru, ale především aliasing není potlačen, je pouze méně zřetelný. Potlačení aliasingu lze dosáhnout získáním více hodnot (vzorků) barvy v rámci pixelu, jejichž průměr mu bude přiřazen (obrázek 2). Právě tento postup používají současné grafické karty podporující FSAA. Výsledkem je obraz, který potlačuje všechny výše uvedené formy aliasingu. Platí přitom, že čím více vzorků použijete, tím lepší výsledek dostanete. Nezáleží však pouze na množství, ale, jak se můžete dále dozvědět, také na rozmístění.

Obrázek 2 – Anti-Aliasing

Potlačení různých druhů aliasingu z prvního obrázku je patrné. Zubaté hrany byly vyhlazeny, objekt si zachoval svoji velikost a zachován zůstal i velmi malý objekt. V posledním případě je však vidět, že anti-aliasing není dokonalý, neboť objekt sice zůstal zachován, ale změnil svoji velikost. Tuto změnu lze ale hodnotit jako pozitivní, neboť vypadávání malých objektů působí velmi rušivě. Obecně platí, že čím více vzorků použijete, tím lepší je výsledek.

Bližší pohled
Největším přínosem FSAA je právě vyhlazení hran, které působí nejrušivěji. Určením více vzorků získáme informaci, která předtím v obrazu nebyla. Použijeme-li pro názornost modrý polygon na bílém pozadí (obrázek 3), můžete vidět efekt v případě pravidelného rozdělení plochy pixelu na 4 menší části, tzv. subpixely. Tam, kde ostré přechody mezi modrou a bílou vytvářely schodovitý efekt, jsou nyní odstíny modré, které jej potlačily. Je tomu tak však i v jiných případech? Při tomto způsobu rozdělení plochy pixelu nikoliv. V případě šikmých hran lze pro anti-aliasing v závislosti na míře pokrytí pixelu použít 5 barev – bílé (žádné pokrytí) a 4 odstínů modré (25%, 50%, 75% a 100% pokrytí). V případě přibližně svislých nebo vodorovných hran je však situace odlišná, objekt pokrývá subpixely ve dvojicích a k dispozici jsou tak pouze 3 barvy – bílá (žádné pokrytí) a 2 odstíny modré (50% a 100% pokrytí). Pro vyhlazení šikmých hran je tak k dispozici více barev než v případě hran přibližně svislých nebo vodorovných. To je však přesně naopak, než bychom potřebovali, neboť lidské oko je citlivé na náhlé a pravidelné barevné přechody, které jsou typické právě pro přibližně svislé nebo vodorovné hrany. Abyste tento jev spatřili na vlastní oči, stačí spustit libovolnou aplikaci (hru) využívající 3D zobrazení a pozorovat rušivé přechody na přibližně svislých nebo vodorovných hranách. Pokud se navíc začnete ve scéně pohybovat, začnou se pohybovat i zuby na hranách a výsledný dojem je ještě horší.

Obrázek 3 – OGSS

Je vidět, že při vyhlazování přibližně svislých nebo vodorovných hran máme v případě OGSS k dispozici pouze 2 odstíny modré, zatímco pro šikmé hrany jsou k dispozici odstíny 4. To je však přesně naopak, než bychom potřebovali.

Jak z toho ven
Abychom změnili poměr barev ve prospěch přibližně svislých nebo vodorovných hran, je třeba zvolit jiný způsob výběru vzorků. V této oblasti existuje řada velmi důmyslných postupů, které počítají např. s rozložením receptorů na sítnici lidského oka. U grafických čipů však vítězí jednodušší postupy, které lze efektivně implementovat a především rychle provádět. Dobrý a přitom jednoduchý způsob spočívá v natočení mřížky bodů o určitý úhel, většinou 20 až 30 stupňů (obrázek 4). Jaký je výsledek? Použijeme-li předchozí případ, vidíme, že pro přibližně svislé nebo vodorovné hrany jsme získali potřebných 5 barev, zatímco 3 barvy zůstaly pro vyhlazení šikmých hran, tedy přesně to, co jsme potřebovali.

Obrázek 4 – RGSS

V případě RGSS je situace lepší, neboť pro vyhlazení přibližně svislých nebo vodorovných hran máme k dispozici 4 odstíny modré. Pro šikmé hrany tak zůstávají v nejhorším případě 2, což je přijatelné.

Terminologie:

Určení barvy bodů v určitých intervalech za účelem určení barvy pixelu se nazývá sampling, pokud použijeme pro jeden pixel bodů více, jedná se o super-sampling. Podle rozmístění vzorkovacích bodů v pixelu rozlišujeme OGSS – Ordered Grid Super-Sampling (rozmístění vzorkovacích bodů v pravidelné mřížce) a JGSS – Jittered Grid Super-Sampling (rozmístění vzorkovacích bodů v nepravidelné mřížce). Speciální formou JGSS je RGSS – Rotated Grid Super-Sampling, kde jsou body umístěny v pravidelné mřížce, ovšem natočené o určitý úhel.

Jak to dělá 3dfx
Grafické čipy VSA-100 byly pro potřeby anti-aliasingu přímo navrženy, používají tedy RGSS, jehož implementace je spojena s tajemným označením t-buffer. Buffer v tomto případě označuje část paměti grafické karty, která je určena pro uložení obrazu spolu s dalšími informacemi. Za běžných podmínek se v paměti grafické karty nalézají 3 – přední (pro obraz, který je vykreslován na obrazovku monitoru), zadní (pro obraz, který je právě vykreslován) a pomocný (z-buffer, stencil buffer). V případě využití FSAA se 4 vzorky na pixel je jich však v paměti 12, 3 pro každý ze čtyř druhů vzorků (obrázek 5). V terminologii 3dfx se nazývají t-buffer. Barva pixelu je pak určena jako průměr vzorků v jednotlivých t-bufferech.

Obrázek 5 – Jak to dělá 3Dfx

Při použití FSAA 4× je každý buffer (přední, zadní, z/stencil) v paměti 4×, pro každý vzorek jeden. Scéna je vykreslována do zadních bufferů, jakmile je dokončena, je obsah předních a zadních bufferů prohozen a celý proces se opakuje. Oproti tradiční implementaci není třeba sloučit obsah jednotlivých bufferů do další paměti, tento krok nahradí speciální obvod těsně před převodem na analogový signál pro monitor. Výhodou jsou snížené paměťové nároky, vyšší rychlost a lepší kvalita obrazu při použití 16bitové barevné hloubky.

Jak to dělají ostatní
Jiné grafické čipy (GeForce, Radeon), které nebyly přímo navrženy pro potřeby anti-aliasingu, používají přímočarou variantu OGSS. V případě použití 4 vzorků na pixel je celý obraz vykreslen ve dvojnásobném rozlišení do dalšího bufferu a poté prostřednictvím průměru čtyř hodnot převeden zpět do požadovaného rozlišení (obrázek 6).

Obrázek 6 – Jak to dělají ostatní

Při použití FSAA 4× je scéna vykreslena ve 2× vyšším rozlišení (tedy je vykresleno 4× více pixelů, což odpovídá právě použití 4 vzorků na pixel). Jakmile je dokončena, je přepočítána na původní rozlišení (výpočet průměru čtveřic hodnot) a umístěna do zadního bufferu, přední a zadní buffer jsou poté prohozeny a obsah předního je zobrazen na obrazovce monitoru.

Jak je to s kvalitou obrazu
Jak už bylo zmíněno, při stejném počtu vzorků dosahuje RGSS lepších výsledků než OGSS, neboť má k dispozici více barev na vyhlazení přibližně svislých nebo vodorovných hran. Tomu odpovídají i subjektivní dojmy mnoha uživatelů. Velmi však záleží na druhu aplikace, pokud hrajete akční 3D hru, nebude vás vůbec zajímat, jak kvalitně jsou vyhlazené hrany objektů, důležité je, že nebudou působit rušivě. Pokud však hrajete 3D hru, která je převážně statická, např. adventuru, začne na způsobu FSAA záležet. Pokud bych měl vzestupně seřadit kvalitu dostupných implementací FSAA, bylo by pořadí následující (číslo značí počet vzorků) – OGSS 2×, RGSS 2×, OGSS 4×, RGSS 4× atd. RGSS se přitom blíží OGSS v kvalitě o řád vyšší.

Zmatek kolem počtu vzorků:

Terminologie v oblasti FSAA není dosud ustálená, takže často zmiňovaný pojem FSAA 2× může mát dva významy:

  • 1) pro každý pixel jsou použity 2 vzorky
  • 2) pro každý pixel je použita mřížka vzorků o rozměrech 2×2, celkem tedy 4 vzorky

Jak je to s rychlostí
V počítačové grafice platí, že nic není zadarmo, a FSAA není výjimkou. Jak je patrné z předchozího, musí grafická karta při použití FSAA 4× vykonat přibližně 4× více práce než obvykle a navíc potřebuje více paměti. Pokud použijete např. OGSS 4× v rozlišení 640×480, bude grafická karta vytvářet obraz v rozlišení 1280×960 a tomu bude odpovídat i rychlost vykreslování. Navíc tu budou další časové ztráty, např. při přepočítávání obrazu do požadovaného rozlišení. Zatím žádná grafická karta nenabízí dostatečný výkon pro využití FSAA 4× v rozlišení 1024×768, kdy je už obraz vypadá opravdu dobře.

Jak je to s paměťovými nároky:

Tabulka obsahuje údaje o paměti dostupné pro textury při použití FSAA 4× (4 vzorky na pixel) v závislosti na architektuře, množství paměti, rozlišení a barvené hloubce. Pokud je uvedeno nelze, znamená to, že paměťové nároky přesahují velikost paměti. Situace u VSA-100 je komplikována tím, že celý obraz je rozdělen mezi jednotlivé čipy (2 u Voodoo 5 5500, 4 u Voodoo 5 6000), přičemž každý z nich musí mít v paměti identické textury. Množství dostupné paměti se tak dále snižuje (na polovinu u Voodoo 5 5500, na čtvrtinu u Voodoo 6 6000). To je daň za paralelní zpracování a datovou propustnost, které dělá z Voodoo 5 6000 po stránce fill-rate zatím nejrychlejší grafickou kartu vůbec. Z tabulky je vidět, že při použití FSAA 4× stoupnou v případě tradiční architektury paměťové nároky 10×, u architektury VSA-100 12×, k tomu je však třeba navíc připočíst dvojnásobné či čtyřnásobné množství textur. Při použití FSAA 2× stoupnou paměťové nároky u tradiční architektury 6×, u architektury VSA-100 rovněž, opět je však třeba myslet na textury.

16bit 640×480 800×600 1024×768 1280×960 1600×1200
32 MB (tradiční) 26 MB 23 MB 17 MB 9 MB nelze
64 MB (tradiční) 58 MB 55 MB 49 MB 40 MB 27 MB
64 MB (2× VSA-100) 28 MB 27 MB 23 MB 18 MB 10 MB
128 MB (4× VSA-100) 30 MB 29 MB 28 MB 25 MB 21 MB
 
32bit 640×480 800×600 1024×768 1280×960 1600×1200
32 MB (tradiční) 20 MB 14 MB 2 MB nelze nelze
64 MB (tradiční) 52 MB 46 MB 34 MB 14 MB nelze
64 MB (2× VSA-100) 25 MB 21 MB 14 MB 4 MB nelze
128 MB (4× VSA-100) 28 MB 27 MB 23 MB 18 MB 10 MB

Jak je to s kompatibilitou
FSAA je nezávislý na aplikaci, stačí jen zatrhnout příslušnou volbu v ovládacím panelu. Jeden možný problém však existuje – některé aplikace přistupují přímo k vytvářenému obrazu, např. chtějí přes hotovou scénu vykreslit kokpit letadla, a to nikoliv jako polygon potažený texturou, ale jako bitmapu. Při použití OGSS však obraz může být ve vyšším rozlišení, o čemž aplikace samozřejmě neví. Je tedy na ovladačích, aby se s touto situací vypořádaly a celá operace proběhla korektně. Některé aplikace však mohou mít problémy stále, naštěstí jich neustále ubývá. U grafických čipů VSA-100 podobný problém nehrozí, neboť jednotlivé t-buffery mají stejné rozlišení jako samotný obraz.

Jak je to s kvalitou obrazu podruhé
Častá výtka na adresu FSAA spočívá v tvrzení, že se jedná o pouhé rozmazání obrazu. To však je a není pravda. U hran a malých polygonů je přínos FSAA nesporný, ovšem k celému obrazu se chová jako další filtr. Textura tak místo jednoho projde dvěma filtry, nejdříve při jejím nanesení (bilineární, trilineární nebo anisotropní filtrování), poté v rámci úpravy obrazu (FSAA), který opravdu působí rozmazaně. Výrobci však s tímto problémem počítají a v ovladačích umožňují nastavit míru detailu textur (tedy přesněji řečeno mip-map) v závislosti na vzdálenosti. Vyšší rozlišení textur (mip-map) tak kompenzuje nežádoucí účinky FSAA, ovšem za cenu nižší rychlosti vykreslování.

Jak funguje t-buffer:

Architektura VSA-100 umožňuje určit pro každý pixel několik vzorků, které jsou zapsány do zvláštní paměti – t-bufferu. Výsledný obraz pak vznikne jejich sloučením. Řada efektů, které VSA-100 nabízí, spočívá v tom, že pozici vzorků v rámci pixelu lze určit programově. Pokud např. rozmístíte vzorky v pravidelné mřížce, dostanete OGSS, pokud mřížku navíc natočíte o určitý úhel, dostanete RGSS. Variant rozmístění vzorkovacích bodů je mnoho a jsou klíčem k efektům jako např. Motion Blur, Depth of Field nebo Soft Shadows. Záleží však pouze na kreativitě programátorů, jaký efekt navrhnou.

Na závěr
Zatímco hardwarové T&L přidaly obrazu na detailu, FSAA přidává obrazu na kvalitě a přirozenosti, a představuje tak logické pokračování vývoje. Navíc řeší některé nové problémy spojené s hardwarovými T&L, především náhodné změny velikosti nebo vypadávání velmi malých polygonů. U nových grafických karet je tak už alespoň základní druh FSAA nezbytností.
Váš názor Další článek: Medievil II – kouzlo jedné šišaté krabice

Témata článku: , , , , , , ,