Antialiasing (AA)

Antialiasing (AA)

Tento článek je kompilací informací z internetu. Některé části jsou převzaté doslova, jiné jsou přeložené a parafrázované. Seznam zdrojů naleznete na konci článku. Obrázky ozdrojované nejsou, jsou nalinkované přímo z původních webů (nejsou hostované na webu kwoky.cz).

Snad každý, kdo někdy hrál videohry, se setkal s pojmem antialiasing (vyhlazování hran). Jde o věc tak běžnou a přesto pro mnoho hráčů záhadnou, neuchopitelnou. Kdo se má ve všech těch zkratkách vyznat, že? MSAA, FXAA, CSAA, … Na následujících řádcích si tedy zkusíme jasně a stručně vysvětlit, jak se s vyhlazováním poprat při nastavování hry.

Proč potřebujeme antialiasing?

Počítač vytváří grafiku jako síť polygonů (trojúhelníků), které se následně potahují texturou. Po vygenerování celého obrazu v paměti počítače (v grafické kartě) je ještě třeba přizpůsobit jeho formát pro zobrazení na monitoru. K tomu se používá tzv. rasterizace, tedy převod obrazu na jednotlivé pixely (obrazové body). A právě při tomto procesu dochází ke vzniku tolik nepopulárních zubů a dalších vad.

Kupříkladu je nutné vykreslit takovýto trojúhelník. Má velikost cca 4×15 pixelů, avšak jeho strany se přesně neshodují s hranicemi jednotlivých pixelů.

Výsledný obraz po rasterizaci proto ani zdaleka neodpovídá skutečnosti. Obraz se totiž vytvořil 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. Tímto způsobem vznikají ony nepopulární zubaté hrany.

V případě, že budeme vykreslovat tenké objekty, jako jsou například lana, pletivo, sloupy v dálce a podobně, dojde k úplnému rozpadu těchto objektů na kousky. Je to dané tím, že lana jsou tenčí než jeden pixel. V obraze to pak vypadá opravdu nehezky.

Proto vznikla řada technik, která tyto vady řeší. Souhrnně se tyto metody nazývají „antialiasing (AA)“ (česky „vyhlazování hran“). Vyhlazování je pro grafickou kartu práce navíc, která ji zpomalí. Záleží však na tom, který způsob AA použijeme. Některé jsou totiž pro framerate smrtící, jiné téměř zanedbatelné. Pojďme se na ně tedy postupně podívat.

Pro zajímavost: Dokonce i tento text, který čtete, je vyhlazen antialiasingem 🙂

Anglický videosouhrn:

Zvýšení rozlišení (části) scény

Supersampling / Oversampling

SSAA/FSAA (super sampling AA / full-scene AA) nebo také oversampling znamená, že se celá scéna vyrenderuje ve vyšším rozlišení, aby se následně při rasterizaci mohly jednotlivé pixely zprůměrovat.

Po vyrenderování:

Po zprůměrování:

Výsledný obraz se tak jeví mnohem méně zubatý než bez vyhlazování. Problém je ale právě v tom, že je zapotřebí více subpixelů na vytvoření jednoho výsledného pixelu. To je pro grafickou kartu opravdu velká zátěž a můžete tedy očekávat znatelné snížení fps ve hrách. Proto se tento způsob vyhlazování používá spíše při dělání screenshotů než při samotném hraní.

MSAA

MSAA (multi sampling AA) využívá stejný princip jako oversampling (vygeneruje více subpixelů a ty pak zprůměruje). Nedělá to však pro celou scénu, ale jen pro okraje polygonů. Tím dosahuje stejné kvality obrazu při nesrovnatelně nižší zátěži grafické karty. Použití MSAA ve hrách tak již nemá tak drtivý dopad na výkon.

Před vyhlazením:

Po vyhlazení pomocí 4x MSAA:

Před nebo za zkratkou MSAA se můžete setkat s číslem: 2x MSAA, 4x MSAA, 8x MSAA, … Toto číslo udává, z kolika pixelů se výsledek průměruje. Čím vyšší hodnota, tím lepší vyhlazování a tím vyšší nároky na výkon grafické karty.

MSAA je velmi univerzální režim a je dostupný ve většině existujících her. Pokud je v nastavení zmíněn pouze „antialiasing“ bez upřesnění metody, jde pravděpodobně o MSAA.

Pro zvědavé můžu poskytnout ještě tento velmi podrobný anglický článek: https://mynameismjp.wordpress.com/2012/10/24/msaa-overview/

CSAA/EQAA

