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.

19 Dec 2020

„Aj najtenší vlas vrhá tieň"

Povedal sýrsky otrok v starom ríme Publilius Syrus a Johann Wolfgang von Goethe kontroval s „pri väčšom svetle je väčší tieň´". Ja dodám, že má z klasických grafických nedokonalostí hier máločo vytáča tak ako je 200 metrov dlhý tieň budovy, ktorý frivolne zmizne alebo svojvoľne doskočí, keď letím rýchlo nad povrchom. Cválajúc na koni to nie je o nič lepšie a "transformácie" približujúcich sa tieňov stromov na ostrejšiu verziu sú pre mňa neakceptovateľne rušivé. Od 32 megabajtov veľkosti pamäte PS2 som dnes na 40 gigabajtovom PC a žiadneho radikálneho zlepšenia tohto problému som sa nedočkal. Na veľkosti zjavne nezáleží, potrebujeme skôr šikovného gašparka.

Aj najtenší vlas vrhá tieň

Zdroj: https://citaty-slavnych.sk/citaty/31862-publilius-syrus-aj-najtensi-vlas-vrha-tien/
Aj najtenší vlas vrhá tieň

Zdroj: https://citaty-slavnych.sk/citaty/31862-publilius-syrus-aj-najtensi-vlas-vrha-tien/
Zdroj: https://citaty-slavnych.sk/citaty/31862-publilius-syrus-aj-najtensi-vlas-vrha-tien/
„Aj najtenší vlas vrhá tieň.“ — Publilius Syrus

Zdroj: https://citaty-slavnych.sk/citaty/31862-publilius-syrus-aj-najtensi-vlas-vrha-tien/
Aj najtenší vlas vrhá tieň

Zdroj: https://citaty-slavnych.sk/citaty/31862-publilius-syrus-aj-najtensi-vlas-vrha-tien/
Aj najtenší vlas vrhá tieň

Zdroj: https://citaty-slavnych.sk/citaty/31862-publilius-syrus-aj-najtensi-vlas-vrha-tien/
Aj najtenší vlas vrhá tieň

Zdroj: https://citaty-slavnych.sk/citaty/31862-publilius-syrus-aj-najtensi-vlas-vrha-tien/

Virtuálna RAM je už rutinne používaný koncept, ktorý vytvára ilúziu oveľa väčšej pamäťovej kapacity spojením kapacít pamäťových čipov a nejakého pomalšieho úložiska. O manažment fyzických a virtuálnych adries toho, kde sú dáta v skutočnosti uložené sa stará mix HW /MMU - memory management unit/ a softvérových krokov. V prípade konzoly ako PS5 herný kód vidí 16 GB na čipoch a 825 GB na SSD ako jednu a tú istú kontinuálnu, veľkú pamäť. Identický postup môžme aplikovať na virtuálne textúry. Presnejšie a trefnejšie označenie je anglické Sparse Virtual Textures. Sparse ako textúra, ktorá nemusí byť prítomná celá v lokálnej najrýchlejšej pamäti ale on-demand iba jej vyžadovaný texel. Texel je časť textúry, ktorú musíme priradiť konkrétnemu pixelu na obrazovke. Chce to more rafinovaného programovania a lámania si hlavičky ale benefity sú obrovské.Virtuálne textúry na plné naplnenie svojho potenciálu potrebujú na strane HW mimoriadne výkonné riešenie IO systému /transfer dát/, optimalizované kešky, rýchle zbernice. Hra Rage id Software pre PS3/Xbox 360 sa o všetko vyššie pokúsila už na veľmi limitovanom HW tých konzol.

