12. 5. 2020

Variable Rate Shading /VRS/


Didaktický príklad. ZX Spectrum obsluhuje svoju cca 6 kilobajtovú VRAM /rozlíšenie obrazu 256x192 pixel/ s pomocou CPU o rýchlosti 3.5Mhz. Nemá klasický videočip, procák to musí obehať celé sám. Nové ZX Spectrum Next v tom istom rozlíšení ale už s 256 farbami potrebuje 48 kilovú VRAM, teda 8 krát väčší objem dát. Prvé čo vás napadne je, že CPU by teda malo nárasť tiež 8 násobne na rýchlosť 28Mhz. A presne to sa im aj podarilo, aj keď ZX Spectrum Next už má aj to vykonné grafické jadro. Súčasnosť. Dosluhujúci Xbox One X má cca 6 TFLOP GPU a povedzme, že sa najlepšie cíti v rozlíšení 2560x1440x30 Hz na "ultra" detailoch. Ak to rozlíšenie a framerate chcete zlepšiť o 100% a pridať nejaké raytrace efekty potrebujete minimálne 6x4 = 24TFLOPs. Chystaný Xbox Series X však má "iba" 12 a tých 24 dostane až "PRO" verzia o 2-3 roky. Pripravovanú Valhalu od Ubisoftu na 4K/60 určite neutiahne ani Nv2080Ti a nič lepšie v tomto momente nemáme. Musíme preto objem spracovaných grafických dát výrazne zmenšiť aby sme pomohli nie dosť dobre dimenzovanej grafike.

Množstvo optimalizácií v moderných GPU je v tomto smere ohromné. Redukuje, komprimuje sa úplne všetko /textúry, farba, polygóny, geometria, normály, Z buffer/. Ak by sme to nerobili tak dnešná 4K/60 gamesa by napríklad vždy vyžadovala RAM o priepustnosti jedného terabajtu. Desivé. Najnovším hitom /na softvérovej úrovni už použitý/ je hardverová podpora pre premenlivú presnosť rátania presnosti grafických výpočtov alias Variable Rate Shading /VRS/. Táto technika na to ide opačne - "nekomprimuje", proste to v danom mieste vôbec nevypočíta a použije sa spriemerovaná hodnota od susedného /ných/ pixelov. Funguje to asi ako obrázky v JPEG formáte. Viď čínske vlajky.


Vlajka vľavo zaberie menej dát ako tá vpravo. Na kódovanie uniformnej farebnej plochy vám treba menej bajtov ako keď má každý jeden individuálny pixel nekompromisne inú farbu a musí byť uložený extra. JPEG algoritmus teda analyzuje obrázok, snaží sa najsť susedné pixely, ktorých odtieň sa líši iba o ten jeden povestný chlp a priradí im tú istú farbu a ušetrí kopu miesta. Tento "macroblocking" môžte urobiť v matrixi 2x2 pixel, 4x4, 8x8 alebo 2x1, či 4x2 s tým úmyslom, aby sa napáchalo čo najmenej vizuálnej škody. VRS pracuje veľmi podobne.

VRS - slabo modré počítame presne 1:1, žlté a zelené tak na polovicu, 
červené a fialové na štvrtinu a menej.

Herný kód a GPU si v hre prejde frame a po analýze sa rozhodne spočítať iba každý druhý pixel, ak zistí, že táto časť hry je v "tieni" s tak málo kontrastnými farbami, že je zbytočné tam rátať grafiku v plnej presnosti. Alebo sa vykašle na tie časti, ktoré sú vo veľkom motion blure. Alebo na tie oblasti, kde predpokladá, že sa hráč nepozerá, lebo v aute letí 320kmh a čumí na apex zákruty pred sebou a nie do ľavého dolného rohu. Úspora na výkone sa priemerne predpokladá na úrovni 10 až 30%. O to lepší framerate alebo rozlíšenie teda môžte dosiahnuť. RDNA2 architektúra v oboch konzolách PS5 aj XSX túto fičúru podporuje a predpokladá sa, že si ju SONY a MS ešte viac a lepšie upravia pre herné účely. VRS je možné použiť aj opačne a síce orezať perifériu až na kosť ale zvýšiť razantne kvalitu nad rámec normálu v geometrickom strede obrazu.

Hovorím o režime pre VR prilbu s foveated renderingom.Presnejšie Dynamic foveated rendering /DFR/. Ešte presnejšie DFR s eye trackingom. V preklade - VR prilba monitoruje pohyb vašej zreničky, vie presne kde sa pozeráte na rozdiel od bežnej telky či monitora, teda dokáže bezpečne rozpoznať a vypnúť "perifériu" vášho zorného poľa. Funguje to rovnako aj pri normálnom oku v živých podmienkách. Je ľahké takto dosiahnuť aj 40% úsporu výkonu a teda skok z 60 na 90 fps zadarmo pri prechode z 2D monitora na "3D" VR prilbu.

VRS predpokladá sofistikované úpravy "blend" režimov grafickej karty, lebo niečo tú novú grafickú informáciu z ničoho urobiť musí. SONY s tým už má svoje skúsenosti pri upscale technikách na PS4 PRO /HW podpora pre checkerboard škálovanie/ a náhoda chcela, že som narazil na nepriame potvrdenie tohto predpokladu. V tomto odkaze AMD propaguje svoje nové hračky pre RDNA grafické karty. Sledujte hneď prvý riadok, ktorý na nás AMD vytiahlo - Stochastic Screen Space Reflections (SSSR). Ušetrím vás únavnej teórie / hierarchické riešenie Z buffera, nelineárne odšumovanie - denoise, odrazová mipmap pyramída, raycast podvzorkovanie, pseudo reprojekcia sekundárných odrazov, fresnel odrazov, oklúzia svetla, ambientné tiene/. Náročný problém.

Ide o dobre známy postup riešenia odrazov v reálnom čase. SSSR je oveľa presnejší, flexibilnejší, výkonnejší ako bežné, masovo používané screen space reflexie a zároveň oveľa menej náročnejší ako "pravý" raytracing. Háčik je to slovo stochastický, čo znamená že tento postup proste odhaduje s istou pravdepodobnosť finálny výsledok a výstup z SSSR je veľmi neistý, zašumený, podvzorkovaný. Musíte aplikovať komplexne "odšumovacie", denoise postupy. Prácne, pomalé. A práve tento bod si AMD poriešilo na RDNA grafikách a práve táto finta sa úžasne hodí aj pre potreby VRS.

Na next gen konzolách teda vývojári dostanú veľmi, veľmi mocné nástroje vďaka novej hyper programovateľnej render pipelajne /veľká RDNA2 paradigma/ a vyladených HW gfx modulov. Hry budú mať dynamické rozlíšenie, dynamický framerate, dynamickú kvalitu shader kódu. RDNA2G v konzolách /môj vlastný terminus technicus, G ako herná varianta oficiálnej AMD RDNA2/ má potenciál na 10 rokov dolovania výkonu a na dno stále nenarazíte. Na čo narazíte určite bude revolučné hnutie puristov, ktoré skoro začne požadovať "pure, raw" pixely bez obsierky a grafických skratiek. Bio banány.