19. 8. 2014

Antialiasing - boj s veternými mlynmi


Začať tento pokec však musíme bez tej anti predložky. Aliasing v grafike. Vynechajme komplikovanú teóriu, povedzme si to laicky. Obrazovku si nastavíme do rozlíšenia 320x240 /stará dobrá VGA/ v 256 farbách a potiahneme po diagonále na bielej ploche čiernu čiaru. Zreteľné vidíme, že to má viditeľné "schody", či "zuby". Môžme zvýšiť rozlíšenie na 640x480 alebo 1024x768 - porucha v matrixe nepochybne menej zreteľná, stále však prítomná. Takže tie ostré prechody biela/čierna skúsme doplniť nejakým našedlým "medzi pixelom". Vytvárame vlastne anti-aliasing samples /vzorky, viď obrázok nižšie/ a čim plynulejší ten prechod chceme, tým viac vzoriek potrebujeme. A pretože každý pixel obrazovky je zložený z viacerých RGB subpixelov, musíme ošetriť aj tútu nepríjemnosť /týmto sa však teraz nebudeme detailne zaťažovať/.


Náš jednoduchý, herný DOS VGA engine s flat shaded polygónami, teda máme pekne vyhladený. Prilepme tam v druhom diely aj trochu textúr. Ups. Hrany objektov /geometrie/ sú hladké, vnútro polygónov sa však hmýri početnými alias artefaktami. Potrebujeme zjavne antialiasovať aj tento bordeľ /bilineárny, trilineárny filtering, AF, mipmapping a podobne/. Čas pokročil a máme tu progamovateľné pixel shaders. Dafak. Opäť aliasing v inak slušne hladkej textúre na polygóne s hranami tamer bez zubov. Čo to ? No predsa shader aliasing !! Pixel shader je v jadre vlastne kód, ktorý generuje nové pixely navrchu vašich textúr /napríklad odlesky svetla, specular shader = specular aliasing/. A takto to ide stále dokola a dokola. Dokonalý antialiasing /aliasing modernej hry je mnohohlavý drak a vie byť ešte horší, zakernejší ako pri starej PSone/ pokrývajúci všetky zložité situácie a zároveň dostatočne málo náročný na HW je nedostižný, zlatý grál hernej grafiky. Nabudúce totiž rasterizáciu a polygóny nahradí iné, nové grafické primitívum a cirkus sa začne odznova.

"Deus Ex: IW ? It has ingame controls for MSAA, yet it fails to work with the bloom filter which is implemented (I believe) as a render-to-texture effect." - vývojár Laa Yosh /beyond3D/

Zlatý štandard, tzv. hárdverové MSAA má už svoje najlepšie časy za sebou - zlá kompatibilita s najmodernejšími renderovacími postupmi a zároveň aj nepríjemne lineárne narastajúce nároky na systém pri zvýšení rozlíšenia obrazovky alebo počtu AA vzoriek. Inak povedané MSAA 8x  v 1080p rozlíšení /nedajboh 4K/ spoľahlivo anihiluje akékoľvek ninja 1000 watt PC na trhu. Hľadá sa teda flexibilná softvérová "post efekt" alternatíva s rozumným pomerom výkon/cena. Dnešné pixel ALU shaders sú svinsky rýchle a je ich more, tak to využijeme. A tých riešení sa našlo neúrekom - minimálne MLAA, FXAA, novšie SMAA pozná určite každý rozhľadenejší hráč. Ide o veľmi  búrlivo sa rozvíjajúcu sa oblasť. Na dokonalý antialiasing /tm/ je kladené veľké množstvo často protichodných premenných /jedno objektívne dobré AA nemusí a ani nebude fungovať s forward, forward +, deferred, inferred, pre-pass, tiled based atď. atď. enginom/, ktoré musíte rozumným kompromisom uviesť do rovnováhy. A do toho nám spadne nová next gen GPU GCN architektúra HW konzol 8. generácie, ktorý umožňuje psie kúsky ako DCAA /direct coverage samples access/, ktoré nám báječne poslúžia pri dizajne nového, efektívnejšieho, kvalitnejšieho AA. Tento boj sa naozaj nikdy neskončí.

Takže tu máme čerstvý HRAA - hybrid reconstruction antialiasing /Drobot, Ubisoft Montreal/ ušitý na mieru práve GCN GPU grafikám v PS4, či XO. Základné vlastnosti. Temporal Stability - prispôsobenie AA algoritmu pre objekty na scéne pohybujúce sa neharmonicky so snímkovaciou frekvenciou obrazu teda príliš rýchla "vec" a príliš nízky framerate = artefakty, vo všeobecnosti ide o dynamickú stabilitu AA  /systémovo nenáročné MLAA má skvelú kvalitu v statickom obraze, nie už tak v pohybe, vylepšenie v podobe SMAA tento problém rieši, avšak za cenu vyššej spotreby drahocenných milisekúnd, viac nižšie/, High quality Edge Anti Aliasing - dlhé hrany, ostré uhly, foliage, koľko AA riešení toľko slabín, Super-sampling comparable to 4x RGSS - stará Voodoo 5 to milé deti, zvládalo aj HW cestou skrze svoj akumulačný T-buffer, v tomto prípade ide o temporálny supersampling a získanie subpixel AA vzoriek /veľmi dôležité/, Shading cost of 1 sample per  pixel cirka 1ms on PS4 / X1 @ 1080p resolution - brutálne rýchle AA na PS4 hladko pod jednou milisekundu, čo je v porovnaní s MSAA o stovky percent rýchlejšie plus nižšia spotreba RAM.

V praxi, lebo HRAA nepochybne uvidíte v ďalších hrách od Ubisoftu /Far Cry 4 !!/, to znamená - razantne vyššie IQ /image quality/, často na úrovni MSAA 8x pre non-subpixel polygóny, oveľa oveľa menej nepríjemného subpixel shimmeringu, nestabilných tenkých objektov, viac času ponechaného samotnej grafickej pipelajne /ráta sa každý ušetrený zlomok milisekundy/. A vývoj sa týmto rozhodne nekončí - sú tu nové nápady a HRAA sa bude ďalej mohutne vylepšovať. HRAA sa inak dá v jednej rovnici /už keď ste zvedavý prečo ide hybridné AA/ pekne popísať aj takto : TSEAA + SMAA /RT -N,D,L/ + CRAA + AEAA /ev. GBAA/ + TFLIPQUAD + TAA, ev. TFQ + TAA. Jednoduché. A tá "rekonštrukcia" sa zas týka generovanie AA vzoriek znovupoužitím, stochastickou aproximáciou a mixom pixelov starého a nového frejmu ala KZSF engine /ktorý udáva Drobot ako jednu z inšpirácií/. Mimochodom za túto programovaciu techniku sa SONY postaví pred súd /druhý odsek/, Ubisoft tam asi príde po nich.