Poglavlje 25: Lumen -- Dinamicka Globalna Iluminacija

Poglavlje 25: Lumen -- Dinamicka Globalna Iluminacija


"Svetlost se ne bake-uje. Svetlost zivi." -- Nepisano pravilo Unreal Engine 5 tima


Uvod

Zamislite sledeci scenario. Napravili ste prelepu sobu u vasem nivou -- drveni pod, beli zidovi, veliki prozor okrenut ka zapadu. Sunce polako zalazi, i kako se pomera, topla narandzasta svetlost ulazi kroz prozor, odbija se od poda, blago oboji plafon, i stvara meke senke iza svake stolice. Vi pomerite jednu stolicu -- i sve se azurira. Dodate zid -- svetlost se odmah prilagodi. Promenite boju poda iz braon u crvenu -- i odjednom cela soba dobije blagi crvenkasti odsjaj.

Ovo nije filmska scena renderovana satima na render farmi. Ovo je Lumen, i radi u realnom vremenu, u vasem editoru, dok vi radite.

U ovom poglavlju cemo detaljno razmotriti kako Lumen funkcionise, zasto je revolucionaran, sta ga cini brzim, sta ga cini skupim, i kako da ga pravilno koristite u vasim projektima. Ako ste procitali Poglavlje 12, gde smo objasnili teoriju globalne iluminacije, i Poglavlje 14, gde smo se upoznali sa ray tracing-om, sada cemo spojiti te koncepte u prakticni sistem koji Unreal Engine 5 koristi svakodnevno.

Pripremite se -- ovo je jedno od najvaznijih poglavlja u celoj knjizi.


25.1 Sta je Lumen?

25.1.1 Definicija

Lumen je UE5-ov sistem za potpuno dinamicku globalnu iluminaciju (Global Illumination, GI) i refleksije. To znaci:

25.1.2 Zasto je Lumen revolucionaran?

Da bismo razumeli zasto je Lumen toliko bitan, moramo se kratko osvrnuti na istoriju. Pre UE5, globalna iluminacija u igrama je funkcionisala na jedan od sledecih nacina:

  1. Baked GI (Lightmass u UE4): Izracunajte svetlost unapred, sacuvajte je u lightmap teksture. Izgleda lepo, ali je staticna -- ne moze reagovati na promene. Bake-ovanje moze trajati minutima ili satima. Detaljno smo ovo obradili u Poglavlju 24.

  2. Screen Space GI (SSGI): Koristite informacije vidljive na ekranu da simulirate odbijanje svetlosti. Brzo, ali ograniceno -- ne moze videti sta je iza kamere ili van ekrana.

  3. Probe-based GI (Light Probes): Postavite probe (sonde) po sceni koje snimaju okolnu svetlost. Jednostavno za staticne scene, ali ruzan prelaz izmedju proba i slaba preciznost.

  4. Voxel GI (VXGI): Pretvorite scenu u voxele i simulirajte svetlost kroz voxelsku strukturu. Kvalitetno, ali izuzetno skupo za racunanje.

  5. Full Ray Traced GI: Pratite zrake za svaki piksel, simulirajte sve odbijke. Fizicki korektno, ali i uz najnoviji hardware, preskupo za igre u realnom vremenu sa punom rezolucijom.

Lumen je revolucionaran jer resava ovo na potpuno nov nacin. Umesto da bira jednu od ovih tehnika, Lumen koristi viseslojni, hibridni pristup koji kombinuje vise metoda istovremeno. Koristi software ray tracing (koji ne zahteva specijalan RT hardware), Signed Distance Fields, surface cache, screen probes, i temporal accumulation da postigne globalnu iluminaciju koja:

To je nesto sto nijedan raniji sistem u game engine-u nije mogao da ponudi.

25.1.3 Lumen u kontekstu UE5 pipeline-a

Lumen nije izolovan sistem. On je duboko integrisan u UE5 rendering pipeline:

Kada pokrenete UE5 projekat sa Lumen-om, vi u sustini aktivirate kompletan, moderan rendering pipeline koji je dizajniran da radi kao celina. Svaki deo potpomaze drugi.


25.2 Kako Lumen zaista radi -- Viseslojni pristup

Ovo je centralni deo poglavlja. Ovde cemo skinuti poklopac sa motora i pogledati kako svaki deo Lumen-a funkcionise. Krecemo od najnizeg nivoa i gradimo prema gore.

25.2.1 Mesh Distance Fields -- Temelj software ray tracing-a

Sta je Signed Distance Field (SDF)?

Signed Distance Field je 3D reprezentacija nekog mesh-a gde svaka tacka u prostoru cuva jednu vrednost: rastojanje do najblize povrsine tog mesh-a.

Zamislite mesh kao neku skulpturu. Sada zamislite da oko te skulpture imate nevidljivu mrezu kockica (voxela). U svakoj kockici zapisujete: "koliko sam daleko od povrsine skulpture?" To je SDF.

Vizuelno, ako bismo presekli SDF ravni, videli bismo nesto poput topografske mape -- konture koje pokazuju rastojanje od povrsine, sve blize i blize dok ne dodjemo do same povrsine (nulta kontura).

Zasto su SDF-ovi korisni za ray tracing?

Obican ray tracing radi ovako: pustite zrak i proveravajte da li je pogodio neki trougao u sceni. Ovo zahteva testiranje protiv potencijalno miliona trouglova (uz, naravno, razne akceleracione strukture poput BVH stabala, kao sto smo objasnili u Poglavlju 14).

SDF ray tracing radi drugacije i mnogo elegantnije:

  1. Pustite zrak iz neke tacke.
  2. Na trenutnoj poziciji zraka, procitajte SDF vrednost -- ona vam kaze koliko je daleko najbliza povrsina.
  3. Bezbedno se pomerite za tu distancu duz zraka -- jer znate da u tom radijusu nema nikakve povrsine.
  4. Ponovite.

Ova tehnika se zove sphere tracing (ili ray marching sa SDF-om). Kljucna prednost je sto svaki korak moze biti veliki ako je zrak daleko od svih povrsina, i postepeno se smanjuje kako se priblizava nekom objektu. U praksi, tipican zrak treba samo 10-30 koraka da pronadje presek, u poredjenju sa kompleksnim BVH traversal-om za triangle ray tracing.