Nechcem však hovoriť o textúrkach alebo o tom ako šetriť pamäť next gen konzol. Problémom nie je veľkosť RAM, sila geometria, rozlíšenie textúr, svetlo. Problémom sú tiene v hrách a čakanie na dobré riešenie. Priame tiene, tie ktoré vznikajú, keď objekty zasiahne slnečné svetlo alebo veľmi silný zdroj svetla sú stále v dezolátnom stave. Náročnosť na ich uloženie a spracovanie je tak obrovská, že pri prvej príležitosti bez váhania tiene miznú, sú nahrádzané meter od hráča niečím s mizerným rozlíšením. Krajne rušivé doskakovanie, úplna strata tieňa, celková nestabilita.

mapovanie tieňa, ktoré má problém s perspektívou a projekciou do priestoru

Hlavnou slabinou tieňov pri klasickej rasterizácií /tá tu s nami ešte chvíľku pobudne/ je ich podvzorkovanie - nemýliť si s rozlíšenim. Máte tieňovú textúru v rozlíšení 1024x1024 až 4096 x 4096 pixelov /keď ich je niekoľko stovák natlačených do RAM - je to za bežných podmienok zabiják na jej veľkosť a rýchlosť/ a plácnete ju do plochy. Tieň sa váľa po nerovnej krajine a dochádza ku nespočetným artefaktom pri deformácii tieňa. Perspektívny a projekčný aliasing. Ak tieň sedí počtom svojich texelov na počet pixelov a ich normály /vektor kolmý na plochu/ harmonizujú ešte to nejako funguje. Ak je pixelov viac /čo je istota/ a normály idú krížom, tak na 1784 pixelov obrazovky naťahujete svojich reálnych 1024 texelov tieňových mape. More artefaktov. Ak navyše prekročíte nastavený RAM treshold a fillrate GPU pre tieto operácie prídete o tieň úplne.

Sebastian Aaltonen /ninja kóder, dnes maká na Unity engine/ navrhuje opačný postup. Inverzné mapovanie, index texel/pixel 1:1, extrémne nízke zaťaženie RAM, extrémne vysoká kvalita tieňov, zbohom klasické tieňové kaskády a celkové striedme použivanie tieňov a ich rýchle odstraňovanie z plochy lebo sú prílišným zaťažením pre systém. Dosiahneme toho nepriamym samplovaním tieňovej textúry, výpočtom non-virtuálnych UV koordinátov a kešovanie texelu pomocou týchto koordinátov. V jednoduchej reči - neplácneme tieň na objekt ale objekt po zhodnotení pixel-texel statusu si zavolá na svoju pozíciu iba ten potrebný texel. Plus modifikujúci shader kód v asistencii /aj asynchrónne, tiene sú menej citlivé na latenciu/. Nepotrebujeme celý tieň v pamäti, nepotrebujeme 32 giga VRAM, neriešime problémy s projekciou a perspektívou tieňov. GPU nám navyše cez compute shader môže dosamplovať texely z 4096 pixel mapy aj na jej 10 násobok. Flexibilne a podľa lokálne podľa potreby. A celé to stále bude rýchlejšie ako tie tieňové kaskády a hry s mip-mapami.

 

Unreal 5.x demo pre PS5 používa práve túto metodiku pre spracovanie tieňov ako súčasť Lumen  /alebo virtualizovanú geometriu  ako sub-engine Nanite/. Môžeme povedať, že ide doteraz o najefektívnejšie využitie klasickej rasterizácie, ktoré si muselo počkať na špeciálne upravené GPU a dostatočne rýchle úložisko s robustným IOP. Všetko vyššie povedané je už veľa rokov teoreticky dokonale rozpracované, technologicky opakovane demonštrované ale reálne/herné aplikácie si museli počkať, až HW dozreje aby sa to dalo používať ako skutočne produktívny nástroj, nie otravná obštrukcia. Opakujem, že sa nachádzame v najviac prechodovej generácií konzol všetkých čias, lebo v pozadí sa celkom urgentne riešia otázky ako sa konečne zbaviť polygónov a prejsť na non-ortodoxný mesh rendering /ako ukazuje SDF Dreams engine/, globálne svetelné riešenie smerom plného /ray/ path tracingu a konečne implementácie všeobecnej fyziky na celú scénu, čo je zatiaľ celkom tabu a obmedzujeme sa na občas kotúľajúci bochník syra dole úbočím v hre Skyrim.

