Upozornění:
Níže uvedený článek jsem připravil ještě před nástupem nové generace grafických čipů
(NV40, R420). To znamená, že neobsahuje informace o novinkách, jež tyto čipy přinesly. K jejich příchodu se váže
i částečná změna názvů a značení jednotlivých algoritmů. V době, kdy jsem článek psal, jsem používal jistý systém
rozdělení a názvů, ale vlivem příchodu novinek došlo ke značným změnám nomenklatury, takže označení určitého režimu FSAA již
může znamenat trochu něco jiného, než uvádním ve článku. Protože nyní připravuji rozsáhlé pojednání o FSAA pro
PC-Tuning, bylo by značně neefektivní upravovat i tento článek. Proto jsem zvolil co nejschůdnější řešení
a přistoupil jsem pouze k několika nejnutnějším korekcím v úvodní části článku (tak, aby zde nebyla
vyloženě chybná tvrzení). Zároveň však chci upozornit, že mnohé pasáže mohou být nepřesné až nekorektní - užívejte tedy
všech informací z tohoto článku s úvahou a na vlastní riziko. Rozsáhlejší, podrobnější, korektnější
a aktuálnější pojednání najdete za čas na www.pctuning.cz.
Full-Scene AntiAliasing je označení pro soubor metod (či algoritmů), jejichž cílem
je potlačit prvky Aliasu na celé scéně.
Je logické (a správné) se domnívat, že pokud je zdůrazňováno "Full-Scene", musí existovat i jiné typy AntiAliasingu.
Proč se ale AntiAliasing začal vůbec používat? Co je Aliasing?
Počítačová grafika funguje na základě rastrů, tedy obrazů,
které se skládají z určitých nedělitelných subjektů - pixelů. Tím jsou poměrně omezeny zobrazovací schopnosti.
Nelze zobrazit objekt menší než pixel a nelze zobrazit plynulý barevný přechod. Tomuto je možné předcházet
zvyšováním množství pixelů na jednotku plochy (rozlišení), ale to je velice výpočetně náročné a obrazové defekty
budou de-facto jen posunuty do vyšších frekvencí. Také dnešní monitory také takové rozlišení nezvládají. Mluvíme tedy
o tzv. diskrétním prostředí (funguje ve skocích, je stanoveno nedělitelné minimum - zde pixel). Zobrazování
v celých pixelech způsobuje určité nepřesnosti - Alias (či Aliasing)
Samozřejmě existují i jiné typy Aliasu, ale o těch jen stručně. Jsou způsobeny např.
snímkovou rychlostí,
se kterou pracuje počítač a projevují se třeba trhaným pohybem objektů, který by měl být plynulý, známý je také defekt
rotujícího kola (které vlivem nedostatečné snímkové rychlosti vypadá, jakoby se točilo např. na opačnou stranu).
K redukci těchto defektů slouží tzv. Temporal AntiAliasing (časový AA) známý spíše pod názvem Motion Blur.
Vraťme se ale k projevům Aliasu ve statickém obraze. Pokud se zaměříme jen na svět 3D,
tak nejvýrazněji se Alias
projevuje jako tzv. Jaggies (zubaté hrany), Subpixel Flickering (mizení či poblikávání objektů, které jsou alespoň
jedním z rozměrů menší než pixel), Pixel Poppingem (části polygonů, které se ztenčují a stávají se užšími než
jeden pixel se při pohybu objevují a mizí, takže vypadají, jako by z polygonu "vyskakovaly".
Aliasing se také projevuje zkreslením textur (rozlišení textury je obvykle vyšší, než rozlišení,
na které je textura ve výsledku promítnuta, čímž je snížena její ostrost, detailnost atp.). K potlačení těchto
defektů (či obrazových artefaktů) slouží právě Full-Scene AntiAliasing.
Edge AntiAliasing
Pokud se vrátíme na začátek éry 3D akcelerace, tak prvním pokusem o potlačení Aliasingu
byl tzv. Edge AntiAliasing.
Název by mohl být zavádějící. AntiAliasing není prováděn na hranách objektů, ale na hranách polygonů. Tedy tam, kde se
dva polygony stýkají. Okraje (tzv. "siluety", neboli "silhouettes") celých objektů (např. postav) zůstanou nezměněny
(tzn. zubaté). Algoritmus, kterým je Edge AntiAliasing prováděn není nijak stanoven, ale používána byla jednoduchá barevná
interpolace. Nabízím syntetickou ukázku:
|
|
|
bez EAA |
s EAA |
|
Rozdíl je jen v místě kontaktu červeného a modrého polygonu. Scéna je normálně
vyrenderována a poté je prohnána detekcí hran (kterou může zastávat i CPU). Detekované hrany jsou pak
víceméně rozmazány (nejde tedy o nějaký XY-sampling, který by pracoval s několika vzorky na pixel,
jde jen o jednoduchou interpolaci). Tento režim je časově náročný a neposkytuje příliš dobré výsledky.
Full-Scene AntiAliasing
První, kdo přišel s nápadem používat FSAA na domácích systémech, bylo 3Dfx. Navíc
nešlo o jen tak nějaký algoritmus, takže 3Dfx mělo nejen plně hardwarový FSAA jako první, ale také jeho kvalita je
pověstná dodnes a stále je tento algoritmus používán jako referenční FSAA. Než ale společnost 3Dfx grafické karty
založené na procesorech VSA vydalo, přišla společnost nVidia s nápadem implementovat jiný algoritmus FSAA do svých
ovladačů (tedy softwarově), takže jako první byl k dispozici FSAA na hardwaru nVidia (ale jen softwarově). Pak
přišla ATi, která taktéž přinesla vlastní algoritmy. Vezměme to popořadě.
SuperSampling vs. MultiSampling
FSAA rozdělujeme na tzv. SuperSampling a MultiSampling. Existuje mnoho kritérií, podle kterých lze určitý
algoritmus považovat za jeden nebo druhý typ. Mnoho odborníků si s některými algoritmy neví příliš rady, a tak
se objevují stále další způsoby rozdělování. Ty nejrozšířenější jsou:
|
I. |
SS zpracovává celou scénu, MS jen části, konkrétně okraje podle jednoduchého
testu polohy pixelu (subpixelů) na polygonu. |
II. |
SS určí pro každý subsample (=subpixel) jednoho pixelu barvu a Z-value
(info o pozici), kdežto MS počítá se stejnou barevnou hodnotou všech subpixelů téhož pixelu. |
III. |
Algoritmus, který vytváří výslednou barvu pixelu zprůměrováním barev několika
subpixelů je SuperSampling. |
IV. |
SS renderuje scénu (nebo část) ve vyšším rozlišení (X krát) a poté
je obraz zmenšen (X krát). MultiSampling scénu (nebo její část) vytváří rovnou ve výstupním rozlišení, ale
několikrát (X krát); pokaždé s nepatrným posunem (který je určený požadovanou pozicí subpixelů). |
Toto jsou 4 různé názory. Jsou vzájemně provázané, ale také se vyvracejí. Např. "III" můžeme
uvažovat pouze v případě,
že vycházíme z předpokladu "II". Velice rozšířený je první názor. To ale není dobře, protože fakt, že AA je použit jen
na konkrétní úseky obrazu ještě nic neříká o použitém postupu. Asi nejrozšířenější je definice "II".
Já osobně bych s ní souhlasil, pokud je zároveň přihlédnuto k bodu "IV". Důvod je prostý. S touto
jednoduchou definicí je možné jednoduše rozdělit všechny používané metody. Navíc poměrně logicky udává, že MultiSampling
přebírá vzorky z více ("multi") vyrenderovaných snímků.
Dnes jsou převážně používány metody, které pracují jen na hranách polygonů a okrajích
objektů (tedy na místech, kde jsou Jaggies nejpatrnější; tyto principy využívá Radeon 9500 a vyšší a
GeForce 3 a vyšší). Protože není vyhlazena celá scéna, nejde již v podstatě
ani o Full-Scene AntiAliasing. Přesto tak bývá nadále označován (můžeme ho označovat
jako Optimized Full-Scene AntiAliasing). Výhoda tohoto režimu je zjevná: rychlost. Protože jsou zpracovány jen okraje
a hrany, textury zůstávají nedotčené. Zde byl postupem času FSAA nahrazen Anizotropním Filtrováním, které kvalitu
textur dokáže pozdvihnout mnohem výrazněji (podle tvrzení výrobců hardwaru; skutečnost je trochu jinde).
Uspořádání vzorků (=SubPixels, Samples)
Kvalita výsledného obrazu je velice závislá na rozložení vzorků (samplů). Existují
čtyři běžné způsoby:
Ordered Sampling |
Ordered Grid AA |
nVidia, Matrox (Parhelia), PowerVR (Kyro series) |
Rotated Grid AA |
3Dfx |
Non-Ordered Sampling |
Semi-Jittered AA |
ATi (Radeon >8500) |
Stochastic AA |
Následník 3Dfx Rampage |
Ordered Grid
Uspořádané rozložení je nejjednodušším modelem polohy subpixelů. V nejjednodušším
případě 2x2 (tedy 4x) vychází z následujícího modelu: Každý pixel se rozdělí na 4 části (subpixely)
a z centra každého je pak odebrán tzv. sample (barevný vzorek). Barva 4 vzorků je pak interpolována
(prolnuta, zprůměrována) a je použita pro celý pixel. Nejjednodušší postupem, jak tento algoritmus používat je
tzv. DownSampling, tedy vytvoření obrazu ve vyšším rozlišení a jeho následné zmenšení.
|
Subpixely jsou pravidelně rozloženy. Z každého pixelu jsou odebrány 4 vzorky,
jejichž průměrná hodnota je použita pro celý pixel. |
Rotated Grid
Rotated-Grid FSAA vznikne z mřížky OG pootočením. Velice záleží na úhlu pootočení.
Nejlepší je tak 20-30° (ideálně kolem 25°). Často jsou k vidění i obrázky, kde je mřížka pootočena o celých
45° (tedy na koso), ale to už má algoritmus účinnost nižší (stále však vyšší, než RG). Ideální je, aby vzdálenost
mezi rovnoběžkami (rovnoběžnými s vertikálou či horizontálou) procházejícími jednotlivými subpixely byla konstantní.
|
|
|
Subpixely jsou rozloženy pravidelně, ale pootočeny. Zde od 45°. |
Výhodnější je ale pootočení o cca 25°. |
Pokud je vzdálenost "a" mezi všemi vzorky stejná, je úhel pootočení ideální. |
Na rozdíl od OGAA dokáže RGAA (minimálně) 3x účinněji odstraňovat Alias na liniích blízkých
vertikále a horizontále. Při těchto úhlech totiž OG nedokáže vlivem nevhodného rozložení využít všech subsamplů,
protože dva a dva subsamply se překrývají. Pro lepší názornost si představte, jako byste se na rozložení vzorků
dívali z boku. Při OG budou v zákrytu, kdežto při RG budou viditelné všechny(!), tudíž pracují taktéž všechny.
Mohli byste namítnout, že pootočením o těch 25° jen posuneme tyto kritické úhly o právě těch 25°. To je pravda,
ale jen zčásti. Aliasing je nejvíce zřetelný na úhlech blízkých horizontále a vertikále, naopak mezi úhly 20-30° (které
jsou pro 25° RGAA kritický) příliš výrazný není. Což je velká výhoda. 45° RGAA sice není tolik účinný, jako 25° RGAA, ale
kritický úhel je posunut právě na 45° a to je velká výhoda, protože úhel 45°(+-) AntiAliasing nepotřebuje. Podívejte
na obrázek.
|
Nízké úhly, které nejvíce vyžadují AA jsem označil červeně. Okolí 25°, které AA
tolik nepotřebuje jsem vyznačil modře a 45°, které AA nepotřebují vůbec zeleně. |
Semi-Jittered subpixel Grid
Společnost ATi vychází z předpokladu, že kritické úhly lze "vymýtit", pokud bude pozice
některých vzorků generována náhodně. Tím se také zvýší účinnost AA a nebude zapotřebí tak vysokého množství vzorků.
Výchozím bodem je OG plus náhodně vygenerované pozice vzorků. Např. tedy 4x OG a 4 náhodné vzorky. Pracuje
se se čtveřicí pixelů. 3 pozice vzorků jsou zvoleny podle OG a místo čtvrté je použita jedna náhodná pozice
(ze čtyřech předgenerovaných). V druhém pixelu je zase náhodným vzorkem nahrazen jiný "OG vzorek", atd.
|
|
Nejprve je vytvořena tabulka, která obsahuje pevně dané vzorky (pravidelné),
i připravené (náhodně vygenerované). |
Pro každý pixel je jeden "pravidelný" vzorek zaměněn za "náhodný".
|
Stochastic subpixel Grid
Společnost ATi se možná snaží přiblížit idei 3Dfx, jejímž cílem byl tzv. Stochastic AntiAliasing,
neboli naprosto náhodné rozmístění vzorků. Základním kamenem SAA je fakt, že implementace jakéhokoli pravidelného vzorku
nemůže být naprosto úspěšná, protože lidské oko je na pravidelnost extrémně citlivé, tzn. že Alias je (víceméně)
vždy jen převeden na jiné frekvence (podobně jako při použití vyšších rozlišení). Zároveň ale je pravdou, že implementace
SAA je velice náročná, protože úplně každý pixel obrazu potom obsahuje úplně unikátní rozložení vzorků (při použití alespoň
částečně pravidelných vzorků je možné vždy alespoň část výpočtů provést pro větší množství vzorků zároveň). Dalším kamenem
úrazu je fakt, že při náhodném rozmístění může dojít i na takové pozice vzorků, které jsou řekněme nevhodné
a mohou přinést do obrazu určité množství chyb. To by se ale dalo vyřešit, kdyby pro každý vzorek byl lokalizován
v pixelu prostor, kde se MŮŽE vyskytovat, popř. kdyby byla po celé ploše pixelu stanovena jakási "mapa pravděpodobnosti"
výskytu konkr. vzorku. Pak by tento algoritmus byl ideální. Podle výzkumu 3Dfx by bylo ideálního AntiAliasingu metodou SAA
dosaženo při množství 16 (!) vzorků na pixel (tedy FSAA 16x), kdy by veškerý Aliasing byl převeden (díky nepravidelnosti
vzorku) na bílý šum, ve kterém lidské oko již nedokáže zachytit žádné známky pravidelnosti a tedy ani pozůstatků Aliasu.
Pokud se vám FSAA 16x zdá moc (zvlášť na dobu 3Dfx), tak vás mohu vyvést z omylu. Společnost Quantum 3D, která
svoje grafické stanice a simulátory stavěla ne čipech 3Dfx režim 16x (ale RGAA) používala. Voodoo 4 umožňovala
FSAA 2x, Voodoo 5 5500 4x, Voodoo 5 6000 8x a nadcházející Rampage
(díky implementaci MultiSamplingu) 4x na čip, tedy 8x na dvojčipovou verzi!!! Další karta již měla obsahovat
Stochastic AntiAliasing 16x (pravděpodobně na dva čipy). Zatímco dnes se radujeme, že dnešní karty jsou schopny běhat s FSAA 4x, který navíc
(ať v případě ATi, nVidie, Matroxu či PowerVR) vychází z Ordered Grid.
Způsob aplikace
Dále záleží na tom, zda je zpracován celý obraz, nebo jen některé části. Pokud jen určité části,
tak dále rozlišujeme, které.
Edge AntiAliasing |
Ovlivňuje jen hrany polygonů. Velice rozšířen. Pomalý, nekvalitní. Od Verité 1000, Voodoo... |
Silhouette AntiAliasing |
Ovlivňuje jen okraje objektů. Volari V3 a některé karty Tridentu |
Fragment AntiAliasing |
Obraz je podstoupen detekci Aliasu a ve vybraných částech
je proveden AntiAliasing. Parhelia |
Full-Scene AntiAliasing |
AntiAliasing je proveden na celé obrazové ploše. Voodoo 4/5,
GeForce 1/2/3/4, Radeon po 9200 |
Optimized FSAA |
AntiAliasing je proveden na hranách polygonů, okrajích objektů atp.
Od Radeon 9500 a GeForce FX |
Jednotliví výrobci hardwaru implementují různé kombinace uspořádání vzorků a metod zpracování.
Výsledkem jsou velké rozdíly v kvalitě a efektivnosti FSAA.
|
|