27. 8. 2012

Unreal 4.x a PS4

Trpezlivosť. Na začiatku bolo slovo. A neskôr aj dvojrozmerná grafika alebo tá v 3D náročnejšia na systémové prostriedky. 3D rendering tak ako ho poznáme dnes bol pred mnohými desiatkami rokov plne a úplne pod kontrolou CPU. Transformácie, nasvietenie, rasterizácia, vykreslenie finálneho výsledku. Žiadna grafická karta, VRAM, GPU. Pixely išli z hlavnej systémovej RAM rovno na obrazovku. Stále majme na pamäti tu kopu práce, že sa vykresľovaný obraz musí prispôsobiť matrici obrazovky - raster, rasterizácia aka prevod grafických prvkov ako čiary, krivky, plochy do fyzických bodov 2D tienidla alebo LCD poľa. Navyše aj stransformovať a doslova orezať, zredukovať zobrazený priestor iba do časti ktorý vidíte vy ako pozorovateľ /screen space, view frustrum/ sediac za monitor. V podstate môžte každú z týchto operácii nejakým spôsobom iným čipom akcelerovať a teda zobrať z pliec CPU časť ťažkej práce.

A takto sme dostali urýchľovače vykresľovania čiar, vypĺňania plôch /aj polygónov ak chcete/ a prídali sme na rýchlosti aj pri transformáciach, nasvietení, rasterizácii, textúrovanií, "orezávaní" nepotrebných polygónov /clipping, culling/. Navyšovali sme počty spracovaných textúr na pracovný cyklus. CPU toho malo na starosti stále menej a menej. Multitextúrovania si časom vynútili zavedenie programovateľných shaders. To nie je nič iné ako kúsok kódu, ktorý vypočíta farbu pixelu podľa určených kritérií. Tých výpočtov boli niekedy stovky, dnes tisíce, zajtra desaťtisíce na každý jeden pixel obrazovky /na starosť to majú ALU jednotky, alebo mini stream procesory GPU/. Prí návrhu GPU sa vlastne šéf inžinier rozhoduje aké percento silikónu dáte výpočetným jadrám /ALU, shaders/ a akú vykresľovačom /ROPs/. Prvý vám zabezpečí úžasné efekty, druhý aj možnosť vysokého rozlíšenie /a množstvo tých efektov pri ich prekrývaní, transparencie/. V designe GPU sa dnes uprednostňujú skôr ALUs pred ROPs.

Podobne ako CPU aj GPU narazilo/narazí na fyzikálne limity, takže sa hľadali/jú cesty ako razantne zvýšiť výkon grafickej karty jej optimalizáciou. Existuje množstvo soft/HW riešenií. Jedným z nich bolo nahradenie pixel a vertex shaders unifikovaným shaderom. Predchádzajúce riešenie /vlastne aj RSX v PS3/ malo dve oddelené výpočetné polia s vlastnými inštrukčnými setmi a o rôznej komplexnosti /vyššia presnosť pre vertex jednotky/. Dnes vlastne pozorujeme, paradoxne, zjednodušovanie designu GPU čipov a ide to až tak ďaleko, že programátori žiadajú totálnu kontrolu na grafickou pipelajnou vrátane rasterizácie. Ide teda o návrat na úplný začiatok. Mimochodom programovací ultra low level prístup je na PC grafikách tabu. Intel, AMD aj Nvidia majú tri úplne odlišné programovacie prostredia na tejto "konzoláckej" úrovni a 99% úroveň PC warezu nemilosrdne neguje nasadenie takéhoto úsilia.

GPU sa nám postupne vlastne zmenilo na GPGPU - takmer na akési univerzálne CPU a zákonite aj s tlakom na nárast efektivity /viac efektov, pixelov, polygónov za tú istú cenu alebo po prepočte na watt, hlavne o mobilného HW/ sme sa dostali aj ku "ručne" riadenej kontrole grafického procesu vo všetkých jeho bodoch. Ide samozrejme o voliteľnú možnosť, určenú najmä pre špičkových progišov. Arma 3 tím si vystačí aj s pascalom, v ktorom sa dnes úspešne programujú práčky od whirlpoolu.

Konečne sa dostávam ku jadru veci. Prezentácia od EPICu s ktorou otravovali na prestížnom SIGGRAPHe 2012. Unreal 4 Emental demo. Je tam tuším 71 strán, ktoré vám zhrniem do niekoľkých viet. Predovšetkým ich grafický engine vychádza z posledných poznatkov SVO /Sparse Voxel Octree / designu scénu a urýchlenia spracovania svetla, tieňov alebo odrazov. Globálna iluminácia, zrkadlenie. Majú tam dosť teórie o tom ako túto techniku ešte viac zjednodušiť a teda aj zrýchliť pri zachovaní akceptovateľnej kvality. Nejde vskutku o nič prevratné, robí to aj kopa ďalších tímov /DICE, Crytek, Avalanche, Unigine/. Ide teda o kvalitu celého balíka. Unreal 4.0 ako all-in-one riešenie, to je zatiaľ vo hviezdach. Unreal 3.x bol strašný odpad.



Unreal 4.x - reflexie nemajú zďaleka presnosť ako pri raytracingu, herne to však bohato stačí

Najviac nás preto bude zaujímať jedná nenápadná vetička, hneď v úvode ich pédefka. Emental Unreal 4.0 demo bežalo na jednej NV 680 na 30 fps a ak tomu dobre rozumiem - po 90% času v 1080p rozlíšení s FXAA. V preklade to teda znamená, že toto nenažraté ninja GPU by napríklad pri použití 8xMSAA padlo tvrdo na 720p/30fps režim. Možno menej. Vieme, že PS4 nedostane GPU tejto výkonnostnej triedy /250 watt a viac/. Dôjde ku zníženiu počtu ALUs, zníženie počtu ROPs, zníženiu šírky zberníc, zníženiu rýchlosti pamätí a aj ich veľkosti. GPU v PS4 bude v hrubom výkone minimálne o 250% pomalšie ako jeho PC originál z ktorého bude derivovaný a to som veľký optimista.

Za takýchto okolnosti je doslova vylúčené dúfať v niečo iné ako v 720p+/30fps/FXAA hry pri takto náročnej grafike. A to bez ohľadu, na to, že PC GPU "bez redukcie" v prostredí konzoly podáva o 100% vyšší výkon ako to isté GPU v PC krabici /je to spôsobené okrem špeci režimom programovania, špeci DX-OGL API konzol aj príšeným batch-draw calls indexom X86 architektúry/. Takže naposledy. Typická, dobrá PS3 hra s veľmi bohatou grafikou pobeží s dynamickým framebufferom per frame /720-half 1080-1080p/ na 30fps s málo zaťažujícim softvérovým AA /vylepšené FXAA a varianty/. Iste tu bude viac 60 fps hier ako na PS3 a tiež výrazne menej sub 720p hnusu. Ale to je asi tak všetko, nemôžte žiadať od 90 wattovej PS4 grafiky ten istý výsledok ako od 250-300w PC GPU sračky /90w PS4 GPU však hravo a rozdielom dvoch tried prekoná 90w PC GPU /, duplom ak nám teraz žiaden super výkonný CELL v2.0 nepomôže.