11. 2. 2011

A povedal - buď polotieň

V scéne o komplexnosti 500 000 polygónov na frame plus početné objekty /dynamické, statické, deformovateľné/ a pri aplikácii vysokokvalitného SSAO algoritmu dosiahla grafická karta NV 8800 GTX - 17 až 30 fps. Menej výkonná NV 7800 GT cca 3-8 fps. RSX v PS3 by sa zrejme motala niekde okolo 2-5 fps. Máte nejaký návrh ako dosiahnuť 30fps na PS3 s SSAO pri scéne s 1.2M polys ? SSAO - screen space ambient occlusion je "fake" technika-podmožina javov, ktoré vzniknú pri aplikácii globálnej iluminácie na váš herný svet. SSAO samozrejme môžte mať v hre aj bez GI a v rôznej kvalite /preto to dvojité SS - screen space alias postefekt, pri pravom AO by zhorel aj centrálny počítač v NASA/. Ambientná oklúzia je pre vizuálnu kvalitu obrazu a percepciu hĺbky, správne "zaradenie" objektu v priestore ďaleko dôležitejšia než známejšie a populárnejšie finesy - antialiasing, motion blur, depth of field, alebo HDR. Ambientná oklúzia vytvára všadeprítomné kontaktné tiene, a to aj v okolí predmetov, ktoré sa už v nejakom nachádzajú /napríklad z omni direktného zdroja - slnko/. Z praktického hľadiska oslabením dopadajúceho/odrazeného prúdu fotónov vzniká aj množstvo dodatočných "odtieňov" farieb ďalej plasticky tvarujúcich zdanlivo plochý objekt.



SSAO - vypnuté/zapnuté



RSX by samozrejme tento efekt rozumne upravený pre použitie v hre nakoniec nejako utiahlo. Daňou za to by bola nepochybne absencia iného efektu. Ako vieme na vybudovanie jedného frejmu pri 30 fps má PS3 akurát tých 33ms. Nie je možné obetovať povedzme 15ms len pre SSAO, dokonca ani tých 5ms. Celkový časový budget je tak neúprosne malý. Pochopiteľne môžeme a aj použijeme grafické možnosti SPE jednotiek. Ilustračne vám ukážem akú štandardnú dobu strávia spracovaním dvoch bežných efektov vo veľmi vysokej kvalite v 720p rozlíšení - 5xSPE a motion blur /3.7ms/, 5xSPE a depth of field /4.7ms/. Ide o každú desatinku ušetreného času. MLAA pri 5xSPE zožerie ďalších cca 5ms. A to sme sa ešte vôbec nedotkli raster operácii a mora ďalšieho.

Obetovať 15+ ms RSX pracovného času pre SSAO je teda jasne neakceptovateľné /na nete sú rôzne demo.exe aj pre PC uživateľov/. Na príklade hry Uncharted 2 si ukážeme klasické zneužitie SPE výkonu. Pre grafické operácie bolo použitých všetkých šesť použiteľných SPE jednotiek. Prvá skvele fungujúca verzia zvládla SSAO za báječné 2 milisekundy. Niekomu by to stačilo, nie však perfekcionalistom v Naughty Dog. Po presne týždeň trvajúcej ručnej optimalizácii zlepšili efektivitu kódu o rovných 100%. SSAO to v Uncharted 2 zvládne v režime 720p/2xMSAA do jednej milisekundy /1ms/. Pre porovnanie ide o čas na úrovni tých najlepších dnešných GPU kariet. Z výkonu SPE poľa si to uštiplo takýto kúsoček výkonu. Sledujte nasledujúci obrázok.



Identický postup-ručné ladenie uplatnili prakticky pri všetkých grafických procesoch bežiacich na SPE. Ako som už tu teda viackrát povedal. Veta - využili sme CELL na 100% ešte nič nehovorí o efektivite kódu, tá sa môže ďalšími inovatórskymi programátorskými postupmi /skúsenosťou/ "navyšovať" aj cez tu definitívnu "stovku". Nasledujúce dva odkazy si otvorte v dvoch oknách a prepínajte medzi nimi. Je tam tá istá scéna z Uncharted 2 s veľmi názorne predvedeným SSAO efektom v hernej praxi. Vypnuté a zapnuté. A čo bude módne o pár mesiacov. No predsa bokeeeeh efekt, nežartujem !!!