1. 4. 2020

Vpred ku krajším interaktívnym zajtrajškom !!


V temnote bežiacej COVID-19 epidémie, ktorá ak by nebola vôbec kontrolovaná, zabije viac ľudí ako druhá svetová, hráči pochopiteľne myslia stále iba na seba. Aspoň niekto neupadá na duchu. Na fórach sa objavujú zbožné prania, aby SONY odložilo štart PS5 hoc aj o rok a medzitým navýšilo jej výkon. Tento scénar sa určite nenaplní. Zmena celej matičnej dosky od APU po chladenie, softvérové SDK a nové kolo testovania, proste nie. A nasratí akcionári. Ide sa podľa starého plánu a pri očakávanom ekonomickom kolapse minimálne v európe bude dôležitá cena, nie výkon konzoly. Analytici predpokladajú, že SONY chce predstaviť PlayStation 5, teda to ako fyzicky vyzerá, koľko stojí, konceptové "wow" videá a herné next gen ukážky všetko naraz na jednej akcii.

Rovnako tvrdia, že počas tejto prezentácie s pokorou pochopíme, že hanba, ktorá vznikla pri porovnavaní TFLOPs výkonu medzi PS5 a XSX /cca 10 vs 12 teraflops/ sa "vysvetlí" po predvedení špecifických vylepšení najnovšej RDNA2 GPU architektúry, kde SONY podľa M. Cerny s AMD veľmi tvrdo zamakalo. A potom pochopíme, že obavy o výkon  a budúcnosť PS5 boli zbytočné. Nielen rozlíšením a počtom snímkov za sekundu je totiž človek živý. Večné skuhranie o mizernej hernej interakcii, herná mechanika ala PS1, na ktorej sa nič za 25 rokov nezmenilo. Náprava tohto stavu od nás chce úplne prekopanie spôsobu práce s objemom /mesh-polygóny, voxely/ a povrchom /pixely/. A toto presne aj dostanete.

“Some of these features will appear in AMD’s desktop GPU’s and APU’s one day, but they are features we co developed with them.” - Mark Cerny o rozšírených možnostiach PS5 GPU.

Vec sa má tak, že už na PS4 sa experimentovalo s nahradením defaultnej HW rasterizácie ručne písaným kódom bežiacim priamo v compute shader časti GPU. Manipulácia s pixelmi na úrovni softvérového renderingu ako v ére, keď všetko bežalo na CPU a GPU bola iba kus VRAM a nič viac. V tomto sa bude pokračovať aj na PS5 ale pribudne tam úplne nová možnosť manipulácie s geometriou, s vertexami /prenesene polygóny/ novým revolučným spôsobom. MESH shader - takto to volá Nvidia, AMD to nazve inak. Navyše je priamo naviazaný na razantné zvýšenie interakcie so scénou. Veľmi žiadúce.

Niekoľko čísel z vlastnej hlavy. Obraz s rozlíšením "4K" teda 3840 × 2160 je 8.3 miliónov bodov x 120 fps = 996 Mpix teda 1 miliarda pixelov krát desaťnásobný overdraw /veľa transparencií - sklo, výbuchy, partikle, voda, lístie, tráva/ je 10 miliárd farebných bodov za sekundu, ktoré vaše GPU zo seba musí vytlačiť. PS5 GPU bude mať fillrate minimálne 140 Gpix/sec. Zdá sa teda, že buď pracujeme so značnou rezervu alebo je grafická pipelajna neefektívna a ide o jalovú redundanciu. Je verejným tajomstvom, že vývojár trávi mnoho času práve optimalizáciou toku dát, aby do rasterizácie nešli dáta, ktoré vy ako hráč neuvidíte. Grafická pipelajna totiž sama o sebe až taká múdra nie je a ochotne a neefektívne spotrebuje všetky vaše gigapixely. Toto chce zmenu.

dnešné GPU sú veľmi silné v statickej geometrii, avšak nemohúce v dynamickej

Grafika hry funguje aj bez textúr ale nie bez polygónov a "vertex stage" spracovania grafiky aj na GPU za 2 litre pracuje groteskne neefektívne. Ide to asi takto. CPU so 16 jadrami dá dokopy kus geometrie, tie polygóny z jedného jadra /sic/ strčí do VRAM, odpáli draw call - informácia pre GPU o kvantite a kvalite toho objektu. GPU pribehne a začne tie grafické primitíva po jednom /sic/ sŕkať brčkom do vertex shaderu grafickej pipelajny, následne sú rasterizované, teda transformované do zobraziteľnej podoby na 2D obrazovky. Každý jeden draw call stojí CPU istý veľmi vzácny čas, takže sa to časom optimalizovalo do nemoty, aj preto lebo sme z jednojadrových procákov postúpili až ku 8-16tim. Rovnaké zmeny nastali aj na strane GPU, lebo jedno jeho CU /compute unit/ má pri AMD až 64 SIMD jednotiek, takže sme paralelizovalo aj to. Išlo však o beznádejné látenie, plátanie neopraviteľného a nemiestne predlžovanie, zahusťovanie grafickej pipelajny.