18 Dec 2020

Sonic - optimalizácia a kompresia

Final Fantasy 6 pre SNES je kolosálna hra s famóznou pixel art grafikou a audiom. Priemerná doba prvého prejdenia hry je niekde okolo 35-40 hodín a celé sa to vôjde na 3 megový kartridž. Ešte technicky lepší Chronotrigger si vystačí so 4 megami. Tales of Phantasia mala 6 megabajtov /a intro so samplovanými hlasmi a 16 kanálové audio/ a nakoniec Star Ocean to úplne zarezal s dodatočným čipom S-DD1 pre dekompresiu a hra mala po rozbalení 12 mega. To je ekvivalent 100 gigovej hry dnes. Všetky tie SNES JRPG gamesy som krvopotne svojho času pretlačil cez SNES emuláciu, ktorá vtedy bola ešte v pokakaných plienkach. Vidíte teraz koľko vzácneho kartridžového priestoru dobrá hra zaberie a aké vychytané softvérové, optimalizačné postupy asi museli japončíci vymyslieť, aby to tam natlačili. Opúšťam teraz nintendo a preskakujem na megadrive, kde mi miestny borec Sonic hovorí, že len jeho vlastná animácia má cca 220 kilobajtov. Celá FF6 pre SNES má pritom 3 mega !! 

 
Sonic 3D Blast je posledná, vydaná sonic hra pre megadrive. Používa "izometrické" zobrazenie a hlavný hrdina nemá ručne urobenú pixel grafiku ale vyrenderovanú v 3D štúdiu s peknými odleskami. Hýbe sa do 16 smerov a v každom má 12 frejmov animácie. Vyzerá to v pohybe krásne ako CG panduľák z Toy Story. Celá táto paráda ale bez úprav zaberá 220 kilo. Takže toto číslo musíme zraziť dole zapojením mozgu a bez pomoci drahého čipu pre HW dekompresiu. Prvý redukčný krok je využitie faktu, že postavička v niektorých smeroch behá zrkadlovým otočením animácie. Nemusíme teda tieto dáta uložiť ale stačí ich v HW v smere osi otočiť. Už teda nepotrebujeme animáciu v 16tich ale iba v 9tich smeroch. Objem dát spadol na 121 kilo. Skoro na polovicu.

A ideme ďalej. Hlavný sprajt sonica je umiestnený na mriežke 6 x 6 znakov /znak je vlastne atribút veľkosti 8x8 pixel/. Neukladáme dáta všetkých 36 znakov ale iba 22, v ktorých sa pixely sonica reálne nachádzajú. Dokonca keď telo sonica úmyselne posunieme o pár pixelov v gride doprava, tak zistíme, že dosiahneme nižšie pokrytie plochy a úsporu 3 celých znakov a tých 19, ktoré v tomto momente potrebujeme už zaberajú len 64 kilobajtov. Sme opäť takmer o polovicu dole. A posledný krok. Pozrieme sa aj "dovnútra" jednotlivého 8x8 pixel znaku. Zistíme, že ani tam samozrejme nie je 100% pokrytie, takže použijeme triviálnu RLE kompresiu, ktorú zvládne aj 8 bit. V tomto bode bude mať celá animácia sonica vo všetkých smeroch na kartridži iba 53 kilobajtov, teda 25% pôvodnej veľkosti. Zázrak.

 
Sonic 3D Blast - intro