Vizuelizacija sphere tracing-a:

Zrak -->  O--------O------O----O--O-O|
          ^        ^      ^    ^  ^ ^|
          |        |      |    |  | ||
       Veliki   Veliki  Manji Mali ||
       korak    korak   korak     Pogodak!

Svaki krug (O) predstavlja sferu bezbednog rastojanja.
Zrak "skace" od sfere do sfere dok ne dosegne povrsinu.

Generisanje Mesh Distance Field-ova

UE5 automatski generise Mesh Distance Field za svaki Static Mesh pri importu. Ovo se desava u pozadini i rezultat se cuva kao deo asset-a.

Nekoliko kljucnih stavki:

Mozete vizualizovati Mesh Distance Field-ove u editoru preko Show > Visualize > Mesh Distance Fields. Ovo je izuzetno korisno za debugovanje -- videcete zelenu reprezentaciju vasih mesh-ova i odmah uociti gde SDF ne predstavlja geometriju verno.

Prakticni savet: Ako primetite "svetlosno curenje" (light leaking) -- svetlost prolazi kroz zidove ili podove gde ne bi trebalo -- jedan od prvih mesta za proveru je kvalitet Mesh Distance Field-a tog mesh-a. Zidovi koji su pretanki ili mesh-ovi sa otvorenim geometrijama cesto imaju lose SDF-ove.

25.2.2 Surface Cache -- Pojednostavljena reprezentacija povrsina scene

Problem koji Surface Cache resava

Kada Lumen-ov zrak pogodi neku povrsinu, on mora da zna: "Koje boje je ova povrsina? Koliko je hrapava? Da li emituje svetlost?" Drugim recima, mora da evaluira materijal te povrsine.

Problem je sto evaluiranje punog UE5 materijala za svaku tacku pogodka zraka je izuzetno skupo. Materijali u UE5 mogu biti kompleksni -- sa vise tekstura, math operacijama, proceduralnim sablonima. Evaluirati ih za milione tacaka po frame-u bi bilo neodrzivo.

Resenje je Surface Cache.

Kako Surface Cache funkcionise

Surface Cache je pojednostavljena, unapred izracunata reprezentacija povrsina svakog mesh-a u sceni. Konkretno, svaki mesh se "fotografise" iz vise uglova, cime se kreiraju takozvane Mesh Cards (kartice mesh-a).

Mesh Cards su ravne projekcije mesh-a -- zamislite da stavite mesh u kutiju i fotografisete ga sa svih sest strana (gore, dole, levo, desno, napred, nazad). Svaka ta "fotografija" cuva:

Ova "atlas" kartica se naziva Surface Cache i predstavlja kompaktnu aproksimaciju izgleda mesh-a iz bilo kog pravca.

Mesh Cards koncept:

              +-------+
             /  Gore  /|
            /       /  |
           +-------+   |
           |       | D |      Svaka strana kutije je jedna
           | Napred| e |      "kartica" (card) koja cuva
           |       | s |      materijal properties tog mesh-a
           |       | n |      iz tog ugla.
           +-------+ o |
            \       \ |
             \ Dole  \|
              +-------+

Rezolucija i azuriranje Surface Cache-a

Surface Cache ima ogranicenu rezoluciju. Svaka Mesh Card je relativno male rezolucije (tipicno oko 128x128 ili 256x256 piksela, zavisno od velicine mesh-a i podesavanja). Ovo je namerno -- drzimo velicinu malom da bi azuriranje bilo brzo.

Azuriranje Surface Cache-a se desava u vise faza:

  1. Inicijalno kreiranje -- pri ucitavanju nivoa, svaki mesh dobija svoje kartice.
  2. Osvezavanje pri promeni -- ako se materijal promeni (na primer, Dynamic Material Instance menja boju), Surface Cache se azurira. Ovo se ne desava odmah za sve mesh-ove, vec se raspodjeljuje kroz vise frame-ova (amortized update).
  3. Osvezavanje osvjetljenja -- Surface Cache takodje cuva informaciju o osvjetljenju (iz prethodnih frame-ova), sto se kontinuirano azurira kako se svetlost menja.

Mozete vizualizovati Surface Cache u editoru: Show > Visualize > Lumen Scene. Videcete mesh-ove predstavljene njihovim karticama -- ovo je "svet" kakav ga Lumen vidi.

Prakticni savet: Ako primetite da Lumen "ne vidi" neki objekat (ne odbija svetlost od njega, ne baca GI senke), proverite da li taj mesh ima validne Mesh Cards. Vrlo mali mesh-ovi, mesh-ovi sa neobicnim oblicima, ili mesh-ovi sa iskljucenim "Generate Mesh Distance Field" mozda nemaju validan Surface Cache.

Ogranicenja Surface Cache-a

Posto je Surface Cache pojednostavljena reprezentacija, ona ima inherentna ogranicenja:

25.2.3 Screen Probes -- Prikupljanje svetlosti sa ekrana

Sta su Screen Probes?

Screen Probes (probes na ekranu) su kljucni mehanizam kojim Lumen prikuplja informacije o indirektnoj svetlosti za svaki vidljivi piksel.

Zamislite svaki vidljivi piksel na ekranu. Svaki od tih piksela treba da zna: "Koliko indirektne svetlosti pada na mene iz raznih pravaca?" Da bi to saznao, trebalo bi da posalje stotine zraka u svom poluprostoru (hemisferi iznad povrsine) i prikupi svetlost. Ali to bi bilo enormno skupo -- milioni piksela puta stotine zraka = milijarde zraka po frame-u.

Screen Probes resavaju ovo na pametan nacin.

Strategija postavljanja proba

Umesto da svaki piksel ima svoju probu, Lumen postavlja probe na redukovanoj mrezi preko ekrana. Tipicno, probe se postavljaju na razmaku od oko 16x16 piksela (ovo varira zavisno od podesavanja). Svaka proba pokriva grupu okolnih piksela.

