4. 9. 2014

Krajina, kde zajtra už znamená včera


Roky som bol veľký fanúšik počítačovej /hernej/ grafike - softvérový rasterizér, farebná grafika, ASCII grafika, rozlíšenie väčšie ako 256x192 pixelov, SW/HW sprajty, HW skrolling, blitter, HW T@L, bilineárne filtrovanie, programovateľné shaders, post-AA, screenspace "raytracing", SSAO atakďalej. Tieto časy sú už definitívne preč. So skutočne trpkým sklamaním sledujem desiatky stratených rokov, tu neskutočnú masu energie stále vkladanej do grafiky a iba do grafiky. Ona sama predsa predáva hry /a drahý PC HW/, však. Chystaný Bloodborne PS4 je teda iba krajšie Nightmare Creatures pre PS1 a Black PS2 si pocitovo-strelecky pohodlne vytrie zadok s Killzone:SF pre PS4. Reagujem teda článkami o grafike už iba na podstatné, prevratné zmeny, ktoré sa udejú. The Tomorrow Children /Q-Games/ tou paradigmou síce nie je ale spĺňa kritéria na point of no return udalosť. Poďme ale poporiadku.

James McLaren - 20 ročná prax, toho času šéf progiš v Q-Games, len tak mimochodom pracoval s tou istou firmou aj na OS grafike starej PS3. Už na začiatku roku 2012 ich grafici v aplikácií Octane renderer vytvorili pracovný koncept grafiky pre novú PS4 hru /viď obrázok nižšie/. Octane je inovátorsky tým, že ide o GPU renderer /a pokiaľ viem iba na Nvidia grafikách/. Je veľmi rýchly, technicky ide raytracing a radiositu, teda globálnu ilumináciu v "reálnom čase". Áno, v tom video bola použitá quad SLI NV Titan zostava /cirka 20 TFLOPs výkonu/ a spracovanie jedného frame stále nejakú tú sekundu trvá. My však chceme, aby nám to na PS4 /nie viac ako 2 TFLOPs aj s ACE/ zvládla presne v tejto kvalite a minimálne na 30fps v 1080p. Spoiler -  v celom rozsahu sa im to podarilo, aj s patričnou rezervou do budúcnosti. Dnešné, stále ešte super moderné, Tile-based deferred alebo forward PLUS shading/lighting engines pritom na podobný výsledok s použitelným framerejtom rozhodne nestačia. Muselo sa vymyslieť niečo úplne nové.

koncept grafiky hry The Tomorrow children /Octane renderer/

V tomto konkrétnom prípade ide vlastne o to, nájsť čo najrýchlejšie a pritom dostatočne presné riešenie pre globálnu ilumináciu /GI/. A pretože sa s týmto pojmom budeme stretávať v ďalších rokoch na dennej báze, tak to veľmi jednoducho vysvetlím aj pre laikov medzi nami. Situácia. Je úplná tma a vo svojej izbe zapnete lampu /vaše oči vidia iba vďaka odrazenému svetlu, vždy teda potrebuje istý zdroj žiarenia/. Vzápätí sa fotóny rozbehnú po cimre, odrážajú sa, lomia, pohlcujú až do úplne absorbcie v materiáloch. Pritom produkujú všetký tie svetelné a tieňové fenomény. Odlesky, lom, rozptyl, mäkké tiene, svetlo aj pod posteľou, kde sa priamo dostať nemohlo ale viacnásobným odrazom /bounce/ bez väčších problémov. A toto je vlastne to, čo sa snaží v našom prípade herná GI napodobniť. Je to príšerne komplikované, neuveriteľne náročné na systém /ALU, pamäť/. Neexistuje jedno zázračné "globálne"  riešenie, rôzne tímy majú rozpracované všemožné postupy ako výpočty urýchliť. A všetko nám nesmierne komplikujú pomalé CPU a hlavne archaický dizajn našich GPU /polygon-rasterizácia/, ktorý sme zdedili od tých úplne prvých grafických kariet.

Čo teda máme. Unreal 4.x engine spopularizoval SVOGI /Sparse Voxel Octree Global Illumination/. Geometria scény sa virtuálne voxelizuje, hierarchizuje a svetlo sa snaží maximálne znížiť-optimalizovať počet nutne spracovaných vzoriek. Výsledky sú opticky výborne, bohužiaľ nároky na HW neúnosne vysoké, jedna NV Titan je skutočne iba sociálne minimum. Vývoj však nespí. VCT /Voxel cone tracing, zhodou náhod opäť Nvidia/ nie je až tak presný a treba poriešiť niektoré nové problémy, je však omnoho rýchlejší. Pre low-end PS4ku ale stále nepoužiteľné. Potrebujeme super optimalizované riešenie, 100% natívne pre AMD GCN 2.0 architektúru upraveného PS4 GPU.

