Diit.cz - Novinky a informace o hardware, software a internetu

Anizotropní filtrace a Anti-Aliasing

Nvidia GeForce GTX 680 Kepler
V kalendáři dnes máme 22. března, což znamená, že bychom se měli podívat na čerstvě uvedený grafický čip GK104. Těžko ho charakterizovat jednou větou - snad jen že asi bude jiný, než byste čekali…

Kapitoly článků

Texturovací jednotky a anizotropní filtrace

Nvidia se v rámci prezentace ani oficiálních materiálů explicitně o texturovacích jednotkách ani anizotropní filtraci nezmiňuje, přesto se na obojí v krátkosti podíváme. Podle dosavadních výsledků našich testů se zdá, že texturovací jednotky zůstaly po funkční stránce identické jako v případě Fermi. Konkrétně máme na mysli GeForce GTX 460 / 560 / 580, protože původní GTX 480 se lišila výkonem při filtraci FP16 textur. V tomhle ohledu jsou oba výrobci poměrně nejednotní: Nvidia podporuje (a podporovala) full-speed FP16 filtraci na čipech GF104, GF114 a GF110 (resp. od generace Fermi mimo původní GF100), AMD/ATI zase na čipech generace R600 / RV670 (na novějších je podpora half-speed, tedy s polovičním výkonem oproti rozšířenější Int8 filtraci).

V rámci Nvidie se ale ve srovnání s předešlou generací nic nemění. Totéž platí i pro kvalitu anizotropní filtrace:

AMD Tahiti (HD 7000)  Nvidia GK104 (GTX 680)
default
Nvidia GK104 (GTX 680)
high-quality
GCN AF R1xxx Tahiti Kepler GK104 AF 16x def Kepler GK104 AF 16x hq

pro objektivní porovnání rozklikněte na plnou velikost (PNG)

Nvidia na default používá jako základ brilineární filtr, mip-mapping a filtrace jsou mírně úhlově optimalizované (stejnou měrou jako u Fermi). V režimu high-quality je použit plný trilineární filtr, úhlové optimalizace zůstávají. Jsou ale mírné, takže rozdíly oproti konceptu AMD, který je těchto optimalizací zcela prostý, byste v praxi zřejmě museli hledat lupou. Samotný koncept úhlových optimalizací je spíše než cestou k navýšení výkonu nástrojem k úspoře tranzistorů.

Anti-Aliasing

Jak je v posledních letech zvykem, není MSAA (multi-sampling) jediným režimem, který výrobci nabízejí. Je však stále jedinou metodou, která je vyžadovaná ze strany DirectX (konkrétně od DirectX 10, respektive 10.1). Čím více her a aplikací existuje, tím více problémů vzniká a tím více nových režimů (ať již prostřednictvím ovladačů nebo hardwaru) oba výrobci implementují.

Nebude na škodu, když si některé z problémů (či specifických situací) i způsobů jejich řešení připomeneme:

Starší a nenáročné hry

Pokud hra běží na 200 FPS i s MSAA 8×, pak je škoda dostupného výkonu nevyužít pro nějaký způsob zlepšení obrazové kvality. Nvidia i AMD pro tyto situace nabízejí SSAA (super-sampling), který byl dříve běžný (jako první ho plně hardwarově a ve vynikající kvalitě podporovala 3Dfx), ale který později na řadu let kvůli vyšším výkonnostním požadavkům upadl v zapomnění. Super-sampling je nejen přesnější, ale má pozitivní vliv také na textury. Podle konkrétního nastavení buďto může snížit úroveň moaré a shimmeringu na texturách, nebo umožnit použití záporných faktorů LOD (v praxi mírně lepší kresba textur).

Pro méně náročné hry implementovala ATI před lety (počínaje DirectX 10 generací hardwaru) ještě navíc metodu programovatelných filtrů, která umožnila dosáhnout vyššího vyhlazovacího výkonu. Stručně: Na rozdíl od běžného multi-samplingu (využívá box filtr), který aliasing převádí na vyšší frekvence, fungoval tzv. tent-filtr tak, že aliasing nejen převedl na vyšší frekvence, ale ty ještě následně z obrazu ořezal. Výsledkem byl daleko hladší obraz, ovšem s mírným dopadem na ostrost textur (pokud nesly detaily na frekvencích, které byly závěrem ořezány). Druhý režim nabízel rozšířený edge-detect algoritmus, který popsaný způsob vyhlazení realizoval pouze na hranách polygonů, takže ostrost nesnížil. AMD oba režimy postupem času vypustila z oficiálních specifikací nových karet. Zmiňujeme je ale z určitého důvodu, ke kterému se postupně dostaneme.