Ali postavljanje nije uniformno! Lumen koristi adaptivno postavljanje:

Screen Probe postavljanje (shematski prikaz):

+--+--+--+--+--+--+--+--+--+--+
|  |  |  |  |  |  |  |  |  |  |
+--+--+--+--+--+--+--+--+--+--+
|  | P|  |  | P|  |  | P|  |  |    P = Screen Probe
+--+--+--+--+--+--+--+--+--+--+    
|  |  |  |  |  |  |  |  |  |  |    Na ravnim povrsinma: retke probe
+--+--+--+--+--+--+--+--+--+--+
|  | P|  |  | P|  |  | P|  |  |    Na ivicama i uglovima: guscce probe
+--+--+P-+P-+--+P-+P-+--+--+--+
|  |  |  |  |  |  |  |  |  |  |
+--+--+P-+P-+--+P-+P-+--+--+--+
|  | P|  |  | P|  |  | P|  |  |
+--+--+--+--+--+--+--+--+--+--+

Prikupljanje svetlosti (radiance gathering)

Svaka Screen Probe prikuplja svetlost iz okolne hemisfere. Ali koliko zraka salje? Ne stotine -- tipicno oko 16-64 zraka po probi po frame-u. To zvuci kao premalo za kvalitetno osvjetljenje, ali tu na scenu stupa temporal accumulation (vremenska akumulacija).

Princip je sledeci:

  1. U frame-u N, proba salje 32 zraka u razlicitim pravcima hemisfere.
  2. U frame-u N+1, salje novih 32 zraka, ali u drugacijim pravcima (roterira sampling pattern).
  3. U frame-u N+2, opet novih 32 zraka.
  4. Rezultati se akumuliraju kroz vreme, tako da posle 4-8 frame-ova proba ima podatke ekvivalentne stotinama zraka.

Ovo je genijalano -- umesto da u jednom frame-u uradite ogromnu kolicinu posla, rasporedite rad kroz vise frame-ova i akumulirate rezultat. Rezultat je da Lumen moze pruziti visokokvalitetan GI sa relativno malim brojem zraka po frame-u.

Hijerarhijsko pracenje zraka

Kada Screen Probe salje zrak, taj zrak ne ide odmah u "svemirsku" potragu. Umesto toga, Lumen koristi hijerarhijski pristup:

  1. Screen Trace (pracenje na ekranu): Prvo, zrak se prati kroz depth buffer ekrana (slicno screen-space ray tracing). Ovo je izuzetno jeftino jer koristi podatke koje vec imamo. Ako zrak pogodi nesto sto je vidljivo na ekranu, imamo rezultat odmah.

  2. Mesh SDF Trace: Ako screen trace ne pronadje presek (zrak ide prema necemu sto nije vidljivo na ekranu), prelazi se na pracenje protiv Mesh Distance Field-ova. Ovde se koristi sphere tracing koji smo opisali ranije.

  3. Global Distance Field Trace: Za jos duze zrake, koristi se Global Distance Field (nizorezolucioni SDF cele scene) koji je mnogo jeftiniji za dugorocno pracenje ali manje precizan.

Hijerarhijsko pracenje:

[Screen Trace] --> [Mesh SDF Trace] --> [Global SDF Trace]
   Najjeftinije       Srednjei cene         Najjeftinije
   Najkraci domet     Srednji domet         Najduzi domet
   Najvisa preciznost  Dobra preciznost     Najniza preciznost

Ovaj hijerarhijski pristup osigurava da se najskuplje operacije (detaljno SDF tracing) koriste samo kada je to neophodno, dok jeftine operacije (screen trace) pokrivaju vecinu slucajeva.

25.2.4 Radiosity Cache -- Visestruko odbijanje svetlosti

Problem visih odbijanja

Do sada smo objasnili kako Lumen racuna jedno odbijanje svetlosti: svetlost pogodi povrsinu, odbije se, i Screen Probe to uhvati. Ali realna globalna iluminacija ukljucuje vise odbijanja (multi-bounce):

Svako dodatno odbijanje eksponencijalno povecava broj zraka koje treba pratiti. Dva odbijanja znaci da za svaki primarni zrak morate pustiti dodatne sekundarne zrake. Tri odbijanja -- terciijarne zrake. Ovo brzo postaje neodrzivo.

Kako Radiosity Cache resava problem

Lumen koristi Radiosity Cache -- sistem koji racuna visa odbijanja svetlosti na povrsinma scene (u Surface Cache-u) umesto na ekranu.

Princip je sledeci:

  1. Prva iteracija: Direktna svetlost se izracuna i zapise u Surface Cache svake kartice mesh-a.
  2. Druga iteracija: Svaka kartica "pogleda" okolne kartice i prikupi svetlost koja dolazi od njih (svetlost prvog odbijanja). Ovo se zapise nazad u Surface Cache.
  3. Treca iteracija: Ponovite -- svaka kartica prikupi svetlost koja sada ukljucuje i drugo odbijanje. I tako dalje.

Kljucna stvar: ove iteracije se ne desavaju sve u jednom frame-u. Radiosity Cache se azurira inkrementalno, kroz vise frame-ova. U jednom frame-u mozda se azurira samo deo kartica, u sledecem drugi deo. Kroz 4-8 frame-ova, sve kartice su azurirane sa novim informacijama o visim odbijanjima.

Radiosity Cache -- tok azuriranja:

Frame 1: Azuriraj kartice 1-100   (ukljuci svetlost 1. odbijanja)
Frame 2: Azuriraj kartice 101-200 (ukljuci svetlost 1. odbijanja)
Frame 3: Azuriraj kartice 201-300 (ukljuci svetlost 1. odbijanja)
Frame 4: Azuriraj kartice 1-100   (sada ukljuci i 2. odbijanje)
Frame 5: Azuriraj kartice 101-200 (sada ukljuci i 2. odbijanje)
...

Rezultat je da Lumen moze podrzati vise odbijanja svetlosti bez da ikada u jednom frame-u radi enormnu kolicinu posla. Cena je sto potpuno konvergirano resenje (sa svim odbijanjima) dolazi sa zakasnjenjem od nekoliko frame-ova. U praksi, ovo je jedva primetno za ljudsko oko jer su visa odbijanja po prirodi meka i difuzna.

