14. 6. 2011

FXAA

O antialiasingu som tu písal už mnohokrát. Vývoj v tejto oblasti však beží tak búrlivým a zaujímavým spôsobom, že vás obštastným ďalším, dúfajme stručným, člankom. Malé intro. Antialiasing - AA je základným efektom vylepšujúcim kvalitu obrazu, ktorý by ste dali určite na prvé miesto svojho wish listu. Je možné ho zrealizovať nekonečným počtom rôzne efektívnych a efektných soft algoritmov. Dnes sa presúvame od HW implementácie, dobre známeho MSAA ku rôznym softvérovým riešenia /SRAA, MLAA, DLAA atď./. Robíme to preto, lebo HW MSAA sa ukazuje hlavne na DX9+ konzolách a pri použití deferred renderingu a jeho subvariánt, ako málo použiteľný alebo dokonca nepoužiteľný - nízka rýchlosť, veľká spotreba pamäte /eDRAM !!/ a priepustnosti. Prvou modernou lastovičkou bol softvérový PS3 - CELL SPE kód pre AA v hre God of War 3 a Saboteur 3.

Obe sa inšpirovali MLAA algoritmom. Ako som už však spomenul, od vtedy sa udiali skutočne prevratné veci. Známou slabinou MLAA získanie informácie o hĺbke pixelu /depth buffer/ a teda neexistujúci subpixel antialiasing. Statický obraz je dokonalý, v pohybe je však možné pozorovať artefakty, kde hlavne tenké objekty /drôty, kable, mreže, ploty/, alebo plôšky s lesklým specular nasvietením majú tendenciu preskakovať subpixely a lepiť sa iba ku "celým" pixelom. je to trochu krkolomné vysvetlenie, ale viac vám aj tak vedieť netreba. MLAA navyše decimuje SPE výkon použiteľný inde. Tento pôvodne PS3 natívny spôsob už má novšie/lepšie/úspornejšie verzie viacmenej odtraňujúce vo veľkej miere hore spomenuté nedostatky. SONY ho aj oficiálne a pre všetkých ponúka ako súčasť CELL SDK knižnív, alebo priamo vo svojom vlastnom Phyre engine - verzia 3.x. Beží naňom aj PS3 exkluzívna hra Journey , keď tak čumím na atmosferické video, hrany sú pekne vyhladené, a bez rušivých artefaktov.



kliknutím zväčši

Múdre hlavy však chceli dosiahnuť ešte niečo lepšie. A borci z NVIDIE dnes prezentujú svoje najnovšie dielko. FXAA. Neopotrebujete brutálny výkon CELL procesoru, ani DX11 hárdver, je vysoko optimalizovaný hlavne s ohľadom na konzoly a štandardné rozlíšenie 720p. Zvláda subpixel aliasing lepšie ako klasické MLAA. Využíva iba GPU hárdvér, nepotrebuje CPU/CELL SPE a celý tento postefekt, de fakto GPU shader kód sa vôjde zhruba do jednej milisekundy /1ms/ čo je fantastický čas, o stovky percent rýchlejší ako hárdverové MSAA, alebo to MLAA v God of War 3. FXAA je dnes už vo svojej tretej verzii a je šitý brutálne na daný HW a ručne ladený doslova na jednu inštrukciu, instanciu, bit pohybu dát a pamäťový register !!! Využíva možnosť programovať konzoly /hlavne PS3/ až na úroveň najzákladnejšieho železa. Niečo zhola nemysliteľné pri PC hárdveri.

FXAA - optimalizácia kódu
1.76 ms = FXAA2 baseline (from original post)
1.50 ms = factoring out texture coordinate math to vertex shader
1.24 ms = factoring + RGBL optimization
1.23 ms = factoring + RGBL + transform ending "if" to conditional move
1.17 ms = hand instruction vectorization, switching to dot products, etc
1.00ms = FXAA3 hand manual forcing a higher register count to get better texture cache performance though lower shader occupancy
.
.
konkurenčné DLAA = cca 2ms na xcrape a 1.6ms na PS3ke
konkurenčné MLAA = cca 3.5ms v God of War 3, MLAA+ pod 2ms vo Phyre 3 engine

FXAA je banálne jednoducho integrovateľný do render procesu ľubovoľného enginu. Ponúka toho času bezprecedentný pomer kvalita/výkon. Sľubuje vlastne "zapnutie" antialiasingu do 95% dnešných konzolackých hier. Prvá hra, ktorá ma hneď napadne je Infamous 2, v ktorej mne z neznámych príčin AA úplne absentuje, napriek výrazne zlepšenej grafike a podľa "pocitov" aj priemerného framerejtu oproti prvému dielu. Platí to však aj pre HALO, Gears, GTA a more ďalších hier. Aj Flopza 4 si napriek všetkým tým žvástom o skvelom GPU v xcrape a "AA zadarmo" môže dovoliť iba minimalistický hardvérový 2xMSAA, ktorý kvalitou nestačí na softvérový FXAA v3.0.