Zázrak do troch dní, nemožné na počkanie. Sonic 3D Blast totiž má aj plne renderované FMV intro /full motion video/. Základná matematika - 320x224 pixel krát 30 frejmov za sekundu krát 12.5 sekúnd dĺžky intra = 27 megabajtov na kartridži o kapacite 4 megabajtov !!  Takže optimalizujeme. Veľkosť frejmu stiahneme na 320x200 pixelov, rýchlosť videa na 15 snímkov za sekundu a použije sa farebná paleta o sile iba 16 farieb. Voilá a intro video už má iba 6 megabajtov. Do akcie nabehne RNC kompresia /Rob Northen compression/ v sofvérovom režime a v tom prípade by to mohla zabaliť až s efektivitou 3:1. Problém, je že naše CPU to nezvládne rozbaľovať v reálnom čase dostatočne rýchlo /iba cirka na úrovni 5 fps/.

Prepočet ukazuje, že dekodovaný obraz nemôže mať väčšiu veľkosť ako 256x80 pixelov. Ako však vidíte vo YT videu vyššie, tak intro pokrýva "celú" plochu obrazovku, nie len maličký výsek v strede. Na roztiahnutie obrazu na celú plochu /primitívny upscale/ využijeme schopnosť GPU /VDP - Video Display Processor/ megadrajvu, že DMA pri blokových presunoch dát dokáže generovať prerušenie /kontrolovaný horizontálny interupt/ na každom horizontálnom riadku a takto vlastne riadok zduplikujeme dvakrát po sebe a dosiahneme lepšie pokrytie plochy. Pokračujeme vertikálnym ditheringom a interlace alterovaním snímkovania s dosiahnutím lepšieho rozlíšenia videa /doslova ako šachovnicový checkerboard rendering či interlace upscale na PS4ke, heh/. Finálna veľkosť FMV intra po všetkých týchto krokoch je 660 kilobajtov namiesto pôvodných 27 megabajtov /v nekompromisne najvyššej kvalite/. Asi je vám jasné a sonic to potvrdzuje, že Call of Duty dev tím zjavne nerobí všetko preto, aby sme pri ďalšom diely ságy nemuseli sťahovať 350 gigabajtov dát. Stále platí, že tvrdé limity, ktoré sa snažíte nejako obísť, podporujú tvorivosť, inovácie. Hojnosť je pochabosť.

17 Dec 2020

Rasterizácia OUT, Raytracing IN

ZX Spectrum má 8 bitové CPU na 3.5Mhz, ktoré musí obslúžiť všetky kritické časti herného kódu: hernú logiku, AI, grafiku, audio. Záťaž toho procáku je enormná a sám o sebe by na to len tak nestačil, čo zákonite viedlo ku pozoruhodnej optimalizácií na strane programovania tých hier. A tieto zručnosti a pretrvávajúca ochota hľadať a makať sa časom určite vyplatí a oplatí. SNES ako oveľa výkonnejšia 16 bitová nintendo konzola má CPU stále na tých 3.5Mhz a pri 256 farebnej grafike by ledva utiahla aj Tetris, ak by jej nepomáhalo sofistikované GPU. Kopa blokov, ktoré akcelerujú kadečo /speccy takúto výhodu nemalo/. Nintendo videlo viac do budúcnosti a pretože tie hry šírilo na kartridžoch, nie na MG páskach alebo CD, tak sa tam dal občas prilepiť aj nejaký akceleračný čip alebo trochu tej ďalšej RAM. SNES bol dizajnový zámerne tak, aby vedel rýchlo komunikovať s prídavným, výkonným HW. Môžte tam potom na 10-20 fps preháňať plne polygónové hry alebo raycasting DOOM engine aj vďaka Super FX čipom. Hráč sám pritom o tom, čo sa deje pod kapotou po HW stránke, nemá často ani tušáka.

SNES a raytracing alias SuperRT