25.2.5 Hardware Ray Tracing rezim

Sta je Hardware RT u kontekstu Lumen-a?

Pored default-nog software ray tracing rezima (koji koristi SDF-ove), Lumen takodje podrzava Hardware Ray Tracing -- koristeci RT jezgra (cores) na modernim GPU-ovima (NVIDIA RTX serija, AMD RDNA 2+).

U hardware RT rezimu, Lumen ne koristi SDF-ove za pracenje zraka. Umesto toga, koristi pravu geometriju trouglova (triangle meshes) sa hardverski ubrzanim BVH (Bounding Volume Hierarchy) traversal-om.

Razlike izmedju Software i Hardware RT

Karakteristika Software RT (SDF) Hardware RT
Geometrija za tracing Signed Distance Fields Pravi trouglovi
Hardverski zahtevi Bilo koji moderan GPU RT-capable GPU (RTX, RDNA2+)
Preciznost Ogranicena SDF rezolucijom Tacna geometrija
Sitni detalji Mogu se izgubiti Uhvaceni precizno
Tanka geometrija Problematicna Korektna
Performanse Generalno brze Generalno sporije
Foliage/vegetacija Cesto lose SDF aproks. Precizna
Surface Cache Koristi se i dalje Koristi se i dalje

Vazna napomena: Surface Cache se koristi u oba rezima. Razlika je samo u tome kako se zraci prate -- protiv SDF-ova ili pravih trouglova. Jednom kada zrak pogodi povrsinu, informacija o materijalu se i dalje cita iz Surface Cache-a.

Kada koristiti Hardware RT?

Hardware RT ima smisla u sledecim situacijama:

Hardware RT nema smisla kada:

Prakticni savet: Pocnite uvek sa Software RT. Ako primetite specificne probleme (lose GI na vegetaciji, light leaking kroz tanke zidove), razmotrite ukljucivanje Hardware RT samo za te slucajeve. UE5 vam dozvoljava per-mesh kontrolu u nekim slucajevima.

25.2.6 Kompletna slika -- kako sve radi zajedno

Hajde da sada spojimo sve delove u koherentnu celinu. Evo kako Lumen izracunava globalnu iluminaciju za jedan frame:

Korak 1: Priprema scene

Korak 2: Surface Cache azuriranje

Korak 3: Screen Probe postavljanje

Korak 4: Hijerarhijsko pracenje zraka Za svaku probu:

  1. Screen Trace -- pratite zrake kroz depth buffer.
  2. SDF Trace -- za zrake koji ne pogode nista na ekranu, pratite kroz Mesh Distance Field-ove.
  3. Global SDF Trace -- za najduze zrake, koristite Global Distance Field.

Korak 5: Radiance prikupljanje

Korak 6: Interpolacija na piksele

Kompletan Lumen pipeline (dijagram toka):

+-------------------+     +-----------------+     +------------------+
|    Direktna        |     |  Mesh Distance  |     |   Surface Cache  |
|    Svetlost       |     |     Fields      |     |   (Mesh Cards)   |
+--------+----------+     +--------+--------+     +--------+---------+
         |                         |                        |
         v                         v                        v
+--------+-------------------------+------------------------+---------+
|                        Radiosity Cache                              |
|              (Multi-bounce propagacija kroz Surface Cache)           |
+------------------------------+--------------------------------------+
                               |
                               v
                    +----------+----------+
                    |    Screen Probes     |
                    | (Adaptivna mreza)    |
                    +----------+----------+
                               |
                    +----------+----------+
                    | Hijerarhijski Trace  |
                    | 1. Screen Trace      |
                    | 2. Mesh SDF Trace    |
                    | 3. Global SDF Trace  |
                    +----------+----------+
                               |
                    +----------+----------+
                    | Temporal Accumulation |
                    +----------+----------+
                               |
                    +----------+----------+
                    |  Finalna interpolacija|
                    |  na piksel level     |
                    +----------+----------+
                               |
                               v
                      FINALNA SLIKA (GI)

25.3 Sta je brzo kod Lumen-a?

Sada kada razumemo kako Lumen radi, hajde da razmotrimo zasto je dovoljno brz za real-time primenu. Svaka od sledecih tehnika doprinosi performansama.

25.3.1 Screen-space probe postavljanje -- pracenje samo gde je potrebno

Ovo je mozda najvazniji trik. Lumen ne pokusava da izracuna GI za celu scenu -- samo za ono sto je vidljivo na ekranu. Probe postoje samo na pikselima koji su vidljivi. Ako kamera gleda u prazno nebo, skoro da nema proba. Ako kamera gleda u kompleksnu sobu, probe su guste.

Ovo znaci da se racunarski posao automatski skalira sa kompleksnoscu vidljive scene. Jednostavna scena = manje posla. Kompleksna scena = vise posla, ali samo za ono sto je vidljivo.

25.3.2 Temporal Accumulation -- rasporedite posao kroz vreme

Kao sto smo objasnili, svaka proba ne salje sve zrake u jednom frame-u. Rezultati se akumuliraju kroz 4-8 frame-ova. Ovo efektivno znaci da je "per-frame cost" Lumen-a 4-8 puta manji nego sto bi bio da se sve radi u jednom frame-u.

Naravno, ovo ima cenu -- konvergencija zahteva vreme. Ali za tipicne igre gde se kamera pomera umerenom brzinom, temporal accumulation je praktično nevidljiv za igraca.

Analogija: zamislite da morate prebrojati sve knjige u biblioteci. Umesto da ih prebrojite sve odjednom (sto bi trajalo sat vremena i blokiralo vas), svaki put kada prodjete pored polica prebrojite jednu policu. Posle nedelju dana, imate tacan broj -- a nikada niste morali da stanete i cekate.

25.3.3 Surface Cache -- ne re-evaluirajte materijale

Kada zrak pogodi povrsinu, Lumen ne evaluira pun materijal te povrsine u tom trenutku. Umesto toga, cita vec izracunat rezultat iz Surface Cache-a. Evaluacija materijala je skupa operacija (citanje tekstura, racunanje matematickih izraza, itd.), i izbegavanjem ponovne evaluacije Lumen stedi enormnu kolicinu vremena.

