Uživatel:Krctomas

Z HPM wiki
Přejít na: navigace, hledání

Obsah

Morphological Anti-Aliasing

Aliasing

Aliasing je pojem pro vznik artefaktů v důsledku vzorkování (při převodu spojité informace na diskrétní). Aliasing se vyskytuje u 2D i 3D objektů, nejpatrnější je však při sledování pohubu těchto objektů. S přechodem do trojrozměrného prostředí a s rozmachem 3D akcelerátorů začal vyvstávat čím dál tím akutněji jeden problém. Přestože se hrubá síla grafických karet zvyšovala, nevedlo to k přílišnému zlepšení obrazu. Počítač vytváří 3D objekty jako síť polygonů, které se následně potahují texturou. Čím je tato síť podrobnější, tím věrnější bude i obraz. Kvalitu obrazu jako takovou lze zlepšit např. zvýšením počtu těchto polygonů, příp. změnou rozlišení. Po vyrenderování celého obrazu v paměti počítače je nutné tento obraz upravit tak, aby mohl být zobrazen na monitoru. K tomu se v dnešní době používá tzv. rasterizace. A právě při tomto procesu dochází ke vzniku tolik nepopulárních zubů a dalších vad v obraze. Podíváme se proto na nejčastější typy artefaktů způsobených aliasingem.


Jagged Edges (Zubaté hrany)

Nejtypyčtější artefakt způsobený aliasingem. Jeho vznik si vysvětlíme na následujícím trojúhelníku. Jeho rozměry jsou přibližně 4x15 pixelů, nicméně jeho strany se přesně neshodují s hranicemi jednotlivých pixelů.

Trojuhelnik1 puvodni.gif


Výsledný obraz po rasterizaci právě proto vůbec neodpovovídá originálu. Obraz byl vytvořen tak, že systém zkontroloval, jakou barvu má střed pixelu (ony červené tečky). Pokud byl střed modrý, obarvil pixel modře. Pokud byl střed bílý, obarvil pixel bíle.

Trojuhelnik2 povykresleni.gif

Unconnected lines

Příklad unconnected lines


V případě, že budeme vykreslovat tenké objekty, jako jako jsou například lana na naší lodi či stožáry v dálce, dojde k úplnému rozpadu těchto objektů na kousky. Je to dané tím, že lana jsou tenčí než jeden pixel a nastane situace, kdy je lano mezi dvěma středy pixelů a nevykreslí se. Jenže u druhého pixelu se už lano vykreslí a u třetího zase ne. Tento jev se nazývá Unconnected lines. Pokud půjdeme ještě do většího extrému, mohou jednotlivé objekty začít úplně mizet a zase se objevovat. Tento jev se jmenuje flickering (poblikávání).

Moaré

Příklad Moaré



Moaré (anglicky moire) je jev, který vzniká při rasterizaci ploch s jemným vzorkem, na které se díváme pod úhlem nebo z dálky. Jde tedy o typické zkroucení tenkých rovných linií a podobně. Řešením však není vždy přímo antialiasing, ale také filtrace textur, tedy anizotropní filtrování místo klasického a méně účinného bilineárního / trilineárního. Moaré se vyskytuje i v televizním vysílání - proto jsou pro vystoupení v televizi nevhodné oděvy s drobným vzorkem.


Pěkné moaré video.




Porovnání obrazu před a po aplikováním anti-aliasingu

Anti-aliasing

Anti-aliasing je proces, který zjednodušeně řečeno vyhlazuje hrany v obraze, neboli odstraňuje artefakty vzniklé aliasingem. V místě hrany vloží barevné hodnoty odpovídající průměru barev na jednotlivých stranách hrany. Jde tedy o jakési rozostření hran, v jehož důsledku ale mizí "digitální" ostrost. Anti-aliasing ale také snižuje kontrast, výsledný obraz vlastně rozmazává, a v neposlední řadě je náročný na paměť a výkon grafické karty.


Oversampling (OSAA)

Základní metodou Antialiasingu je Oversampling. Pokud se vrátíme k trojúhelníku z odstavce o zubatých hranách, jistě nás napadne, že čím větší rozlišení, tím přesnější bude výsledný obraz. Při nekonečně vysokém rozlišení bychom i po rasterizaci dostali toreticky stejný trojúhelník jako před ní. Kařdý pixel tedy rozdělíme na čtyři menší a scéna se vyrenderuje ve dvojnásobném rozlišení. Výsledný trojúhelník tvořený ze čtverců vypadá daleko věrněji. Náš návrh v tomto provedení odpovídá 4× AA (každý pixel jsme nahradili čtyřmi menšími):

Trojuhelnik3 oversampling.gif

Nyní jen zprůměrujeme barvy u každých čtyř sousedních pixelů a scéna se převede zpět do původního rozlišení.

Trojuhelnik4 oversampling.gif

Výsledek je teď daleko věrnější než původně. Jenže je tu malá nevýhoda. Místo rozlišení 1920 × 1200 px obraz renderujeme v rozlišení 3840 × 2400. Zatížení sběrnice je obrovské, jsou tu velké nároky na paměť a podobně.

Více o OSAA např. zde.


Supersampling (SSAA)

Kvůli obrovským nárokům Oversamplingu bylo nutné celý proces optimalizovat. Prvním krokem bylo zmenšení počtu subpixelů na polovinu.

Supersampling.gif


Všimněte si, že na obrázku má každý pixel jen dvě červené tečky (subpixely), které by šly snadno doplnit na čtyři. Tím bychom dostali původní 4× Oversampling. V praxi však v drtivé většina případů stačí jen dva takto diagonálně umístěné subpixely, přičemž kvalita obrazu se o mnoho nezhorší (obecně platí, že v každém řádku a každém sloupci musí být jeden subpixel). Tím jsme snížili nároky na polovinu a získali jsme 2× Supersampling.



