Poglavlje 12: Globalna Iluminacija (Global Illumination)

Poglavlje 12: Globalna Iluminacija (Global Illumination)


Uvod

Zamislite sledecu scenu: stojite u beloj sobi sa jednim prozorom. Sunce sija napolje, ali vi ne gledate direktno u prozor -- okrenuti ste prema suprotnom zidu. Taj zid je, uprkos tome sto ga nijedan direktan zrak sunca ne dodiruje, ipak osvetljen. Toplom, mekanom svetloscu. Svetlost je usla kroz prozor, odbila se od poda, pa od plafona, pa ponovo od zidova, i tako stigla do tog suprotnog ugla. Ovaj fenomen -- svetlost koja se odbija od povrsina i osvetljava mesta koja direktno svetlo nikada ne bi dostiglo -- naziva se globalna iluminacija (Global Illumination, skraceno GI).

U prethodnom poglavlju (Poglavlje 10) detaljno smo obradili jednacinu renderovanja (rendering equation) i BRDF funkcije. Tamo smo videli da jednacina renderovanja ukljucuje integral po celoj hemisferi iznad svake tacke na povrsini -- sto znaci da ukljucuje svetlost koja dolazi sa svih mogucih pravaca, ne samo direktno od izvora svetlosti. Taj integral je upravo matematicki opis globalne iluminacije. U ovom poglavlju cemo istraziti kako se taj integral zapravo resava u praksi, od najskupljih "zlatnih standarda" do brzih aproksimacija koje koristi Unreal Engine 5.

Ovo poglavlje je jedno od najvaznijih u celoj knjizi. Razumevanje GI principa je kljuc za razumevanje zasto Lumen (Poglavlje 25) radi onako kako radi, zasto lightmape (Poglavlje 24) i dalje imaju smisla, i kako da donosite pametne odluke o osvetljenju u vasim projektima.


12.1 Sta je globalna iluminacija i zasto je vazna

Definicija

Globalna iluminacija je termin koji obuhvata sve metode za simulaciju indirektnog osvetljenja u sceni. Pod "indirektnim osvetljenjem" podrazumevamo svetlost koja je bar jednom odbijena od neke povrsine pre nego sto je stigla do tacke koju posmatramo.

Suprotnost globalnoj iluminaciji je lokalna iluminacija (local illumination), gde svaku tacku na povrsini osvetljavamo samo na osnovu direktnih izvora svetlosti, bez uzimanja u obzir odbijanja svetlosti od okolnih povrsina.

Zasto je GI vazna

Pogledajte bilo koju fotografiju stvarnog sveta. Primetite sledece:

  1. Senke nikada nisu potpuno crne. Cak i najdublja senka dobija nesto svetlosti od okolnih povrsina. Ovo je direktna posledica GI -- svetlost se odbija od poda, zidova, plafona i osvetljava oblasti u senci.

  2. Boje "krvare" na susedne povrsine (color bleeding). Stavite crvenu loptu na beli sto. Pogledajte pazljivo: beli sto oko lopte ima blagi crvenkasti ton. To je zato sto svetlost udara u crvenu loptu, odbija se (sada obojana crveno), i pogada beli sto. Ovaj efekat, poznat kao color bleeding ili prelivanje boja, je jedan od najociglednijih znakova prisustva (ili odsustva) GI u sceni.

  3. Prostorije sa prozorima su ravnomerno osvetljene. U stvarnosti, svetlost koja udje kroz prozor ne osvetljava samo mali patch na podu -- ona se odbija dalje i osvetljava celu sobu. Bez GI, sve osim tog jednog patch-a bi bilo u mrklom mraku.

  4. Ambient occlusion je prirodan. Uglovi i pukotine su tamniji jer manje indirektne svetlosti moze da dopre do njih. GI ovo racuna automatski kao deo simulacije.

  5. Osecaj dubine i volumena. GI daje objektima osecaj da zaista postoje u prostoru, da su okruzeni drugim objektima koji medjusobno uticu jedni na druge. Bez GI, objekti izgledaju kao da "lebde" u vakuumu.

Primer: Cornell Box

Klasican test za GI sisteme je Cornell Box -- jednostavna kutija sa belim plafonom i podom, crvenim levim zidom, zelenim desnim zidom, i jednim svetlom na plafonu. Ovaj test je dizajnirao Program for Computer Graphics na Univerzitetu Cornell 1984. godine.

Kad renderujete Cornell Box bez GI, dobijate:

Kad renderujete Cornell Box sa GI, dobijate:

Razlika je dramaticna i odmah uocljiva. Ovo je razlog zasto je GI neophodna za fotorealizam.

GI u kontekstu igara

Dugo je GI bio luksuz rezervisan za filmsku produkciju i offline renderovanje. Renderovanje jednog frame-a sa kvalitetnom GI moglo je da traje minutima ili satima. Igre su se oslanjale na razlicite trikove -- ambijentalno svetlo (ambient light), baked lightmape, light probe-ove -- da bi priblizno simulirale GI bez stvarnog izracunavanja.

Sa pojavom Unreal Engine 5 i sistema kao sto je Lumen, ta granica se sve vise pomera. Ali da bismo razumeli moderne sisteme, moramo prvo razumeti osnove -- pocevsi od razlike izmedju direktnog i indirektnog osvetljenja.


12.2 Direktno vs indirektno osvetljenje

Direktno osvetljenje (Direct Illumination)

Direktno osvetljenje je svetlost koja putuje direktno od izvora svetlosti do povrsine bez ijednog odbijanja. Ovo je relativno jednostavno za izracunavanje:

  1. Za svaki piksel na ekranu, odredite tacku na povrsini koju taj piksel predstavlja.
  2. Za svaki izvor svetlosti u sceni, proverite da li postoji direktna linija vidljivosti (line of sight) izmedju te tacke i izvora svetlosti.
  3. Ako postoji -- primenite BRDF jednacinu (iz Poglavlja 10) da izracunate koliko svetlosti ta tacka reflektuje prema kameri.
  4. Ako ne postoji (nesto blokira put) -- ta tacka je u senci tog svetla.