Zamislite razliku: umesto da za svaki zrak (a ima ih stotine hiljada po frame-u) ponovo racunate boju, hrapavost i normalu materijala, jednostavno procitate jednu vrednost iz pripremljene tabele. To je razlika izmedju restorana gde svaki put kuvate od nule i restorana koji ima pripremljene sastojke (mise en place) -- drasticno brze.

25.3.4 Distance Field tracing je jeftiniji od triangle tracing-a

Software ray tracing sa SDF-ovima je inherentno jeftiniji od pravog triangle ray tracing-a:

25.3.5 Hijerarhijsko pracenje -- najjeftinija opcija prvo

Screen Trace je izuzetno jeftin -- koristi depth buffer koji vec postoji. Za ogromnu vecinu zraka u tipicnoj sceni (posebno za kratke zrake koji pogadjaju bliske povrsine), Screen Trace je dovoljan. Samo zraci koji "promase" ekran idu na skuplje SDF tracing.

U praksi, ovo znaci da mozda 50-70% zraka budu reseni samo sa Screen Trace-om, sto dramaticno smanjuje ukupan trosak.


25.4 Sta je skupo kod Lumen-a?

Lumen je impresivan sistem, ali nije besplatan. Razumevanje gde Lumen trosi resurse je kljucno za optimizaciju vasih projekata.

25.4.1 Surface Cache azuriranja

Surface Cache mora da se azurira kad god se promene materijali ili osvjetljenje. U scenama sa mnogo dinamickih objekata koji menjaju materijale ili se krecu (cime menjaju koje kartice su vidljive), Surface Cache azuriranje moze postati znacajan trosak.

Memorija je takodje faktor. Svaki mesh sa Surface Cache-om zauzima GPU memoriju za svoje kartice. U velikim scenama sa hiljadama unikatnih mesh-ova, ovo moze zauzeti stotine megabajta VRAM-a.

Konkretno, problematicni su:

25.4.2 Dugacki zraci (Long-distance tracing)

Sto je veci radijus koji Lumen mora da pretrazi, to je tracing skuplji. U otvorenim spoljasnjim scenama gde svetlost putuje stotine metara, zraci moraju da predju vece distance, sto zahteva vise koraka (cak i sa SDF sphere tracing-om).

Max Trace Distance podesavanje direktno kontrolise koliko daleko zraci mogu ici. Smanjivanje ove vrednosti moze znacajno poboljsati performanse, ali na racun toga da udaljeni objekti ne doprinose indirektnoj svetlosti.

25.4.3 Mnogo preklapajucih svetala

Lumen mora da izracuna doprinos svakog svetla za Surface Cache. Ako u sceni imate mnogo svetala koja se preklapaju (na primer, hodnik sa 50 malih point light-ova), svaka kartica u tom prostoru mora da primi svetlost od svih tih izvora.

Ovo je jedan od najcescih izvora losih performansi sa Lumen-om. Resenje je:

25.4.4 Visoka rezolucija pracenja (High detail tracing distance)

Lumen Scene Detail i Final Gather Quality podesavanja kontrolisu koliko detaljno Lumen prati zrake i koliko proba koristi. Vise vrednosti = bolji kvalitet, ali i vise posla.

Na primer, povecanje Final Gather Quality sa 1.0 na 2.0 efektivno udvostrucava broj proba i/ili zraka po probi. Ovo moze dodati 2-4ms po frame-u na modernom GPU-u, sto je ogromna razlika ako ciljate 60fps (gde imate samo ~16.6ms ukupnog budzeta po frame-u).

25.4.5 Kompleksni materijali u Surface Cache-u

Iako Surface Cache pojednostavljuje evaluaciju materijala, kreiranje Surface Cache-a i dalje zahteva evaluaciju svakog materijala. Materijali sa mnogo teksturnih uzorkovanja, kompleksnim World Position Offset-om, ili skupim proceduralnim izrazima ce usporiti Surface Cache azuriranje.

Ovo je posebno problematicno za materijale koji koriste World Position Offset (WPO) -- jer se oblik mesh-a menja, ali SDF to ne prati (SDF se racuna jednom pri importu). Mesh Cards takodje ne mogu uvek precizno uhvatiti deformisanu geometriju.

25.4.6 Final Gather kvalitet

Final Gather je poslednji korak gde se prikupljena svetlost iz proba interpolira na svaki piksel. Visoki kvalitet Final Gather-a znaci:

Na niskom kvalitetu, mozete primetiti blage "patchwork" artefakte gde se vidi granica izmedju proba. Na visokom kvalitetu, ovi artefakti nestaju, ali cena se placa u milisekundama.


25.5 Kompromisi i ogranicenja

Nijedan sistem nije savrsen, i Lumen nije izuzetak. Razumevanje ogranicenja je jednako vazno kao razumevanje mogucnosti.

25.5.1 Ogranicenja Software RT-a (SDF-based tracing)

SDF kvalitet nije savrsen. Signed Distance Field je aproksimacija originalne geometrije. Ova aproksimacija je generalno dobra za solide, konveksne oblike, ali moze imati problema sa:

Prakticni savet: Vizualizujte SDF-ove vasih mesh-ova rano u procesu razvoja. Ako vidite da SDF ne predstavlja kljucne delove geometrije, razmotrite:

  1. Povecanje SDF rezolucije za taj mesh.
  2. Dodavanje debljine tankim zidovima (minimum 10-20cm za pouzdane SDF-ove).
  3. Prebacivanje na Hardware RT ako je neophodno.

25.5.2 Ogranicenja Surface Cache-a

Surface Cache, kao sto smo pomenuli, ima ogranicenu rezoluciju. Ovo se manifestuje na vise nacina:

Resenja za Surface Cache artefakte:

25.5.3 Temporal Accumulation -- sum pri brzom kretanju

