27. 6. 2019

Menej je niekedy viac a ako veľa je už dosť


Pri novom grafickom engine pre chystaný, najnovší diel Call of Duty som zachytil tieto kľúčové slová: PBR – physically based rendering /denná rutina, nuda, matematický model interakcie svetla s materiálom/, photogrammetry /módny hit, špeciálna technika skenovania real life textúr s rešpektovaním PBR/ a nové výrazne efektívnejšie spracovanie geometrie scény /pod čim si predstavím hlavne kus poctivého kódu tzv. occlusion culling algoritmus/. Venovať sa budeme tej geometrii a čo znamená culling polygónov sa hneď dozviete.

Dnes sa totiž COD dev tím pochválil, že zatiaľ čo v starších dieloch ich engine zvládol asi 3 milióny polygónov na frame, po novom to bude bežne 16-17M per frame. Čo je teda vážne dosť a v maxime utiahne aj 24M. A to je už čistý next gen triedy Playstation 5, či ako to vlastne je ? Herný frame o full HD rozlíšení 1 920 × 1 080 pixelov má cirka 2 milióny obrazových bodov a pri 24M polygónoch na frame je "za každým pixelom" technicky ukrytých 12 polygónov /overdraw/. Ide teda o masívny výkon a veľkú rezervu pre prípadné alfa efekty /okná, hmloviny, výbuchy, oblaky, stromy, tráva, voda/.


1000 polys na frame /30fps/ stačí na Qvák wannabe grafiku

Samozrejme, nie každý objekt-polygón-vertex sa prebojuje až na obrazovku. Ak je náhodou časť hernej scény zakrytá nejakým oklúderom - panduľák stoji za tankom a tank zakrýva váš výhľad, je vašou povinnosťou sa tých "zakrytých" polygónov zbaviť - teda ich culling na základe oklúzie /tiež všetky odvrátené strany objektov - backface culling alebo "to" za okrajom monitoru - frustrum culling/.  Ak sa odstránite tie, ktoré nevidíte, šetríte GPU a tá toho utiahne oveľa viac. Herné enginy tento problém riešia od veky vekov, je to ich pevnou súčasťou /aj toho vyššie na Saturne !/, dokonca si môžte kúpiť celý balík ako je Umbra, ktorá to urobí za vás. Witcher 3 to urobil presne takto. A každé GPU sa snaží aj o nejakú základnú formu podpory na HW úrovni /via Z-buffer, depth buffer, iks HiddenSurfaceRemoval variánt/.

Všetko pekné,  ale to čo som doteraz napísal sú už dávno prekonané, zastaralé prdlačky. Stále tie nekonečné polygonové stripy pre GPU musí pripraviť CPU, na ktorom zároveň beží ten super sofistikovaný occlusion culling kód. Mimochodom práve to bola veľká časť práce SPE jednotiek v PS3ke, aj takto pomáhali RSX GPU. Pravé next gen riešenie od Nvidie pritom existuje už nejaký ten rok ale pretože PC GPU mainstream je hardvérovo o pár poschodí nižšie, tak to celé leží ladom.

VS/GS/HS/DS

Nvidia. Oni dobre vedia, že sa blížime ku limitom klasických polygón mesh povrchov /vertex, geometry, hull, domain shader/ s akými ťažkosťami sa potýkame pri manipulácii s nimi a že chudák CPU za to nemôže. Takže tu máme úplnú novinku a tou je MESH shading. Nahrádza všetko to staré, všetky tie skratky v titulke kapitoly a ide o skutočne revolučnú, next gen techniku. A mimochodom to beži komplet na GPU vrátane generovania "CPU" display listov, cullingu, tesselácie a LOD manažmentov. V jednej RAM a bez pendlovanie po zberniciach. Je za tým kopa práce a je to úplne prevratné. Totálne programovateľne, autonómne geometrické operácie bežiace na GPU. Dav teraz kričí - chceme ukážku Nvidia a nech to fičí.



Prosím - cirka 50 000 000 polygónov na frame po vyradení tých, ktoré nemáte vidieť. Bez námahy, bez asistencie CPU. Teraz ešte musíte vymyslieť kvalitný LOD /level of detail/ systém, lebo šuter je až príliš detailný čo v ďiaľke nepotrebujeme a nutnosť mať vysoký počet LOD úrovní zas prináša iné nevýhody. Riešením je systém on-the-fly Continuous Level Of Detail generation. O tom určite inokedy, keď sa potvrdí, že PS5 GPU podporuje primitive shader a primitive discard akcelerátor vyššej triedy a je aj správne implementovaný. Proste to isté čo už má Nvidia.V špičkovej PS5 hre, aj tak je to už jasné, vás bude čakať neuveriteľný nárast "fyzickej" geometrie /polys/, kvality textúr /rozlíšenie, počet/, komplexnosť shader kódu /rasterizácia na úplnom olympe/. Proste sa opäť musím vrátiť k tomu Unity Heretic tech demu, tak. A raytracing ste zatiaľ ešte ani nespomenuli.