Ovo je model koji koristi vecina prostih shader-a. Phong shading, Blinn-Phong, pa cak i PBR (Physically-Based Rendering) u svojoj osnovnoj formi racunaju samo direktno osvetljenje.

Prednosti direktnog osvetljenja:

Mane:

Indirektno osvetljenje (Indirect Illumination)

Indirektno osvetljenje je svetlost koja je bar jednom odbijena od neke povrsine pre nego sto je stigla do posmatrane tacke. Ovo je "teska" komponenta jednacine renderovanja.

Zasto je teska? Zato sto da biste izracunali koliko indirektne svetlosti dolazi do jedne tacke, morate da znate koliko svetlosti emituje svaka druga tacka u sceni koja je vidljiva iz te tacke. Ali da biste to znali, morate izracunati koliko svetlosti svaka od tih tacaka prima -- ukljucujuci i indirektnu svetlost. Ovo je rekurzivni problem -- svaka tacka zavisi od svake druge tacke.

Matematicki, ovo je integro-diferencijalna jednacina (jednacina renderovanja iz Poglavlja 10):

L_o(x, ω_o) = L_e(x, ω_o) + ∫_Ω f_r(x, ω_i, ω_o) L_i(x, ω_i) cos(θ_i) dω_i

Gde je L_i(x, ω_i) -- dolazeca svetlost iz pravca ω_i -- zapravo odlazeca svetlost L_o neke druge tacke u sceni. Dakle, jednacina referise samu sebe. Ne postoji analiticko resenje za proizvoljnu scenu.

Koliko odbijanja (bounces) je dovoljno?

Kada svetlost udari u povrsinu, deo energije se apsorbuje, a deo se reflektuje. Reflektovana svetlost odlazi dalje, udara u drugu povrsinu, ponovo se delimicno apsorbuje, delimicno reflektuje... i tako dalje.

Prvo odbijanje (1st bounce) je daleko najvaznije. Ono nosi najvecu kolicinu energije i najodgovornije je za kljucne vizualne efekte kao sto su color bleeding i osvetljenje sencanih oblasti. U vecini scena, prvo odbijanje nosi 60-80% ukupne indirektne energije.

Drugo odbijanje (2nd bounce) je i dalje vidljivo, ali znatno slabije. Ono dodaje suptilnu mekocu i koherentnost osvetljenju.

Trece i dalja odbijanja imaju sve manji uticaj. U prakticnim real-time primenama, retko je potrebno vise od 2-3 odbijanja da bi scena izgledala ubedljivo. Izuzetak su zatvoreni prostori sa jako reflektivnim povrsinama, gde svetlost moze da "skace" mnogo puta pre nego sto se potpuno apsorbuje.

Ovo je posledica zakona o ocuvanju energije -- svaka povrsina apsorbuje deo svetlosti, pa svako naredni bounce nosi manje energije od prethodnog. Matematicki, ako je prosecni albedo scene a (procenat svetlosti koji se reflektuje), onda n-to odbijanje nosi priblizno a^n energije. Za tipican albedo od 0.5, trece odbijanje nosi samo 0.5^3 = 12.5% energije prvog bounce-a.

Vizuelno poredjenje

Da bismo ilustrovali razliku, zamislite sledecu scenu: bela soba, jedno svetlo na plafonu, crvena lopta na podu.

Osvetljenje Opis
Samo direktno Gornji deo lopte osvetljen, donji potpuno crn. Pod oko lopte ima ostru crnu senku. Zidovi koji ne "vide" svetlo su crni.
Direktno + 1 bounce Donji deo lopte dobija blagu svetlost od poda. Senka na podu je meksa. Zidovi su blago osvetljeni. Pod oko lopte ima blagi crvenkasti ton.
Direktno + 2 bounce-a Jos mekse senke. Plafon oko svetla dobija topliji ton od svetlosti koja se odbila od poda. Cela scena je koherentnija.
Direktno + beskonacno bounce-ova "Ground truth" -- potpuno fizicki tacna simulacija. Razlika izmedju ovoga i 3 bounce-a je minimalna za vecinu scena.

12.3 Path Tracing -- zlatni standard

Koncept

Path tracing je algoritam koji resava jednacinu renderovanja na najdirektniji moguci nacin: simulacijom puteva (paths) svetlosti od kamere, kroz scenu, do izvora svetlosti.

Algoritam radi ovako:

  1. Za svaki piksel na ekranu, "ispucajte" zrak (ray) iz kamere kroz taj piksel.
  2. Taj zrak udara u prvu povrsinu u sceni. Na mestu udara, generise se nov pravac -- nasumicno, prema distribuciji koja odgovara BRDF-u te povrsine.
  3. Zrak nastavlja u novom pravcu, udara u sledecu povrsinu, ponovo se odbija...
  4. Ovo se ponavlja dok zrak ne pogodi izvor svetlosti (i prenese tu energiju nazad duz celog puta) ili dok se energija ne iscrpi posle mnogo odbijanja.

Svaki ovakav put od kamere do svetla naziva se path (putanja). Za jedan piksel, tracira se mnogo putanja (uzoraka -- samples), i njihov prosek daje konacnu boju piksela.

Monte Carlo integracija

Path tracing koristi Monte Carlo integraciju za resavanje integrala iz jednacine renderovanja. Umesto da analitickim putem resava integral (sto je nemoguce za proizvoljne scene), Monte Carlo metod uzima nasumicne uzorke i prosekom tih uzoraka aproksimira vrednost integrala.

Kljucna svojstva Monte Carlo integracije:

Zasto je path tracing spor

Konvergencija od 1/√N je fundamentalni problem. Da biste dobili vizuelno cistu sliku, potrebno je tipicno 256-4096 uzoraka po pikselu (SPP -- Samples Per Pixel), a za slozene scene (kaustike, volumetrija) moze biti potrebno 10.000+ SPP.

Za sliku rezolucije 1920x1080:

Cak i sa modernim GPU-ovima, ovo zahteva sekunde do minuta po frame-u. Za offline renderovanje (filmovi, arhitekturska vizualizacija), ovo je prihvatljivo. Za real-time (igre na 30-60 fps), ovo je i dalje neizvodljivo za punu rezoluciju i kvalitet.