Příliš náročné hry

Druhý problém nastává, když hra při požadované úrovni vyhlazování neběží dostatečně rychle. Nejen pro tyto situace slouží režimy Nvidia CSAA či obdoba AMD zvaná EQAA. Ty kombinují MSAA vzorky s datově méně náročnými vzorky, které pouze zjišťují vykrytí a umožňují realizovat vyšší úroveň vyhlazení s nízkými nároky na paměť a sběrnici.

Opět tu zmíníme ještě jednu starší metodu: ATI jí nazývala temporální anti-aliasing, ale bylo možné ji použít už na hardwaru 3Dfx. Fungovala na principu střídání odlišného rozložení AA-vzorků mezi sudými a lichými obrazovými snímky. Pokud byl framerate dostatečně vysoký, vypadal výsledek jako při 2× vyšší úrovni anti-aliasingu.

Hry s post-processing efekty a HDR

Protože se vyhlazování provádí v lineárním prostoru, ale některé hry využívají efekty, které nejsou realizované v lineárním prostoru, přichází na scénu další porce problémů. V lepším případě je anti-aliasing méně účinný, v horším může způsobit artefakty.

Problém se projevuje při klasickém postupu renderingu, kdy je vykreslen obraz s MSAA, proveden resolve (zpracování MSAA vzorků na výsledné pixely) a poté tone-mapping (používaný při řadě HDR efektů).

MSAA tonemapping Jawed
pokud je nejprve proveden MSAA resolve (vlevo), vytvoří následný tone-mapping artefakty (vpravo)
(c) Jawed, Beyond3D forum

Výše uvedená simulace ukazuje, jaký artefakt může vytvořit lineární MSAA s následným nelineárním zpracováním. Řešením tedy je nejdříve provést tone-mapping a teprve poté MSAA resolve. To ovšem hardware nemusí podporovat - pak je třeba použít emulovaný resolve (který neprovádějí ROP jednotky, ale unifikované jádro), což obvykle stojí nějaký výkon navíc.

Deferred shading / G-Buffers

Poslední zádrhel, na který se podíváme, přinesl Unreal Engine 3. Ten využívá (do té doby) silně atypický postup při renderingu: V první fázi je renderováno do specifických textur zvaných G-Buffers, do nichž jsou zakódovány veškeré informace pro další zpracování. Když je výsledný obraz z G-Buffers poskládán a na konci pipeline by měl být proveden anti-aliasing, nestane se nic. Z-Buffer, který je pro to třeba, totiž už neexistuje, zanikl po vykreslení G-Buffers.

Řešením je vykreslovat s anti-aliasingem již do G-Bufferů (za použití shader-resolve), ovšem pokud daná hra poté aplikuje nějaké nelineární obrazové efekty, dochází k problému, který jsme popsali v předchozí kapitolce. Obvykle sice nejde o tak dramatické artefakty, spíš je kvalita vyhlazení degradována a vypadá jako by byla u několik úrovní nižší.

Vzniká situace, kdy se nakupilo několik problémů, které vzájemně komplikují své řešení. Nejsnazší by sice bylo, kdyby vývojáři her použili metody kompatibilní s běžným multi-samplingem. Nežijeme ale v dokonalém světě a je tedy třeba problém přijmout a hledat alternativní řešení: Tím je použití zcela odlišného konceptu anti-aliasingu, který nevychází primárně z geometrických dat jako MSAA, ale z analýzy již vykresleného obrazu.

Nvidia GK104 prezentace 041
Nvidia FXAA v ovládacím panelu

Ať už FXAA Nvidie nebo MLAA od AMD, obojí jsou metody založené na adaptivním post-processingu. Obrazový snímek je vykreslen bez anti-aliasingu a poté proběhne jeho analýza, která vyhledává vše, co působí jako aliasing a provádí náhradu daných částí obrazu vyhlazenými.

I když tyto metody nejsou zcela korektní a mají svoje mouchy, dávají v řadě případů uspokojivé výsledky. Pokud hra neumožňuje použít MSAA nebo post-processing efekty jeho účinnost (či kvalitu) degradují, jsou obvykle metody FXAA či MLAA nejefektivnějším řešením.

FXAA