Indexovali sme polygóny pre možnosť recyklácie ich vertexov v lokálnej GPU keške. Komplexné vertex stream formáty, samozrejme multi draw calls a nepriame draw calls generované GPU bez asistencie CPU. Hlavné vlákno GPU na spracovanie geometrie sme komplikovali pridaním geometry, hull, domain, teselácia shaderov aby sme získali možnosť manipulácie polygónov priamo na GPU. Časom zme zistili, že pre bežného progiša je ťažko povedať ako túto časť GPU riadiť, aby to bolo skutočne efektívne a rovnako rýchle na dosť odlišných architektúrach AMD, NVidia či PowerVR a mobilných SOC. Detailné analýzy aj tak potvrdili, že bez ohľadu na obrovskú snahu inžinierov grafických čipov a dizajnérov API je využitie moderného HW trestuhodne nízke. Veľká, obrovská časť výkonu letí hore komínom.

lepšie ale stále nie moderné, brute force prístup pomocou  i7-8700K + Nv2080

Po novom sa teda AMD a Nvidia rozhodli, že von oknom poleti všetko vyššie uvedené, "30 ročné" dedičstvo otcov, všetko preč - jednotlivé body spracovania polygónov, tieňovanie, fixed funkcií /teda skryté za API, manuálne neovladateľné/. Nahradi to MESH shader /termín Nvidia/, radikálne zjednodušenie, totálna flexiblita, plná programovateľnosť spracovania geometrie. Celá grafická pipelajna prejde do "compute shader like" programovacieho modelu. Preložené do ľudskej reči - vraciame opať raz ku kvázi "softvérového" režimu, ešte pred prvú Voodoo 1 a Geforce 256. Náznaky, že k tomu dôjde boli zjavné posledné roky aj v hrách, keď sa podľa možností GPU snažili progiši nahradiť, zrýchliť defaultnú grafickú HW pipelajnu presunom do ručne urobeného kódu bežiaceho na CU jednotkách GPU. Pri PS3 sa to robilo rutinne na SPE subprocerosoch CELL CPU, aby sa pomohlo RSX GPU.

Pre MESH shader /nová metodika, kde sa plánuje časom ešte väčšia univerzálnosť a zníženie počtu krokov, ktoré vertex musí podstupiť, kým nebude rasterizovaný/ je typická extrémne paralelnosť spracovania dát, novinka ako sú meshlets - rozdelenie 3D modelu na menšie primitíva, časom až na úroveň pixelu, čo veľmi vyhovuje dnešným GPU, vysoká granularita a utilizácia výkonu, čomu sa GPU opäť veľmi teší. Konverzia z štandardného "legacy" modelu do nového je relatívne jednoduchá a je dokonca možné medzi nimi preskakovať aj v rámci generovania frejmu obrazu. Luxus.

MESH shader teda zjednodušuje a značne /!!/ zrýchľuje staré veci. Čo tie nové ? Asi ste zistili, že ak v hre zapnete teseláciu povrchov, vlasy, chlpy, srsť, fyzikálne korektné šaty, tiež nejakú tú vodu čo tečie ako má a nie je len trápne animovaná, tak pri všetkom tomto vám dnes lepšie mainstremové GPU na úrovni Nv1070/RX580 hneď kľakne na kolená. V momente ako sa snažíte zobraziť niečo viac ako statickú geometriu, tak je rozprávke koniec.

MESH shader umožňuje bezprecedentnú voľnosť práce s polygónami s extrémne vysokou efektivitou ich spracovania na GPU. Môžem tu zo seba vychrliť ďalšiu A4 analytického textu ale kto by to čítal a stačí, keď vám poviem, že v technicky perfektnej hre by to mal byť rozdiel ako medzi hrubým papierovým  modelom auta a plne interaktívným Lego Technic monštrom. V hre budete mať generovanie dynamických normál povrchov, tangentov s korektným skinovaním, displacement mapovaním, Catmull-Clark delením povrchu a vertex animáciou na modele spolu s izo-povrchovou "marching cubes" extrakciou hmoty z meshu a generovaním kontinuálneho LOD, či voxel meshovanie priamo na GPU. Pod touto hromádkou technického nešťastia si predstavte panáka z vosku, ktorému strelím takú po papuli, že mu vytrhnem kus "mäsa" z tváre na zem a tá diera sa naplní krvou, ktorá bude rešpektovať topológiu lézie a po pretečení bude kopírovať povrch v smere gravitácie. Konečne pravé "next gen" interaktívne možnosti, ktoré si po desaťročiach stagnácie všetci zaslúžime.