Importance sampling

Jedna kljucna optimizacija u path tracing-u je importance sampling -- umesto da saljete zrake u potpuno nasumicnim pravcima, usmeravate ih u pravcima koji ce verovatno vise doprineti konacnom rezultatu.

Na primer:

Importance sampling dramaticno ubrzava konvergenciju bez uvodjenja pristrasnosti (bias-a).

Multiple Importance Sampling (MIS)

MIS je tehnika koju je predlozio Eric Veach 1995. godine. Ideja je da kombinujete vise strategija sampliranja (npr. BRDF sampling i light sampling) i za svaki uzorak izaberete optimalan tezinski faktor. Ovo smanjuje varijansu (sum) u situacijama gde nijedna pojedinacna strategija ne radi dobro -- na primer, za male ali jake izvore svetlosti na sjajnim ali ne savrseno glatkim povrsinama.

Denoising

Moderna praksa u offline i real-time path tracing-u koristi denoiser-e -- algoritme koji uklanjaju sum iz slike sa malim brojem uzoraka. Ovi algoritmi koriste informacije iz auxiliary buffer-a (normale, dubina, albedo) da bi razlikovali sum od stvarnog detalja.

Popularni denoiser-i:

Path Tracing u Unreal Engine 5

UE5 ima ugradjeni Path Tracer koji se koristi kao referentni renderer. Aktivira se preko Project Settings > Engine > Rendering > Path Tracing ili komandom r.RayTracing.PathTracing 1 u konzoli. Takodje je dostupan kroz Viewport opcije kao "Path Tracing" view mode.

Vazno: Path Tracer u UE5 je namenjen za:

Nije namenjen za real-time gameplay renderovanje. Medjutim, izuzetno je koristan kao alat za validaciju -- ako vasa scena izgleda dobro u Path Tracer-u ali lose u Lumen-u, znate da je problem u Lumen podesavanjima, ne u samom osvetljenju scene.

UE5 Path Tracer podrzava:


12.4 Photon Mapping

Koncept

Photon mapping je dvoprolazni (two-pass) algoritam za globalnu iluminaciju koji je razvio Henrik Wann Jensen 1996. godine. Dizajniran je da efikasno resi probleme koje path tracing tesko resava, posebno kaustike (caustics) -- fokusirane uzorke svetlosti nastale prelamanjem ili refleksijom kroz/od zakrivljenih povrsina (npr. svetlosni uzorci na dnu bazena).

Dva prolaza

Prolaz 1: Emisija fotona (Photon Tracing)

U prvom prolazu, algoritam simulira emisiju fotona iz izvora svetlosti:

  1. Iz svakog svetla "ispucajte" milione fotona u svim pravcima (ili prema distribuciji svetla).
  2. Svaki foton nosi odredjenu kolicinu energije i informaciju o boji.
  3. Foton putuje kroz scenu, odbija se od povrsina (koristeci BRDF za odredjivanje novog pravca), i na svakom odbijanju se "cuvaju" informacije o poziciji, pravcu i energiji u specijalnoj strukturi podataka -- photon map-i.
  4. Da bi se odlucilo da li se foton apsorbuje ili reflektuje na svakom odbijanju, koristi se Russian Roulette tehnika -- nasumicno se odlucuje na osnovu albeda povrsine.

Photon mapa je obicno organizovana kao kd-tree (k-dimensional tree) za efikasno prostorno pretrazivanje.

Tipicno se koriste dve odvojene photon mape:

Prolaz 2: Sakupljanje (Gathering / Rendering)

U drugom prolazu, scena se renderuje sa stanovista kamere:

  1. Za svaki piksel, ispucajte zrak iz kamere i nadjite presek sa scenom.
  2. Na tacki preseka, pretrazite photon mapu da nadjete N najblizih fotona.
  3. Procenite gustinu svetlosne energije na osnovu tih fotona (kernel density estimation).
  4. Kombinujte sa direktnim osvetljenjem za konacnu boju piksela.

Kaustike

Kaustike su oblast gde photon mapping blista. Path tracing ima velikih problema sa kaustikama jer su to svetlosni putevi tipa L-S*-D-E (Light -> Specular bounces -> Diffuse -> Eye), a verovatnoca da nasumicni path nadje takav put je izuzetno mala.

Photon mapping ovaj problem resava elegantno -- fotoni se emituju iz svetla, prirodno se fokusiraju kroz spekularne povrsine, i zavrsavaju na difuznim povrsinama gde se memorisu. Gathering faza ih zatim pokupi.

Primeri kaustika u stvarnosti:

Prednosti i mane

Prednosti:

Mane:

Upotreba u praksi

Photon mapping se danas koristi pretezno u offline renderovanju, posebno u scenama sa izrazenim kaustikama (arhitekturska vizualizacija sa staklenim elementima, renderovanje nakita, podvodne scene). U real-time primenama prakticki se ne koristi zbog memorijskih zahteva i kompleksnosti implementacije.

Unreal Engine 5 ne koristi photon mapping kao deo svog rendering pipeline-a. Medjutim, koncept je vazan za razumevanje jer se slicne ideje (emitovanje i cuvanje svetlosnih informacija u prostoru) pojavljuju u modernim tehnikama poput radiance caching-a koji Lumen koristi (vise u Poglavlju 25).


12.5 Radiosity

Koncept

Radiosity je metod za izracunavanje globalne iluminacije koji se zasniva na metodi konacnih elemenata (finite element method). Umesto da prati individualne zrake ili fotone, radiosity deli sve povrsine u sceni na male delove -- patch-eve (zakrpe) -- i racuna koliko svetlosti svaki patch prenosi na svaki drugi patch.

Radiosity je prvi put primenjen u kompjuterskoj grafici 1984. godine (Goral et al.), inspirisan istoimenom tehnikom iz termodinamike i prenosa toplote.

Matematicki osnov

Osnovna jednacina radiosity-ja je:

B_i = E_i + ρ_i * Σ_j (F_ij * B_j)