V novom tisícročí sa posunieme ďalej a nebudeme akcelerovať iba nejakú rasterizáciu ale vrhneme sa rovno na raytracing. Chlapík tvrdí, že to čo vidíte vo videu vyššie by bolo realizovateľné aj pred 25 rokmi, ale bolo by to nemiestne drahé. V súčasnosti teda zobral ten starý Super FX čip /cca 11 až 21 Mhz/ a celé to nakódoval do FPGA ako trojicu raytracing jadier na 50Mhz s patrične upravenou HW infraštruktúrou a registrami, ktoré raytrancing vyžaduje. Obraz je renderovaný v rozlíšení 200x160 pixel, 256 farieb do rýchlosti 30fps. Nižšie rozlíšenie je v tejto podobe zámerne - ten z pohľadu SNES obrovský objem data musíte preniesť do malej SNES VRAM cez dnes relatívne pomalé zbernice. Teoreticky nič nebráni /málo RAM !!/ skúsiť v ďalšom kole napasovať do starého Star Foxa aj nejakým ten RT efekt /odrazy, tiene/.

Moderná konzola ako PS5, XSX v sebe nemá re-programovateľné FPGA a hry sa nepredávajú na kartridžoch, takže prídavný RT HW tam niet kde schovať. Čo máme je nesmierne flexibilné GPU na RDNA2 architektúre so schopnosťou efektívne vytvárať vlastné renderovacie pipelajny mimo fixný raster/RT HW. To nás vracia naspäť ku tomu spektru. Crytek už ukázal svoje softvérové riešenie RT reflexií, ktoré by v tejto podobe určite bežalo na PS5 komfortne a s rezervou v rozlíšení 1440/60fps. Aproximujem to z mojej PC zostavy, ktorá je minimálne raz tak pomalá a nemám problém ľahko  dosiahnúť 60 fps v 1080p s odrazmi o polovičnej presnosti. Na next gen konzolách sa teda nemusíte tvrdo viazať na drakonické limity defaultného RT HW a čokoľvek čo sa naučíte pri tvorbe vlastnej softvérovej verzie RT sa vám stokrát zúročí už o pár rokov, lebo zmena renderovacej paradigmy z rasterizácie na raytracing bude podľa mňa smrteľne rýchla.

5 Dec 2020

SIGGRAPH 2020

 "VRS softvérovo v hre Call of Duty: Modern Warfare." COD je dnes epicentrum FPS hrania a značka zarába obrovské miliardy chechtákov, čo zároveň znamená, že nemajú problém zaplatiť aj tých najšikovnejších ľudí v biznise. VRS je skratka pre variable rate shading.  Na PS5 a XSX to budete počuť čoskoro denne. Pri rýchlo rastúcom rozlíšení obrazu a počte operácií na pixel /ak pri PS2 to bolo do 10, pri PS3 do 100 a pri PS4-PS5 nad 1000 compute-raster kalkulacií na obrazový bod/ rastie tlak na výkon GPU s treťou mocninou. Špekuluje sa preto ako po analýze frejmu vybrať body, malé plochy, kde sa to nebude rátať otrocky s per-pixel presnosťou ale skôr per 2x1 plôška alebo 2x2 alebo 4x1 dokonca 4x4. Kvantizácia ako napríklad pri JPEG kompresii. Ak to urobíte šikovne, tak 95% hráčov nespozoruje žiadnu degradáciu v kvalite vizuálu a herný vývojár získa v priemere 10-30% výkonu k dobru. Keď už na nič iné tak sa to hodí na vyhladenie kolísavého framerejtu.

 
VRS - modrá je dobrá, iné farby rátajú shader efekty s nižšou presnosťou

