01/06/21

Unreal Engine 5: Prvá krv

V roku 2021 sa vraciame metodikou renderovania grafiky naspäť do roku 1991. Nejde o frajerskú pózu, ide o vynútený krok a súčasť večného cyklu vývoja grafiky. Univerzálnosť-špecializácia-ultra špecializácia-univerzálnosť. Pred 30 rokmi neexistovalo GPU tak, ako ho poznáme dnes. Nepoznali teda ani tieňovanie pixelov v programe bežiacom na grafickej karte /pixel, vertex shader/. Žiadna akcelerácia rasterizácie. CPU muselo všetko zvládnuť samo, čomu bola prispôsobená geometrická komplexnosť hry, množstvo animácie, fyziky, kvalita AI. Postupne sa so štandardizáciou GPU, grafického API na nich presúvalo viac a viac práce. Transformácia 3D grafiky, jej nasvietenie, veľmi komplikovaný shader kód za každým krajšim efektom, akcelerácia rasterizácie a alfa operácií. Dospeli sme do bodu, keď na 2000+ eurovej a 400 watovej GPU Nv 3090 si v hre Cyberpunk 2077 môžte dovoliť luxusné, natívne rozlíšenie 900p na celkom stabilných 60 fps pri plnom a najkvalitnejšom nastavení raytracing režimu. Faktum bez zavádzania a zároveň sarkazmus. Niečo proste nefunguje správne.

Raytracing /RT/ postupne nahrádza rasterizáciu preto, lebo spotreba energie a komplikovanosť kódu pri druhom menovanom stúpa exponenciálne so stále zlepšujúcou sa úrovňou rafiky, pri raytracingu skôr lineárne a navyše RT výrazne urychľuje tvorbu, ladenie hry. Svetlo pri RT generuje všetky potrebné propriety /svetlo, tma, tieň, polotieň, lom, odraz/ automaticky bez nutnosti použiť na každý z nich špeciálne vyladený grafický, rasterizačný "hack". Komplikáciou je, že sa raytracing ako presná metóda snaží strieľať lúče voči každému polygónu, ktorý nájde a už pri biednej PS4/XO úrovni geometrie ala Cyberpunk 2077 je tých polygónov príliš veľa a Nv 3090 je na kolenách.

Počet polygónov na scéne tu nezdôrazňujem nadarmo. Medzi PS4 a PS5 generáciou totiž zaznamenáme aj 1000 až 100 000 násobne zvýšenie ich počtu /pomôžu nám aj nové GPU extenzie ako Mesh shader, meshlets, to je ale iná téma/. UE5 používa vlastnú variantu spracovania geometriu meno Nanite s novým formátom definície objektov a rozkladom až na subpixelové primitíva /sú tam bláznivé veci ako auto generované draw calls priamo mesh objektom namiesto CPU, ale tým sa nebudeme teraz zaťažovať/. Virtualizované, pakované dáta geometrie cucané z SSD v strašnom množstve. Klasický raytracing by sa pri takej hustote polygónov potom dal použiť iba limitovane na niektoré efekty a iba na niektorých povrchoch. Globálna iluminácia, teda svetelná kompletka "na všetkom" by nepripadala do úvahy, ako už dokázal aj ten Cyberpunk 2077. Potrebujeme novú paradigmu, ktorá doručí extrémne vysokú hustotu geometrie, svetlo v RT kvalite a použiteľný framerate 30-60 fps. Ťažká práca.

No a jedným z prvých oficiálnych pokusov je Unreal Engine 5. Nejde tu iba o hru s vyššim poradovým čislom. Skutočne sa vraciame do roku 1991 a engine používa GPU ako CPU. Prenáša shader compute /doteraz skôr iba výpočet farby pixela/ do hlavnej renderpipelajny. Tabu aréna. Doteraz bola z veľkej časti riadená mimo kontroly programátorov priamo ovládačmi grafickej karty. UE5 umožňuje ignorovať štandardnú HW renderpipelajnu vášho GPU. Vypne HW rasterizáciu, HW raytracing, ďalšie bloky v HW a prejde na maximálne efektívny softvérový rendering bežiaci v shader kóde GPU. Je to ako ďalší OMG ZERO OVERDRAW moment !! Technicky tam nájdete dvojicu softvérových raytracerov pre dlhé a stredné vzdialenosti a sopľavú socku SS /screen space/ renderer pre krátke vzdialenosti a drobné detaily. To slovo drobné je kľúčové. Epic totiž používa staré finty /viď obrázok nižšie/ a engine má ešte mnoho problémov, ktoré je potrebné doriešiť.

Niekedy veľmi dávno, keď všetko v grafike odmakalo CPU, ste museli dobre premyslieť existenciu každého polygónov, každého pixelu. Flat shading znamená, že ste tak pomalý, že jednému polygónu môžte priradiť iba jednu farbu, viac nestihnete vypočítať. Gouraud alias vertex shading je obrovský krok vpred. Každý polygón /typicky trojuholník/ môže niesť až tri rôzne farby, s interpoláciou na celú plochu. A konečne Phong alias per pixel tieňovanie môže priradiť individuálnu farbu každému jednému pixelu na polygóne. Ak používame bežné 25-50 pixelové trojuholníky, tak je spotreba výkonu pri per-pixel maľovaní oproti Flat shadingu strašná. Raytracing je rovnako zavraždený množstvom jednotlivých trojuholníkov, oproti ktorým testuje intersekcie svetla a hmoty !! RT je dnes ešte na HW úrovni priliš pomalé a polygónov je priliš veľa a bude ešte viac. Zdanlivo patová situácia.