Gde je:

Form factor F_ij je geometrijski faktor koji odredjuje koliki deo svetlosti sa patch-a j moze da stigne do patch-a i. Zavisi od:

Ovo formira sistem linearnih jednacina koji se moze resiti iterativno (npr. Gauss-Seidel metodom) ili direktno (matricnom inverzijom, ali ovo je neprakticno za velike scene).

Form factor izracunavanje

Izracunavanje form factor-a je najskuplji deo radiosity metoda. Za N patch-eva, postoji N^2 form factor-a (svaki patch prema svakom drugom). Za scenu sa 100.000 patch-eva, to je 10 milijardi form factor-a.

Metode za izracunavanje:

Iterativno resavanje

Umesto da se odmah resava ceo sistem jednacina, koristi se iterativni pristup:

  1. Inicijalizacija: Svi patch-evi imaju radiosity jednak emitovanoj energiji (samo svetla imaju nenultu vrednost).
  2. Iteracija: Za svaki patch, izracunajte koliko svetlosti prima od svih ostalih patch-eva i azurirajte njegov radiosity.
  3. Ponavljanje: Iteracije se ponavljaju dok se vrednosti ne stabilizuju (konvergiraju).

Svaka iteracija efektivno dodaje jedan bounce indirektnog osvetljenja. Posle 3-4 iteracije, vecina scena konvergira dovoljno.

Prednosti i mane

Prednosti:

Mane:

Istorijski znacaj u igrama

Radiosity je imao ogroman uticaj na industriju igara, posebno krajem 1990-ih:

Koncept "izracunaj GI offline, sacuvaj u teksturu (lightmapu), koristi u real-time-u" je u sustini radiosity pristup i i dalje se koristi danas (vise u Poglavlju 24 o lightmapama).


12.6 Irradiance Probes / Light Probes

Koncept

Light probes (svetlosne sonde) su tacke u prostoru koje memorisu informacije o osvetljenju iz svih pravaca. Umesto da racunate GI za svaki piksel u real-time-u, postavite probe-ove na strateska mesta u sceni, jednom izracunate (ili bake-ujete) osvetljenje na tim tacakama, i onda u runtime-u svaki piksel jednostavno interpolira izmedju najblizih probe-ova.

Postoje dva glavna tipa:

Reflection Probes (Cubemap probes)

Reflection probes memorisu scenu kao cubemap -- sest tekstura koje cine kocku oko pozicije probe-a. Ovo se koristi pretezno za spekularne refleksije (environment mapping).

U UE5, reflection probes su implementirani kao Sphere Reflection Capture i Box Reflection Capture actor-i. Oni memorisu okolinu kao filtrirani cubemap sa vise MIP nivoa:

Irradiance Probes (Diffuse probes)

Irradiance probes memorisu difuzno osvetljenje koristeci kompaktne reprezentacije, najcesce sferne harmonike (Spherical Harmonics, SH).

Sferne harmonike su bazne funkcije na sferi, analogne Furijevim transformacijama na krugu. Koristeci samo prvih nekoliko SH koeficijenata (tipicno L2, sto je 9 koeficijenata po kanalu boje, ukupno 27 float vrednosti), mozete dovolino tacno predstaviti glatku varijaciju difuznog osvetljenja iz svih pravaca.

Zasto SH?

Light Probe mreze u UE5

UE5 koristi volumetrijske irradiance probe mreze za staticne objekte:

  1. Volumetric Lightmap: Automatski generisana 3D mreza probe-ova. U procesu bake-ovanja (Poglavlje 24), indirektno osvetljenje se izracunava na svakom probe-u i cuva kao SH koeficijenti. Ovo se koristi za dinamicke objekte koji se krecu kroz staticki osvetljenu scenu.

  2. Irradiance Volume (legacy): Stariji sistem gde rucno postavljate volume u scenu i definisete gustinu probe-ova.

Za dinamicke probe-ove, Lumen koristi sopstveni sistem (screen-space i world-space radiance cache) koji cemo detaljno obraditi u Poglavlju 25.

Interpolacija

Kada objekat stoji izmedju probe-ova, engine interpolira osvetljenje izmedju najblizih probe-ova. Tipicno se koristi:

UE5 Volumetric Lightmap koristi tetrahedral interpolaciju za bolje rezultate u prostorima sa kompleksnom geometrijom.

Ogranicenja probe-ova

Light leaking je najcesci problem sa probe-ovima. Ako je probe postavljen na jednoj strani tankog zida, a objekat na drugoj, interpolacija moze da "procuri" -- objekat dobije osvetljenje sa pogresne strane zida. Ovo se manifestuje kao:

Resenja za light leaking:

Niska rezolucija je inherentno ogranicenje -- probe-ovi memorisu prosecno osvetljenje u svojoj okolini. Ne mogu da uhvate ostre senke ili precizne osvetljene detalje. SH baze sa L2 redom mogu da predstave samo veoma glatke varijacije (najvise "toplija s jedne strane, hladnija s druge" tip gradijenta).

Staticki sadrzaj: Baked probe-ovi ne reaguju na promene u sceni (pomeren objekat, ugaseno svetlo). Za dinamicno osvetljenje potrebni su runtime-updated probe-ovi (poput onih u Lumen-u ili DDGI-ju).


12.7 Voxel-Based Global Illumination (VXGI)

Koncept

Voxel-based GI (VXGI) je pristup globalnoj iluminaciji koji konvertuje scenu u 3D mrezu voksela (volumetrijskih piksela), a zatim koristi cone tracing ili ray marching kroz tu mrezu za izracunavanje indirektnog osvetljenja.

Ideja je sledeca: umesto da traciramo zrake kroz originalni mesh scene (skupo), traciramo ih kroz pojednostavljenu voxel reprezentaciju (jeftinije, sa pribliznim rezultatima).

Voxelizacija scene

