GBAA a Anti-Aliasing v roce 2011
Mimo jiné v tom, že uživatelé pláčou tak zvaně na nesprávném hrobě.
Vše začalo s příchodem MSAA (multi-sampling). Zásadní výhodou této technologie byla rychlost, která vycházela z vynechání podstatné části výpočtů a komprimovatelnosti (oproti do té doby používané SSAA). MSAA se objevil prakticky před 10 lety a využíval toho, že všechny hry používaly při vykreslování zavedené postupy, které umožňovaly přistupovat k Z-bufferu (data o hloubce scény, která jsou pro provedení MSAA zapotřebí) prakticky kdykoli to bylo třeba.
Později ale začaly přicházet problémy. První byly složitější post-processing efekty. Pokud hra kvůli post-processing efektům prováděla rendering přímo do textury, se kterou se dále pracovalo, byl zažitý postup renderingu narušen a hardware, který na něj byl navržený, nemohl MSAA provést (texture-render-targets nepodporovaly MSAA). Výrobci hardwaru se tehdy začali potýkat s problémem, jak zprovoznit anti-aliasing v takových hrách. Řešením (funkčním, nikoli korektním) se staly zásahy ovladače grafické karty do postupu vykreslování, a tak například ovladač namísto renderingu do textury provedl rendering do nějakého jiného formátu, který byl s MSAA kompatibilní a ten následně převedl na žádanou texturu.
Splinter Cell (2002) - jedna z prvních her, kde post-efekty komplikovaly použití MSAA
Správně by takový postup měl implementovat přímo vývojář hry, ale dlouho se tak nedělo. ATI s Nvidií se musely potýkat s řadou problémů, jako například jak implementovat podobné nestandardní zásahy do ovladače, aby prošel WHQL certifikací, oba výrobci museli dodělávat podporu za vývojáře pro každou hru zvlášť, často pak stačilo vydání patche na hru, který část kódu změnil a výrobci hardwaru mohli začít znovu.
Když už se zdálo, že spolupráce obou výrobců, Microsoftu (v podobě rozšiřování a standardizování podpory MSAA v DirectX) a samotných vývojářů dosáhla do takového stádia, kdy ve většině her fungoval anti-aliasing už „z výroby“, nastal další problém. Tím byl Tim Sweeney, respektive jeho názor, že anti-aliasing je jen „framerate killer“, který nemá vliv na kvalitu obrazu. V souladu s touto myšlenkou uvedl Unreal Engine 3, který 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.
Ačkoli by řešení ze strany vývojáře bylo poměrně prosté a už v době vydání UE3 bylo známé a zdokumentované (je potřeba vyhlazovat už při renderingu do G-Buffers a fixní resolve nahradit pixel shader programem), Sweeney se s podobnými banalitami nezatěžoval. ATI (později AMD) a Nvidii to způsobilo řadu problémů (her postavených na UE3 není právě málo) a zákazníci, kteří byly zvyklí si anti-aliasing prostě zapnout, svojí rozhořčenost adresovali výrobcům hardwaru, kteří na celé situaci měli nejmenší podíl.
Nvidia situaci řešila implementací vlastních postupů do jednotlivých her, AMD připravila nový režim MLAA, který - v rámci snahy o nezávislost na renderovacím postupu - vezme až zcela vykreslený snímek a adaptivními algoritmy vyhledá a vyhladí vše, co považuje za aliasing.
Emil Persson již tehdy kritizoval přístup vývojářů:
„Releasing a game in 2010 without AA is a completely foreign concept to me. If the technique you're using makes it impossible to use AA then you're using the wrong technique.“
• Emil Persson (Humus) |
Stručně přeloženo: „Vydávat hru nepodporující anti-aliasing v roce 2010 považuju za naprosto mimozemský přístup. Pokud vaše postupy znemožňují použití anti-aliasingu, používáte špatné postupy.“
V poslední době už většina her nepoužívá klasické vykreslovací techniky, pro které lze MSAA prostě zapnout, a tak podpora anti-aliasingu čím dál více záleží na vývojáři. Bylo by dobré si uvědomit dvě věci:
- Stejně jako DirectX 11 kompatibilní karta vám nepřidá DirectX 11 efekty do hry, která je nepodporuje, tak ani karta podporující MSAA ho nemůže zapnout ve hře, kde není podporovaný.
- Podpora ze strany výrobců hardwaru, která už léta přesahuje rámec povinnosti daných specifikacemi DirectX, nemůže dlouhodobě a s narůstajícím počtem her suplovat ignoranci či nekompetentnost některých vývojářů.
Samozřejmě se nedá čekat, že uživatelé začnou ze dne na den namísto výrobcům zlořečit vývojářům, případně že si hru příslušného studia nekoupí. Čím více ale technicky kvalitně zpracovaných her bude a čím více recenzentů her začne do svého hodnocení zahrnovat i (ne)podporu anti-aliasingu, tím větší tlak na ostatní vývojáře vznikne.
Právě Emil Persson už řadu let připravuje dema, na kterých demonstruje (mimo jiné) různé způsoby anti-aliasingu v kombinaci s různými technikami renderingu. Letos na jaře vydal demo prezentující Geometric Post-process Anti-Aliasing, které funguje na principu porovnání polohy pixelu oproti skutečnému geometrickému okraji a blendingu se sousedícím pixelem v poměru, který odpovídá vzdálenosti centra pixelu od skutečného geometrického okraje.
princip GPAA: vážený blending s barvou pixelu, který je nejbližší směrem ke geometrické hraně
Nové demo (Geometry Buffer Anti-Aliasing) funguje ve stejném duchu, výstupní kvalita je identická, ale používá odlišný postup - eliminuje druhý geometrický průchod, pro ukládání geometrických dat používá dvoukanálový formát a vynechává vykreslování čar, pro nějž nejsou ovladače herních karet příliš optimalizované: