29 Dec 2020

Hybridný rendering - rasterizácia/raytracing

Bude to pravdivý príbeh so šťastným koncom a určite príde aj spiderman. Rasterizácia je viac "umeleckou licenciou" vedená tvorba hernej grafiky. Všetko to svetlo, odlesky, tiene, polotiene, odrazy sú tam, kde si vy ako autor myslíte, že by mali byť, alebo kde ich úmyselne chcete mať, aj keď fyzikálne nekorektne. Desať hier, desať rôznych autorov a enginov, desať odlišných vizualizácií tej istej scény napriek tomu, že ste použili identické objekty a materiály. Raytracing funguje už z princípu úplne opačne. Algoritmus výpočtu všetkého je vo všeobecnosti exaktne presný a všetci dosiahnu na pixel ten istý výsledok. Líšiť sa musíte objektami, kompozíciou scény, materiálmi. Neberte ma ale doslovne, aj výstup pri raytracingu môžte individualizovať do nepríčetna. V jadre je však raytracing matematika a rozum. 

Dreams - softvérový /GPU ALU compute/ rasterizér bez polygónov

Rendering v reálnom čase bez klasickej rasterizácie sa už dnes používa na platforme Dreams /PS4, PS5/. Hra nepoužíva ani štandardné mesh-poly objekty. Všetko je SDF /signed distance fields/ geometria a raymarching, ktorý používa SDF na akceleráciu výpočtu putovania lúčov "svetla". SDF je kompletne nová paradigma riešenia hmoty objektov /plne deformovateľných/ a nasvietenia scény. Aj základná PS4 zvláda slušne túto metodiku čiste na "softvérovej" báze, teda CPU plus ručne stručne nakodovaná alternatívna compute render pipelajna na GPU. SDF je iba jeden z postupov, jedna cesta ako sa zbaviť limitujúcej rasterizácie na trojuholníkoch. Zatiaľ nevieme, ku ktorej alternatíve sa v ďalších 10 rokoch postupne grafický hardvér hlavných hráčov prikloní. Predbežne sa opatrne začína budovať isté HW zázemie pre zrýchlenie niektorých krokov overeného raytracingu a výrazne sa zefektívnila tvorba vlastnej renderovacej cesty na GPU, obidením defaultnej s plnou HW podporou ala spomínaný Dreams /alebo Claybook/.

V prechodnom období ku plnému raytracing /globálne nasvietenie, "všetky tiene", reflexie, kaustika/, kde sa dostaneme tak do 10 rokov, si užijeme hybridných postupov rasterizácia-raytracing šitých presne na mieru HW /nemáte ani predstavu ako veľmi dôležité je to spojenie - presne na mieru/. Ak hovoríme o konzolách, tak zabudnite na PC DirectX rozhranie /DXR/. Aj na tom bežnom hernom PC s lepším intelom a starším GPU Nv 970 je však možné vydolovať výkon, ktorý by ste tam nečakali. O tom trochu neskôr. Volíme teda hybridný rasterizácia/softvérový raytracing postup čiste na CPU a non-RT GPU. Sledovanie lúča pôjde v prvej fáze cez rýchlu rasterizáciu /určenie prvého ray zásahu/ a sekundárne lúče už čiste cez softvérový raytracing na CPU /bez použitia RT HW v GPU/. Sekundárne lúče nám umožňujú použiť efekty ako reflexie alebo priame aj nepriame tiene, teda veci, kde je rasterizácia dosť bezzubá a na programovanie veľmi náročná. Rozumej oveľa menej efektívna.

V raytracingu teda strieľate /presnejšie rekurzívne sledujete/ lúče  a pozorujete, kde narazia na nejakú geometriu. Už pri jednom lúči na pixel obrazovky a pri miliónoch polygónoch-trojuholníkoch na scéne je počet možných permutácií doslova nekonečný a brute force postup možný iba pri veľmi jednoduchej grafike triedy PS1-PS2. Tu masu štruktúr na obrazovke teda musíme nejako optimalizovať, indexovať. A na to slúži aj Bounding Volume Hierarchies (BVH) štruktúra v tvare stromčeku. Objekty si pekne hierarchizujete a keď "matka" v indexovom poli výpočet intersekcie lúč-poly nepotrebuje, tak "dcéra" pod ňou ho nepotrebuje tiež a "nepočítame ju". A máte akceleráciu výpočtov. Po novom práve toto traverzovanie /behanie po stromčeku, má myriady položiek/ robí v GPU špecializovaný HW a to buď na celú množinu-rodinu objektov alebo na jednotlivý polygón-trojuholník jednotlivca. BVH problematika má asi stotisíc nuáns /veľmi mi to inak v niečom pripomína prastarý copper list pri amige/, tým sa však zaťažovať nebudeme a existuje more ďalších podobných postupov ako je SAH /Surface Area Heuristic/. Chcem tým iba povedať, že je možné hlavne na konzolách ako PS5/XSX najsť riešenia, ktoré bude bez preháňania hyperoptimalizované a vysoko nad výkonnostný rámec toho, čo od podobného GPU vidíte v štandardných multiplat hrách vrátane PC pod DXR dnes !!