Prvi korak je pretvaranje geometrije scene u voxel grid:

  1. Odredite bounding box celog sveta (ili relevantnog dela).
  2. Podelite ga u regularnu 3D mrezu rezolucije NxNxN (tipicno 128, 256 ili 512 voksela po osi).
  3. Za svaki trougao u sceni, odredite koje voksele preseca i upisite informacije o materijalu (boju, emisiju, normalu) u te voksele.
  4. Za dinamicnu scenu, ovaj korak se mora ponoviti svaki frame (ili se revoxelizuju samo promenjeni delovi).

Voxel grid se tipicno cuva kao 3D tekstura na GPU-u, sto omogucava efikasan pristup u shader-ima.

Voxel Cone Tracing

Umesto da traciramo tanke zrake (sto bi zahtevalo mnogo uzoraka), VXGI koristi cone tracing -- tracing konus (konusa) kroz voxel grid:

  1. Na svakoj tacki povrsine, "ispucajte" nekoliko konusa u razlicitim pravcima (tipicno 5-9 konusa za difuzno osvetljenje).
  2. Kako konus putuje dalje od povrsine, on postaje sve siri, pokrivajuci sve veci volumen.
  3. Na vecim rastojanjima, koristite MIP nivoe voxel 3D teksture (coarser rezolucija), sto prirodno odgovara sirem konusu.
  4. Akumulirajte svetlost i okluziju duz konusa.

Ova tehnika se zove cone tracing i intuitivno aproksimira integraciju po hemisferi -- svaki konus pokriva deo hemisfere, i svi konusi zajedno pokrivaju celu hemisferu (ili bar njen veci deo).

Za spekularne refleksije, koristi se uzi konus u pravcu refleksije (umesto difuznih sirokih konusa).

NVIDIA VXGI

NVIDIA VXGI je bila referentna implementacija voxel GI od strane NVIDIA-e, dostupna kao middleware za integraciju u game engine-e. Bila je demonstrirana u nekoliko tech demo-a (npr. "Voxel Global Illumination" demo 2014. godine) i integrisana u neke verzije Unreal Engine-a (UE4 fork).

Karakteristike NVIDIA VXGI:

Prednosti VXGI

Mane VXGI

Status u UE5

Unreal Engine 5 ne koristi VXGI kao deo svog standardnog rendering pipeline-a. Lumen koristi drugaciji pristup (software ray tracing kroz Signed Distance Fields i hardware ray tracing) koji izbegava ogranicenja voxel pristupa, posebno problem niske rezolucije.

Medjutim, ideja voxelizacije scene za brzi ray tracing se i dalje koristi u razlicitim formama. Na primer, Lumen-ov Global SDF (Signed Distance Field) je konceptualno slican voxel grid-u u tome sto predstavlja pojednostavljenu verziju scene za brze queries.


12.8 Real-Time aproksimacije: pregled metoda

Sve prethodno opisane metode (path tracing, photon mapping, radiosity, VXGI u punom kvalitetu) su ili preskupe za real-time ili imaju znacajna ogranicenja. U praksi, igre koriste razlicite aproksimacije koje zrtvuju tacnost zarad brzine. Pogledajmo najcesce.

12.8.1 Screen-Space Global Illumination (SSGI)

SSGI koristi informacije koje vec postoje u screen buffer-ima (G-buffer: pozicija, normala, boja, dubina) da bi aproksimirao jedno odbijanje indirektne svetlosti.

Kako radi:

  1. Za svaki piksel, ispucajte nekoliko zraka u screen space-u (koriscenjem depth buffer-a za aproksimaciju geometrije).
  2. Ako zrak pogodi neku povrsinu (tj. nadje piksel u depth buffer-u koji je na tom pravcu), "pokupi" boju tog piksela kao indirektnu svetlost.
  3. Kombinujte doprinose svih zraka za konacno indirektno osvetljenje.

SSGI je konceptualno slican SSAO-u (Screen-Space Ambient Occlusion) -- oba rade u screen space-u koristeci depth buffer. Ali dok SSAO samo racuna okluziju (koliko je tacka zaklonjena okolnom geometrijom), SSGI koristi i boje okolnih piksela za indirektno osvetljenje.

Prednosti SSGI:

Mane SSGI:

U UE5: Lumen koristi screen-space tracing kao jedan od svojih izvora podataka (u kombinaciji sa world-space tehnikama), cime prevazilazi ogranicenja cistog SSGI-ja. Cist SSGI je i dalje opcija u nekim engine-ima ali sam po sebi nije dovoljan za ubedljivu GI.

12.8.2 Probe-Based GI (DDGI i slicni sistemi)

Napredak u GPU snazi i ray tracing hardveru omogucio je razvoj dinamickih probe sistema koji azuriraju probe-ove u real-time-u.

DDGI (Dynamic Diffuse Global Illumination) je metod razvijen u NVIDIA Research-u (2019, Majercik et al.) koji azurira mrezu irradiance probe-ova koristeci hardware ray tracing:

  1. U svakom frame-u, iz svakog probe-a ispucajte mali broj zraka (tipicno 128-256) u nasumicnim pravcima koristeci hardware RT jezgra.
  2. Na osnovu pogodaka, azurirajte probe podatke (irradiance i dubinu).
  3. Za renderovanje, interpolirajte izmedju probe-ova kao i kod staticnih probe-ova.

Prednosti DDGI:

Mane DDGI:

Varijacije:

12.8.3 Lightmape (Baked Indirect Lighting)

Lightmape su teksture koje memorisu pre-izracunato indirektno osvetljenje na povrsinama staticnih objekata. Ovo je najstarija i najsire koriscena metoda za GI u igrama.

Kako radi:

  1. Offline (bake faza): Engine pokrece GI solver (radiosity, path tracing, ili hibrid) za celu scenu. Rezultat -- indirektno osvetljenje na svakoj tacki staticnih povrsina -- se zapisuje u posebne UV-mapirane teksture (lightmape).
  2. Runtime: Shader jednostavno cita lightmapu kao teksturu i dodaje tu vrednost na direktno osvetljenje. Ovo je izuzetno jeftino -- samo jedan texture fetch.

Prednosti:

Mane:

Lightmapama je posveceno celo Poglavlje 24, gde cemo detaljno obraditi UE5-ov lightmap bake sistem, podesavanja kvaliteta, optimizaciju, i resavanje cestih problema.