CSAA (coverage sampled AA) je pokročilejší forma MSAA s ještě nižšími nároky na výkon. CSAA 16x je přibližně tak náročné jako MSAA 4x, produkuje však lepší kvalitu obrazu. Zjednodušeně se dá říct, že toho dosahuje zvýšením „rozlišení“ uvnitř polygonu ve specifických místech, čímž zpřesňuje zprůměrování výsledné barvy. Podrobný popis fungování naleznete zde.

4x MSAA:

16x CSAA:

AMD uvedlo velmi podobný režim vyhlazování pod názvem EQAA (enhanced quality AA). Princip i dopady na výkon jsou podobné jako u CSAA.

Dodatečné vyhlazování (post processing)

Následující metody se používají až poté, co je obraz vyrenderován. Nezvyšují tedy rozlišení celé scény nebo okrajů polygonů, pouze různými technikami kompenzují vzniklé vady. Proto je možné je kombinovat např. s MSAA. MSAA se snaží obraz vyrenderovat co nejlépe a post processing poté ještě „ladí“ výsledek.

FXAA/MLAA

FXAA (fast approximate AA) a MLAA (morphological AA) pracují s dodatečným rozmazáváním ostrých hran v obraze. Jde o techniku velmi rychlou a dopady na výkon jsou tak téměř zanedbatelné.

Vedlejším efektem je však rozmazání obrazu i v místech, kde to není potřeba. Vzniká tak výsledek, který může působit „rozpatlaným“ nebo zamlženým dojmem.

SMAA

SMAA (subpixel morphological AA) je vylepšením předchozích režimů FXAA/MLAA. Daří se mu efektivně odstraňovat zubaté hrany a současně mnohem méně rozmazává ostatní části obrazu.


Dopady na výkon jsou opět mizivé.

Pokud vaše grafická karta nemá dostatek výkonu na MSAA a přesto chcete použít nějakou formu vyhlazování, zvolte SMAA. Zaznamenal jsem i názor, že kombinace MSAA+SMAA je nejlepším kompromisem mezi výkonem a kvalitou obrazu vůbec.

TXAA/TAA

O režimu TXAA (temporal AA) je poměrně obtížné zjistit nějaké obecnější informace. Jak autor článku na Redditu uvádí, vždy záleží na implementaci v konkrétní hře. TXAA je výpočetně náročnější než předchozí postprocesingové režimy, velmi dobře odstraňuje zubaté hrany a rozmazává celý obraz. Srovnání výkonu s ostatními režimy naleznete na grafu výše. Jedním z úkolů tohoto typu vyhlazování je také kompenzovat „poskakování“ rychle se pohybujících objektů v případě, že grafická karta nestíhá počítat dostatečný počet snímků za sekundu.


TSSAA

TSSAA (temporal super sampling AA) funguje na stejném principu jako TAA, ale navíc používá supersampling pro zlepšení kvality obrazu. Náročnost na výkon je tak oproti TAA mírně vyšší. Příklady výsledků různých typů vyhlazování včetně TSSAA naleznete zde.

MFAA

MFAA (multi-frame sampled AA) je nepříliš známý typ vyhlazování, který slibuje kvalitu 2x MSAA s téměř nulovým dopadem na výkon. Princip fungování názorně vysvětluje následující video.

MFAA se údajně automaticky zapíná v případě, že na grafice od nVidie zapnete MSAA. Ale tuto informaci se mi nepodařilo spolehlivě ověřit.

DLSS

Pokud vás zajímají technologie budoucnosti, které souvisejí s vyhlazováním, doporučuji tyto anglické články:
https://news.developer.nvidia.com/dlss-what-does-it-mean-for-game-developers/
https://developer.nvidia.com/rtx/ngx

CMAA

Pokusím se doplnit další info. Zatím se můžete začíst do anglického článku

Anglický videosouhrn:

Filtrování textur

A zajímavost na závěr, která s vyhlazováním nesouvisí. Ve hrách je často možné nastavit filtrování textur a obvyklé možnosti jsou Bilinear, Trilinear a Anisotropic. První dvě jmenované možnosti jsou již zastaralé a nevypadají dobře. Vzhledem k malému dopadu na výkon a dramatickému zlepšení kvality vzdálenějších textur určitě používejte Anisotropic 8x nebo 16x. Možná si hru užijete o chloupek lépe 🙂

Zdroje:

https://pctuning.tyden.cz/hardware/graficke-karty/14177-antialiasing-vyhlazovani-teoreticky-i-prakticky
https://www.nvidia.com/object/coverage-sampled-aa.html
https://www.reddit.com/r/Games/comments/1rb964/antialiasing_modes_explained/
https://gaming.stackexchange.com/questions/265486/what-do-the-different-doom-4-antialiasing-settings-do-and-how-do-they-impact-per