Riešením je teda niečo ako "optimalizačný" návrat od Phonga ku Gouraud až na Flat úroveň, ale v kvalite Phonga. Paradox. UE5 pod menom Lumen používá jeden ručný super optimalizovaný softvérový raytracer pre veľké vzdialenosti, ktorý voxelizuje vzdialený priestor. Nerátame teda s jednotlivými trojuholníky ale hernú geometriu dáme do väčších blokov /ako ten Flat shading/, teda nižšia presnosť RT. Nevadí to, lebo ide o vzdialenú geometriu napríklad nad 1 kilometer. Stredná vzdialenosť to rieši ako proxy mesh prezentáciu cez SDF funkciu /ako Gouraud/. Strašná to definícia, ale nie je to nič ťažké. SDF je signed distance field technika ala Dreams engine na PS4 /objekt nemá súradnice v priestore v karteziáne ale je definovaný skôr vzdialenosťou svojho povrchu od iných referenčných bodov, získate zároveň "zadarmo" primárny tracing/. Namiesto bežného poly meshu sa urobí jeho hrubšia SDF proxy podoba a oproti nej beží ten druhý softvérový raytracer. A nakoniec najmenšie detaily, najbližšie k hráčovi rieši screen space postup. Ak teda Epic na dev stránke upozorňuje, že Lumen nasvetľovací engine môže mať problém s malými, tenkými objektami, je tomu tak preto, lebo hlavný raytracer číslo 1 a 2 pracujú so silne zjednodušenou, hrubšou verziou geometrie a ňou vypočítané svetlo môže míňať v priestore tu skutočnú "tenšiu" geometriu. Získavame rýchlosť na úkor presnosti RT. Problém s drobnými detailami, ktorý som už spomenul vyššie ešte čaká na lepší shader kód.

UE5 je teda evolučne revolučný v tom, že integruje do svojej grafickej paradigmy nové spracovanie geometrie s explozívným nárastom komplexnosti scény. Je navyše primárne ladený pre streaming dát z adekvátne rýchleho SSD a snaží sa šetriť dostupnú RAM. UE5 berie ohľad na konzoly. A za druhé prináša nové hybridné riešenie nasvietenia použitím softvérového raytracingu a softvérovej rasterizácie /je možné použiť aj HW cestu, ak je táto v danej situácii rýchlejšia/. Skutočne ojedinelý, špičkový, výkonný grafický engine pre PS5 bude stáť a padať na veľmi talentovaných kóderoch. Oveľa viac ako na PS4ke, ktorá išla viac na autopilota. Rovnako ako na PS2ke, kde to takto nešlo. Naprogramovanie kompletne vlastnej renderpipelajny dnes zvládne menej ľudí ako v 1991. Je to ideovo to isté, ako v časoch Wolfensteina a Quake ale objemom dát nezrovnateľne väčšie. Wolfstein nerieši nejaké tiene, fyzikálne korektné svetlo na materiáloch, skinované objekty alebo fresnel transparencie. Pointou vlastnej renderpipelajny je dostať GPU o niekoľko tried nad jej papierový výkon. Epic je veľká a skúsená firma. Machri z DICE pripravia niečo podobné a obidvaja sa pozerajú smerom ku oveľa menším ukrajincom z 4A Games /Metro IP/, ktorí už bodujú hláškami, že rasterizácia v ich hrách viac nemá čo hladať. Očakávam veľký súboj kóderov na poli HW, hybridných alebo čiste softvérových nových renderovacích postupov. Ide o prestíž. PS4 mala dvojicu podobných pokusov - The Tomorrow Children /voxelizovaný softvérový raytracing/ a Dreams /SDF renderer/. UE5 nie náhodou obe postupy teraz kombinuje na jednom mieste. Na PS5ke toho bude ešte oveľa viac a v oveľa väčších hrách.

 

V rovnakom čase ako to odpálil UE5 zároveň spúšťam aj desaťročný plán ku prvej pravej next gen hre. Pravá next gen hra je v úplnom antagonizme k tomu, čo hrajeme už pomaly 50 rokov od prvej Pong videohry. Bež, skoč, zober, zabi. Statické prostredie, žiadna fyzika, tupá AI. Herný oblúk vyčerpá veterán ako ja do piatich minút. UE5 je začiatok. Celé middleware má pred sebou ešte roky práce. Nanite aj Lumen sú v štádiu polotovaru. UE5 však získa schopnosť absorbovať asety vo filmovej kvalite v terabajtových objemoch, novú fyziku, novú AI. Prechod z hybridnej "hack" RT/rasterizácie na plný, čistý raytracing. Príde dostatočný výkon na strane HW /CPU, GPU, RAM, SSD/ už v ďalšej generácií konzol. Príde aj kapitál a talenty. Presne o cca 10 rokov tu bude prvá hra s next gen gameplay. Ešte len potom vylezie gamebiz z plienok. V podobnej "pravej next gen" hre bude aj hádzanie kamienkom zábava na celé dni, lebo tak vďačne a dnes nepredstaviteľne interaktívne ten herný svet bude na vás a dokonca na vlastné prejavy spätnej väzby reagovať.

No comments:

Post a Comment