12.8.4 Lumen (UE5 hybrid pristup)

Lumen je UE5-ov sistem za globalnu iluminaciju i refleksije u realnom vremenu. Nije zasebna tehnika vec hibridni sistem koji kombinuje vise metoda:

Lumen pokusava da resi ono sto je dugo smatrano nemogucim -- real-time, dinamicna, visoko-kvalitetna GI. O Lumen-u detaljno govorimo u Poglavlju 25, ali vredi pomenuti da razumevanje svih prethodno opisanih tehnika (path tracing, probe-ovi, screen-space metode, lightmape) je neophodno za razumevanje zasto je Lumen dizajniran onako kako jeste i koje kompromise pravi.


12.9 Trougao kompromisa: kvalitet, performanse, dinamicnost

Tri dimenzije

Kroz celu istoriju real-time renderovanja, GI se suocavao sa fundamentalnim kompromisom izmedju tri dimenzije:

  1. Kvalitet (Quality): Koliko se rezultat priblizava fizicki tacnom resenju? Koliko bounce-ova? Kolika rezolucija? Ima li artefakata?

  2. Performanse (Performance): Koliko je brzo? Koliko milisekundi po frame-u? Moze li da radi na 60 fps? Na kojim platformama?

  3. Dinamicnost (Dynamism): Da li GI reaguje na promene u sceni? Pokretne objekte? Promene svetla? Destrukciju okoline?

Istorijski kompromisi

Tradicija je bila: izaberite dva, zrtvujte trece.

Lightmape: kvalitet + performanse, ali ne dinamicnost. Lightmape daju odlican kvalitet (jer se bake-uju offline sa skupim algoritmima) i izvrsne performanse (samo texture fetch). Ali su potpuno staticne -- nista se ne moze menjati u runtime-u.

SSGI: performanse + dinamicnost, ali ne kvalitet. SSGI je brz i potpuno dinamican, ali kvalitet je ogranicen (samo vidljive povrsine, jedan bounce, artefakti).

Path tracing: kvalitet + dinamicnost, ali ne performanse. Path tracing daje tacno resenje i radi sa potpuno dinamicnim scenama, ali je daleko prespor za real-time.

VXGI: dinamicnost + (prihvatljiv) kvalitet, ali performanse su skupo. VXGI je dinamican i daje pristojne rezultate, ali zahteva znacajne GPU resurse, posebno na visim rezolucijama.

Vizuelni dijagram

                    KVALITET
                       /\
                      /  \
                     /    \
                    / Path \
                   / Tracing\
                  /    *     \
                 /            \
                / Lightmape    \
               /     *         \
              /                 \
             /      LUMEN?       \
            /        *           \
           /                      \
          /    VXGI *    SSGI *    \
         /                         \
        /____________________________\
   PERFORMANSE                  DINAMICNOST

Lumen-ov pokusaj

Lumen pokusava da bude sto blize centru ovog trougla -- da pruzi razuman kvalitet, sa prihvatljivim performansama, uz potpunu dinamicnost. Naravno, kompromisi postoje:

Razumevanje ovog trougla vam pomaze da donosite pametne odluke u vasim projektima:


12.10 Bounce count -- detaljna analiza

Zasto je prvi bounce najvazniji

Vec smo pomenuli da prvo odbijanje svetlosti nosi najvise energije. Hajde da ovo sagledamo detaljnije.

Zamislite scenu sa jednim directional light-om (Sunce) koje osvetljava sobu kroz prozor:

Nulti bounce (direct lighting only):

Prvi bounce:

Drugi bounce:

Treci bounce i dalje:

Matematicka analiza

Za scenu sa prosecnim albedo-om a (tipicno 0.3-0.7 za vecinu materijala):

Bounce Relativna energija Za a=0.5 Za a=0.3 Za a=0.7
1. a 50% 30% 70%
2. a^2 25% 9% 49%
3. a^3 12.5% 2.7% 34.3%
4. a^4 6.25% 0.81% 24%
Ukupno (beskonacno) a/(1-a) 100% 42.8% 233%

Primecujete da za tipicne scene (a ~ 0.5), vec posle 2 bounce-a imate 75% ukupne indirektne energije. Za tamnnije scene (a ~ 0.3), vec posle 1 bounce-a imate 70% ukupne indirektne energije.

Izuzetak: visoko reflektivne scene. Za scene sa albedo-om blizu 1 (bele sobe, sneg), veci broj bounce-ova je znatno vazniji. U potpuno beloj sobi (a ~ 0.9), treci bounce i dalje nosi 72.9% energije prvog bounce-a.

Prakticne preporuke za UE5

Kada trebate vise bounce-ova

Kada je jedan bounce dovoljan


12.11 Napredni koncepti

Caustics

Kaustike su fokusirani svetlosni uzorci nastali prelamanjem (refrakcijom) ili refleksijom svetlosti kroz/od zakrivljenih povrsina. Primeri:

Kaustike su jedan od najtezih GI efekata za real-time renderovanje jer zahtevaju pravilno pracenje svetlosnih puteva kroz spekularne povrsine. Path tracing ih moze resiti (sa dovoljno uzoraka), photon mapping ih resava efikasno, ali vecina real-time metoda (SSGI, probe-ovi, lightmape za difuzno) ih ignorise.

UE5 Lumen trenutno nema podrsku za kaustike u real-time modu. UE5 Path Tracer ih podrzava za offline renderovanje.

Volumetrijski GI

Svetlost se ne odbija samo od cvrstih povrsina -- takodje se rasipa u medijumu (vazduh sa cesticama, magla, oblaci, podvodne scene). Volumetrijski GI uzima u obzir ovu rasprsivanje (scattering):

UE5 Volumetric Fog system podrzava single scattering sa light-ovima u sceni. Za multiple scattering u volumetrijskim oblacima, UE5 koristi poseban volumetric cloud system.

Emissive GI

Emissive materijali (materijali koji sami emituju svetlost -- ekrani, neonski znakovi, lava) mogu da sluze kao izvori indirektnog osvetljenja. Ovo je oblast gde Lumen blista -- emissive povrsine mogu da osvetljavaju svoju okolinu u real-time-u, sto je bilo gotovo nemoguce sa lightmapama (jer bi svaka promena emissive materijala zahtevala re-bake).

