9. 9. 2020

Raytracing - So What the Fuss ?


Niekto sa na neogafe spýtal, čo vlastne s tým raytracingom toľko blbneme. Herný laik, bežný uživateľ. Či už nevedia ako z hráča dostať ďalšie peniaze. Otázka ma poslala do 20 rokov vzdialenej minulosti. V zozname priorít, ktoré trebalo rýchlo rozbehať na novom PC s Pentium 100@133Mhz bol na druhom mieste aj 3Ds Max. Modelovacie, animačné, render štúdio. Amiga sa tu už dosť rozťahovala s dvojtýždňovým renderingom jednej sklenenej gule na šachovnici. Nainštaloval som, neprečítal manuál, otvoril editor, milión položiek s nejasným významom, nahádzal objekty na scénu, stlačím render tlačítko a nič. Pridám materiály, stále iba čierna tma. Definujem svetlá. Render. Konečne niečo vidím. Kde sú tiene dopekla ? Opäť maturujem. Je to komplikované. Pod svetlom, tieňom, lomom, odrazom a ďalšími svetelnými fenoménami si 3D štúdio proste predstavuje kvalifikovane presné zadanie.

Oveľa krvopotnejšie sa pracuje so svetlom v hrách a to už od nepamäti, pretože hra /herný HW/ nedokáže spočítať propagáciu svetla a jeho interakciou so scénou v reálnom čase iba tak sama od seba. Všetko to teda robíte ručne, pracne a odhadom. Umelecký zámer. Robil som to takto občas aj v 3Ds Max. Fenomény super výpočetne časovo náročnej radiosity /sekundárne, terciárne odrazy/ som ľahko a rýchlo vyriešil šikovne umiestnenými lokalnými "farebnými" bodovkami. Manuálne umiestnenými. Aj toto fejkovanie je rutinnou súčasťou dnešných herných enginov. Všetci čakajú na raytracing v reálnom čase ako na spasenie.

Quake 1 - "lightmaps" ON/OFF

Staručký Quake, všetky textúry sú na svojom mieste. Na prvom obrázku rovnomerne osvetlené difúznym svetlom, ktoré nemá určenú polohu, smer a nevrhá tiene. Vyzerá to teda hnusne a bez tieňov /na ktoré však nemáte výkon/ by ste mali veľké problémy s hĺbkovým vnímaním obrazu. Lightmapa je vlastne statická "tieňová" textúra s "albedom" /určíte si ktoré časti základnej textúry sú viac či menej viditeľné/. A kedže na to váš herný engine nemá, tak si to musíte predpočítať. Ľubovoľným spôsobom vrátane raytracingu ! Lightmapa je iba ďalšia textúra, takže vám to zničí množstvo voľnej VRAM, zdecimuje jej priepustnosť a dorazí fillrate /pixely za sekundy/ vášho GPU. A teraz už viete prečo s Voodoo 1 s iba jednou textúrovacou jednotkou v Quake 1 dával práve 25fps /teoreticky 50fps s jednou aplikovanou textúrou, Quake však potreboval akurát tie dve/.

balík lightmáp vpravo - more textúr

Máme teda 3D model, tučné lightmapy, statické, v nízkom rozlíšení /zubaté a low res, objem dát musí pod kontrolou/. Panduľák teraz vystrelí, záblesk má osvetliť najbližšie okolie utopené vo fake tme predpočítanej lightmapy. Problém. Použiť ďalšiu lightmapu a blendovať /matematika s farbou pixelov/ alebo ak došla VRAM tak použiť nasvietenie polygónov v reálnom čase na úkor CPU ? Dostupný vertex lighting však ide po hranách vertexov polygónov a keď je polycount scény nízky, tak aj svetelný "výrez" do tmy sa bude neesticky lámať po riedko použitých polygónoch. Použijete metódu podľa toho, kde má HW ešte nejakú zvyšnú rezervu. Need for Speed 3 vám inak na PC pri nočných jazdách dáva na výber v nastavení grafiky predných reflektorov medzi voľbou peknej, oblej lightmapy /zbohom GPU, VRAM/ alebo realite vernejšiemu vertex nasvieteníu /ahoj CPU/. Playstation 1 verzia bežala iba na vertexoch.

Riešenie lomu svetla, fresnelu, zrkadlových odrazov, kaustiky je celá séria nešťastia a na každé jedno potrebujete pri rasterizácii špeciálne, samostatné riešenie. Vždy podvádzate, ladenie scény trvá nekonečne dlho. Je to ako hodinová rekompilácia po malej zmene kódu v programe. Predlžuje, zdražuje to vývoj, limituje hernú mechaniku /asi nemáme veľa hier kde si zrkadielkom čeknete chodbu spoza rohu, však/. Vraciam sa teda na začiatok ku 3Ds Max. Scéna, objekty, PBR materiály, svetla /globálne, lokálne/. Stlačím štart, fotóny si to obehajú a všetko je tak ako má byť - ostré priame tiene na slnku, rozplizlé nepriame pod stolom v izbe /ambientná oklúzia/, lomy, odrazy. Ak na scéne urobím nejakú zmenu, všetko sa uprace ako má v reálnom čase. Konečne máme dosť času okrem muklovania aj na umelecké vedenie obrazu.

Prichod raytracingu je zákonitá, evolučná vec. Svetlo v hrách je už priliš komplexná záležitosť, aby sme to riešili prostou rasterizáciou a išli hrubou silou cez fillrate GPU a veľkosť VRAM. Na druhej strane sa nám hromadí more CU /compute units/ v GPU. Môže teda dojsť ku veľkej paradigme, ku dejinnému zlomu a rasterizáciu nahradí raytracing na softvérovej /úprava herného SDK, grafickej art pipelajny hier/ a samozrejme hardvérovej masívnou prestavbou architektúry GPU. Nvidia je už v pokročilej fáze prechodu, keď sa jej v GPU tlačia 4 rôzne základné bloky pre výpočet rasterizácie, raytracingu, tensor a CU jadrá. Nielen pre nich je to ekonomicky na hrane, takže pretlačia tie nové render RT štandardy čo najskôr -  aj aby dosiahli zjednodušenie vlastných GPU. Ekonomika a podobne. Od prvého letu lietadla Wrightovcov ku pristátiu na mesiaci s Apollo 11 ubehlo iba 66 rokov. Predpokladám, že šprint z rasterizácie /naše quake lightmapy/ na plný raytracing prebehne za 1/10 toho času, ak sa časomiera spustí dnes.