Stejně jako v případě optimalizace 4× OAA na 2× SSAA můžeme optimalizovat i 16× Oversampling. V tomto případě už každý pixel dělíme na 16 menších a obraz renderujeme ve čtyřnásobném rozlišení. Po optimalizaci nám však však v každém řadě a sloupci zbude jen jeden subpixel, přičemž kvalita se nezmění (spodní trojúhelník). Tím dostáváme 4× Supersampling, který má stejné nároky na výkon jako 4× Oversampling, ale kvalita je na úrovni 16× Oversampling. Vzhled útvaru se navíc začíná vzdáleně podobat trojúhelníku, který jsme původně chtěli. Samozřejmě je mnoho možností, jak subpixely vybrat a podle toho se rozlišuje mnoho verzí Supersamplingu.

Více o SSAA zde.

Trojuhelnik4 supersampling.png


Multisampling (MSAA)

Dnes nejrozšířenější metodou je Multisampling, který používají všechny čipy nVidia od GeForce3 dále. Stejně jako u supersamplingu jsou pixely rozděleny na více subpixelů, ovšem jen ty, které leží na okrajích polygonů, jsou počítány zvlášť (rozuměj jejich barva). Rozlišení je tedy u 4x anti-aliasingu čtyřikrát vyšší, ovšem některé čtveřice subpixelů jsou zpracovávány dohromady. Pokud všechny subpixely leží uvnitř polygonu, musí i celý pixel ležet uvnitř a nemusí být tedy vyhlazen. Jeho barva je proto počítána pro všechny elementy zároveň. Pokud některý ze subpixelů zpracovávaného polygonu leží mimo trojúhelník, je logické, že pixel je okrajový a potřebuje vyhladit. Zde jsou tedy subpixely, které leží v polygonu, počítány nezávisle. Barva zbylých elementů (mimo polygon) je pak počítána až se sousedním polygonem. Vylučuje se tak situace, kdy bude barva subpixelu počítána dvakrát. Výhody této metody jsou jasné – uvnitř polygonů, kde se nemohou nacházet žádné zoubky, probíhají výpočty pro celý obrazový bod zároveň, protože kdyby byly vykonávány zvlášť pro jednotlivé subpixely, byl by výsledek stejný, ale výkon nižší. Účinek je tedy stejný jako u supersamplingu, scéna je zpracovávána ve vyšším rozlišením, ale s mnohem menším počtem kalkulací.

Multisampling je v dnešní době základní a nejpoužívanější typ vyhlazování hran. Ale existuje bezpočet vylepšených verzí, které dále zlepšují kvalitu vyhlazování. Například je to adaptivní antialiasing, který vyhlazuje hrany u průhledných textur či Custom Sampling Aliasing (CSAA; 16× režim u jedné Nvidia karty) od Nvidie a Custom Filter Antialiasing od ATI (CFAA; volitelné filtry).

Více o MSAA např. zde.

Morphological Anti-Aliasing

Morphological Anti-Aliasing (MLAA) neboli morfologické vyhlazování od společnosti AMD je speciální filtr počítaný přes GPU, který se aplikuje až na vyrenderovaný snímek v paměti grafické karty těsně před odesláním na monitor.

Pro zjednodušené vysvětlení principu MLAA uvažujme pouze černobílý obrázek:


Mlaa.png


MLAA algoritmus probíhá ve třech základních krocích. (Více a podrobněji např. zde.)

c_výsledná=(1-a)*c_původní+a*c_protější

kde c_původní je původní barva buňky a c_protější je barva na opačné straně barevné linie
barvy vyjadřujeme v intervalu <0,1>, kde 0 je černá, 1 je bílá.

např. pro buňku C5 z obrázku níže by platila rovnice:

c_výsledná=(1-1/3)*1+1/3*0=2/3
Lline.png


To, že je MLAA post processing filtr, je jeho největší výhoda a zároveň také největší slabost. Nejprve se podívejme na to, proč je to výhodné. Tím největším plusem je fakt, že morfologické vyhlazování musí už z principu fungovat vždy a všude. Je přece úplně jedno, jaký obrázek upravujete.

Další výhodou MLAA je aplikace filtru na celou plochu. Zatímco klasické MSAA se aplikuje jen na přechody hran, MLAA už z principu neví, kde přechody jsou, k dispozici má jen barevnou mapu. Vyhlazují se tak nejen hrany, ale také textury (a s nimi bohužel i vše ostatní). MLAA je tedy teoreticky vysoce kvalitní antialiasingový filtr aplikovaný na celý obraz a samo AMD jej srovnává se svým vysoce kvalitním filtrem CFAA.

Třetí podstatnou výhodou morphological antialiasingu by měla být jeho nízká hardwarová náročnost. Zatímco klasické AA vždy alespoň částečně zvyšuje rozlišení obrazu, MLAA nic takového nedělá a jde o post processing efekt stejně jako třeba úprava kontrastu. Hardwarové nároky MLAA by tak měly být poměrně nízké.

Jeho největší nevýhodou je paradoxně i jeho velká přednost: vyhlazování všeho. Jak již bylo řečeno, MLAA je post processing filtr a nedokáže tedy určit, co je vhodné vyhladit a co nikoliv. Procesem vyhlazování tedy projde vše včetně písma. To je po vyhlazení pochopitelně podstatně hůře čitelné a ve fontu jsou patrné chyby.


Porovnání MSAA a MLAA

Porovnání MSAA a MLAA 1
Porovnání MSAA a MLAA 2
Porovnání MSAA a MLAA 3

Zdroje

Osobní nástroje
Jmenné prostory
Varianty
Akce
Navigace
Nástroje