Da bi emissive GI radio efikasno u Lumen-u, emissive materijali moraju biti registrovani u Lumen-ovom surface cache-u. Za jake emissive efekte, ponekad je bolje koristiti pravo svetlo (point/spot light) umesto emissive materijala, jer svetla imaju direktniji put u osvetljenju scena.

Temporal accumulation

Mnogi moderni GI sistemi (ukljucujuci Lumen) koriste temporalnu akumulaciju -- akumuliraju podatke iz vise frame-ova da bi poboljsali kvalitet. Ovo je efektivni nacin da dobijete vise uzoraka bez povecanja cost-a po frame-u:

Ovim pristupom, stacionarna kamera postepeno konvergira ka veoma kvalitetnom GI. Cena je latencija -- kad se scena promeni (pokretanje objekta, promena svetla), potrebno je nekoliko frame-ova da GI konvergira ka novom stanju. Ovo se manifestuje kao blago "kaskanje" GI za promenama u sceni.

Hybrid Approaches -- buducnost GI

Moderni trend u GI je hibridizacija -- kombinovanje vise tehnika, svake za ono u cemu je dobra:

Ovo je upravo pristup koji Lumen koristi, i razlog zasto je razumevanje svake pojedinacne tehnike vazno -- svaka igra svoju ulogu u celovitom sistemu.


12.12 Prakticni saveti za UE5 developere

Izbor GI metode u UE5

UE5 nudi nekoliko opcija za globalnu iluminaciju:

Metoda Dinamicna? Kvalitet Cost Preporucena za
Baked Lightmaps (Lightmass) Ne Visok Nizak (runtime) Mobilne igre, staticne scene
Lumen (Software) Da Srednji-Visok Srednji Vecina PC/konzolnih igara
Lumen (Hardware RT) Da Visok Visok High-end PC, next-gen konzole
Path Tracer Da Najvisi Veoma visok Offline renderovanje, reference
Bez GI (samo ambient) N/A Nizak Najnizi Stilizovane igre, niski budzet

Ceste greske

  1. Koristenje Lumen-a na mobilnim uredjajima. Lumen nije podrzana na mobilnim platformama (do verzije 5.4). Za mobilne igre, koristite lightmape i light probe-ove.

  2. Ocekivanje instantne GI reakcije. Lumen ima inherentnu latenciju od nekoliko frame-ova. Ne ocekujte da ce eksplo-zija odmah osvetliti celu sobu -- bice kratkotrajnog "lag-a".

  3. Ignorisanje lightmap UV-ova za bake. Cak i ako koristite Lumen za GI, lightmap UV-ovi su i dalje vazni za druge sisteme (npr. baked shadows na staticnim objektima).

  4. Previse emissive GI. Jako emissive materijali mogu da "presjaje" celu scenu preko Lumen-ovog indirektnog osvetljenja. Koristite umerene vrednosti ili kontrolisite doprinos putem Lumen > Emissive Scaling.

  5. Mesanje baked i Lumen GI bez razumevanja interakcije. Moguce je koristiti i lightmape i Lumen u istoj sceni, ali ovo zahteva pazljivo podesavanje da ne bi doslo do dupliranja indirektnog osvetljenja.

Debugging GI u UE5

UE5 pruza odlicne alate za vizualizaciju GI:

Profilisanje GI cost-a

Za merenje performansnog uticaja GI:

  1. Koristite stat GPU konzolnu komandu za pregled GPU timings-a.
  2. Obratite paznju na Lumen kategoriju u GPU profiler-u.
  3. Koristite Unreal Insights za detaljnu analizu per-frame cost-a.
  4. Iskljucite GI (r.Lumen.DiffuseIndirect.Allow 0) i uporedite performanse da vidite koliki deo budzeta GI zauzima.

12.13 Istorijski pregled GI u igrama

Razumevanje istorije GI u igrama pomaze da cenimo koliko je napredak uradjen i zasto su odredjene odluke donete.

Era pre GI (pre 1997.)

U ranim 3D igrama (Doom, Quake 1), osvetljenje je bilo potpuno staticno i rucno postavljeno. Svaka povrsina je imala fiksiranu boju ili jednostavan gradient. Nije postojalo nikakvo indirektno osvetljenje. Ambijent je bio uniformna konstanta koja se dodavala svim pikselima.

Lightmap era (1997-2010.)

Quake II (1997.) je uveo radiosity-bazirane lightmape. Ovo je bila revolucija -- scene su odjednom izgledale neuporedivo realnije. Ovaj pristup je dominirao igrackom industrijom vise od decenije.

Kljucni naslovi:

Screen-space era (2007-2015.)

Crytek je 2007. predstavio SSAO (Screen-Space Ambient Occlusion) u Crysis-u. Ovo je bio prvi korak ka real-time aproksimaciji GI efekata. Sledile su naprednije varijante:

Probe i voxel era (2012-2020.)

Lumen era (2020+)

UE5-ov Lumen je postavio novu granicu za real-time GI u igrama. Iako nisu sve igre usvojile Lumen (mnoge i dalje koriste lightmape iz performansnih razloga), Lumen je demonstrirao da je potpuno dinamicna GI visokog kvaliteta izvodljiva na konzolama i mid-range PC hardveru.


12.14 Poredjenje metoda -- sveobuhvatna tabela

Metoda Dinamicna Multi-bounce Spekularna Memory GPU cost Kvalitet Kaustike
Path Tracing Da Da (beskonacno) Da Nizak Veoma visok Najvisi Da
Photon Mapping Da Da Delimicno Visok Visok (offline) Visok Da (odlicno)
Radiosity Ne (bake) Da Ne Visok Offline Visok (difuzno) Ne
Lightmape Ne (bake) Da (baked) Ne Srednji-Visok Minimalan Visok Ne
Light Probes Delimicno Baked/1-2 Ne Nizak Nizak Srednji Ne
VXGI Da Da (2-3) Delimicno Visok Visok Srednji Ne
SSGI Da 1 bounce Delimicno Nizak Srednji Nizak-Srednji Ne
DDGI Da 1-2 bounce Ne Srednji Srednji Srednji Ne
Lumen Da Da (visestruki) Da Srednji Srednji-Visok Srednji-Visok Ne

