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.