Nvidia ako prvá zaviedla HW podporu pre túto fičúru na svojich GPU a progresívne ju vylepšuje /Tier 1, 2/. AMD sa pridalo ako druhé s RDNA2 architektúrou. Obe konzoly XSX aj PS5 teda toto vylepšenie podporujú. Ešte pred tým však hra COD: Modern Warfare prišlo s čiste softvérovým riešením, ktoré beží na akomkoľvek GPU a teda aj na staršej PS4ke. Softvérové VRS im určite pomohlo k tomu aby multiplayer bežal na 60fps hladšie. Odkaz vás zavedie na až príliš technický pokec. Musíte mi teda veriť, že ich kód je veľmi sofistikovaný a o dosť flexibilnejší ako aktuálne HW riešenie na Nv/AMD, to je však ON/OFF skryté v API GPU, takže sa o nič starať nemusíte. COD dev tím naznačuje, že s VRS ešte majú veľké plány a bude sa mocne vylepšovať. Zároveň sa odkazujú na nové možnosti na PS5 a XSX a to definovanie vlastnej rasterizačnej cesty úplne mimo HW defaultnej rasterizácie. Rozhodne majú pracovný plán nabitý na roky dopredu a ani celá generácia im nebude stačiť, aby si potenciál HW next gen konzol poriadne obchytali - 6 či 7 rokov ledva stačí na dvojicu 3 ročných vedecko-výskumných mini herných cyklov.

"Rendering pekla v DOOM Eternal." Hra beži 60 fps na všetkých hlavných konzolách a dosiahne hravo aj 1000 fps ak máte ten najlepší ninja PC HW. Herný kód je extrémne optimalizovaný k dizajnu/účelu tejto hry. Je postavený tak, aby išiel presne po ruke toho čo HW vyhovuje najlepšie /takže zbohom masovo používaný deferred rendering a obrovský G-buffer/ a všade kde je HW pomalý, tak sa to nahrádza super rýchlou softvérovou verziou. Veľmi zreteľne v odkaze opäť vidím sťažnosť na príliš pomalú a neflexibilnú, klasickú cestu HW rasterizácie. Podobne ako pri COD sa už tešia na blízku budúcnosť a schopnosť RDNA2 architektúry si definovať vlastný rasterizačný model. ID tech 7 engine a jej kóderi skutočne rozumejú tomu ako herná grafika "oldschool FPS shootera" funguje a to na intímnej úrovni.

"Raytracing, path tracing a tieto veci." Vývojár z Unity veľmi obšírne a pre laika dokonale nezrozumiteľne reční o náhrade rasterizácie raytracingom. Raytracing je neodvratná budúcnosť. Ja vám poviem čo si máte v hrách na PS5 v ďalších rokov všímať. Raytracing na PS5 HW akceleruje zopár operácií spojených s manažmentom BVH /Bounding volume hierarchy/. Čo je vlastne index pole objektov na scéne, ktoré RT HW používa za zrýchlenie samotnej operácie. Samotné detaily vás nemusia zaujímať. RT sa vyvíja tryskom a tie informácie sa každých 12 mesiacov zásadne zmenia. V hre si všímajte následovné. BVH môže povedať, ktoré objekty vlastne zrkadlová plocha má odrážať /nemusia byť všetky/, do akej vzdialenosti /môže tam byť rýchly orez po 10-100-1000 metroch/ o akej kvalite /low poly modele/. Či sa majú v odraze zobrazovať tiene, ktoré vidíte na "vašej" strane. Či sa maju v odraze zobrazovať iné odrazy na vašej strane /stojíte v mláke, čo odráža nebo a mraky ale vidíte tieto odrazy aj v odraze v skle ?/. Rekurzívne odrazy /zrkadlo postavené oproti inému zrkadlu/ a do akej úrovne /1-16?/. Časom sami zistíte, ake finty vývojár používa, aby si vo výkonnostnej núdzi pomohol.