12.15 Kljucni pojmovi

Termin Objasnjenje
Global Illumination (GI) Simulacija indirektnog osvetljenja -- svetlosti koja se odbija od povrsina u sceni.
Direct Illumination Svetlost koja putuje direktno od izvora do povrsine, bez odbijanja.
Indirect Illumination Svetlost koja je bar jednom odbijena od neke povrsine pre nego sto je stigla do posmatrane tacke.
Bounce Jedno odbijanje svetlosti od povrsine. Visestruki bounce-ovi formiraju indirektno osvetljenje.
Color Bleeding Efekat gde boja jedne povrsine "preliva" na susedne povrsine kroz indirektno osvetljenje.
Path Tracing GI metod koji simulira puteve svetlosti od kamere do izvora, koristeci Monte Carlo integraciju.
Monte Carlo Integration Statisticka metoda za aproksimaciju integrala koristeci nasumicne uzorke.
Samples Per Pixel (SPP) Broj uzoraka (putanja) koji se traciraju za svaki piksel. Vise = manje suma, ali sporije.
Importance Sampling Tehnika gde se uzorci usmeravaju ka pravcima koji vise doprinose rezultatu, ubrzavajuci konvergenciju.
Multiple Importance Sampling (MIS) Kombinovanje vise strategija uzorkovanja sa optimalnim tezinskim faktorima.
Denoiser Algoritam za uklanjanje suma iz slike rendorovane sa malim brojem uzoraka.
Photon Mapping Dvoprolazna GI metoda: emitovanje fotona iz svetala, zatim sakupljanje na tacki renderovanja.
Caustics Fokusirani svetlosni uzorci nastali prelamanjem/refleksijom kroz zakrivljene povrsine.
Radiosity GI metoda bazirana na konacnim elementima: scena se deli u patch-eve, racuna se prenos svetlosti izmedju patch-eva.
Form Factor Geometrijski faktor koji odredjuje koliki deo svetlosti sa jednog patch-a stize do drugog.
Spherical Harmonics (SH) Bazne funkcije na sferi, koriste se za kompaktno predstavljanje glatkih varijacija osvetljenja.
Light Probe Tacka u prostoru koja memorise informacije o okolnom osvetljenju (difuznom i/ili spekularnom).
Light Leaking Artefakt gde osvetljenje "curi" kroz tanke zidove ili prepreke, tipicno kod probe-based ili voxel GI.
Voxel Volumetrijski piksel -- element 3D mreze koja predstavlja scenu.
Cone Tracing Pracenje konusa (umesto tankog zraka) kroz voxel mrezu za brzu aproksimaciju GI.
SSGI Screen-Space Global Illumination -- aproksimacija GI koristeci podatke iz screen buffer-a.
DDGI Dynamic Diffuse GI -- real-time sistem sa dinamickim probe-ovima azuriranim putem ray tracing-a.
Lightmap Tekstura koja cuva pre-izracunato (baked) indirektno osvetljenje za staticne povrsine.
Lumen UE5-ov hibridni sistem za real-time globalnu iluminaciju i refleksije.
Temporal Accumulation Akumuliranje podataka iz vise uzastopnih frame-ova za poboljsanje kvaliteta.
Russian Roulette Tehnika za stohasticko zavrsavanje putanje svetlosti, koristeci verovatnocu baziranu na albedo-u.
Albedo Procenat svetlosti koju povrsina reflektuje (0 = potpuno crna, 1 = potpuno bela).
Radiance Cache Struktura podataka koja cuva izracunate vrednosti osvetljenja za brzi pristup.

12.16 Reference i dalje citanje

Akademski radovi

Knjige

Online resursi

Unakrsne reference u ovoj knjizi


Rezime poglavlja

Globalna iluminacija je kljuc fotorealizma u renderovanju. Bez nje, scene izgledaju vestacki, sa crnim senkama i bez medjusobnog uticaja povrsina. Sa njom, svetlost se ponasa kao u stvarnom svetu -- odbija se, menja boju, osvetljava senke, i daje prostoru dubinu i koherentnost.

U ovom poglavlju smo prosli kroz:

  1. Razliku izmedju direktnog i indirektnog osvetljenja i zasto je indirektno osvetljenje tesko za izracunavanje (rekurzivni problem).

  2. Path tracing kao zlatni standard -- fizicki tacno ali suviise sporo za real-time. UE5-ov Path Tracer je odlican referentni alat.

  3. Photon mapping za efikasno resavanje kaustika i slozenih svetlosnih puteva.

  4. Radiosity kao istorijski znacajnu metodu koja je donela lightmape u igre.

  5. Light probes kao kompaktne reprezentacije osvetljenja, korisne ali ogranicene (light leaking, niska rezolucija).

  6. VXGI kao pokusaj potpuno dinamicne GI kroz voxelizaciju, sa inherentnim ogranicenjima rezolucije.

  7. Real-time aproksimacije (SSGI, DDGI, lightmape, Lumen) i njihove specificne prednosti i mane.

  8. Trougao kompromisa izmedju kvaliteta, performansi i dinamicnosti -- fundamentalni framework za donosenje odluka o GI u vasim projektima.

  9. Bounce count analizu -- zasto je prvi bounce najvazniji i kada vam treba vise.

Sve ovo je priprema za Poglavlje 24 (gde cemo se fokusirati na prakticnu stranu lightmapa u UE5) i Poglavlje 25 (gde cemo duboko uronjati u Lumen-ov pipeline i razumeti kako on kombinuje mnoge od ovih koncepata u koherentan real-time GI sistem).

U sledecem poglavlju cemo se pozabaviti drugom kljucnom temom renderovanja -- senkama (shadows) -- gde cemo videti kako UE5 implementira razlicite tipove senki i kako ih optimizovati za vase projekte.