SONY ponúklo jeden nápad /strana 50/ a Q-Games sa nakoniec našlo v technike Cascaded Voxel cone tracing s využitím 3D textúr plus akcelerácia hardvérovým PRT, paradoxne s využitím rasterizácie a dokáže to 3-bounce odraz svetla. A to je v hernej aplikácií svetový rekord, o svetelný rok pred GI v Crysis 3 od Cryteku. Ten Octane obrázok hore teda PS4 teraz pohodlne dá priemerne na 30-40fps v 1080p. Ako vidíte James pri programovaní nového prevratného grafického enginu až tak naslepo nešiel, "stačilo" to iba dať dokopy z dostupnej bohatej dokumentácie a mohutne optimalizovať, ako je už na konzolách dobrým zvykom. Prvé ich prototypy boli pochopiteľne stále veľmi pomalé a museli vymyslieť množstvo zlepšovákov vrátane veľmi aktívneho /de fakto povinného/ využitia ACE enginu PS4 GPU, ktorý patrí medzi svetovú špičku a výrazne prekonáva jeho variantu v Xbone. Čo je vlastne to ACE tu vysvetľujem už po desiatykrát, ide však o srdce PS4 GPU, takže na to idem ešte raz.


Tie svetlo modré bazmeky v ľavom, hornom kvadrante sú naše SIMD GPU jednotky /GPU subprocesory alias ALUs, PS4 ich má vyše 1100/. Proste mnohopočetné a vysokotaktované vecičky, cez ktoré preženiete svoj shader kód /jeho výstupom je more pixelov o nejakej hodnote-farbe na istej pozícií frejmu, proste "grafika"/. Čas teda beží /ľavý, dolný kvadrant/, SIMD makajú - ako vidíte, nie všetky a nie vždy. Grafická pipelajna nie je len o práci ALUs ale aj o rasterizačnom module, vtedy majú ALUs občas aj milisekundu pauzu. A navyše rasterizačná časť to často sama hrubo "nestíha", lebo tranzistory sa prednostne strkajú do ALUs, nie do ROPs, TMUs - takže vertex setup, ROPs/fill rate, texture filtering jednotky nám to celé pozastavia, lebo potrebujú viac času na urobenie svoje práce. V pozadí je teda veľa voľných, nevyužitých ALU úsekov a o tie nám tu ide.

"Direct compute based graphics means  
it's not using the graphics pipeline, just the shaders."

Nastupuje ACE. Asynchrónny compute engine. Práve do tých voľných "dier" vkladá "prácu-jobs" - tie červené, zelené, žlté kocky, čo môže byť vlastne čokoľvek - AI, fyzika, audio a aj grafika. ACE časť PS4 GPU je veľmi premakaná, posilnená, rozšírená, vysoká granularita /ACE je schopné plniť aj "malé dierky"/ a PS4 GPU má dosť ALUs na to, aby sa vždy našlo zopár voľných, pracovných cyklov. Pri každej hre na PS4ke je vysoko odporúčané využívať ACE nadoraz. Je tu skrytý ohromný future-proof potenciál /okrem iného môže ACE grafika vo veľkom rozsahu obchádzať limitujúci HW rasterizér a správa sa vlastne ako softverová rasterizácia neobmedzená mantinelmi DX API či shader modelom, návrat ďaleko pred rok 1999 !!/. Keď svojho času tlusťoch GABE z Valve bojoval proti CELLu, tak netušil, že ACE a celé dnešné GPGPU je vlastne pokračovanie CELL filozofie - asynchrónne, heterogénne programovanie.

Medzi-zhrnutie. The Tomorrow Children /TTCH/ beží na prvej verziu home-made GI enginu, ktorý generuje mimoriadne dobre vyzerajúcu grafiku a zároveň firme ušetrí kopu peňazí /už plánujú mnoho vylepšení, hlavne sa chcú zbaviť screen space hackovania, dať tam menšie voxely, lepšie kaskády a bias priestoru či "dlhšie" tiene/. Doteraz ste sa museli hodiny ručne hrať s množstvom pseudo GI grafických fines, ktoré TTCH generuje automaticky, lebo sa snaží o čo najvernejšie simulovanie správanie svetla a jeho interakcie s materiálmi. Prirodzené nasvietenie, odlesky, skutočné zrkadlové odrazy, mäkké tiene teda vznikajú samé od seba a nepotrebujú tam lepiť fake shadow mapy, stovky light máp, IBL GI probes, baked statické tiene. Všetko to strašne prácne ladenie herných asetov, boj s materiálmi, zakázanie zmeny denného cyklu - lebo to situáciu nemiestne komplikuje. 