Raytracing /RT/ samozrejme nie je len o odrazoch na každej lesklej ploche. Generuje aj tiene. Priame pod slnkom aj nepriame pod stoličkov v izbe, kde preniká iba odrazené svetlo. RT vie sledovať /priamo alebo rekurziou/ lúč a plochy priamo osvetľovať namiesto klasickej rasterizácie, ktorá to iba umelecky a prácne odhaduje. RT zvládne kaustiku /obálka svetelných lúčov odrazených alebo zalomených nejakou zakrivenou plochou alebo predmetom/ - typicky tie blaznivé hry svetla vodnej hladiny s odrazom na steny dokola alebo pod vodnú hladinu. RT zvládne aj DOF efekt /depth of field/ a mnoho, mnoho ďalšieho. Každá položka navyše však dvíha nároky na výpočet, pamäť a zbernice o celý rád, takže celý servis nedostanete skôr ako v ďalšej generácií konzol.

 
COD rasterizuje

"COD: Moder Warfare a rasterizačná klasika." Vraciame sa naspäť ku COD. Pretože je ideálna RT ešte dosť vzdialená, tak musíte využiť na maximum dostupné možnosti. Všetko vyššie spomenuté pri RT sa dá napodobniť pomocou rasterizácie. Pre potreby hier skutočne doslova každá jedna vecička. Problémom je, že spotreba systémových prostriedkov je proste enormná a prácnosť nekonečná. Ako som už raz povedal pri modelovaní v 3Ds Max, tak tam nemusím nutne použiť kód na výpočet radiosity /nasvietenie/ a čakať za programom 10 hodín na prašivom pentiu 100 v roku 1997 ale napodobním výsledok ručne rozmiestnením kopy bodových svetiel, aby výsledok tej radiosite zodpovedal a mám to spočítane v cuku letku. Problém je, že teraz mám na scéne 200-2000 svetiel navyše /čo iste zloží realtime herný engine na kolená/ a ja strácam čas s ručnou prácou, ktorá mohla byť použitá inde. RT je preto budúcnosť a dnešné lopotovanie ako v tomto COD odkaze už čoskoro minulosť.

TloU2 rasterizuje tiež a v žiadnom prípade nechce zaostať pozadu

"The Last of US 2." Do bodky to isté ako pri COD prednáške vyššie. Ako napodobniť vizuálne fenomény, ktorá dáva raytracing /path tracing, radiosita/ na autopilota - nesmierne namáhavou prácou kodérov a grafikov. Je to doslova profilovanie grafiky špeciálne pre každú jednu situáciu zvlášť. Už na PS4ke je to na hranici ekonomickej únosnosti. Na PS5 to už bude sakra drahé a iba pre zopár vyvolených s tučnou peňaženkou. ND píše ako oklamať vodu, mokré povrchy, falošné odrazy, deformáciu povrchu. Používajú dosť často "uber shader" techniku, ktorá sa najjednoduchšie vysvetlí ako veľký shader kód s vetvením /vetvenie = časová strata/, ktorý sa meni dynamicky podľa grafického profilu, ktorý daná situácia /materiál, svetlo/ vyžaduje. To len ukazuje, ako je klasická ručná rasterizácia náročná na manuálne riešenie každého "stavu" individuálne. Mimochodom DOOM: Eternal sa uber shader technike kompletne vyhýba, nie je veľmi priateľská ku hrám na vysokom framerate pri pomalšom HW.

4 Dec 2020

Xbox - mačacie zlato

Microsoft ešte nedávno propagoval Xbox Series X ako najvýkonnejšiu konzolu všetkých čias. Už mesiac po štarte XSX a PS5 sa toto pyšné označenie z reklám nenápadne vytratilo. PS5 v multiplatformových hrách totiž beži minimálne tak dobre ako XSX alebo oveľa častejšie - ešte lepšie. Pre MS to musí byť nepríjemné prekvapenie, lebo objektívne tam ten výkon niekde je a obrovský rozdiel v počte CU /36 pri PS5 versus 52 pri XSX a v špičke aj rýchlejšia RAM/, by sa mal nejako prejaviť. Reálne sa odhadoval odskok XSX od PS5 niekde na úrovni 10%, už či v rozlíšení obrazu alebo v počte snímkov za sekundu alebo vo vyššej kvalite grafických efektov. V skutočnosti však zatiaľ hry ukazujú tých "10%" skôr v prospech PS5. Je na rane si myslieť, že SONY s Mark Cerny pri PS5 efektívne ošetrili práve úzke miesta v systéme a nešli len cestou hrubého výkonu, ktorý mal bez rečí valcovať.

