16/06/21

Konzoly - optimalizácia HW jeho úplným ignorovaním

Grafická karta Voodoo 1 od 3Dfx bola jedna z prvých, výborných a cenovo dostupných 3D akcelerátorov na trhu. Čo ma zmiatlo bolo to označenie 3D akcelerátor. Už som vtedy čo to o grafike vedel a čakal som HW podporu pre spracovanie geometrie a nasvietenia, aby sa odľahčilo CPU. Voodoo 1 však nič také neobsahuje. Akceleruje proces rasterizácie, čo je niečo úplne iné a nejde primárne o nejakú 3D grafiku. Proste marketingové hry, lepšie to na krabici vyzerá. Rasterizáciu dovtedy robilo tiež CPU a ide vlastne o projekciu herného 3D sveta na 2D maticu obrazovky. Príšerne komplikovaný proces náročný na pracovné CPU cykly. V HW podobe na GPU nespočetne krát priebežne masívne vylepšovaný. Ide o čiernu skrinku každého GPU. Posvätný blok silikónu, ku ktorému má prístup iba výrobca toho HW a poskytuje ho ako obetu bohom skrze ovládače ku grafickej karte. Manuálne prevzatie kontroly nad rasterizáciou je už roky tabu.

Ešte pred zopár rokmi napríklad Nvidia povedalo toto: "Rýchlosť spracovania vertexov na GPU teraz rastie rýchlejšie ako spracovanie pixelov a v blízkej budúcnosti očakávame nástup tzv. veľmi pokročilých geometrických algoritmov. Vylepšenia procesu rasterizácie ako je nový režim konzervatívnej rasterizácie umožní okrem iného aj rýchlejší nástup raytracingu a globálnej iluminácie." Dnes je však realita dramaticky odlišná. Epic hovorí, že HW rasterizácia je mŕtva a je na otázka dňa, či ju nevypustiť z návrhu dizajnu budúcich GPU úplne a neinvestovať takto uvoľnený silikón na užitočnejšie veci. Softvérový rasterizér Epicu bežiaci na GPU v UE5 je totiž v priemeru o 300% výkonnejší ako jeho HW konkurencia na tom istom GPU v ich konkrétnom engine. Ak teda v týchto podmienkach beží po PS5 GPU "novom" a NV 3090 po "starom", tak Nvidia skonči v poli porazených.

Raytracing. Často čítam herných laikov ako nadávajú na RT HW v next gen konzolách. Neberú ho vážne a podceňujú ho. Je možné ho "oklamať", zrýchliť podobne ako tú HW rasterizáciu ? Samozrejme, že áno. A nielen tak, že RT reflexie dáme vypočítať v 4 krát menšom rozlíšení a rozdiel do vyššej kvality získame napríklad CB /checkerboard/ upscale algoritmom ala Ratchet pre PS5 alebo nám pomôže rasterizácia pre časti obrazu, kde sa dá použiť "screen space" pracovný priestor alebo traceovanim lúčov proti silne zjednodušenej proxy /zástupnej/ geometrii skutočných objektov ako to robí aj UE5 a mnoho ďalších. Ukážem vám jeden luxusne didaktický príklad ako postupovať pri RT HW konzol efektívne, so zdravým sedliackým rozumom.

Tiene. Tie veci, ktoré vznikajú, keď do cesty fotónom vstúpi nejaký objekt a nastane ich oklúzia. Priame tiene, ak medzi zdrojom a tieniacim objektom sa už nič okrem vzduchu nenachádza a nepriame, keď tieň vznikne cestovaním lúča, ktorý sa už minimálne raz niekde odrazil. Je teda výrazne oslabený, farebná hodnota/energia môže byť zmenená a roztyl na hranách tieňa už značný. Výpočetne náročnejšie /tzv. AO, ambientná oklúzia/. Rasterizované >priame< jasne viditeľné tiene boli v hrách vždy jedným z klasických problémov. Tragické rozlíšenie /shadow mapa je textúra a kvalita sa rovná obrovské objemové nároky/, stabilita, vykresľovacia vzdialenosť, uhlové artefakty. RT tiene to všetko elegantne riešia ale sú zároveň minimálne o rád pomalšie. Čo s tým ?

