29. 5. 2012

Svetlá veľkomesta

Doba zázrakov pokračuje. Také množstvo rôznych modelov práce so svetlom /tieňovaním/ sme ešte nikdy nevideli. A bola to práve táto generácie, v ktorej sme zažili prechod od desaťročia starej super klasiky forward rendering /FR/ ku progresívnejšiemu deferred renderingu /DR/. Dnes už tiež iba sem tam použiteľný pre nižšiu efektivitu v porovnaní s ešte revolučnejšími postupmi. Pokrok nám prináša viac svetiel na scéne, vyššiu flexibilitu interakcie svetla s materiálmi, lepšie využitie hárdvéru bez nutnosti zmeny jeho parametrov. Práve konzoly sú tým hnacím motorom dneška. V tomto článku vám chcem predviesť jeden nový algoritmus, ktorý sa nepochybne bude využívať nielen na konzolách ďalšej generácie a jeho reklamným sloganom je podpora až pre 32 miliónov svetiel na scéne !!!

V časoch prvých dielov série Qváka a Unreal sme operovali s počtom do 10 dynamických svetiel na frame. S ich vyšším počtom výkon enginu veľmi rýchlo klesal. Pri forward renderingu je spracovanie geometrie a svetla úzko previazané, takže každý zásah do scény /ďalšie svetlo/ znamená opätovný prepočet celej geometrie scény a logaritmický nárast nárokov na hárdvér. Paradoxne ste už vtedy mohli použiť deferred rendering /oficiálne zdokumentovaný v roku 1988/, ten však pri nízkom počte svetiel a málo komplexnej geometrie bol a je pomalší /pritom pamäťovo oveľa náročnejší - napríklad potrebuje veľký Geometry-buffer, dnes 16 až 32 mega/ ako forward klasika. Killzone 2 bola jedna z prvých hier s dôkladným využitím deferred postupov /oddelenie svetla od geometria/ a má bežne na scéne až 300 svetiel. Frostbite engine od DICE /Battlefield/ zvládne aj vyše troch tisícok, modifikuje však deferred rendering s tile based variáciou - tá vyriešila problém s drancovaním zberníc. Bežný deferred režim na ne totiž kladie obrovské nároky, ktoré nie je ako na konzolách naplniť. A takto to pokračuje ďalej a ďalej, došlo aj ku rehabilitácii forward renderingu /varianta tiled based aka forward+/, stále na tom istom HW /!!/, až sa dostávame ku nášmu milionárovi. Absolútna novinka.



podobne ako deferred versus forward aj pre clustered vs deferred platí, že novší postup je vyhodnejší pri väčšom objeme dát, vyššej komplexnosti scény /tj. hry konzol ďalšej generácie/

Clustered Deferred a Forward Shading /technologické video má trochu problém, občas to nejde/. Cluster - zhluk, strapec, vytváranie skupín objektov s podobnými vlastnosťami /napríklad rovnaké 3D koordináty alebo normála/ čo sa podobá na tiled riešenie spomínané vyššie, ten však pracuje čiste v 2D súradniciach. Jeden rozmer navyše pri cluster móde výmenou za mierny nárast počtu kalkulácii prináša celkové zlepšenie výkonu až o 2-3 rády. A teda milióny svetiel na scéne. Fintou je aplikácia "zmeny" akou je aj optimalizačný back-face culling na celý 3D cluster v jednom cykle ak sa spĺňa lokálne kritéria dané enginom. Oproti dnešnej tiled-based deferred špičke /frostbite engine/ si cluster riešenie počína aj ďaleko lepšie pri riešení worst case scénárov. High-frequency geometry with large discontinuities in depth - v reči bežného človeka - pozeráte sa na vysoko fragmentovanú, detailnú komplexnú scénu s početným prekrývaním sa geometrie a drobnými detailami. Proste husté konáre za sebou stojacich stromov v zime na ktoré čumíte cez pletivo plota. Do budúcnosti sa chcú ešte pohrať s heuristickými algoritmami /+20% výkonu/, ktoré už pracujú s grafikou vyslovene na "nevedeckom" základe /intuícia, skúsenosť, odhad, "zdravý sedliacky rozum"/ podobne ako váš antivirák, ak mu tento spôsob hľadania škodlivého kódu /alebo pixelov, ktoré nie je nutné "tieňovať"/ umožníte.