Nvidia z výše popsaných důvodů dál pracuje na optimalizacích režimu FXAA, který se dočkal určitých vylepšení. Samotná implementace je nyní univerzálnější a přístupná z ovládacího panelu. Protože jde o změny softwarového charakteru, může být nová verze FXAA principielně podporována i na Fermi a podle příslibu Nvidie i bude. Následující ukázky prezentují, jaký přínos může mít FXAA v případě, kdy MSAA nefunguje korektně (všimněte si, že s MSAA má spodní hrana pod výřezem v levé části světlejší odstín, než jaký má pozadí a naopak horní přechází do příliš tmavé fialové - obojí je důsledkem nesprávného pořadí při renderingu MSAA resolve-> tone-mapping):

Nvidia FXAA2 noAA
Nvidia FXAA2 MSAA
Nvidia FXAA2 FXAA

TXAA

Kromě FXAA přichází ještě druhá novinka. Ta je ale trochu odlišná:

  • TXAA vyžaduje podporu ze strany aplikace
  • TXAA je implementovaný softwarově, takže by mohl být podporovaný i na Fermi (zatím to však Nvidia nepotvrdila)
  • TXAA je kombinací MSAA, filtrace a (volitelného) temporálního AA

U posledního bodu se na chvilku zastavíme. Podle Nvidie má klasický MSAA v případě některých enginů příliš vysoké nároky, ale přesto přináší dobrou kvalitu obrazu. TXAA proto zakládá na nižších úrovních MSAA (konkrétně 2× či 4×, díky čemuž se velikost G-Bufferů drží na přijatelné úrovni) a pro zvýšení účinnosti používá filtry. Nvidia nespecifikovala konkrétní typ filtru, ale zmínila, že dochází k poklesu ostrosti, takže je možné, že půjde o něco obdobného jako bývaly tent-filtry ATi/AMD. K tomu je navíc použitý ještě volitelný temporální anti-aliasing, tedy střídání polohy vzorků mezi jednotlivými snímky.

  • TXAA 1 ⇒ zakládá na MSAA 2×
  • TXAA 2 ⇒ zakládá na MSAA 4×
Nvidia TXAA noAA
Nvidia TXAA MSAA
Nvidia TXAA TXAA

Prozatím je tuto metodu předčasné globálně hodnotit, uvidíme až na konkrétních hrách. Oficiální ukázky demonstrují, co se dá na základě popisu očekávat: Vyšší úroveň vyhlazení na úkor určitého snížení ostrosti.

Prakticky s jistotou ale můžeme říct, že TXAA bude podporované v rámci Unreal 4 Engine (nepřímo to potvrdil Mark Rein, vice president of Epic Games). Dále Nvidia plánuje na rozšíření TXAA spolupracovat s následujícími studii:

Nvidia GK104 prezentace 050
Zdroje: 

Nvidia (prezentace v San Franciscu a oficiální materiály)

Kapitoly článků

Diskuse ke článku Nvidia GeForce GTX 680 s čipem GK104: Herní Kepler detailně

Pátek, 23 Březen 2012 - 13:43 | HKMaly | Od episody VOY 4x01. Uvedom si, ze je to z...
Pátek, 23 Březen 2012 - 09:01 | borowitz | A už je jistý že se jim nerozpadají chipy?
Pátek, 23 Březen 2012 - 08:49 | NRX | Bol by som rád, keby sa objavil nejaký hack na...
Pátek, 23 Březen 2012 - 08:03 | TheKing akaIngkar | presne ako hovoris ... cenova hladina novej karty...
Pátek, 23 Březen 2012 - 07:57 | TheKing akaIngkar | a teda jadro GF104 je mainstream (tak ako u AMD...
Pátek, 23 Březen 2012 - 07:52 | TheKing akaIngkar | pokial viem tak 680GTX nieje nastupca 580GTX ......
Pátek, 23 Březen 2012 - 00:44 | madik | Za tu cenu rozhodně nebude. GTX680 je nástupce...
Čtvrtek, 22 Březen 2012 - 23:55 | Dan8 | A já děkuji za článek :)
Čtvrtek, 22 Březen 2012 - 23:53 | dancenatic | Nebudete testovat aj kvalitu obrazu , AA aj tých...
Čtvrtek, 22 Březen 2012 - 23:42 | Dave Tramtunberk | Pochlapí se až dá kartu do cenové hladiny, kam i...

Zobrazit diskusi