Pri PS5 sa teoreticky operuje s vyšším fillrate /64 krát ROP jednotka na veľmi vysokej frekvencii/, s ktorými XSX asi nevie držať krok. Má ich síce tiež presne toľko ale bežia oveľa pomalšie. Fillrate /s ním asociovaná rasterizácia polygónov alebo ich culling/ je iba jedna z asi 20 hlavných častí renderovacej pipelajny a technicky by sa mal prejaviť /rozlíšenie, framerate/ výraznejšie v hre, ktorá až tak netlačí na pílu super komplexnými shader operáciami /kde by mal hrať prím práve XSX/. Ideálna hra by mohla byť Immortals Fenix Rising /Ubisoft/, ktorá sa vizuálne spolieha na "jednoduchú", pastelovú, cartoon zelda grafiku.

Test sa zrealizoval a výsledky dopadli podľa predpokladu. PS5 drží jemne stabilnejší framerate bez tearingu v režime 60fps s dynamickým 4K rozlíšením a nepadne pri tom v obraze až tak hlboko ako XSX /v minime iba 1080p !!/. Pri maximálnom zaťažení teda PS5 renderuje skoro až o 30% pixelov viac ako XSX. V 30 fps móde zameranom na kvalitu obrazu je podľa testu PS5 uzamknutá pevne v natívnom 4K rozlíšení. XSX si však aj tu musí občas pomocť ľahkým znížením počtu pixelov. Škandalózne. Teraz si položme otázku, či je možné nejakým spôsobom fillrate tej PS5 objektivizovať. Niečo by sa našlo.

Eric Lengyel je ex Naughty Dog zamestnanec, vedátor s titulom, autor okrem iného aj softvérovej knižnice Slug pre priame generovanie vektorových fontov na GPU. V hre tak môžte na stenu plácnuť text "Area 51" v najvyššej kvalite aj so škálovaním a bez obmedzenia rozlíšenia bitmapy, ak by ste sa rozhodli pre variantu, že to tam dáte ako obrázok. Slug okrem textu zvládne aj rendering akejkoľvek inej vektorovej grafiky, takže aj ten smajlík a penis. No a práve tento program použil Eric na otestovanie fillrate kapacity PS5 versus zvyšok sveta /bohužiaľ bez XSX, vraj zatiaľ, snáď to doplní/.

Ako vidíte za normálnych podmienok, pri strednom zaťažení, v tomto testíku PS5 zaostáva asi o 10% za Nv 2080 a je asi o 550% pred PS4kou. V extrémnom zaťažení sa situácia radikálne zmení a PS5 komfortne o vyše 30% predbieha Nv2080 a určite by do prachu zložila aj Titan verziu a bolo by zaujímavé vidieť tu aj novšiu Nv 3070ku. PS5 je lepšia od PS4 o viac ako 11 krát !! Nepriamo a voľne teda môžme dedukovať, že pri PS5 sa v silikóne APU hardvérovo urobili asi nejaké optimalizačné kroky /ktoré sa nedajú vysvetliť iba efektivitou API vrstvy/. Výsledkom je lepšia efektivita behu kódu obzvlášť v sťažených "stress test" podmienkach. Vyzerá to tak, že tu globálne niet výraznejšej slabiny a CPU, GPU, RAM, SSD sú ideálne zladené pri smiešne nízkej predajnej cene 399 euro v prípade digitálnej PS5 DE verzie. Na podobne rýchle PC bude treba asi tak tri krát vyšší budget a nerajte s tým, že vám vydrží bez upgrejdu ďalších 7 rokov držiac krok s PS5.