Temporal accumulation je genijalana tehnika, ali ima ugradjenu slabost: zahteva vreme za konvergenciju. Kada se kamera ili objekti brzo krecu, akumulirani podaci iz prethodnih frame-ova postaju nevazeci, i Lumen mora da "pocne ispocetka" za pogodjena podrucja.

Ovo se manifestuje kao:

Mitigacije:

25.5.4 Tipovi projekata gde Lumen moze imati problema

Lumen nije idealan za svaki projekat. Evo gde mozete ocekivati probleme:

VR projekti:

Veoma brze igre (racing, fast-paced FPS):

Mobilne igre:

Retro stilovi sa hard shadows:

25.5.5 Distance Field ogranicenja -- poseban slucaj

Pored opsta ogranicenja SDF preciznosti, postoje specificni problemi:

Tanka geometrija:

Foliage (vegetacija):

Deformisane geometrije (Skeletal Meshes):


25.6 Pregled Lumen podesavanja

Sada cemo proci kroz kljucna podesavanja koja kontrolisu kvalitet i performanse Lumen-a. Razumevanje ovih parametara je od sustinskog znacaja za svakoga ko zeli da fino podesi Lumen za svoj projekat.

25.6.1 Aktiviranje Lumen-a

Pre svega, hajde da se uverimo da je Lumen ukljucen:

  1. Otvorite Project Settings.
  2. Idite na Engine > Rendering.
  3. Pod Global Illumination, postavite Dynamic Global Illumination Method na Lumen.
  4. Pod Reflections, postavite Reflection Method na Lumen (vise o ovome u Poglavlju 26).

Alternativno, mozete koristiti Post Process Volume da lokalno kontrolisete GI metodu:

  1. Postavite Post Process Volume u scenu.
  2. U njegovim podesavanjima, pod Global Illumination > Lumen Global Illumination, aktivirajte override.
  3. Ovde mozete podesiti parametre specificne za tu oblast scene.

25.6.2 Lumen Scene Detail

Gde se nalazi: Post Process Volume > Lumen Global Illumination > Lumen Scene Detail

Sta kontrolise: Rezoluciju i preciznost Scene representation-a (Surface Cache). Visa vrednost = detaljnije Mesh Cards, bolja rezolucija Surface Cache-a.

Podrazumevana vrednost: 1.0

Opseg: 0.25 -- 4.0

Efekat povecanja:

Efekat smanjenja:

Preporuka:

25.6.3 Final Gather Quality

Gde se nalazi: Post Process Volume > Lumen Global Illumination > Final Gather Quality

Sta kontrolise: Gustinu Screen Proba i/ili broj zraka po probi. Ovo direktno utice na kvalitet finalne GI slike.

Podrazumevana vrednost: 1.0

Opseg: 0.25 -- 4.0 (moze se ici i vise komandama konzole, ali se ne preporucuje za real-time)

Efekat povecanja:

Efekat smanjenja:

Preporuka:

25.6.4 Lumen Scene Lighting Quality

Gde se nalazi: Post Process Volume > Lumen Global Illumination > Lumen Scene Lighting Quality

Sta kontrolise: Kvalitet osvjetljenja unutar Surface Cache-a -- koliko zraka se koristi za izracunavanje svetlosti na Mesh Cards.

Podrazumevana vrednost: 1.0

Opseg: 0.25 -- 4.0

Efekat povecanja:

Efekat smanjenja:

Preporuka:

25.6.5 Software vs Hardware Ray Tracing

Gde se nalazi: Post Process Volume > Lumen Global Illumination > Use Hardware Ray Tracing when available

Sta kontrolise: Da li Lumen koristi SDF software tracing ili pravi hardware RT.

Podrazumevana vrednost: Iskljuceno (Software RT)

Preduslovi za Hardware RT:

Kada ukljuciti:

Kada NE ukljucivati:

25.6.6 Max Trace Distance

Gde se nalazi: Post Process Volume > Lumen Global Illumination > Max Trace Distance

Sta kontrolise: Maksimalnu distancu (u Unreal Units, gde 1 uu = 1 cm) koju Lumen zraci mogu preci pre nego sto odustanu.

Podrazumevana vrednost: Zavisno od projekta, tipicno oko 20000 (200 metara).

Efekat povecanja:

Efekat smanjenja:

Preporuka:

25.6.7 Dodatna korisna podesavanja

Pored glavnih parametara, postoji niz dodatnih podesavanja koja mogu biti korisna:

Lumen Scene Lighting Update Speed:

Lumen Scene View Distance:

Mesh Distance Field Resolution Scale:

r.Lumen.ScreenProbeGather.DownsampleFactor:


25.7 Lumen u praksi -- Saveti i best practices

25.7.1 Interijer vs. Eksterijer

Interijer scene (sobe, hodnici, zgrade):

Ovo je gde Lumen zaista blista. U zatvorenim prostorima, indirektna svetlost je izuzetno vazna -- svetlost ulazi kroz prozor, odbija se vise puta, i ispunjava sobu. Bez GI-ja, delovi sobe koji nisu direktno osvetljeni bi bili potpuno tamni.

Preporuke za interijer:

Eksterijer scene (otvoreni svetovi, spoljasnji prostori):

U otvorenim prostorima, direktna svetlost (sunce) je dominantna, i GI igra manju ulogu. Lumen i dalje doprinosi -- ambient occlusion, obojeno odbijanje od terena i zgrada -- ali efekat je suptilniji.

Preporuke za eksterijer:

25.7.2 Debljina zidova i blokirajuca geometrija

Ovo je toliko cest problem da zasluzuje poseban pasus. Mnogi level dizajneri prave zidove kao tanke ravni (single-sided walls), sto je u redu za vizuelni izgled, ali katastrofalno za Lumen jer SDF ne moze pouzdano predstaviti tanke povrsine.

Pravilo: Svaki zid koji treba da blokira svetlost mora imati debljinu od minimum 10cm, idealno 15-20cm u SDF rezimu.

Ako iz nekog razloga ne mozete napraviti debele zidove (npr. koristite modularni kit sa tankim zidovima), mozete:

  1. Dodati "shadow blocker" mesh -- nevidljiv mesh (sa iskljucenim renderingom ali ukljucenim SDF generation) koji ima dovoljnu debljinu.
  2. Prebaciti se na Hardware RT za tu oblast.
  3. Koristiti Lumen Scene Lighting Quality da smanjite intenzitet curenja.

