Anti Aliasing Ondřej Burkert atrey.karlin.mff.cuni.cz/~ondra/ ~ondra/stranka
Úvod Co je to anti - aliasing? Aliasing = vznik artefaktů v důsledku podvzorkování při vzorkování (sampling) obrazu podvzorkování = příliš vysoká frekvence dat vzhledem k vzorkovací frekvenci vzorkovací frekvence musí být alespoň 2x větší než frekvence dat (Shannonův teorém) podvzorkování způsobuje rušivé efekty (jaggies( jaggies, Moire) Anti aliasing metody na odstranění nesrovnalostí způsobených podvzorkování Techniky no filter pre - filtering post - filtering uniformní Stochastický Jitter
Techniky Pre-filtering intenzita/barva pixelu se spočítá přes zastoupení jednotlivých segmetů v pixelu váženo plouchou, kterou zabírají výpočetně náročné Uniformní post-filteringp zvýšení vzorkovací frekvence (rozlišení) filtrace rekonstrukce nevýhody špatné pro malé objekty paměťové nároky problém jen odsunut do vyšší frekvence výhody jednoduchá implementace
Stochastický post - filtering pozice vzorků je náhodně pozměněna (jitter) lidské oko lépe vnímá šum než aliasing nevýhody nefunguje dobře u paralelních výpočtů výhody vyšší frekvence nahrazeny šumem rychlejší
Algoritmy pro kreslení přímky Gupta-Sproull Fujimoto-Iwata Xiaolin Wu
Obecné předpoklady Oba popisované algoritmy předpokládají náležení přímky do prvního oktanu To se snadno zařídí prostřednicvím symetrií
Gupta Sproull (1981) Algoritmus pracuje s konvolučním filtrem tvaru kužele (další varianty krychle, Gaussian) Tvar kužele zvolen, vzhledem k chování CRT monitoru Střed kužele je roven středu počítaného pixelu, intenzita barvy pixelu závisí na ploše průniku kužele a kreslené přímky Ve sloupci jsou 3 pixely Výpočet se urychluje předpočítáním si tabulky hodnot pro jednotlivé druhy průmětů, tabulka je parametrizovaná úhlem a vzdáleností
Algoritmus hodně záleží na volbě velikosti konvolučního filtru a stupňů intenzity Další možné vylepšení: readback Barva pixelu je zohledněna i vzhledem k barvě pozadí a okolních pixelů Řeší rozumně protínání přímek Hodně časově náročné časté přístupy do paměti
Příklady vlivu nastavení
Wu s algorithm (1991) Mnohem jednodušší a efektivnější než Gupta-Sproull Založen na úpravě Bresenhamova algoritmu pro kreslení přímky Snadno implementovatelný i hardwarově Používá proměnou určující vzdálenost středu pixelu od středu přímky k určení intenzity/barvy Kreslí místo jednoho pixelu dva, součet intenzity dává jedna Vystačí s operacemi sčítání a bitovými posuny
Nástin algoritmu I(x0,y0)=I(x1,y1)=I; //pocatecni body D=0; d=[k2^n+0.5]; //dolni cela část,, de facto obdoba DDA algoritmu while (x0<x1( x0<x1){ //postupuji z obou stran dokud nedojdu doprostřed x0+=1; x1-=1; D+=d; if (D overflow){ //D presahne mez, posunu linku o pixel nahoru po souradnici y y0+=1; y1-=1; } I(x0,y0)=I(x1,y1)=D div 2^(n-m); //prvnimu pixelu jeho stupen sedi //n je pocet bitu D, m je pocet stupnu sedi //intenzita je dana m nejvyznamejsimi bity D I(x0,y0+1)=I(x1,y1-1)=I(x0,y0) doplnek; //druhemu priradim komplement hodnoty prvniho pixelu //I(x,y)=i <=> putpixel(x,y,i) i..intenzita pixelu }}
Dodatky k algoritmu D diference je reálné r číslo s fixní desetinnou čárkou a velikostí rovnou velikosti slova stroje d posun vzhledem k ose y (posun k x je 1) Konce přímek: v případě neceločíselných hodnot počátku a konce pomocí poměrného přesahu poslední integerové hodnoty x-ové soořadnice Přímky kratší jednoho pixelu intenzita určena poměrem délky a velikosti pixelu
Srovnání Gupta-Sproull x Wu Gupta-Sproull Lepší výsledky Přímky jsou trochu rozmazanější Výpočetně náročné (výpočet tabulky) Neošetřuje konce přímek Wu Rychlejší Jednodušší (jen přičtení a bitový posun) Benchmark data: Pentium III 450Mhz, Visual C++ 6.0 Release Build, Default Maximum Speed Optimization... Algorithm Lines Drawn (x1000) (s) Lines Per Sec DDA 1600 504.476 3171.608 Bresenham 1600 80.446 19889.117 Wu 1600 72.895 21949.378 EFLA Variation E 1600 63.801 25077.97
Využití Oba algoritmy se dají s úspěchem použít i na vykreslování anti-aliasovaných kružnic a elips, pro vykreslování polygonů je třeba algoritmy příslušně upravit. Při vykreslování na obrazovku se občas používá několik algoritmů a jejich nastavení najednou a postupně se zlepšuje kvalita obrazu
Oblasti využití Prakticky ve všech oblastech grafiky Fraktály Renderování polygonů Ray tracing Mapování textur Video (blur) Temporary antialiasing
Zdroje Graphic Gems III., s. 349-354 Fundamental Algorithms for Computer Graphics, s. 113-133 Computer Graphics, July 1991 Computer Graphics Techniques, 131-159 www.whisqu.se/per/docs/graphics75.html whisqu.se/per/docs/graphics75.html www.herakles herakles.zcu/education/ /education/apg_2002_2003/hradek/html/ Aliasing.html http://www.edepot.com/algorithm.html