Použijeme Toy Engine /na ilustráciu, bezvýznamný, multiplatformový engine/, Intel HD 4000 laptop, ďalej klasickú scénu na testovanie grafiky - Sponza Atrium. Všetko v rozlíšení 1280×720 pixelov. Najprv tam hodíme tieň získaný bežnou rasterizáciou s tieňovou mapou o bežnom rozlíšení 1024x1024. Sledujte nižšie na obrázku obrysový tieňový aliasing. Zubatosť je značná, aj keby ste dvihli rozlíšenie tieňu na 4K. Objem dát ide strmo nahor. Náš intel laptop tie 1K tiene dáva za 3.7ms. Obratená hodnota lomeno 1000 sa rovná 270 fps. OK. Teraz raytrace podoba v podobnom rozlíšení. Tieň je peknučký a čo nie je na statickom zábere vidieť, tak je aj extrémne stabilný, bez ohľadu na uhol pohľadu, sklon normál povrchu alebo vzdialenosť. Doba renderingu je 92.2ms a teda 10.8 fps. Koniec rozprávky, ten HW na to naozaj nestačí, alebo ?

vľavo "škaredka" 1K tiene ako bežné shadow mapy /rasterizácia/, vpravo krajšia raytrace verzia

Alebo zapojíme mozog a znížime renderovací čas RT tieňov na nejakých 13 ms /77 fps !!/ s prakticky úplným zachovaním kvality RT tieňov, aj keď pôjde o rasterizačne-RT hybrid techniku. Ako sme to urobili ? Ak si ešte raz pozriete vyššie ten raster a RT tieň, tak spoločný prienik majú v tej čiernej mase v strede tieňov a líšia sa kvalitou na ich okrajoch. Myšlienková konštrukcia. Čo tak nechať rasterizáciu vypočítať ten "stred" a RT HW aplikovať iba na "okraje" ? A to je aj správna odpoveď. Zníženia počtu pixelov /trojuholníkov/, ktoré musí RT HW otestovať klesne dramaticky a simultánne s tým stúpne výkon. Asi vás neprekvapí, že keď na to príde jeden šikovný kóder, tak to objavia časom aj ostatní.

 maskovanie okrajov tieňov, to "biele" má na starosti HW RT a finálna hybridná raster-RT kompozícia

A presne to sa aj stalo a AMD to dokonca oficiálne ponúka ako vhodné riešenie pre rýchle a kvalitné tiene. Morálne ponaučenia, ktoré z toho vyplýva je - vždy sa to dá urobiť lepšie. Epic v UE5 je prvý pokus veľkej firmy o zásadné, "softvérové" prepracovanie klasickej HW renderpipeline cesty GPU, ako ju poznáme desaťročia. Ich softvérový rasterizér a raytracer sú mimoriadne výkonné. GPU v PS5 a XSX sú prvé také komerčne dostupné a masovo rozšírené mašiny, ktoré takúto bezprecedentnú flexibilitu umožňujú aj prakticky v hrách. Vo veľkých AAA hrách, nie ako malé cvičenie doma na PC pre projekt na vysokej škole. Práve next gen konzoly odpália renesanciu nového programovania s presahom do ďalšej generácie, kde sa už budú žať úžasné plody tohto základného výzkumu. Naivný "brute force" postup nevedia nikam ako ukázalo HW riešenie úplného RT v Cyberpunk 2077, ktoré zloží Nv 3090 pri 60 fps do rozlíšenia pod 900p. Chce to použiť filipa. Neupgrejdovateľné 200 wattové konzoly to opäť zachránia.

4 comments:

  1. Možná se časem dočkáme nějakého hybridního CPU/GPU v jednom pouzdře, co bude plně programovatelné GPU a zároveň bude suplovat CPU :-)

    ReplyDelete
    Replies
    1. to je možna ten Nvidia ARM bazmek

      Delete
    2. ... uz sa stalo pred 10 rokmi .. projekt Larrabee - https://en.wikipedia.org/wiki/Larrabee_(microarchitecture) .. je to "nieco" ako CPU/GPU hybrid s plne programovatelnou architekturou .. monstruozne vypocetne pole, kde mozes zavesit cokolvek .. soft renderer, rasterizer, raystracer, AI modul, fyziku.
      ... vtedy to prepadlo, bolo to este priskoro a dnes sa k tomu uz otacame celom.

      ... ten clanok, to som povedal A .. ale treba povedat aj B .. jasna dosledky a tu sa dostavam k tomu co predpovedam tiez uz vyse 10 rokov .. napisem skoro.

      Delete
    3. odkaz .. skusam hypertext lebo vidim, ze blogger sam nezalamuje ..

      odkaz

      Delete

**** pre vloženie hypertextového odkazu do komentára použi CSS kód: hyperlink ****