25.7.3 Emissive materijali i Lumen

Jedna od najlepsih mogucnosti Lumen-a je podrska za emissive materijale -- materijale koji emituju svetlost. Ekran televizora, neonska reklama, usijana lava -- sve ovo moze emitovati svetlost u Lumen-u i doprineti globalnoj iluminaciji.

Kako to radi:

  1. Mesh sa emissive materijalom ima tu emisiju zapisanu u svom Surface Cache-u.
  2. Kada Lumen zraci pogode taj mesh, oni "pokupe" emitovanu svetlost.
  3. Ta svetlost se propagira dalje kroz scenu kao svaka druga indirektna svetlost.

Vazno: Emissive materijali u Lumen-u ne stvaraju senke. Oni emituju meku, difuznu svetlost, ali nemaju fizicki izvor koji baca senke. Ako vam trebaju i senke, dodajte klasicnu Light actor blizu emissive povrsine.

Performanse: Emissive materijali ne dodaju poseban trosak za Lumen -- oni se obradjuju kao deo Surface Cache-a. Medjutim, jako svetle emissive povrsine mogu dovesti do viseg suma u GI-ju jer kreiraju jake svetlosne gradijente.

25.7.4 Debugging Lumen problema

Kada nesto ne izgleda kako treba, UE5 pruza vise alata za debugovanje Lumen-a:

Vizualizacioni rezimi (View Modes):

  1. Lumen Scene (Show > Visualize > Lumen Scene): Prikazuje kako Lumen vidi vasu scenu -- Surface Cache kartice. Korisno za identifikovanje mesh-ova koje Lumen ne registruje ili koji imaju lose kartice.

  2. Mesh Distance Fields (Show > Visualize > Mesh Distance Fields): Prikazuje SDF reprezentaciju mesh-ova. Korisno za identifikovanje losih SDF-ova (mesh-ovi koji imaju "rupee" ili deformisane SDF-ove).

  3. Lumen Scene Overview: Prikazuje rezoluciju kartica svakog mesh-a kao heatmap-u. Crveno = niska rezolucija, zeleno = dobra rezolucija.

Konzolne komande:

Tipicni problemi i resenja:

Problem Mogucii uzrok Resenje
Svetlost curi kroz zid Tanak zid, los SDF Povecajte debljinu zida (min 15cm)
GI ne reaguje na materijal Surface Cache se nije azurirao Sacekajte par frame-ova ili forsirajte update
Sum/noise u GI-ju Niska Final Gather Quality ili brza kamera Povecajte Final Gather Quality ili usporite kameru
Objekat ne doprinosi GI-ju Mesh nema SDF ili kartice Proverite "Generate Mesh Distance Field" u mesh settings
GI izgleda "blocky" Niska Lumen Scene Detail Povecajte Lumen Scene Detail
Performanse su lose Previse detalja, dugacki zraci Smanjite Max Trace Distance, koristite manje svetala

25.8 Lumen i ostali sistemi -- kako se sve uklapa

25.8.1 Lumen i Nanite

Nanite i Lumen su dizajnirani da rade zajedno, ali vazno je razumeti njihov odnos:

25.8.2 Lumen i Virtual Shadow Maps

Virtual Shadow Maps (VSM) su UE5-ov sistem za visoko-rezolucione senke. Lumen koristi informacije iz VSM za tacniju simulaciju svetlosti -- ako VSM kaze da je neka tacka u senci, Lumen to uzima u obzir za Surface Cache evaluaciju.

25.8.3 Lumen i Sky Light

Skylight je vazan izvor svetlosti za Lumen, posebno u spoljasnjim scenama. Lumen moze da koristi Skylight (sa ili bez HDRI cubemap-a) kao izvor ambijentalnog osvetljenja koji se propagira kroz GI.

Preporuka: Uvek imajte aktivan Skylight u scenama sa Lumen-om, posebno u eksterijeru. U interijeru, Skylight moze doprineti svetlosti koja ulazi kroz otvore.

25.8.4 Lumen i Post Processing

Post processing efekti mogu znacajno uticati na konacni izgled Lumen GI-ja:


25.9 Napredne teme

25.9.1 Lumen i World Partition

U velikim, otvorenim svetovima sa World Partition sistemom, Lumen se automatski prilagodjava:

25.9.2 Lumen sa dinamickim objektima

Dinamicki objekti (Movable actors) u potpunosti rade sa Lumen-om:

Za brzo pomicucce objekte (projektili, cestice), Lumen moze ne uhvatiti njihov GI doprinos jer je Surface Cache azuriranje presporo. Ovo je generalno u redu jer su brzi objekti retko znacajni za GI.

25.9.3 Per-Object Lumen podesavanja

Neki mesh-ovi imaju specificna podesavanja relevantna za Lumen:

Ova podesavanja omogucuju fino kontrolisanje -- na primer, mozete iskljuciti Lumen doprinos za male dekorativne objekte koji ne uticu znacajno na GI ali potrosili bi resurse.

25.9.4 Profajliranje Lumen performansi

Za detaljno profajliranje Lumen-a, koristite:

  1. stat GPU -- Prikazuje ukupne GPU timings ukljucujuci Lumen.
  2. ProfileGPU (Ctrl+Shift+,) -- Detaljan breakdown svih rendering pass-ova.
  3. Unreal Insights -- Za sveobuhvatno profajliranje.

Tipican Lumen breakdown u ProfileGPU:

Lumen (ukupno):                    3.5ms
  |-- Lumen Scene Update:          0.8ms  (Surface Cache azuriranje)
  |-- Lumen Radiosity:             0.5ms  (Multi-bounce propagacija)
  |-- Lumen Screen Probe Gather:   1.2ms  (Probe tracing i gathering)
  |-- Lumen Screen Probe Filter:   0.3ms  (Filtering i denoising)
  |-- Lumen Reflections:           0.7ms  (Refleksije, vise u Pogl. 26)

