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:
-
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.
-
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.
-
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.
-
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.
-
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:
- Beli pod i plafon osvetljeni direktno
- Crveni i zeleni zidovi osvetljeni direktno
- Ostar prelaz izmedju svetla i senke
- Potpuno crne senke
Kad renderujete Cornell Box sa GI, dobijate:
- Beli pod blago obojen crveno na levoj strani i zeleno na desnoj (color bleeding)
- Plafon takodje ima tragove boja od zidova
- Mekane senke sa gradijentima
- Celo okruzenje izgleda koherentno i ubedljivo
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:
- Za svaki piksel na ekranu, odredite tacku na povrsini koju taj piksel predstavlja.
- Za svaki izvor svetlosti u sceni, proverite da li postoji direktna linija vidljivosti (line of sight) izmedju te tacke i izvora svetlosti.
- Ako postoji -- primenite BRDF jednacinu (iz Poglavlja 10) da izracunate koliko svetlosti ta tacka reflektuje prema kameri.
- 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:
- Relativno jeftino za izracunavanje
- Deterministicko (nema suma)
- Lako za razumevanje i kontrolu
Mane:
- Senke su potpuno crne (nerealisticno)
- Nema color bleeding-a
- Nema indirektnog osvetljenja uopste
- Scena izgleda "plastificirana" i vestacka
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:
- Za svaki piksel na ekranu, "ispucajte" zrak (ray) iz kamere kroz taj piksel.
- Taj zrak udara u prvu povrsinu u sceni. Na mestu udara, generise se nov pravac -- nasumicno, prema distribuciji koja odgovara BRDF-u te povrsine.
- Zrak nastavlja u novom pravcu, udara u sledecu povrsinu, ponovo se odbija...
- 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:
- Nepristrasnost (unbiased): Prosek uzoraka konvergira ka tacnom resenju kako broj uzoraka raste. Nikada ne daje sistematski pogresne rezultate.
- Konvergencija: Greska se smanjuje proporcionalno sa
1/√N, gde je N broj uzoraka. Da biste prepolovili sum, morate ucetverostruciti broj uzoraka. - Sum (noise): Sa malim brojem uzoraka, slika je sumovita (grainy). Ovo je karakteristicni "look" path tracing-a u toku konvergencije.
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:
- 1920 * 1080 = 2.073.600 piksela
- Sa 1024 SPP: 2.073.600 * 1024 = ~2.1 milijardu putanja
- Svaka putanja moze imati 5-10 bounce-ova, svaki sa ray-scene intersection testom
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:
- Za difuzne povrsine, saljete vise zraka blize normali povrsine (cosine-weighted sampling)
- Za spekularne povrsine, koncentrisete zrake oko pravca refleksije
- Next Event Estimation (NEE): Na svakom bounce-u, eksplicitno "probate" sve izvore svetlosti (umesto da se nadate da ce nasumicni zrak pogoditi svetlo)
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:
- NVIDIA OptiX AI Denoiser -- koristi neuronsku mrezu obucenu na milionima parova (sumovita / cista slika)
- Intel Open Image Denoise (OIDN) -- slican pristup, ali radi na CPU-u
- Temporalni denoiser-i -- koriste informacije iz prethodnih frame-ova za akumulaciju uzoraka tokom vremena
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:
- Generisanje referentnih slika za poredjenje sa Lumen-om
- Offline renderovanje visokog kvaliteta (filmski snippet-i, arhitekturske vizualizacije)
- Validaciju materijala i osvetljenja
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:
- Neogranicen broj bounce-ova (konfigurabilan)
- Kaustike (caustics)
- Volumetrijsku rasprsivanje (volumetric scattering)
- Sve PBR materijale iz UE5
- Progresivnu konvergenciju (slika se postepeno prociscava sto duze stoji kamera)
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:
- Iz svakog svetla "ispucajte" milione fotona u svim pravcima (ili prema distribuciji svetla).
- Svaki foton nosi odredjenu kolicinu energije i informaciju o boji.
- 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.
- 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:
- Globalna photon mapa -- za difuzno indirektno osvetljenje
- Caustic photon mapa -- za kaustike (fotoni koji su se bar jednom prelamili ili spekulerno reflektovali pre nego sto su pogodili difuznu povrsinu)
Prolaz 2: Sakupljanje (Gathering / Rendering)
U drugom prolazu, scena se renderuje sa stanovista kamere:
- Za svaki piksel, ispucajte zrak iz kamere i nadjite presek sa scenom.
- Na tacki preseka, pretrazite photon mapu da nadjete N najblizih fotona.
- Procenite gustinu svetlosne energije na osnovu tih fotona (kernel density estimation).
- 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:
- Svetlosni uzorci na dnu bazena
- Svetlost fokusirana kroz casu vode
- Duga (svetlost prelamljena u kapljicama kise)
- Svetlosna tacka od dijamanta
Prednosti i mane
Prednosti:
- Odlicno rukovanje kaustikama
- Moze da resi slozene svetlosne puteve koje path tracing tesko nalazi
- Photon mapa se moze ponovo koristiti za vise uglova kamere (view-independent za difuznu komponentu)
Mane:
- Visoki zahtevi za memorijom (milioni fotona * informacija po fotonu)
- Bias -- procena gustine uvek uvodi odredjenu gresku (mada postoji "progressive photon mapping" koji konvergira ka tacnom resenju)
- Artefakti na niskim rezolucijama photon mape (blurry detalji)
- U praksi, teze za implementaciju od path tracing-a
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:
B_i-- radiosity (ukupna svetlosna energija koju emituje) patch-a iE_i-- emitovana energija patch-a i (ako je izvor svetlosti)ρ_i-- reflektansa (albedo) patch-a iF_ij-- form factor izmedju patch-eva i i j- Suma ide po svim patch-evima j u sceni
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:
- Rastojanja izmedju patch-eva
- Relativne orijentacije (uglovi normala)
- Vidljivosti (da li nesto blokira put izmedju njih)
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:
- Hemicube metod: Za svaki patch, renderujte scenu na 5 strana kocke (hemicube) postavljene na tom patch-u. Pikseli na hemicube-u identifikuju vidljive patch-eve i njihove form factor-e.
- Monte Carlo sampling: Ispucajte nasumicne zrake sa patch-a i vidite koje patch-eve pogadjaju.
- Analiticko resenje: Za jednostavne geometrije (dva paralelna ili perpendikularni pravougaonika) postoje zatvorene formule.
Iterativno resavanje
Umesto da se odmah resava ceo sistem jednacina, koristi se iterativni pristup:
- Inicijalizacija: Svi patch-evi imaju radiosity jednak emitovanoj energiji (samo svetla imaju nenultu vrednost).
- Iteracija: Za svaki patch, izracunajte koliko svetlosti prima od svih ostalih patch-eva i azurirajte njegov radiosity.
- 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:
- View-independent: Jednom izracunato resenje vazi za sve uglove kamere. Ovo je savrseno za precomputed osvetljenje.
- Fizicki korektan difuzni transport: Za Lambertian (savrseno difuzne) povrsine, radiosity daje tacno resenje.
- Nema suma: Resenje je deterministicko -- nema sumovitih slika.
- Dobro za arhitekturne scene: Tipicne arhitekturne scene (sobe, hodnici) su pretezno difuzne i dobro se modeluju patch-evima.
Mane:
- Samo difuzno osvetljenje: Klasicni radiosity ne podrzava spekularne refleksije, refrakcije ili bilo koji ne-difuzni BRDF. (Postoje prosirenja poput "extended radiosity" ali su kompleksna.)
- Memorijski zahtevno: N^2 form factor-a za N patch-eva.
- Zavisnost od mesh rezolucije: Kvalitet osvetljenja direktno zavisi od velicine patch-eva. Preveliki patch-evi daju blocky rezultate. Premali patch-evi su preskupi.
- Staticki: Svaka promena geometrije zahteva potpuno novo izracunavanje form factor-a.
Istorijski znacaj u igrama
Radiosity je imao ogroman uticaj na industriju igara, posebno krajem 1990-ih:
- Quake II (1997) je bio jedna od prvih igara koja je koristila radiosity-izracunate lightmape za indirektno osvetljenje. Rezultat je bio revolucionaran -- scene su izgledale dramaticno realnije od konkurencije.
- Half-Life (1998) je nastavio ovaj trend, koristeci radiosity lightmape za sve nivoe.
- Source Engine (Half-Life 2, Portal) koristio je napredni radiosity sistem za lightmape sa HDR podrskom.
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:
- Visoki MIP nivoi -- ostre refleksije (za glatke povrsine)
- Niski MIP nivoi -- zamagljene refleksije (za hrapave povrsine)
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?
- Kompaktno: 27 float-ova umesto pune cubemape
- Brzo za query: izracunavanje boje za dati normalni pravac je prosto dot product SH koeficijenata
- Dovolino tacno za difuzno osvetljenje (koje je po prirodi glatko / niskofrekventno)
Light Probe mreze u UE5
UE5 koristi volumetrijske irradiance probe mreze za staticne objekte:
-
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.
-
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:
- Trilinearna interpolacija za probe-ove u regularnoj mrezu
- Tetrahedral interpolacija za neregularne distribucije probe-ova (robusnija u kompleksnim sredinama)
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:
- Svetlost vidljiva kroz zidove
- Netacne boje na objektima blizu granice izmedju svetlih i tamnih oblasti
Resenja za light leaking:
- Gusca mreza probe-ova oko tankih zidova
- Oznacavanje probe-ova kao "unutrasnji" ili "spoljasnji"
- Visibility informacije uz probe-ove (znati koji probe "vidi" koju povrsinu)
- Koristenje Lumen-a umesto baked probe-ova za potpuno dinamicne scene
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:
- Odredite bounding box celog sveta (ili relevantnog dela).
- Podelite ga u regularnu 3D mrezu rezolucije NxNxN (tipicno 128, 256 ili 512 voksela po osi).
- Za svaki trougao u sceni, odredite koje voksele preseca i upisite informacije o materijalu (boju, emisiju, normalu) u te voksele.
- 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:
- Na svakoj tacki povrsine, "ispucajte" nekoliko konusa u razlicitim pravcima (tipicno 5-9 konusa za difuzno osvetljenje).
- Kako konus putuje dalje od povrsine, on postaje sve siri, pokrivajuci sve veci volumen.
- Na vecim rastojanjima, koristite MIP nivoe voxel 3D teksture (coarser rezolucija), sto prirodno odgovara sirem konusu.
- 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:
- Voxelizacija u real-time-u za potpuno dinamicnu GI
- Multi-resolution voxel grid (clipmap struktura -- visa rezolucija blize kameri, niza dalje)
- Podrska za difuzno i spekulerno indirektno osvetljenje
- Ambient occlusion kao "besplatan" nusprodukt
Prednosti VXGI
- Potpuno dinamicna: Ne zahteva nikakvo bake-ovanje. Sve se racuna u real-time-u.
- Podrzava difuzno i spekulerno: Za razliku od mnogih GI metoda, moze da aproksimira i spekularne indirektne refleksije.
- Multiple bounces su moguce: Koristeci povratnu spregu (feedback), voxel grid se moze azurirati sa indirektnim osvetljenjem, omogucavajuci vise bounce-ova.
- Globalna metoda: Radi na celoj sceni, ne samo na onome sto je vidljivo na ekranu (za razliku od SSGI).
Mane VXGI
- Niska prostorna rezolucija: Cak i sa 512^3 voxel grid-om (sto zahteva gigabajte memorije), prostorna rezolucija je ogranicena. Tanki objekti (lisce, zice, tkanine) se gube ili pogresno predstavljaju.
- Light leaking: Slicno probe-ovima, tanki zidovi mogu da "procure" ako su tanji od jednog voksela.
- Zahtevno za memoriju: 3D tekstura rezolucije 256^3 sa RGBA vrednostima i MIP nivoima zahteva stotine megabajta VRAM-a.
- GPU zahtevno: Voxelizacija i cone tracing su skupi, posebno na visim rezolucijama.
- Artefakti: Blockiness na niskim rezolucijama, temporal flickering pri revoxelizaciji.
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:
- Za svaki piksel, ispucajte nekoliko zraka u screen space-u (koriscenjem depth buffer-a za aproksimaciju geometrije).
- Ako zrak pogodi neku povrsinu (tj. nadje piksel u depth buffer-u koji je na tom pravcu), "pokupi" boju tog piksela kao indirektnu svetlost.
- 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:
- Relativno jeftin (radi na podacima koji vec postoje u G-buffer-u)
- Potpuno dinamican -- automatski reaguje na promene u sceni
- Lako se integrise u deferred rendering pipeline
- Moze da uhvati color bleeding od dinamickih objekata
Mane SSGI:
- Ogranicen na vidljive povrsine: Ako je objekat van ekrana ili zaklonjen drugim objektom, SSGI ga ne vidi. Ovo znaci da, na primer, svetlost od poda ne moze da osvetli plafon ako pod nije na ekranu.
- Artefakti na ivicama ekrana: Kako se kamera okrece, objekti ulaze i izlaze iz frame-a, sto uzrokuje temporal flickering indirektnog osvetljenja.
- Samo jedno odbijanje: SSGI tipicno racuna samo jedan bounce jer bi visebrojni bounce-ovi zahtevali visestruke prolaze.
- Zavisnost od rezolucije: Na nizim rezolucijama, kvalitet opada.
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:
- U svakom frame-u, iz svakog probe-a ispucajte mali broj zraka (tipicno 128-256) u nasumicnim pravcima koristeci hardware RT jezgra.
- Na osnovu pogodaka, azurirajte probe podatke (irradiance i dubinu).
- Za renderovanje, interpolirajte izmedju probe-ova kao i kod staticnih probe-ova.
Prednosti DDGI:
- Potpuno dinamicna GI bez bake-ovanja
- Podrzava pokretne objekte i svetla
- Vremenski stabilan (akumulacija preko vise frame-ova)
- Relativno jeftin zahvaljujuci hardware RT podrsci
Mane DDGI:
- Ogranicena rezolucija (isti problemi kao baked probe-ovi -- light leaking, niska prostorna rezolucija)
- Zahteva RT-capable GPU
- Samo difuzno osvetljenje (ne podrzava spekulerne refleksije)
Varijacije:
- RTXGI -- NVIDIA-ina SDK implementacija DDGI-ja, lako integrisana u engine-e
- Radiance probes -- slicni principi, ali koriste probe-ove vise rezolucije za spekulerne informacije
- Lumen koristi slican princip u svom world-space radiance cache sistemu (Poglavlje 25)
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:
- 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).
- Runtime: Shader jednostavno cita lightmapu kao teksturu i dodaje tu vrednost na direktno osvetljenje. Ovo je izuzetno jeftino -- samo jedan texture fetch.
Prednosti:
- Najjeftiniji runtime cost: Samo texture fetch, zanemarljivo u poredjenju sa bilo kojom real-time GI metodom.
- Visok kvalitet: Bake faza moze da koristi veoma skupe algoritme (hiljade bounce-ova, milioni uzoraka) jer vreme nije ogranicenje.
- Bez suma: Konacna lightmapa je cista (denoised i filtered).
- Nema light leaking-a (uz korektne UV-ove): Svaka tacka na povrsini ima eksplicitnu vrednost, nema interpolacije izmedju razlicitih regiona.
Mane:
- Staticna: Lightmape se ne menjaju u runtime-u. Ako se pomeri objekat ili promeni svetlo, lightmapa je netacna.
- Memorijski zahtevi: Visoko-kvalitetne lightmape zahtevaju znacajan VRAM (i disk prostor). Za velike scene, ukupna velicina lightmapa moze biti stotine megabajta.
- Dugo bake vreme: Za kompleksne scene, bake moze trajati minutima do sati. Ovo usporava iteraciju dizajnera.
- Zahteva UV-ove: Svaki staticni mesh mora imati korektne lightmap UV-ove (obicno UV channel 1) bez preklapanja.
- Seams: Na granicama izmedju UV ostrvaca, mogu se pojaviti vidljivi savovi u osvetljenju.
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:
- Screen-space tracing (za bliske detalje)
- Software ray tracing kroz Signed Distance Fields (za medium-range)
- Hardware ray tracing (opciono, za veci kvalitet)
- Radiance caching (world-space probe mreza)
- Surface cache (pojednostavljene reprezentacije materijala)
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:
-
Kvalitet (Quality): Koliko se rezultat priblizava fizicki tacnom resenju? Koliko bounce-ova? Kolika rezolucija? Ima li artefakata?
-
Performanse (Performance): Koliko je brzo? Koliko milisekundi po frame-u? Moze li da radi na 60 fps? Na kojim platformama?
-
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:
- Kvalitet je nizi od offline path tracing-a (ali vizuelno ubedljiv za vecinu scena)
- Performanse su skuplje od lightmapa (ali dovoljno brze za 30-60 fps na modernim konzolama i PC-jevima)
- Dinamicnost je potpuna (ali postoje latencije -- GI se ne azurira instantno vec sa manjim kasnjenjem)
Razumevanje ovog trougla vam pomaze da donosite pametne odluke u vasim projektima:
- Igra sa statickum svetom i fiksiranim level dizajnom? Lightmape su verovatno najbolji izbor -- maksimalan kvalitet za minimalan runtime cost.
- Igra sa ciklusom dan/noc ili destruktivnim okruzenjem? Lumen je neophodan jer se osvetljenje konstantno menja.
- Cinematic u engine-u? Path Tracer za najvisi kvalitet.
- Mobilna igra? Lightmape + light probe-ovi, jer je budžet za GI izuzetno ogranicen.
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):
- Vidljiv je samo patch na podu gde sunce direktno sija
- Sve ostalo je potpuno crno
- Ovo je ocito nerealisticno
Prvi bounce:
- Osvetljeni patch na podu reflektuje svetlost prema plafonu i zidovima
- Plafon iznad osvetljenog patch-a dobija svetlost (topla, obojena bojom poda)
- Zidovi blizu prozora dobijaju indirektnu svetlost
- Senke vise nisu potpuno crne
- Ovo vec izgleda dramaticno bolje i za vecinu posmatraca je "dovoljno dobro"
Drugi bounce:
- Svetlost koja je stigla do plafona (od prvog bounce-a) sada se odbija nazad ka podu i zidovima
- Svetlost se dalje siri u dubinu sobe
- Osvetljenje postaje jos ravnomernije
- Color bleeding je suptilniji ali vidljiv -- tonovi boja se dalje mesaju
Treci bounce i dalje:
- Svaki naredni bounce dodaje sve manje energije
- Razlika izmedju 3 bounce-a i "beskonacno" bounce-ova je minimalna u vecini scena
- Jedini izuzetak: dugacki, uski hodnici ili prostorije sa vise prepreka gde svetlost mora da "zaobidje" mnogo uglova
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
- Lightmape: UE5 Lightmass podrazumevano koristi dovoljno bounce-ova za konvergenciju. Broj bounce-ova se podesava u
World Settings > Lightmass > Num Indirect Lighting Bounces(default: 100 za Production kvalitet, ali sa automatskim zaustavljanjem kad konvergira). - Lumen: Lumen interno upravlja brojem bounce-ova.
r.Lumen.TraceMeshSDFs.MaxBouncesi slicne konzolne varijable kontrolisu ovo, ali uglavnom nije potrebno menjati default vrednosti. - Path Tracer: Konfigurabilan maksimalni broj bounce-ova. Za vecinu scena, 8-16 bounce-ova je dovoljno za konvergenciju.
Kada trebate vise bounce-ova
- Enterijeri sa malom prozorskom povrsinom -- svetlost mora da se odbije mnogo puta da bi stigla u dubinu prostorije
- Tuneli i hodnici -- svetlost mora da "zaobilazi" uglove
- Scene sa visokim albedo-om (bele prostorije, sneg) -- svaki bounce nosi znacajnu energiju
- Scene sa izrazitim color bleeding-om -- visestruka odbijanja mesaju boje i stvaraju slozenije tonske varijacije
- Zatvoren prostor sa samo indirektnim osvetljenjem -- ako direktna svetlost uopste ne dopire do posmatrane oblasti, potreban je dovoljan broj bounce-ova da svetlost "stigne"
Kada je jedan bounce dovoljan
- Otvoreni eksterijeri -- nebo (sky light) vec daje ravnomerno ambijentalno osvetljenje, prvi bounce od tla i zgrada je dovoljan za dobar rezultat
- Scene sa niskim albedo-om (tamni materijali) -- vise bounce-ova ne donosi primetnu razliku
- Igre sa stilizovanim (ne fotorealisticnim) izgledom -- vizuelna tacnost GI je manje vazan od celokupnog umetnickog pravca
12.11 Napredni koncepti
Caustics
Kaustike su fokusirani svetlosni uzorci nastali prelamanjem (refrakcijom) ili refleksijom svetlosti kroz/od zakrivljenih povrsina. Primeri:
- Svetlosni uzorci na dnu bazena
- Vatrena tacka od lupe
- Spektralni uzorci od dijamanta
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):
- Single scattering: Svetlost se rasipa jednom u medijumu prema posmatracu. Relativno jeftino za izracunavanje.
- Multiple scattering: Svetlost se rasipa vise puta pre nego sto stigne do posmatraca. Znatno skuplje, ali neophodno za guste medijume (oblaci, mleko).
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:
- Frame 1: Izracunajte GI sa N uzoraka
- Frame 2: Izracunajte GI sa novih N uzoraka, kombinujte sa Frame 1
- Frame 3: Kombinujte sa prethodna 2 frame-a
- ...
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:
- Screen-space za bliske, visoko-detaljne bounce-ove
- World-space probe-ovi za medium-range difuznu GI
- Ray tracing za dalekosezne efekte i spekulerne refleksije
- Lightmape za staticne delove scene (kao "baza" na koju se dodaje dinamicna GI)
- Denoising za ciscenje slike sa malim brojem uzoraka
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
-
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.
-
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".
-
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).
-
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. -
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:
- Lighting Only view mode: Prikazuje samo osvetljenje bez albeda -- idealno za procenu kvaliteta GI.
- Detail Lighting: Prikazuje osvetljenje sa neutralno sivim albedom.
- Buffer Visualization > Diffuse Color / Indirect Lighting: Izoluje specificne komponente osvetljenja.
- Lumen Visualization modes: Prikazuju Lumen-ove interne strukture (surface cache, radiance cache, itd.) -- detaljno u Poglavlju 25.
- r.Lumen.Visualize konzolne komande za prikaz razlicitih aspekata Lumen pipeline-a.
Profilisanje GI cost-a
Za merenje performansnog uticaja GI:
- Koristite
stat GPUkonzolnu komandu za pregled GPU timings-a. - Obratite paznju na
Lumenkategoriju u GPU profiler-u. - Koristite Unreal Insights za detaljnu analizu per-frame cost-a.
- 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:
- Quake II, III (radiosity lightmape)
- Half-Life 1, 2 (napredne lightmape)
- Source Engine igre (HDR lightmape)
- Unreal Engine 3 igre (Lightmass -- UE-ov lightmap baker)
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:
- HBAO (Horizon-Based AO)
- SSDO (Screen-Space Directional Occlusion) -- dodaje color bleeding
- SSGI varijante
Probe i voxel era (2012-2020.)
- Light Propagation Volumes (CryEngine)
- NVIDIA VXGI (2014.)
- Enlighten (middleware za real-time probe updates, koristen u Battlefield, itd.)
- Baked probe sistemi u raznim engine-ima
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
- Kajiya, J. T. (1986). "The Rendering Equation." -- Fundamentalni rad koji je definisao jednacinu renderovanja. Osnova za sve GI metode.
- Jensen, H. W. (1996). "Global Illumination using Photon Maps." -- Originalni rad o photon mapping-u.
- Veach, E. (1997). "Robust Monte Carlo Methods for Light Transport Simulation." -- Doktorska disertacija koja je uvela MIS i bidirectional path tracing.
- Majercik, Z. et al. (2019). "Dynamic Diffuse Global Illumination with Ray-Traced Irradiance Fields." -- DDGI rad.
- Crassin, C. et al. (2011). "Interactive Indirect Illumination Using Voxel Cone Tracing." -- Originalni rad o VXGI.
Knjige
- "Physically Based Rendering: From Theory to Implementation" (Pharr, Jakob, Humphreys) -- Biblija za PBR i path tracing. Dostupna besplatno online na pbrt.org.
- "Real-Time Rendering" (Akenine-Moller, Haines, Hoffman) -- Sveobuhvatni pregled real-time tehnika, ukljucujuci GI poglavlje.
- "Global Illumination Compendium" (Philip Dutre) -- Kompaktan pregled matematickih osnova GI.
- "Advanced Global Illumination" (Dutre, Bala, Bekaert) -- Detaljni pregled GI algoritama.
Online resursi
- Epic Games dokumentacija za Lumen: Zvanivcna dokumentacija sa detaljima implementacije i podesavanja.
- SIGGRAPH prezentacije o Lumen-u: Epic Games redovno predstavlja tehnicke detalje Lumen-a na SIGGRAPH-u. Potrazite "Lumen in Nanite" prezentacije.
- "Ray Tracing Gems" (NVIDIA) -- Zbirka prakticnih tehnika za ray tracing, ukljucujuci GI.
- Shadertoy (shadertoy.com) -- Interaktivni primeri ray tracing-a i GI u browser-u.
Unakrsne reference u ovoj knjizi
- Poglavlje 10: Jednacina renderovanja i BRDF -- Matematicki temelji na kojima pociva svaki GI algoritam. Razumevanje rendering equation-a je preduslov za ovo poglavlje.
- Poglavlje 24: Lightmape u UE5 -- Detaljan vodic za bake-ovanje lightmapa u Unreal Engine-u, ukljucujuci podesavanja Lightmass-a, UV layout, debug alate, i optimizaciju.
- Poglavlje 25: Lumen -- duboko zaronjavanje -- Kompletna analiza Lumen-ovog pipeline-a: software tracing, hardware RT, surface cache, radiance cache, performansna podesavanja i best practices.
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:
-
Razliku izmedju direktnog i indirektnog osvetljenja i zasto je indirektno osvetljenje tesko za izracunavanje (rekurzivni problem).
-
Path tracing kao zlatni standard -- fizicki tacno ali suviise sporo za real-time. UE5-ov Path Tracer je odlican referentni alat.
-
Photon mapping za efikasno resavanje kaustika i slozenih svetlosnih puteva.
-
Radiosity kao istorijski znacajnu metodu koja je donela lightmape u igre.
-
Light probes kao kompaktne reprezentacije osvetljenja, korisne ali ogranicene (light leaking, niska rezolucija).
-
VXGI kao pokusaj potpuno dinamicne GI kroz voxelizaciju, sa inherentnim ogranicenjima rezolucije.
-
Real-time aproksimacije (SSGI, DDGI, lightmape, Lumen) i njihove specificne prednosti i mane.
-
Trougao kompromisa izmedju kvaliteta, performansi i dinamicnosti -- fundamentalni framework za donosenje odluka o GI u vasim projektima.
-
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.