Poglavlje 24: Staticko Osvetljenje i Lightmapping
"Najbolji frame je onaj koji je vec izracunat." -- Anonimni graficki programer
Dosli smo do jednog od najstarijih, a opet i dalje najkorisnijih koncepata u racunarskoj grafici u realnom vremenu. U prethodnim poglavljima smo istrazivali kako svetlost putuje scenom (Poglavlje 10), kako se indirektno osvetljenje (Global Illumination) simulira u realnom vremenu (Poglavlje 12), i kako Lumen u UE5 resava taj problem dinamicki (Poglavlje 25 ce to detaljno pokriti). Ali pre nego sto se potpuno prepustimo dinamickom osvetljenju, moramo da razumemo tehniku koja je decenijama bila kicma vizuelnog kvaliteta u igrama -- staticko osvetljenje i lightmapping.
Zasto? Zato sto cak i u eri Lumena i real-time ray tracinga, postoje situacije gde je baking osvetljenja ne samo relevantan, vec i jedini ispravan izbor. Mobilne platforme, VR aplikacije, archviz projekti, pa cak i AAA igre koje koriste hibridni pristup -- svi oni zavise od razumevanja lightmappinga.
U ovom poglavlju cemo proci kroz kompletnu pricu: od osnovnog koncepta bakinga, preko lightmap UV zahteva, do GPU Lightmass sistema u UE5, volumetric lightmapa, i resavanja uobicajenih artefakata. Spremite se -- ovo ce biti detaljno, prakticno i, nadam se, korisno.
24.1 Koncept Bakinga -- Zasto Uopste "Peci" Svetlost?
24.1.1 Sta je Baking?
Baking (ili "pecenje") osvetljenja je proces u kome se osvetljenje scene pre-kalkulise offline -- dakle ne u realnom vremenu tokom izvrsavanja igre, vec unapred, u editoru ili posebnom alatu. Rezultati tog izracunavanja se potom cuvaju u teksturama koje se nazivaju lightmape (lightmaps).
Zamislite to ovako: umesto da GPU svaki frame iznova racuna kako svetlost skace po prostoriji, odbija se od zidova, prolazi kroz prozore i pravi meke senke -- sve to se izracuna jednom, rezultat se "upece" u teksturu, i ta tekstura se jednostavno nanosi na geometriju tokom renderinga. GPU vise ne mora da racuna tu kompleksnu fiziku svetlosti -- samo cita vrednosti iz teksture. Brzo, efikasno, a rezultat moze da izgleda fenomenalno.
Formalno receno:
Lightmap texel (u, v) = Integral svetlosti koja dolazi na tacku povrsine
mapirane na taj texel, iz svih pravaca u hemispheri
Ovo ukljucuje:
- Direktno osvetljenje (svetlost koja direktno dolazi od izvora)
- Indirektno osvetljenje (svetlost koja se odbila od drugih povrsina)
- Meke senke (soft shadows nastale od area lights ili visestrukih odbijanja)
- Ambient occlusion (zatamnjenje u uglovima i pukotinama)
24.1.2 Zasto je Indirektno Osvetljenje Skupo?
Kada svetlost udari u povrsinu, ona se ne zaustavlja tu. Odbija se i nastavlja da putuje, udarajuci u druge povrsine, ponovo se odbijajuci, i tako dalje. Ovo je sustina Global Illumination (GI) -- i upravo ovo je ono sto scenu cini realisticnom.
Problem? Simulacija ovog procesa u realnom vremenu je izuzetno racunski zahtevna. Za svaki piksel na ekranu, trebalo bi pratiti stotine ili hiljade zraka svetlosti (rays) kroz vise odbijanja. Cak i sa modernim GPU-ovima, ovo je tezak zadatak za 60 FPS rendering.
Zato se koristio baking: izracunaj sve to offline, gde vreme nije ograniceno na 16.67 ms po frameu, vec moze da traje minutima ili satima.
| Aspekt | Real-time GI | Baked GI |
|---|---|---|
| Vreme izracunavanja | ~ms po frameu | Minuti/sati offline |
| Kvalitet | Ogranien budzetom | Moze biti neogranicen |
| Memorija (runtime) | GPU compute | Lightmap teksture |
| Dinamicnost | Potpuna | Nikakva (staticno) |
| Indirektni bounces | Obicno 1-2 | Moze 100+ |
24.1.3 Fundamentalni Trade-off
Baking je, u sustini, razmena dinamicnosti za kvalitet i performanse.
Sta dobijate:
- Izuzetno kvalitetno indirektno osvetljenje sa mnogo bounceova
- Meke, realisticne senke
- Minimalan uticaj na runtime performanse (samo texture sampling)
- Mogucnost da se postigne fotorealistican izgled
Sta gubite:
- Baked svetla ne mogu da se pomeraju tokom igre
- Baked senke ne reaguju na promene u sceni
- Svaka promena u geometriji ili osvetljenju zahteva rebuild (ponovo pecenje)
- Zauzima memoriju za lightmap teksture
Ovo je kljucna stvar koju morate razumeti: kada jednom "ispecete" osvetljenje, ono je zamrznuto. Ako igrac pomeri sto u sobi, senke od tog stola se nece promeniti jer su one deo teksture, ne dinamickog izracunavanja.
24.1.4 Kada je Baking i Dalje Relevantan?
Mozda mislite: "Pa, imamo Lumen, zasto bismo se uopste bavili bakingom?" Odlicno pitanje. Evo konkretnih scenarija:
Mobilne platforme (iOS, Android)
Mobilni GPU-ovi jednostavno nemaju snagu za real-time GI. Lumen nije podrzan na mobilnim platformama u UE5 (barem ne u punom obliku). Baking je jedini nacin da dobijete kvalitetno indirektno osvetljenje na mobilnim uredjajima.
VR (Virtual Reality)
U VR-u, svaki milisekund je vazan. Potrebno vam je stabilnih 90 FPS (ili cak 120 FPS) da bi iskustvo bilo ugodno. Baking vam daje fenomenalan vizuelni kvalitet bez runtime troska, sto je u VR-u neprocenjivo.
Archviz (Arhitektonska vizualizacija)
Archviz projekti su cesto staticne scene -- klijent zeli da setne kroz buducu kucu ili kancelariju. Geometrija se ne menja, svetla su fiksna. Baking je idealan: mozete da postignete fotorealistican kvalitet jer imate potpunu kontrolu i neograniceno vreme za rendering.
Hibridni pristup u AAA igrama
Mnoge moderne igre koriste kombinaciju: baked indirektno osvetljenje + dinamicno direktno osvetljenje. Ovako dobijate kvalitetnu GI bez runtime troska, a dinamicna direktna svetla (i njihove senke) i dalje reaguju na promene u sceni.
Performance-kriticne situacije
Cak i na PC-u ili konzolama, u scenama sa veoma kompleksnom geometrijom ili mnogo svetlosnih izvora, baking moze da oslobodi GPU budget za druge efekte -- post-processing, particle sisteme, kompleksne materijale.
24.2 Lightmap Rezolucija
24.2.1 Sta je Lightmap Rezolucija?
Lightmap rezolucija definise koliko texela (texture pixels) se koristi za cuvanje informacija o osvetljenju po jedinici povrsine objekta. Mozete da je zamislite kao "gustinu piksela" u lightmap teksturi.
U UE5, lightmap rezolucija se izrazava kao dimenzija teksture -- na primer, rezolucija 64 znaci da ce lightmapa tog objekta biti 64x64 texela.
24.2.2 Texeli po Jedinici Sveta (Texels per World Unit)
Kljucni koncept je odnos izmedju broja texela i fizicke velicine objekta u svetu. Ako imate zid od 4 metra sa lightmap rezolucijom 64, to znaci:
Texel density = 64 texela / 400 cm = 0.16 texela po cm
= 16 texela po metru
Sto je veca gustina texela, to su detaljnije senke i osvetljenje -- ali i veca potrosnja memorije.
Za poredjenje:
| Gustina | Kvalitet | Tipicna upotreba |
|---|---|---|
| 4 texela/m | Vrlo nisko | Udaljeni tereni, pozadine |
| 8 texela/m | Nisko | Veliki spoljasnji objekti |
| 16 texela/m | Srednje | Spoljasnji zidovi, podovi |
| 32 texela/m | Dobro | Unutrasnji zidovi, namestaj |
| 64 texela/m | Visoko | Blizi objekti, hero assets |
| 128+ texela/m | Vrlo visoko | Archviz, close-up detalji |
24.2.3 Kako Odabrati Pravu Rezoluciju?
Izbor lightmap rezolucije je balansiranje izmedju vizuelnog kvaliteta i potrosnje memorije. Evo prakticnih smernica:
Pravilo 1: Velicina objekta
Veci objekti generalno trebaju vecu apsolutnu rezoluciju, ali mogu da imaju manju gustinu texela jer su obicno dalje od kamere.
Mali objekat (stolica): Rezolucija 32-64
Srednji objekat (sto): Rezolucija 64-128
Veliki objekat (zid sobe): Rezolucija 128-256
Vrlo veliki (pod citave sobe): Rezolucija 256-512
Pravilo 2: Blizina kamere
Objekti koji su blizu kamere (ili koje igrac moze da ispita izbliza) trebaju vecu rezoluciju. Udaljeni objekti mogu da prodje sa manjom.
Pravilo 3: Kompleksnost senki
Ako objekat prima kompleksne senke (na primer, pod ispod stola sa mnogo nogu), treba mu veca rezolucija da te senke budu jasne i ciste.
Pravilo 4: Budzet memorije
Uvek imajte na umu ukupni budzet. Nemojte staviti rezoluciju 512 na svaki objekat -- to ce brzo pojesti svu raspolozivu memoriju.
24.2.4 Per-Object Podesavanja Rezolucije
U UE5, lightmap rezoluciju mozete podesiti po objektu (per actor instance). Ovo je kljucna mogucnost jer vam omogucava da fino kontrolisete gde trositi lightmap budzet.
Da biste podesili lightmap rezoluciju za odredjeni Static Mesh Actor:
- Selektujte actor u viewportu
- U Details panelu, nadjite sekciju Lighting
- Pronadjite opciju Overridden Light Map Res
- Cekrajte checkbox da omogucite override
- Postavite zeljenu vrednost
Takodje, svaki Static Mesh asset ima svoju podrazumevanu lightmap rezoluciju koja se koristi ako actor ne napravi override:
- Otvorite Static Mesh asset u editoru
- U Details panelu, nadjite Light Map Resolution
- Postavite podrazumevanu vrednost
Pro tip: Koristite Optimization Viewmodes u UE5 editoru. Pod Optimization Viewmodes > Lightmap Density mozete videti vizuelnu reprezentaciju lightmap gustine na svim objektima. Zelena boja oznacava optimalnu gustinu, crvena preveliku (skupa), a plava premalu (los kvalitet).
24.2.5 Uobicajene Vrednosti za Razlicite Tipove Objekata
Evo konkretnih preporuka za razlicite tipove objekata u tipicnom projektu:
Unutrasnji prostori (Interior):
| Tip objekta | Preporucena rezolucija | Obrazlozenje |
|---|---|---|
| Pod (floor) | 128-256 | Prima mnogo senki, vidljiv izbliza |
| Zidovi (walls) | 64-128 | Uglavnom ravne povrsine |
| Plafon (ceiling) | 32-64 | Retko se gleda direktno |
| Namestaj (furniture) | 32-128 | Zavisi od velicine i blizine |
| Mali dekorativni objekti | 16-32 | Obicno mali doprinos |
| Vrata i prozori | 64-128 | Cesto u fokusu |
Spoljasnji prostori (Exterior):
| Tip objekta | Preporucena rezolucija | Obrazlozenje |
|---|---|---|
| Teren (terrain) | Ne koristi lightmape | Korisiti landscape-specific resenja |
| Zgrade (buildings) | 64-256 | Zavisi od velicine fasade |
| Staze i putevi | 32-64 | Velike, ravne povrsine |
| Vegetacija (foliage) | 4-16 | Mnogo instanci, male povrsine |
| Kamenje i stene | 32-64 | Nepravilne povrsine |
24.2.6 Kalkulacija Ukupne Lightmap Memorije
Razumevanje koliko memorije trose vase lightmape je kriticno za optimizaciju. Evo kako se to racuna:
Formula za jedan objekat:
Memorija (bytes) = Sirina x Visina x BytesPerTexel
Gde je BytesPerTexel obicno 4 (RGBA8) ili 8 (za HDR lightmape)
Primer:
Objekat sa lightmap rezolucijom 256:
256 x 256 x 4 bytes = 262,144 bytes = 256 KB
Objekat sa lightmap rezolucijom 128:
128 x 128 x 4 bytes = 65,536 bytes = 64 KB
Objekat sa lightmap rezolucijom 64:
64 x 64 x 4 bytes = 16,384 bytes = 16 KB
Kalkulacija za celu scenu:
Ukupna memorija = Suma(Za svaki objekat: Rezolucija^2 x BytesPerTexel)
Primer scene:
50 objekata sa rezolucijom 64: 50 x 16 KB = 800 KB
20 objekata sa rezolucijom 128: 20 x 64 KB = 1,280 KB
10 objekata sa rezolucijom 256: 10 x 256 KB = 2,560 KB
5 objekata sa rezolucijom 512: 5 x 1 MB = 5,120 KB
-------------------------------------------------
Ukupno: ~9.5 MB
Napomena: UE5 takodje koristi kompresiju i atlas pakovanje (vise lightmapa u jednu veliku teksturu), sto utice na stvarnu potrosnju memorije. Stvarna potrosnja moze biti razlicita od grube kalkulacije, ali ovo vam daje dobar okvir za planiranje.
Lightmap atlasi u UE5:
UE5 pakuje individualne lightmape u vece atlas teksture (obicno 1024x1024 ili 2048x2048). Ovo smanjuje broj texture switcheva tokom renderinga i poboljsava performanse. Mozete kontrolisati maksimalnu velicinu atlasa u World Settings > Lightmass > Packed Light and Shadow Map Texture Size.
Prakticne granice:
| Platforma | Preporuceni ukupni budzet |
|---|---|
| Mobile (low-end) | 16-32 MB |
| Mobile (high-end) | 32-64 MB |
| VR | 32-64 MB |
| PC/Console (standard) | 64-128 MB |
| Archviz (bez limita) | 128-512 MB |
24.3 Lightmap UV Zahtevi
24.3.1 Povezanost sa Poglavljem 04
U Poglavlju 04 smo detaljno obradili UV mapping i spomenuli da je UV channel 1 (drugi UV set, posto se broji od 0) obicno rezervisan za lightmape. Sada cemo objasniti zasto su zahtevi za lightmap UV-ove toliko specificni i strogi.
Lightmap UV-ovi se razlikuju od standardnih UV-ova za teksture (UV channel 0) na nekoliko kljucnih nacina. Dok UV channel 0 moze da ima preklapanja (na primer, obe strane kutije koriste istu teksturu), lightmap UV-ovi moraju da budu jedinstveni -- svaka tacka na povrsini meshing mora da ima svoju jedinstvenu poziciju u UV prostoru.
24.3.2 Zahtev 1: Nema Preklapajucih UV-ova (No Overlapping UVs)
Ovo je apsolutno najvazniji zahtev. Ako se dva dela geometrije preklapaju u lightmap UV prostoru, oba dela ce deliti iste texele u lightmapi. To znaci da ce osvetljenje za oba dela biti isto -- sto je ocigledno pogresno.
Zasto je ovo problem?
Zamislite da imate kutiju. U standardnom UV mapiranju, mozda sve cetiri bocne strane dele istu UV oblast (jer koriste istu teksturu). Ali svaka strana kutije prima razlicito osvetljenje -- jedna strana gleda ka prozoru i svetla je, druga je u senci. Ako se lightmap UV-ovi preklapaju, obe strane bi dobile isti osvetljaj, sto bi izgledalo potpuno pogresno.
Kako proveriti u UE5:
- Otvorite Static Mesh Editor
- U toolbaru, izaberite UV overlay opciju
- Izaberite UV channel 1 (lightmap channel)
- Vizuelno proverite da nema preklapanja
U DCC alatu (Blender, Maya, 3ds Max):
- Koristite UV overlap checker alate
- U Blenderu: UV Editor > Overlaps > Select Overlap (3.6+)
- U Maya: UV Toolkit > UV Overlap Check
24.3.3 Zahtev 2: UV-ovi u 0-1 Prostoru
Svi lightmap UV-ovi moraju biti unutar 0-1 UV prostora. Nista ne sme da izlazi van tog opsega.
Validno:
Svi UV koordinati: 0.0 <= u <= 1.0, 0.0 <= v <= 1.0
Nevalidno:
Bilo koji UV koordinat: u < 0.0 ili u > 1.0 ili v < 0.0 ili v > 1.0
Zasto?
Lightmapa je jedna tekstura koja pokriva ceo objekat. UV koordinate van 0-1 opsega bi se "umotale" (wrap) i efektivno stvorile preklapanje, sto nas vraca na problem iz prethodnog zahteva.
Za standardne teksture, tiling (ponavljanje) van 0-1 prostora je cesto pozeljno (na primer, za ponavljajuce zidne teksture). Ali za lightmape, tiling nema smisla -- svaki deo povrsine mora da ima jedinstvenu osvetljenost.
24.3.4 Zahtev 3: Adekvatan Padding (Razmak)
Izmedju UV ostrva (UV islands) mora da postoji dovoljan razmak (padding). Ovo je vazno iz dva razloga:
-
Bleeding prevention: Bez dovoljnog paddinga, texeli jednog UV ostrva mogu da "procure" u susedno ostrvo, stvarajuci vizuelne artefakte (linije svetlosti ili senki gde ne bi trebalo da budu).
-
Bilinear filtering: GPU koristi bilinearnu filtraciju pri sampliranju tekstura, sto znaci da cita susedne texele i interpolira izmedju njih. Ako su UV ostrva preblizu, filtracija moze da "uhvati" texele iz susednog ostrva.
Preporuceni padding:
| Lightmap rezolucija | Minimalni padding (texeli) | Preporuceni padding (texeli) |
|---|---|---|
| 32 | 2 | 4 |
| 64 | 2 | 4 |
| 128 | 4 | 8 |
| 256 | 4 | 8 |
| 512 | 8 | 16 |
Pro tip: UE5 automatski dodaje 1-2 texela paddinga oko svake lightmap chart oblasti. Ali to moze biti nedovoljno za vece rezolucije. Uvek je bolje obezbediti vise paddinga u vasim UV-ovima nego manje.
24.3.5 Zahtev 4: Minimalna Distorzija
UV islands treba da budu sto manje distortovana -- to jest, proporcije u UV prostoru treba da odgovaraju proporcijama na samom mesh-u.
Zasto?
Ako je UV island istegnut ili sabijen u jednom pravcu, texeli u lightmapi ce biti neravnomerno rasporedeni na povrsini. To znaci da ce u jednom pravcu imati vise detalja (visoku gustinu texela), a u drugom manje. Rezultat: senke izgledaju istegnute ili sabijene.
Prakticni primer:
Zamislite dugi, uzani hodnik. Ako je lightmap UV za pod istegnut tako da je u UV prostoru priblizno kvadrat (umesto pravougaonika koji odgovara proporcijama hodnika), onda ce texeli duz hodnika biti "istegnuti" -- senke ce izgledati zamagljeno u jednom pravcu, a ostro u drugom.
Resenje: Koristite conformal ili angle-preserving UV projekcije u vasem DCC alatu. Ovo minimizuje distorziju ugla, sto je najvazniji faktor za lightmap kvalitet.
24.3.6 Automatsko Generisanje Lightmap UV-ova u UE5
Ako ne zelite (ili nemate vremena) da rucno pravite lightmap UV-ove, UE5 moze da ih automatski generise prilikom importa mesha:
- Pri importu FBX fajla, cekrajte opciju Generate Lightmap UVs
- Ili, nakon importa, otvorite Static Mesh Editor, i u Build Settings cekrajte Generate Lightmap UVs
UE5 automatski generisani lightmap UV-ovi obicno koriste UV channel 1 i kreirani su sa:
- Bez preklapanja
- U 0-1 prostoru
- Sa razumnim paddingom
- Sa minimizovanom distorzijom
Prednosti automatskog generisanja:
- Brzo i lako
- Obicno "dovoljno dobro" za vecinu slucajeva
- Ne zahteva dodatni rad u DCC alatu
Mane automatskog generisanja:
- Moze da pravi suboptimalne UV layouts (lose iskoriscen UV prostor)
- Ponekad pravi previse sitnih UV ostrva
- Za hero assets, rucni UV layout je skoro uvek bolji
Podesavanja za automatsko generisanje:
- Min Lightmap Resolution: Minimalna rezolucija za koju se UV-ovi optimizuju
- Source Lightmap Index: Koji UV channel da koristi kao bazu (obicno 0)
- Destination Lightmap Index: Gde da sacuva rezultat (obicno 1)
Savet: Za brz workflow, koristite automatsko generisanje, pa vizuelno proverite rezultat u Static Mesh Editoru. Ako lightmape izledaju lose posle bakinga, onda investirajte vreme u rucni UV layout za taj konkretni objekat.
24.3.7 Zasto Sve Ovo Utice na Kvalitet Bakinga?
Da rezimiramo zasto su lightmap UV zahtevi toliko vazni, pogledajmo kako svaki zahtev direktno utice na kvalitet ispecenog osvetljenja:
| Zahtev | Ako je ispostovan | Ako NIJE ispostovan |
|---|---|---|
| Nema preklapanja | Svaka tacka ima jedinstveno osvetljenje | Razliciti delovi dobijaju isto osvetljenje -- potpuno pogresno |
| 0-1 prostor | Svi texeli su validni | Wrapping stvara preklapanja i artefakte |
| Adekvatan padding | Ciste granice izmedju UV ostrva | Bleeding, svetle/tamne linije na ivicama |
| Minimalna distorzija | Ravnomerna gustina texela | Istegnute, zamagljene ili neravnomerne senke |
24.4 Indirect Lighting Cache
24.4.1 Problem: Dinamicki Objekti u Baked Scenama
Zamislite ovu situaciju: imate prelepo ispecenu scenu sa suptilnim indirektnim osvetljenjem. Ali onda igrac udje u sobu. Igracov karakter je dinamicki objekat -- on se pomera, i ne moze da ima baked lightmapu.
Kako taj dinamicki objekat prima indirektno osvetljenje iz ispecene scene? Bez bilo kakvog resenja, dinamicki objekat bi izgledao potpuno "mrtvo" -- osvetljen samo direktnim svetlom, bez ikakve boje ili toplote od indirektne svetlosti.
Tu na scenu stupa Indirect Lighting Cache (ILC).
24.4.2 Kako Funkcionise?
Indirect Lighting Cache je sistem koji cuva volumetriske uzorke (samples) indirektnog osvetljenja na strateskim tackama u 3D prostoru scene. Tokom bakinga, Lightmass ne racuna samo lightmape za staticne povrsine, vec i popunjava 3D mrezu sa informacijama o indirektnom osvetljenju.
Proces izgleda ovako:
- Tokom bakinga: Lightmass izracunava indirektno osvetljenje na tackama rasporedenim u 3D mrezi kroz scenu
- Runtime: Kada se dinamicki objekat (na primer, igracov karakter) nadje u sceni, engine interpolira osvetljenje iz okolnih sample tacaka
- Primena: Interpolirano indirektno osvetljenje se primenjuje na dinamicki objekat kao ambient lighting
24.4.3 Volumetrijske Sample Tacke
Sample tacke u ILC su rasporedene u 3D mrezi koja prati geometriju scene. Tacke se gushe rasporeduju blize staticnoj geometriji (gde je varijacija u osvetljenju veca) i redje u otvorenom prostoru.
U UE5, mozete vizualizovati ove tacke:
- U World Settings, pod Lightmass, omogucite Show Indirect Lighting Cache debug opciju
- U viewportu, koristite Show > Visualize > Indirect Lighting Cache
- Videcete mrezu malih sfera koje predstavljaju sample tacke
Svaka tacka cuva informacije o osvetljenju kodirane u sfericnim harmonicima (Spherical Harmonics, SH) -- matematickoj reprezentaciji koja efikasno opisuje kako svetlost dolazi iz razlicitih pravaca.
24.4.4 Kako Dinamicki Objekti Primaju Baked Indirektno Osvetljenje
Proces primene ILC na dinamicki objekat:
- Engine odredjuje poziciju dinamickog objekta u svetu
- Pronalazi najblize sample tacke u ILC
- Trilinearno interpolira osvetljenje iz tih tacaka
- Primenjuje rezultirajuce osvetljenje na objekat
Ovo daje razumnu aproksimaciju indirektnog osvetljenja -- na primer, ako igrac udje u prostoriju sa crvenim zidovima, ILC ce obezbediti blago crvenkasto indirektno osvetljenje na igracu.
24.4.5 Ogranicenja ILC-a
ILC ima znacajna ogranicenja koja morate razumeti:
Niska rezolucija:
ILC je volumetriska mreza sa relativno niskom rezolucijom (u poredjenju sa lightmapama). To znaci da ne moze da uhvati fine detalje u osvetljenju. Dinamicki objekat nece imati iste suptilne varijacije u indirektnom osvetljenju kao sto ima staticna geometrija sa high-res lightmapom.
Light leaking:
Zbog niske rezolucije, ILC moze da "procuri" svetlost kroz tanke zidove. Ako imate tanak zid izmedju svetle i tamne sobe, sample tacke sa obe strane zida mogu da se mesaju, stvarajuci netacno osvetljenje.
Nema self-shadowing:
ILC ne pruza self-shadowing na dinamickim objektima. To jest, ne moze da simulira kako delovi samog objekta blokiraju indirektno svetlo na drugim delovima istog objekta.
Samo indirektno osvetljenje:
ILC se bavi samo indirektnim (odbijena) svetloscu. Direktno osvetljenje dinamickih objekata se i dalje racuna u realnom vremenu.
Poredenje sa Volumetric Lightmaps (videti sekciju 24.9):
UE5 je uglavnom zamenio stariji ILC sa naprednijim Volumetric Lightmap sistemom, koji pruza bolje rezultate. Ipak, razumevanje ILC-a je korisno jer:
- Stariji projekti ga mogu koristiti
- Koncept je isti -- samo je implementacija napredovala
- Neke platforme mogu preferirati jednostavniji ILC
24.5 Irradiance Volume
24.5.1 Koncept
Irradiance Volume je tehnika za cuvanje informacija o indirektnom osvetljenju u 3D mrezi (grid). Konceptualno je slicna ILC-u, ali je formalizovanija i koristi se kao generalniji mehanizam za "jeftino" indirektno osvetljenje.
Zamislite 3D kutiju koja obuhvata deo vase scene. Ta kutija je podeljena u celije (voxele), i u svakoj celiji je sacuvan uzorak osvetljenja. Kada trebate da znate koliko indirektnog svetla prima neka tacka u prostoru, jednostavno nadjete odgovarajucu celiju (ili interpolirate izmedju susednih) i procitate sacuvanu vrednost.
24.5.2 3D Mreza Uzoraka Osvetljenja
Irradiance Volume se implementira kao regularna 3D mreza (grid) sa fiksnim rastojanjem izmedju uzoraka u svakoj dimenziji (X, Y, Z).
Primer: Irradiance Volume 16x8x4
Dimenzije prostora: 32m x 16m x 8m
Rastojanje izmedju uzoraka: 2m x 2m x 2m
Ukupno uzoraka: 16 x 8 x 4 = 512
Svaki uzorak cuva informacije o osvetljenju koje dolazi iz svih pravaca na toj tacki -- dakle, ne samo intenzitet vec i direkciju svetlosti.
24.5.3 Spherical Harmonics (SH) Encoding
Kljucna tehnika za efikasno cuvanje direkcijskih informacija o osvetljenju su sfericni harmonici (Spherical Harmonics, SH).
Sta su sfericni harmonici?
Sfericni harmonici su matematicke bazne funkcije definisane na povrsini sfere -- slicno kao sto su sinusoide bazne funkcije za 1D signale (Fourier transformacija). Koristeci SH, mozete da aproksimujete kako svetlost dolazi iz razlicitih pravaca koristeci mali broj koeficijenata.
Nivoi SH:
| Nivo (Order) | Broj koeficijenata | Kvalitet | Tipicna upotreba |
|---|---|---|---|
| L0 (order 0) | 1 | Samo srednja vrednost | Ambient color |
| L1 (order 1) | 4 | Nizak, basic directionality | Jeftini sistemi |
| L2 (order 2) | 9 | Srednji, dobri za diffuse | Najcesci za lightmape |
| L3 (order 3) | 16 | Visok | Retko, memorijski skup |
UE5 obicno koristi L2 (drugi nivo) sfericne harmonike za volumetriske uzorke osvetljenja. Sa 9 koeficijenata po kanalu boje (R, G, B), to je ukupno 27 floating-point vrednosti po uzorku.
Zasto SH?
- Kompaktni: Mali broj koeficijenata opisuje osvetljenje iz svih pravaca
- Brzi za evaluaciju: Izracunavanje osvetljenja iz SH koeficijenata je brzo (samo dot product)
- Rotacija: SH koeficijenti se mogu rotirati, sto je korisno za dinamicke objekte
- Interpolacija: SH koeficijenti se mogu linearno interpolirati, sto daje glatke prelaze
24.5.4 Prakticna Upotreba u UE5
U UE5, Irradiance Volume koncept je evoluirao u Volumetric Lightmaps (detaljnije u sekciji 24.9). Ali razumevanje osnovnog koncepta je vazno:
- Baking: Lightmass izracunava indirektno osvetljenje u tackama mreze
- Encoding: Osvetljenje se kodira u SH koeficijente
- Runtime: Engine interpolira SH koeficijente za poziciju dinamickog objekta
- Shading: SH koeficijenti se evaluiraju sa normalom povrsine da bi se dobio finalni indirektni osvetljaj
24.5.5 Prednosti i Mane
Prednosti:
- Jeftino na runtime-u: Samo citanje i interpolacija SH koeficijenata
- Memorijski efikasno: Relativno mali broj tacaka pokriva veliki volumen
- Glatki prelazi: Interpolacija daje gradijentne promene osvetljenja
- Podrzava dinamicke objekte: Svaki objekat moze da primi indirektno osvetljenje
Mane:
- Niska prostorna rezolucija: Fine varijacije u osvetljenju se gube
- SH ogranicenja: L2 SH ne moze da reprezentuje ostre senke ili specular osvetljenje
- Light leaking: Kao i ILC, moze da procuri svetlost kroz tanke zidove
- Memorija raste kubno: Dupliranje rezolucije u sve tri dimenzije osmostrucuje potrosnju memorije
24.6 Zasto se Baking i Dalje Koristi
24.6.1 Mobilne Platforme
Ovo smo vec kratko spomenuli, ali zasluzuje dublje objasnjenje. Mobilni GPU-ovi (cak i najnoviji Apple A-serija ili Qualcomm Adreno) su znacajno slabiji od desktop i konzolnih GPU-ova.
Konkretni razlozi zasto baking dominira na mobilnim platformama:
- Nema hardware ray tracinga: Vecina mobilnih GPU-ova nema RT cores
- Ogranicen compute shader budzet: Real-time GI resenja zahtevaju znacajan compute
- Termalno ogranicenje: Mobilni uredjaji se greju, pa moraju da trosse manje energije
- Baterija: Intenzivno GPU koriscenje brzo trosi bateriju
- Target framerate: 30 ili 60 FPS sa ogranicerim budzetom
Na mobilnim platformama, baked osvetljenje je cesto jedini nacin da se postigne ubedljiv vizuelni kvalitet bez zrtvovanja performansi i trajanja baterije.
UE5 Mobile workflow:
- Koristite Stationary ili Static svetla
- Baking sa Lightmass-om
- Lightmap rezolucije obicno nize (32-128)
- Ogranicena upotreba dinamickih senki (samo za glavnog karaktera ili kljucne objekte)
- ILC ili Volumetric Lightmaps sa nizom rezolucijom
24.6.2 VR (Virtual Reality)
VR ima unikatne zahteve koji cine baking izuzetno vrednim:
Framerate zahtevi:
- Meta Quest: 72-120 FPS
- PC VR (SteamVR): 90-120 FPS
- PlayStation VR2: 90-120 FPS
Dva puta veci rendering budzet:
U VR-u, scena se renderuje dva puta -- jednom za svako oko (stereoskopski rendering). To efektivno duplira rendering trosak.
Latencija je kriticna:
Svako kasnjenje u renderingu se manifestuje kao "motion sickness" kod korisnika. Svaki milisekund je vazan.
Baking kao spas:
Sa baked osvetljenjem, VR aplikacija dobija kvalitetno GI "besplatno" -- jedini trosak je lightmap texture sampling, sto je trivijalno. Ovo oslobadja GPU budzet za stereo rendering i drzanje visokog framerata.
Archviz u VR-u:
Ovo je posebno popularna kombinacija. Archviz VR iskustvo sa potpuno baked osvetljenjem moze da izgleda fotorealisticki i radi na 90 FPS -- nesto sto bi bilo nemoguce sa potpuno dinamickim osvetljenjem.
24.6.3 Archviz (Arhitektonska Vizualizacija)
Archviz je mozda idealan use case za baking:
- Scene su staticne -- zgrade se ne pomeraju
- Osvetljenje je fiksno -- klijent zeli da vidi kako ce prostorija izgledati sa planiranim osvetljenjem
- Kvalitet je prioritet -- klijent ocekuje fotorealisticne slike
- Interaktivnost je ogranicena -- obicno je to setnja kroz prostor
U archviz projektima, mozete da pustite Lightmass da radi satima, koristite maksimalne kvalitete, najvise rezolucije lightmapa, i desettine bounce-ova za indirektno osvetljenje. Rezultat moze biti nerazluciv od fotografije.
Tipican archviz baking workflow:
- Modelirajte scenu sa preciznom geometrijom
- Pripremite lightmap UV-ove (obicno rucno za hero objekte)
- Postavite Lightmass Importance Volume oko scene
- Koristite high-quality Lightmass settings (mnogo bounceova, visoke rezolucije)
- GPU Lightmass za brze iteracije
- Finalno pecenje sa maksimalnim kvalitetom
24.6.4 Hibridni Pristup: Baked Indirektno + Dinamicno Direktno
Ovo je verovatno najcesci pristup u modernim igrama koje koriste baking. Ideja je:
- Indirektno osvetljenje (GI): Baked -- jer je to najskuplji deo za real-time izracunavanje
- Direktno osvetljenje: Dinamicno -- jer igrac ocekuje da senke reaguju na promene
U UE5, ovo se postize koriscenjem Stationary Lights:
- Direktno osvetljenje i senke se racunaju u realnom vremenu
- Indirektno osvetljenje se bake-uje
- Najbolje od oba sveta: realisticno GI + dinamicke senke
Prednosti hibridnog pristupa:
| Aspekt | Vrednost |
|---|---|
| Indirektno osvetljenje | Visok kvalitet (baked, mnogo bounceova) |
| Direktne senke | Dinamicke (reaguju na pomicanje objekata) |
| Performanse | Dobro (samo direktne senke su runtime trosak) |
| Dinamicnost | Parcijalna (senke da, GI ne) |
Primer iz prakse:
Igra moze da ima sobu sa:
- Staticni indirektni osvetljaj (topla svetlost odbijena od drvenog poda) -- baked
- Lampa na plafonu cija senka se menja kada igrac prolazi -- dinamicko
- Igracov karakter prima indirektno osvetljenje iz ILC/Volumetric Lightmaps -- baked uzorci
- Prozor kroz koji ulazi svetlo koje baca dinamicke senke -- dinamicko
24.6.5 Poredjenje: Baking vs Lumen
Da bi stvari bile jasne, evo direktnog poredjenja sa Lumenom (koji cemo detaljno obraditi u Poglavlju 25):
| Kriterijum | Baking (Lightmass) | Lumen |
|---|---|---|
| Kvalitet GI | Izuzetan (offline) | Vrlo dobar (real-time) |
| Dinamicnost | Nema | Potpuna |
| Runtime trosak | Minimalan | Znacajan |
| Platforme | Sve | PC/Console (ne mobile) |
| Iteration vreme | Minuti/sati za rebuild | Instantno |
| Memorija | Lightmap teksture | Screen-space buffers |
| Podrska u UE5 | Potpuna | Potpuna (na podr. platformama) |
24.7 Baking Artefakti i Resenja
Nema nista frustrirajuce kao kad pustite Lightmass da radi 30 minuta, i onda vidite neprijatne artefakte na rezultatu. U ovoj sekciji cemo proci kroz najcesce probleme i kako ih resiti.
24.7.1 Light Leaking (Procurivanje Svetlosti)
Sta je to?
Light leaking se desava kada se svetlost pojavljuje na mestima gde ne bi trebalo -- na primer, svetlost koja "prolazi" kroz zid i osvetljava tamnu sobu iza njega.
Zasto se desava?
Nekoliko mogucih uzroka:
- Geometrija sa rupama: Zidovi koji nisu potpuno zatvoreni (imaju pukotine ili nepovezane vertekse)
- Lightmap rezolucija preniska: Texeli su toliko veliki da "pokrivaju" i jednu i drugu stranu zida
- Bias podesavanja: Lightmass bias moze uzrokovati pomeranje uzoraka sa jedne strane zida na drugu
- ILC/Volumetric Lightmap interpolacija: Volumetrijski uzorci sa jedne strane zida se interpoliraju sa onima sa druge strane
Resenja:
Za geometriju sa rupama:
- Proverite da su zidovi potpuno zatvoreni -- bez pukotina
- Koristite deblje zidove (barem 10-20 cm debljine u svetu igre)
- Pogledajte mesh u wireframe modu da pronadjete rupe
Za nisku lightmap rezoluciju:
- Povecajte lightmap rezoluciju na problematicnom objektu
- Posebno za tanke zidove -- treba im dovoljno texela da jasno razdvoje jednu stranu od druge
Za Lightmass bias:
- U World Settings > Lightmass, podesite Indirect Lighting Smoothness -- manja vrednost smanjuje leaking ali moze uvesti sum
- Na pojedinacnim meshevima, koristite Shadow Bias podesavanja
Za volumetricke uzorke:
- Postavite Lightmass Importance Volume precizno oko igralivog prostora
- Povecajte gustinu volumetrickih uzoraka u problematicnim oblastima
Pro tip: Uobicajen trik je da stavite dodatni, nevidljiv mesh (sa Cast Shadow ukljucenim ali sa nevidljivim materijalom) iza problematicnog zida. Ovo daje Lightmassu dodatnu geometriju za blokiranje svetlosti.
24.7.2 Shadow Seams (Sivovi Izmedju Objekata)
Sta je to?
Shadow seams se pojavljuju kao vidljive linije na mestima gde se dva objekta dodiruju. Na primer, gde se dva zidna panela spajaju, moze se videti tamna ili svetla linija.
Zasto se desava?
Svaki objekat ima svoju lightmapu, i na granici izmedju dva objekta, texeli iz razlicitih lightmapa ne moraju da se tacno poklapaju. Malecne razlike u uzorkovanju stvaraju vidljive sivove.
Resenja:
- Povecajte lightmap rezoluciju: Vise texela znaci finiji detalj na granicama
- Koristite jedan mesh umesto dva: Ako je moguce, spojite susedne zidove u jedan mesh -- tada imaju zajednicku lightmapu bez sivova
- Podesite Lightmass smoothing: Povecajte Indirect Lighting Smoothness da ublazi razlike na granicama
- Koristite Lightmap padding: Obezbedjujte dovoljan padding u UV layoutu
24.7.3 UV Problemi koji Uzrokuju Lose Lightmape
Simptomi:
- Cudni sarinasti (pattern) artefakti na povrsini
- Potpuno pogresno osvetljenje na nekim delovima mesha
- "Zamrljano" osvetljenje koje ne odgovara geometriji
Uzroci i resenja:
Preklapajuci UV-ovi:
- Simptom: Dva razlicita dela mesha imaju identicno osvetljenje
- Resenje: Ponovo razvijte lightmap UV-ove bez preklapanja (videti sekciju 24.3)
UV-ovi van 0-1 prostora:
- Simptom: Deo osvetljenja se "ponavlja" ili je potpuno pogresno
- Resenje: Skalirajte UV ostrva da budu unutar 0-1 prostora
Nedovoljno paddinga:
- Simptom: Svetle ili tamne linije duz ivica UV ostrva
- Resenje: Povecajte razmak izmedju UV ostrva
Prevelika distorzija:
- Simptom: Istegnute ili neravnomerne senke
- Resenje: Ponovo razvijte UV-ove sa manje distorzije
Pogresni lightmap UV channel:
- Simptom: Osvetljenje izgleda potpuno haotično
- Resenje: Proverite da je pravi UV channel postavljen kao lightmap channel u Static Mesh Editoru
24.7.4 Niska Rezolucija koja Uzrokuje Blocky (Kockaste) Senke
Sta je to?
Senke izgledaju kockasto, sa vidljivim "stepenicama" ili velikim blokovima boje umesto glatkih prelaza.
Zasto?
Jednostavno: lightmap rezolucija je preniska za objekat te velicine. Nema dovoljno texela da uhvate fine detalje senki.
Resenja:
- Povecajte lightmap rezoluciju na problematicnom objektu
- Proverite lightmap density vizualizaciju (Optimization Viewmodes > Lightmap Density)
- Razmotrite da li je baking pravi pristup za taj objekat -- mozda je bolje koristiti dinamicke senke
- Optimizujte UV layout da bolje iskoristi raspolozivi UV prostor -- kompaktiji layout znaci vise texela po jedinici povrsine
Vizuelni vodic za prepoznavanje rezolucije:
Rezolucija 16: Vidljivi blokovi, skoro neupotrebljivo
Rezolucija 32: Grubi oblici senki, prihvatljivo za udaljene objekte
Rezolucija 64: Srednji kvalitet, okej za vecinu objekata
Rezolucija 128: Dobar kvalitet, fine senke su jasne
Rezolucija 256: Visok kvalitet, glatke, detaljne senke
Rezolucija 512: Izuzetan kvalitet, skoro fotografski (ali skupo!)
24.7.5 Sistematski Pristup Resavanju Artefakata
Kada naidjete na problem sa lightmapama, preporucujem sledeci sistematski pristup:
Korak 1: Identifikujte tip problema
- Da li je light leaking? Shadow seam? UV problem? Niska rezolucija?
Korak 2: Izolujte problematican objekat
- Selektujte objekat i proverite njegove lightmap postavke
- Proverite lightmap UV-ove u Static Mesh Editoru
Korak 3: Koristite dijagnosticke alate
- Lightmap Density vizualizacija
- Lightmap UV overlay u Static Mesh Editoru
- Stationary Light Overlap vizualizacija
Korak 4: Primenite resenje
- Pocnite sa najjednostavnijim resenjem (povecanje rezolucije)
- Ako to ne pomogne, predjite na slozenija resenja (UV repack, geometrija fix)
Korak 5: Rebuild i verifikujte
- Ponovo build-ujte osvetljenje
- Proverite da li je problem resen
- Proverite da niste uveli nove probleme
24.8 GPU Lightmass u UE5
24.8.1 Uvod
GPU Lightmass je revolucionarno unapredjenje u UE5 (uvedeno kao beta u UE 4.26 i unapredjeno u UE5). Umesto da koristi CPU za izracunavanje lightmapa (kao tradicionalni Lightmass), GPU Lightmass koristi path tracing na GPU-u sto je dramaticno brze.
Kljucna razlika:
Tradicionalni (CPU) Lightmass:
- Koristi CPU cores za ray tracing
- Tipicno 8-32 threadova
- Moze da traje satima za kompleksne scene
- Moze da koristi Swarm za distribuiranu obradu
GPU Lightmass:
- Koristi GPU za path tracing
- Hiljade CUDA/compute cores
- Isti kvalitet za 10-50x manje vremena
- Ne koristi Swarm, radi lokalno
24.8.2 Kako Aktivirati GPU Lightmass
Da biste koristili GPU Lightmass u UE5:
- Idite u Edit > Plugins
- Pronadjite i omogucite GPU Lightmass plugin
- Restartujte editor
- Idite u Build > Lighting padajuci meni
- Izaberite GPU Lightmass umesto podrazumevanog Lightmass-a
Ili, alternativno:
- U World Settings, pod Lightmass, pronadjite opciju Lightmass Type
- Promenite na GPU Lightmass
24.8.3 Path Tracing-Based Lightmap Baker
GPU Lightmass koristi path tracing -- istu tehniku koju koriste offline rendereri kao sto su Arnold, V-Ray, ili Blender Cycles. Ovo znaci da:
- Svaki texel u lightmapi se racuna tako sto se iz njega "pucaju" zraci u raznim pravcima
- Zraci se prate dok ne udare u izvor svetlosti ili se izgube
- Energija (boja i intenzitet) svetlosti se akumulira od izvora natrag do texela
- Sa dovoljno uzoraka (samples), rezultat konvergira ka fizicki tacnom resenju
Prednosti path tracinga:
- Fizicki tacan: Simulira stvarno ponasanje svetlosti
- Unified algoritam: Isti algoritam radi za sva svetlosna fenomena (GI, caustics, itd.)
- Skalira sa hardverom: Brzi GPU = brzi rezultati (linearno)
24.8.4 Brzina: GPU vs CPU Lightmass
Razlika u brzini je dramaticna. Evo pribliznih poredjenja za tipicnu archviz scenu (prostorija sa namestajem):
| Konfiguracija | CPU Lightmass | GPU Lightmass | Ubrzanje |
|---|---|---|---|
| Production kvalitet, mala soba | 15 min | 1-2 min | ~10x |
| Production kvalitet, stan sa vise soba | 2 sata | 10-15 min | ~10x |
| High kvalitet, velika scena | 8+ sati | 30-60 min | ~10-15x |
Napomena: Ovo su priblizne vrednosti. Stvarna brzina zavisi od GPU-a, kompleksnosti scene, lightmap rezolucija, broja bounce-ova i drugih faktora.
24.8.5 Quality Settings i Njihov Uticaj
GPU Lightmass ima nekoliko kljucnih podesavanja kvaliteta:
GI Samples:
Broj uzoraka (samples) po texelu za indirektno osvetljenje. Vise uzoraka = manje suma, bolji kvalitet, duze pecenje.
Nizak: 256 samples -- Brz preview, vidi se sum (noise)
Srednji: 512 samples -- Razuman kvalitet, malo suma
Visok: 1024 samples -- Dobar kvalitet, minimalan sum
Produkcija: 2048-4096 -- Izuzetan kvalitet, skoro bez suma
Bounces:
Broj odbijanja svetlosti. Vise odbijanja = realisticnije indirektno osvetljenje.
1 bounce: Osnovni GI, deluje "plitko"
2 bounces: Dobar za vecinu scena
3 bounces: Visok kvalitet, suptilne varijacije
4+ bounces: Diminishing returns, ali ponekad vredno za interior
Irradiance Caching:
GPU Lightmass moze da koristi irradiance caching za ubrzanje -- umesto da svaki texel nezavisno izracunava GI, cesto izracunava na manjem broju tacaka i interpolira. Brze je, ali moze da uvede blagi sum ili gubitak detalja.
First Bounce Ray Guiding:
Tehnika koja usmerava zrake ka svetlosnim izvorima u prvom odbijanju, ubrzavajuci konvergenciju. Ovo znacajno smanjuje sum sa manjim brojem uzoraka.
Denoiser:
GPU Lightmass u UE5 ukljucuje AI denoiser (baziran na OIDN -- Open Image Denoise, ili na NVIDIA-inim denoiser alatima). Denoiser moze dramaticno da smanji sum u lightmapama, omogucavajuci koriscenje manjeg broja uzoraka za prihvatljiv kvalitet.
| Podesavanje | Nizak | Srednji | Visok | Produkcija |
|---|---|---|---|---|
| GI Samples | 256 | 512 | 1024 | 4096 |
| Bounces | 1 | 2 | 3 | 4+ |
| Irradiance Caching | On | On | On/Off | Off |
| Denoiser | On | On | On | Opcionalno |
| Tipicno vreme* | 1-3 min | 3-8 min | 8-20 min | 20-60 min |
*Za srednju archviz scenu na modernom GPU-u (RTX 3070+)
24.8.6 Prakticni Saveti za GPU Lightmass
-
Koristite RTX GPU: GPU Lightmass znacajno profitira od RT cores na NVIDIA RTX karticama (i AMD ekvivalentima). Hardware accelerated ray tracing dramaticno ubrzava proces.
-
VRAM je vazan: GPU Lightmass ucitava celu scenu u GPU memoriju. Za velike scene, treba vam GPU sa dovoljno VRAM-a (8 GB minimum, 12-24 GB preporuceno).
-
Iterativni workflow: Koristite nize podesavanja za brze iteracije tokom rada, a visoke postavke samo za finalno pecenje.
-
Lightmap Importance Volume: Postavite Lightmass Importance Volume da obuhvati samo oblast koja vam je vazna. Ovo dramaticno smanjuje vreme pecenja jer GPU Lightmass ne trosi resurse na nebitne delove scene.
-
Preview pecenje: Koristite Preview kvalitet za brz pregled (30 sekundi do par minuta). Ovo vam daje grubu ideju o rezultatu pre nego sto pokrenete puni build.
-
Pratite progres: GPU Lightmass u UE5 pokazuje progresivni rezultat u viewportu dok pece. Mozete videti kako se lightmape postepeno poboljsavaju i zaustaviti pecenje kada ste zadovoljni kvalitetom.
24.9 Volumetric Lightmaps u UE5
24.9.1 Sta su Volumetric Lightmaps?
Volumetric Lightmaps su UE5-ov (i UE4.18+) napredni sistem za cuvanje indirektnog osvetljenja u 3D prostoru scene. Zamislite ih kao 3D "lightmape" -- umesto 2D tekstura na povrsinima, ovo je 3D mreza sa informacijama o osvetljenju u svakoj tacki prostora.
Volumetric Lightmaps su evolucija starijeg Indirect Lighting Cache sistema i pruaju znacajno bolje rezultate.
24.9.2 Kako Funkcionisu: 3D Grid SH Uzoraka
Volumetric Lightmaps koriste 3D mrezu (grid) u kojoj svaka celija sadrzi skup sfericnih harmonika (SH) koeficijenata koji opisuju indirektno osvetljenje u tom delu prostora.
Struktura:
Volumetric Lightmap Grid:
+---------+---------+---------+
| SH[0] | SH[1] | SH[2] | Gornji sloj (Z = 2)
+---------+---------+---------+
| SH[3] | SH[4] | SH[5] |
+---------+---------+---------+
+---------+---------+---------+
| SH[6] | SH[7] | SH[8] | Srednji sloj (Z = 1)
+---------+---------+---------+
| SH[9] | SH[10] | SH[11] |
+---------+---------+---------+
+---------+---------+---------+
| SH[12] | SH[13] | SH[14] | Donji sloj (Z = 0)
+---------+---------+---------+
| SH[15] | SH[16] | SH[17] |
+---------+---------+---------+
Svaka celija (SH[n]) sadrzi L2 (treci nivo) sfericne harmonike sa koeficijentima za svaki kanal boje (R, G, B).
24.9.3 Kako Pruzaju GI Dinamickim Objektima
Kada se dinamicki objekat (na primer, igracov karakter) nalazi u sceni sa baked osvetljenjem, Volumetric Lightmaps mu pruzaju indirektno osvetljenje na sledeci nacin:
- Pozicioniranje: Engine odredjuje poziciju objekta u svetskom prostoru
- Lookup: Pozicija se prevodi u koordinate unutar volumetric lightmap mreze
- Interpolacija: SH koeficijenti iz okolnih celija se trilinearno interpoliraju
- Evaluacija: Interpolirani SH koeficijenti se evaluiraju sa normalom svake tacke na povrsini objekta
- Primena: Rezultirajuci indirektni osvetljaj se dodaje na objekat
Prednosti nad starijim ILC:
| Aspekt | ILC (stari) | Volumetric Lightmaps |
|---|---|---|
| Preciznost | Niza | Veca (finija mreza) |
| Adaptivnost | Osnovna | Adaptivna rezolucija |
| Light leaking | Cest | Smanjen |
| Vizuelni kvalitet | Prihvatljiv | Dobar |
| Per-pixel evaluacija | Ne | Da (per-pixel interpolacija) |
Per-pixel vs Per-object:
Kljucna prednost Volumetric Lightmaps nad ILC-om je per-pixel evaluacija. Dok ILC tipicno racuna jedno osvetljenje za ceo objekat (ili par probe-ova), Volumetric Lightmaps evaluiraju osvetljenje za svaki piksel na objektu. To znaci da veliki dinamicki objekat (na primer, vozilo) moze da ima razlicito indirektno osvetljenje na razlicitim delovima -- prednji deo moze biti u svetloj oblasti, a zadnji u tamnoj.
24.9.4 Rezolucija i Memorija
Volumetric Lightmaps koriste hijerarhijsku strukturu (brick-based) koja omogucava adaptivnu rezoluciju:
- Gusca mreza blize staticnoj geometriji (gde je varijacija osvetljenja veca)
- Retkija mreza u otvorenom prostoru (gde je osvetljenje uniformnije)
Podesavanja rezolucije:
U World Settings > Lightmass:
- Volumetric Lightmap Detail Cell Size: Velicina najsitnije celije u cm. Manja vrednost = veca preciznost, ali i vise memorije. Podrazumevano je oko 200 cm.
Primer:
Detail Cell Size = 200 cm: Gruba mreza, malo memorije, brzo
Detail Cell Size = 100 cm: Srednja preciznost
Detail Cell Size = 50 cm: Visoka preciznost, vise memorije
Detail Cell Size = 25 cm: Vrlo visoka, znacajna memorija
Kalkulacija memorije:
Memorija za volumetric lightmape zavisi od:
- Velicine scene (koliko prostora treba pokriti)
- Detail cell size (koliko sitne su celije)
- Gustina geometrije (vise geometrije = vise adaptivnih celija)
Gruba formula:
Broj celija ~ (Volumen scene) / (Cell Size)^3
Memorija po celiji ~ 9 SH koeficijenata x 3 boje x 2 bytes = ~54 bytes
+ skylight SH + metadata
Ukupna memorija ~ Broj celija x ~100-200 bytes
Primer:
Scena: 50m x 50m x 10m = 25,000 m^3
Sa cell size = 2m:
Broj celija ~ 25,000 / 8 = 3,125
Memorija ~ 3,125 x 200 bytes = 625 KB
Sa cell size = 0.5m:
Broj celija ~ 25,000 / 0.125 = 200,000
Memorija ~ 200,000 x 200 bytes = 40 MB
Napomena: Ovo su grube procene. Stvarna potrosnja zavisi od adaptivne strukture -- guste oblasti ce imati vise celija, retke manje.
24.9.5 Prakticna Podesavanja
Lightmass Importance Volume:
Ovo je obavezan actor koji definise oblast u kojoj ce Lightmass generisati volumetric lightmap uzorke. Bez njega, Lightmass ce pokusati da pokrije celu mapu, sto je rasipanje resursa.
Kako postaviti:
- U Place Actors panelu, trazite Lightmass Importance Volume
- Postavite ga u scenu
- Skalirajte ga da obuhvati samo igrivu oblast (oblast kroz koju se igrac krece)
- Mozete imati vise Lightmass Importance Volume-a za razlicite delove mape
Volume Lightmap Importance Volume:
Pored osnovnog Lightmass Importance Volume-a, mozete koristiti Volumetric Lightmap Density Volume za kontrolu gustine uzoraka u specificnim oblastima:
- Stavite ga u oblasti gde zelite vecu preciznost volumetric lightmapa
- Skalirajte da pokriva samo tu oblast
- Podesite Cell Size override za tu specificnu oblast
24.9.6 Vizualizacija i Debugging
UE5 pruza alate za vizualizaciju volumetric lightmapa:
- Show > Visualize > Volumetric Lightmap: Prikazuje celije volumetric lightmape sa bojama koje predstavljaju sacuvano osvetljenje
- Show > Advanced > Volumes: Prikazuje granice Lightmass Importance Volume-a
Cesti problemi sa volumetric lightmapama:
-
Previse gruba rezolucija: Osvetljenje na dinamickim objektima se menja naglo umesto glatko
- Resenje: Smanjite Detail Cell Size
-
Light leaking: Svetlost prodire kroz zidove
- Resenje: Dodajte deblju geometriju, smanjite cell size u problematicnoj oblasti
-
Prevelika memorija: Scena zauzima previse memorije za volumetric lightmape
- Resenje: Povecajte Detail Cell Size, smanjite obim Lightmass Importance Volume-a
24.9.7 Volumetric Lightmaps vs Lumen
Vredno je napomenuti da ako koristite Lumen (Poglavlje 25), volumetric lightmape obicno nisu potrebne jer Lumen pruza real-time GI za i staticne i dinamicke objekte. Volumetric Lightmaps su relevantne kada:
- Ne koristite Lumen (mobile, VR, low-spec targeti)
- Koristite hibridni pristup
- Zelite garantovanu stabilnost osvetljenja bez runtime varijacija
24.10 Workflow: Od Pocetka do Kraja
Hajde da sve ovo stavimo u prakticni workflow. Ovo je korak-po-korak vodic za baking osvetljenja u UE5 projektu.
Korak 1: Priprema Scene
- Postavite geometriju (Static Meshes)
- Proverite da svi meshevi imaju validne lightmap UV-ove (UV channel 1)
- Ako nemate lightmap UV-ove, omogucite Generate Lightmap UVs u build settings mesha
Korak 2: Postavljanje Svetala
- Koristite Static svetla za potpuno baked osvetljenje (i direktno i indirektno)
- Koristite Stationary svetla za hibridni pristup (baked indirektno, dinamicno direktno)
- Postavite Directional Light za sunce (obicno Stationary)
- Dodajte Sky Light za ambient osvetljenje
- Dodajte point/spot lights po potrebi
Korak 3: Lightmass Importance Volume
- Postavite Lightmass Importance Volume oko igralivog prostora
- Proverite da pokriva sve oblasti gde ce se igrac kretati
- Ne pravite ga prevelikim -- samo ono sto je potrebno
Korak 4: Podesavanje Lightmap Rezolucija
- Postavite odgovarajuce lightmap rezolucije na svakom objektu
- Koristite Lightmap Density vizualizaciju za proveru
- Pratite ukupni memorijski budzet
Korak 5: World Settings
U World Settings > Lightmass:
- Num Indirect Lighting Bounces: 3-4 za dobar kvalitet (UE5 podrazumevano je 3)
- Indirect Lighting Quality: 1.0 za produkciju (vise = bolje ali sporije)
- Indirect Lighting Smoothness: 1.0 podrazumevano (manje = ostije senke, vise suma)
- Static Lighting Level Scale: 1.0 podrazumevano (manje = detaljnije, sporije)
Korak 6: Preview Build
- Pokrenite Build Lighting sa Preview kvalitetom
- Ovo je brzo (sekunde do minuta) i daje grubu ideju o rezultatu
- Proverite da nema ociglednih problema (light leaking, pogresne senke)
Korak 7: Iteracija
- Identifikujte probleme
- Podesite lightmap rezolucije, geometriju, UV-ove
- Ponovo build-ujte sa Preview kvalitetom
- Ponavljajte dok ne budete zadovoljni
Korak 8: Production Build
- Kada ste zadovoljni preview rezultatom, pokrenite Production build
- Sa GPU Lightmass: mozda 10-30 minuta za srednju scenu
- Sa CPU Lightmass: mozda 1-4 sata za istu scenu
- Pustite da zavrsi bez prekidanja
Korak 9: Finalna Provera
- Proverite rezultat iz razlicitih uglova
- Obratite paznju na artefakte (light leaking, seams, blocky senke)
- Ako ima problema, vratite se na Korak 7
24.11 Napredne Teme
24.11.1 Lightmap Encoding u UE5
UE5 koristi specificne formate za cuvanje lightmapa:
Directional Lightmaps:
UE5 podrazumevano koristi directional lightmaps koje cuvaju ne samo intenzitet vec i dominantan pravac svetlosti na svakom texelu. Ovo omogucava normal mapping sa baked osvetljenjem -- lightmapa ne izgleda ravno, vec reaguje na normalu povrsine.
Struktura:
- Intensity map: Cuva intenzitet i boju osvetljenja (HDR, kodirano u RGBM ili LogLuv format)
- Direction map: Cuva dominantan pravac svetlosti (komprimirano u 2 komponente)
Simple Lightmaps:
Za platforme sa ogranicenom memorijom (mobile), mozete koristiti non-directional lightmape koje cuvaju samo intenzitet bez pravca. Ovo zauzima manje memorije ali ne podrzava normal mapping.
U Project Settings > Rendering > Lighting: pronaci cete opcije za lightmap encoding.
24.11.2 Lightmass Portals
Za scene sa indirektnim osvetljenjem koje dolazi kroz male otvore (prozore), Lightmass Portal actori mogu znacajno poboljsati kvalitet i smanjiti vreme pecenja:
- Postavite Lightmass Portal na svaki prozor
- Portali govore Lightmassu: "Ovde je vazan izvor indirektnog osvetljenja"
- Lightmass ce usmriti vise uzoraka ka tim oblastima
Ovo je posebno korisno za archviz scene gde je vecina svetlosti dolazi kroz prozore.
24.11.3 Precomputed Visibility
Mada nije direktno osvetljenje, Precomputed Visibility se cesto bake-uje zajedno sa lightmapama:
- Definise koje objekte kamera moze da vidi iz kojih pozicija
- Smanjuje draw calls skrivanjem objekata koji nisu vidljivi
- Postavlja se pomocu Precomputed Visibility Volume actora
24.11.4 Mixed Lighting Mode
UE5 podrzava Mixed lighting mode gde:
- Svetlo je Stationary
- Direktne senke su dinamicke (shadow maps)
- Indirektno osvetljenje je baked
- Direktno osvetljenje moze biti baked ili dinamicko (zavisi od podesavanja)
Ovo je najpopularniji pristup za vecinu projekata koji koriste baking jer daje najbolji odnos kvaliteta i performansi.
24.12 Rezime: Kada Koristiti Sta?
| Scenarij | Preporuceno resenje | Obrazlozenje |
|---|---|---|
| Mobilna igra | Potpuno baked (Static lights) | Performanse su prioritet |
| VR iskustvo | Baked + minimalna dinamika | Framerate je kritican |
| Archviz | Potpuno baked, maximum kvalitet | Statican sadrzaj, vizuelni kvalitet je kljucan |
| PC/Console igra (standard) | Lumen ili hibridni pristup | Dinamicnost je vazna |
| Open world igra | Lumen | Baking je nepraktican za ogromne scene |
| Multiplayer FPS | Hibridni ili Lumen | Zavisno od budgeta i platforme |
| Filmski kvalitet (Cinematic) | Lumen + ray tracing | Maksimalan kvalitet u realnom vremenu |
24.13 Kljucni Pojmovi
| Termin | Definicija |
|---|---|
| Baking (Pecenje) | Proces pre-kalkulacije osvetljenja offline i cuvanje rezultata u teksturama |
| Lightmap | 2D tekstura koja cuva informacije o osvetljenju za povrsinu objekta |
| Lightmap UV | UV koordinate (obicno channel 1) koje definisu kako se lightmap tekstura mapira na mesh |
| Texel | Jedan piksel u teksturi (texture pixel) |
| Texel Density | Broj texela po jedinici povrsine u svetu (texels per world unit) |
| Lightmap Resolution | Dimenzija lightmap teksture (sirina x visina u texelima) |
| Lightmap Atlas | Velika tekstura koja sadrzi lightmape vise objekata zapakovane zajedno |
| Lightmass | UE sistem za baking osvetljenja (postoji u CPU i GPU varijanti) |
| GPU Lightmass | Path tracing-based lightmap baker koji koristi GPU za dramaticno brze pecenje |
| Path Tracing | Tehnika renderinga koja prati putanje svetlosnih zraka kroz scenu |
| Global Illumination (GI) | Simulacija indirektnog osvetljenja (svetlost koja se odbija od povrsina) |
| Indirect Lighting Cache (ILC) | Stariji sistem za pruzanje baked indirektnog osvetljenja dinamickim objektima |
| Volumetric Lightmaps | 3D mreza SH uzoraka za pruzanje indirektnog osvetljenja dinamickim objektima |
| Spherical Harmonics (SH) | Matematicke bazne funkcije na sferi za kompaktno kodiranje direkcijskog osvetljenja |
| Irradiance Volume | 3D mreza koja cuva informacije o indirektnom osvetljenju u prostoru |
| Light Leaking | Artefakt gde svetlost "prodire" kroz geometriju gde ne bi trebalo |
| Shadow Seams | Vidljive linije na granicama izmedju lightmapa razlicitih objekata |
| Lightmass Importance Volume | Actor koji definise oblast u kojoj Lightmass generise uzorke |
| Lightmass Portal | Actor koji oznacava otvore (prozore) za usmeravanje uzoraka indirektnog osvetljenja |
| Stationary Light | Svetlo koje ne moze da se pomera ali ima i baked i dinamicke komponente |
| Static Light | Potpuno baked svetlo bez ikakve dinamicke komponente |
| Denoiser | AI-bazirani filter koji uklanja sum iz path-traced rezultata |
| UV Padding | Razmak izmedju UV ostrva koji sprecava bleeding artefakte |
| Bilinear Filtering | Tehnika interpolacije izmedju susednih texela pri sampliranju teksture |
| RGBM Encoding | Format za cuvanje HDR vrednosti u standardnom RGBA8 formatu |
24.14 Reference i Dalje Citanje
Unreal Engine Dokumentacija
- Lightmass Global Illumination -- Oficijelna dokumentacija za Lightmass sistem
- GPU Lightmass -- Dokumentacija za GPU Lightmass
- Volumetric Lightmaps -- Dokumentacija za Volumetric Lightmaps
- Lightmap UV Coordinate Generation -- Automatsko generisanje UV-ova
- Lighting Troubleshooting Guide -- Resavanje problema sa osvetljenjem
Knjige i Clanci
- "Real-Time Rendering" (Akenine-Moller, Haines, Hoffman) -- Poglavlje o Global Illumination
- "Physically Based Rendering: From Theory to Implementation" (Pharr, Jakob, Humphreys) -- Detalji o path tracingu
- "GPU Gems" serija -- Razliciti clanci o lightmapping tehnikama
Video Resursi
- Unreal Engine oficijalni YouTube kanal -- Tutoriali za Lightmass i GPU Lightmass
- William Faucher YouTube kanal -- Prakticni archviz tutoriali sa baked osvetljenjem
- Virtus Learning Hub -- Detaljni UE5 lighting tutoriali
Povezana Poglavlja u Ovoj Knjizi
- Poglavlje 04: UV Mapping -- Osnove UV koordinata i priprema lightmap UV-ova
- Poglavlje 10: Teorija Osvetljenja -- Fizicki principi svetlosti, tipovi svetlosnih izvora
- Poglavlje 12: Global Illumination -- Detaljno o indirektnom osvetljenju i razlicitim pristupima
- Poglavlje 25: Lumen -- UE5-ov dinamicki GI sistem kao alternativa bakingu
U sledecem poglavlju, Poglavlje 25, istrazicemo Lumen -- UE5-ov revolucionarni sistem za potpuno dinamicko globalno osvetljenje. Videcemo kako Lumen resava iste probleme koje baking pokriva, ali u realnom vremenu, sa potpunom dinamicnoscu. Razumevanje bakinga koje ste stekli u ovom poglavlju ce vam pomoci da shvatite zasto je Lumen toliko impresivan -- i gde baking i dalje ima prednost.