sotfvérové RT tiene a reflexie v jednoduchej scéne

Vyššie teda máte praktickú video ukážku namiesto nudnej teórie. Intel CPU v tomto prípade behá po BVH stromčeku a robí špinavú prácu /tento krok dnes moderné PC GPU a next gen konzoly akcelerujú na grafickom čipe extra špeciálnou jednotkou/. GPU Nv 970 robi tú rasterizačnú a ALU compute časť. Výsledný framerate na scéne s RT odrazmi a RT tieňami je 150fps. Moja Nv 1070 je cca o 50% v hrubom výkone lepšia a PS5 GPU má výkon minimálne dvoch mojich 1070 s k tomu ešte podporu pre RT. Jedno s druhým mi z toho vychádza, že neskoršie PS5 hry by celkom komfortne mali zvládať aj situácie, keď budú použité RT reflexie a tiene naraz. Dnes je to zatiaľ buď - alebo.

Chlapík pri svojom čiste softvérom raytracingu použil množstvo optimalizácií a kód bol prispôsobený exaktne presne na daný HW /to čo mu funguje dobre na Nv 970 išlo mizerne na inej grafike iného výrobcu/. K tomu PC totiž pristupoval ako ku konzole. V reálnych podmienkach by musel vytvoriť špeciálny profil pre každé PC GPU na trhu. Zabudnite. Skúšal umiestnovať dáta na rôzne miesta RAM, kešiek, registrov aby dosiahol čo najlepší výkon. Bola to piplačka, lebo testoval desiatky verzií a subverzií ALU compute shaderov. Raytracing je veľmi náročný na kvalitu RAM /rýchlosť, latencia/. GPU je nutné saturovať skutočne optimálne. Brute force prístup je rýchly, lacný ale dobrý iba laxného multiplat vývojára a Nv 3090. Výsledný kód /neopodarilo sa mi to rozbehať na Nv 1050 ani Nv 1070, heh/ tej jednoduchej scény vo videu by na PS5ke určite bežal nad 300 fps. 

V ďalšom kroku tento "syntetický" test s guličkami a kockami presunieme do hernej reality a komplexných štruktúr. Pokazím pointu ale nakoniec to celé, toto obyčajné cvičenie a hranie sa s kódom, skončilo vo Forge platforme /Wolfgang je grafický guru, ex R* inžinier s obrovskými skúsenosťami/. Forge je modulárne, multiplatformové middleware, ktoré vám umožňuje si v ňom nacvakať aj vlastný engine. Spiderman PS4 renderuje svoje nebesá práve po Forge expertíze s použitím Ephemeris 2 modulu. Som absolútne presvedčený o tom, že Resident Evil remake pre PS4 zvládne PS5 s raytrace odrazmi a tieňami aj čiste softvérovou cestou. Tmavé prostredia, tmavá paleta farieb, ktorá hravo zamaskuje aj eventuálne nižšie rozlíšenie RT efektov.

softvérové RT tiene - na cirka 200 fps

Po masívnych úpravach /znovu prekopané BVH, parciálne SAH, iný typ float výpočtov, kešovania bufferov, culling všetkeho/ softvérového raytracera je stále na tej Nv 970 už schopný utiahnuť aj bežnú hernú geometriu /vyššie vo videu je použitý referenčný objektový model Sponza/. Po radách od borcov z Epicu a ex Santa Monica klesol napríklad čas potrebný na spracovanie RT tieňov z 13 ms na cca 3.5-5.5 ms pri tieňoch o 1/4 rozlíšení alebo na 10.5ms v plnom rozlíšení tieňov v 1080p. Po zmenách sú tiene viac ALU ako TEX závislé, takže výkon rastie lineárnejšie s počtom CU jednotiek /a kvalitou kódu/, než od počtu HW textúrovacích jednotiek. Stále ostáva dosť pracovných cyklov na softvérové RT reflexie a logiku hry, aby to skončilo na solídných 1080p/30 s RT a bez HW podpory pre raytracing. Pripomínam crytek RT demo pre non-RT GPU kde s reflexiami o polovičnej kvalite dám na Nv 1070ka hladko 1080p/60fps. Mám teda rezervu "30 fps" na RT tiene alebo hernú logiku pre komornejšiu hru triedy Resident Evil. PS5 je pritom v globále v hrubom minimálne o 250% výkonnejšia /CPU+GPU/, než to čo mám doma. Možnosti sú tak obrovské, že 6-7 rokov ďalšej generácie nebude stačiť ani na ich letmý dotyk. Výkonnejšie dvoj-úrovňové BVH s BLAS /Bottom Level Acceleration Structure/ a TLAS /Top Level Acceleration Structure/, ktoré použil COD: Moder Warfare je iba skromná špička ľadovca.