Svaki od ovih delova moze biti optimizovan zasebno podesavanjima koja smo opisali.


25.10 Lumen vs. Baked Lighting -- Kada koristiti sta?

Poglavlje 24 je detaljno obradilo baked lighting (Lightmass). Hajde da napravimo direktno poredjenje:

Aspekt Lumen (Dinamicki GI) Baked Lighting (Lightmass)
Setup vreme Nula -- radi odmah Bake-ovanje moze trajati od minuta do sati
Iteracija Trenutna -- promenite svetlo, vidite rezultat odmah Svaka promena zahteva novo bake-ovanje
Kvalitet na staticnim scenama Odlican, ali sa nekim artefaktima Izvrstan -- gotovo perfektan za staticne scene
Dinamicke promene Potpuno podrzane Nisu moguce bez menjanja baked podataka
Memorija (runtime) GPU memorija za SDF, Surface Cache Lightmap teksture mogu biti ogromne
GPU trosak (runtime) 2-5ms+ po frame-u Blizu nuli (vec izracunato)
Tanki mesh-ovi Problematicni (SDF ogranicenja) Rade korektno
Multi-bounce Podrzano (Radiosity Cache) Podrzano (sa dovoljno bake vremena)
Emissive GI Podrzano i dinamicko Podrzano ali staticno
Mobilni uredjaji Nije podrzano Jedina opcija za GI

Preporuka: Koristite Lumen za vecinu PC/konzolnih projekata, posebno one sa dinamickim sadrzajem. Razmotrite baked lighting za VR, mobilne igre, ili projekte gde je apsolutni kvalitet GI bez artefakata kritican i scena je vecinom staticna.

Zapamtite: ovo nije "ili-ili." Mozete koristiti kombinaciju u razlicitim delovima igre ili cak hibridne pristupe.


25.11 Rezime poglavlja

Prosli smo dug put u ovom poglavlju. Hajde da rezimiramo kljucne tacke:

  1. Lumen je UE5-ov sistem za potpuno dinamicku globalnu iluminaciju i refleksije koji ne zahteva bake-ovanje i reaguje na promene u realnom vremenu.

  2. Lumen koristi viseslojni pristup:

    • Mesh Distance Fields (SDF) za software ray tracing.
    • Surface Cache (Mesh Cards) za brzo citanje materijala.
    • Screen Probes za prikupljanje svetlosti na ekranu.
    • Radiosity Cache za multi-bounce propagaciju.
    • Hijerarhijsko pracenje (Screen > Mesh SDF > Global SDF) za efikasnost.
  3. Lumen je brz zahvaljujuci screen-space probe-ovima, temporal accumulation-u, Surface Cache-u, i hijerarhijskom pracenju.

  4. Lumen je skup pri Surface Cache azuriranjima, dugackim zracima, mnogo preklapajucim svetlima, i visokim quality podesavanjima.

  5. Lumen ima ogranicenja sa tankom geometrijom, SDF preciznoscu, temporal noise-om pri brzom kretanju, i odredjenim tipovima projekata (VR, mobilno).

  6. Kljucna podesavanja ukljucuju Lumen Scene Detail, Final Gather Quality, Lumen Scene Lighting Quality, Software vs Hardware RT, i Max Trace Distance.


Tabela kljucnih pojmova

Termin (EN) Termin (SR) Opis
Global Illumination (GI) Globalna iluminacija Simulacija sveukupnog osvetljenja ukljucujuci odbiijenu svetlost
Signed Distance Field (SDF) Polje oznacene distanc 3D struktura gde svaka tacka cuva rastojanje do najblize povrsine
Surface Cache Kes povrsina Pojednostavljena reprezentacija materijala mesh-ova za brzo citanje
Mesh Cards Kartice mesh-a Ravne projekcije mesh-a koje cine Surface Cache
Screen Probes Probe na ekranu Tacke na ekranu koje prikupljaju indirektnu svetlost
Radiosity Cache Kes radijancije Sistem za inkrementalno izracunavanje visih odbijanja svetlosti
Temporal Accumulation Vremenska akumulacija Tehnika raspodjele posla kroz vise frame-ova sa akumulacijom rezultata
Sphere Tracing Sferno pracenje Tehnika ray marchinga koristeci SDF vrednosti za odredjivanje velicine koraka
Final Gather Finalno prikupljanje Poslednji korak interpolacije GI-ja na svaki piksel
Hardware Ray Tracing Hardversko pracenje zraka Koristenje RT jezgara GPU-a za pravcenje zraka protiv pravih trouglova
Light Leaking Curenje svetlosti Artefakt gde svetlost prolazi kroz geometriju koja bi trebalo da je blokira
Multi-bounce Visestruko odbijanje Svetlost koja se odbija vise od jednom pre nego sto dospe do posmatraca
Global Distance Field Globalno polje distance Nizorezolucioni SDF cele scene za dugorocno pracenje
Ray Marching Marsiranje zraka Tehnika pracenja zraka u diskretnim koracima
Emissive Material Emisivni materijal Materijal koji emituje svetlost (samoosvetljavajuci)

Reference i dalje citanje

Poglavlja u ovoj knjizi

Zvanicni resursi

Akademski i tehncicki resursi


Sta sledi?

U sledecem poglavlju (Poglavlje 26) cemo se fokusirati na Lumen Refleksije -- kako Lumen upravlja refleksijama u sceni, od matiranih povrsina do ogledala, i kako da postignete fotorealisticne refleksije u realnom vremenu.

Vidimo se tamo!


Kljucna poruka ovog poglavlja: Lumen nije magija -- to je izuzetno pametan inzenjerski sistem koji koristi vise tehnika istovremeno da simulira globalnu iluminaciju u realnom vremenu. Razumevanje kako svaki deo radi (SDF-ovi, Surface Cache, Screen Probes, Radiosity Cache) daje vam moc da dijagnostikujete probleme, optimizujete performanse, i iskoristite puni potencijal ovog neverovatnog sistema. Ne plasite se eksperimentisanja -- ukljucite vizualizacione rezime, pomajte podesavanja, i pratite GPU profajler. To je jedini nacin da zaista ovladate Lumen-om.