Záver číslo jedna - dobrá GI /kvalita, rýchlosť/ = skvelý vizuál, ktorý "predáva", menej zbytočnej práce, ktorú si malý dev tím aj tak nemôže dovoliť, viac času na art ladenie a samotnú hernú mechaniku. Záver čislo dva - práve hry ako táto neúprosne končia éru, dnes už tragicky nepoužiteľnej kombinácie polygón-rasterizácia. Hľadáme nové výkonnejšie grafické primitívum /pixel, čiara, trojuholník, voxel .. čo ďalej? - každé z nich vlastne definuje, nielen ako to vyzerá, ale aj čo si vaša 2D, 3D, voxel hra môže technicky, herne dovoliť/. Ideme teda smerom sledovania lúča /tisíc variánt raytracingu/, obchádzanie klasickej rasterizačnej cesty /direct compute, ACE, GPGPU/. TTCH používa hybridný engine /nie je to ešte zďaleka tak elegantné riešenie ako by chceli/ - inak sa spracováva statická časť scéna, inak dynamické objekty. Celou pointou tohto článku však je, že tu došlo ku vytvoreniu kompletne novej grafickej pipelajny, virtuálnej /existujúcej iba v SIMD poli GPU/ a časom - v ďalšej generácií konzol by malo dojsť ku jej pretaveniu do HW podoby. Hardvér, ktorého vnútornosti budú mať máločo spoločné s dnešnými GPU /zatiaľ sa nenašla odvaha u PC výrobcov na opustenie klasickej cesty - polygón a rasterizácia, tým hýbateľom pokroku bude opäť nejaká hra-hry na konzolách !!/.
----------------------------------

Zámerne som sa zatiaľ nijako detailne nevenoval techno geek rozboru samotného Cascaded Voxel cone tracing "3- bounce" enginu. Nič vám to totiž nedá, ani pri ferrari sa nepýtate na zloženie pigmentov, z ktorých je vytvorený jeho lak či parametre striekacej pištole. A úprimne vám hovorím, kašlite na kecy okolo grafiky. Jasná konšpirácia. Firmy /soft, či HW/ dobre vedia ako vás zmanipulovať, aby ste rozmýšlali a strácali čas nad blbosťami a príliš sa nešpárali v tom, že herný vývoj už 15 rokov stojí na mieste. Bloodborne je PSone hra. S veľkou slávou PC hráči masturbujú nad cryengine grafikou a mega rozpočtom Citizena, pritom im uniká fakt, že tá hra stále nezvláda herne, to čo oveľa staršie ELITE na 16 bitovej amige. Takže áno - to 100 stranové, komentované pdf o voxel kaskádach je lahôdka a sú tam použité rafinované, optimalizačné postupy. Bežného hráča by to už ale malo zaujímať rovnako ako podobný elaborát o práci kameramana, zvukára a strihača v nejakom mukačevskom ukrajinskom porne. Ale keď inak nedáte.
 
Cone tracing - namiesto miliardy tenkých sledujete malý počet "tlustých" raytrace lúčov /navyše sa ich výsledky čiastočne zdieľajú, recyklujú, ak je medzifrejmový rozdiel veľmi malý/, voxel = 3D pixel, grafické primitívum s diametrálne odlišnými vlastnosťami ako otexturovaný polygón /hierarchizácia statickej geometrie/, so základnou sieťou voxelov sa v TTCH ďalej nepracuje ako so sparse voxel octree stromčekom /na PS4ke pomalé/ ale sa to konvertuje do 3D textúry /kocka z mnohých vrstiev, až 600 megový texture buffer v GDDR5/ a na akceleráciu tej kopy pixelov použili okrem iného AMD novinku - PRT /partially resident textures/ hardvér. To nás síce posúva ku rasterizačnému modulu ale nezabúdajte, že špecializovaný HW v PS4 GPU pre raytracing, voxely tam proste nenájdete. Cascade - istá forma mipmapingu a teda redukcie množstva dat, 3-bounce znamená, že engine simuluje tri postupné odrazy fotónu na scéne /2 pravé + 1 aproximovaný fake/. Bežné herné GI si vystačia s jedným a aj to iba pre hlavné direct svetlo /slnko/, drvivá väčšina enginov za posledných 5 rokov dokonca nemá ani to, iba sa tam ručne nahodí nejaký ambientný odhad napatlaný grafikom. ACE sa správa ako druhé GPU a majú tam plnú prdel screen space grafiky pre objekty - typicky napríklad panduľák alebo iné malé detaily, ktoré ich world space voxel raytracer toho času neutiahne, lebo končí asi pri "40 centimetrovom" voxele, aj toto chcú časom zmáknuť - voxel brick. Uráaa, za rodinu.

Myslím, že tieto technické a nudné informáce vám už musia na dnes stačiť, v budúcnosti sa bavme hlavne o next gen hernej mechanike, aby mi brada nepadala od nudy pri pohľade na dnešné "teh 8 giga GDDR5" hry. Voliť treba proste peňaženkou. Vývojári skočia po tom čo sa predáva. Trend. A hej - ak vám to nebo v TTCH príde smutne šedivé ako mŕtvý kanál CRT telky, tak neprepadajte panike: "There will be plenty of skyboxes in the release version. That's the easiest thing for us to add to, so we will also be updating with different weather and lighting conditions and the like after we launch. We have some amazing sunsets in our latest builds already." Pokurvená grafika a sme opäť v tom.