2. 6. 2019

Raytracing - úvod


PS2ka mala vo svojej dobe medzi konzolami dlho jeden z najvýkonnejších GPU rasterizérov. Rasterizácia je vlastne proces, keď napríklad herný 3D objekt transformujeme do 2D raster matrice obrazovky. Na plochu nahadzujete farebné pixely. Jednotlivé objekty však o sebe "nevedia", nezdieľajú info o vzájomnej polohe, transfere svetla. Všetko, každý efekt, vizuálny jav na obrazovke rasterizér odmaká ručne a vždy ide o hrubú aproximáciu. Výsledok rovnice odhadom. PS2 dostala aspoň programoveteľnú manipuláciu s vertexami /časť polygónu/, konkurenčný Gamecube aj TEV jednotku, pixel mixér. Xbox už mal klasické pixel/vertex shaders.

Farba pixela sa teda dala vypočítať vnútri GPU bez znásilňovania zberníc a pamäte /PS2 mala dovtedy bezprecedentne veĺkú pamäťovú priepustnosť pre VRAM, živila takto svoj rasterizér/. Rasterizácia dnes je extrémne rýchla, vyladená, zároveň však nesmierne blbá, lokálna a neglobálna. Každú prkotinu ako priame svetlo, nepriame svetlo /sekundárne, terciárne odrazy vnútri budovy/, primárne tiene, sekundárne-ambientné tiene, odrazy, reflexie, refrakcie, kaustika a sto ďalšieho musíte ošetriť samostatným kusom kódu, ďalšou vrstvou textúrou, mapou, pomocným bufferom. Namiesto jednej tatrovky 8x8 to vozíte tisícovkou fúrikov.

Je to strašne časovo náročné, prácne a v dnešných hrách s vysokou objektovou/materiálovou denzitou, pri stúpajúcioch nákladoch na vývoj hry je už rasterizácia na prekážku veci. Prekotúľali sme sa z neakcelerovanej rasterizácie /všetko na CPU, bežné i386-486/ ku akcelerovanej /3Dfx, PS2/ ďalej ku pixel shader-vertex shaderom až nakoniec ku dnešným unifikovaným SIMD jednotkám, ktoré nerozlišujú aký typ operácie od nich chceme. Ďalším krokom je úprava systému na zrýchlenie raytracingu /raytrace = sledovanie lúča = v skutočnosti ideme proti prírode, rekurzívne - opačne od vášho oka ku svetlu, 99% vyžiarených fotónov, ktoré až ku vám nedorazia, tie nepotrebujeme, ich prepočty by zahltili aj počítače NASA, vtedy hovoríme o Photon mappingu, tak o 20 rokov dovidenia/.

Raytracing je globálny systém nasvietenia. Štukneme vypínačom, svetlo sa rozbehne a auto-generuje priame svetlp, nepriame svetlo, tiene, ambientnú oklúziu, odrazy, fresnel. Akúkoľvek pitominu tam parametricky nastavíte a vaše GPU zvládne vypočítať. V modernom GPU zaberajú raster jednotky malú /maličkú/ časť, majoritu plochu obsadzujú vypočetné SIMD FPU pole. Tie sa upravia, tiež celý manažment pohybu dát. Raytracing v hernej dynamickej scéne je svojou filozofiou veľmi náročný na náhodný prístup k dátam, je rekurzívny a horšie paralelizovateĺný. Vlastne som popísal základné črty bežného CPU a v tom je ten ftip. GPU musíme trochu CPUfikovať. To necháme na inžinierov aby našli vhodný pomer koľko komu čoho ešte ponechať /raster klasika, shader SIMD klasika, raytracing moduly sa trochu pobijú o životný priestor/. Mark Cerny a AMD však pri PS5 GPU na niečo prídu, akcelerovať v raytracingu nemusíte hneď všetko, sme na samom začiatku, vyzrievať ta párada bude pomaly.

1984 - robot kráča už celých 35 rokov smerom ku raytracingu - 2019

Raytracing teda vie zrýchliť a zlacniť výrobu, pochopiteľne zlepší vizuál a umožní Kojimovi rýchlejšie prototypovanie /dôležité !/ a transformáciu Decima enginu n a Fox engine, ktorý ostal s Konami. Vážne to inak robí. Myslím, že nas čaká asi 10 ročné prechodové obdobie, v ktorom sa stane globálna iluminácia rutinnou záležitosťou. V tom istom období sa bude rozhodovať aj o tom, čo nahradí "polygón" ako základné primitívum. To je ale iný článok. Sledujem však nádejne sa vyvijajúci hybrid s rozkladom polygónov na tzv. Signed Distance Fields (SDFs) Tieto 2D/3D primitíva majú aj volumetrický, objemový, dokonca raytracing charakter. Systémovo dosť náročná vecička. Najdete ju v istej podobe v hernom engine Dreams /PS4/. Smiech. V pozadí sa nám deje toľko vecí, že nejaká RTX Nvidia je iba kvapka v mori.

Update: priložím aj niečo pre Amiga fanboys. Klasická animácia The Juggler by Eric Graham z roku 1986. Je to slučka zložená z 24 frejmov v HAM móde 4096 farieb /delta kompresia/. Snímky renderoval na bežnej Amige s 512KB RAM pomocou raytracera s názvom "SSG", čo frame to 60 minút, celé mu to teda trvalo presne 24 hodín. SGG je predchodca jeho dalšieho veľkého RT editora Sculpt 3D.

dnes to každá PC šunka zvládne v reálnom čase na 60fps+, 
bežná i7ka je minimálne 5 000 000 krát rýchlejšia ako tá amiga.