Poglavlje 27: Volumetricki Efekti
"Svet bez magle, bez oblaka, bez prasine u vazduhu -- to nije svet. To je renderovana kutija."
Dosli smo do jednog od najfascinantnijih delova renderinga u Unreal Engine 5. Do sada smo naucili kako svetlost interaguje sa povrsinama -- kako se odbija, lomi, rasipa po materijalima. Ali sta se desava pre nego sto svetlost uopste stigne do povrsine? Sta se desava dok putuje kroz vazduh?
U stvarnom svetu, svetlost nikada ne putuje kroz potpuni vakuum (osim u svemiru). Prolazi kroz atmosferu punu sitnih cestica -- molekula vazduha, vodene pare, prasine, dima, magle. Svaka od tih cestica moze da apsorbuje, raseje ili cak emituje svetlost. Taj kompletan fenomen nazivamo participating media -- medijum koji aktivno ucestvuje u transportu svetlosti.
Volumetricki efekti su upravo renderovanje tih fenomena. Magla koja obavija dolinu u rano jutro. Snopovi svetlosti koji probijaju kroz krosnje drveca. Oblaci koji se kotrljaju preko neba. Dim koji se vije iz dimnjaka. Svaki od ovih efekata zahteva razumevanje kako svetlost putuje kroz zapreminu (volume) medijuma, a ne samo kako udara u povrsinu.
U ovom poglavlju pokricemo kompletnu teoriju participating media, sve UE5 sisteme za volumetricke efekte, i prakticne tehnike za postizanje ubedljivih rezultata bez unistenja performansi.
Hajdemo redom.
27.1 Teorija Participating Media
27.1.1 Zasto nam trebaju volumetricki efekti?
Zamislite scenu: sumrak, sunce je nisko na horizontu, svetlost prolazi kroz prozor stare crkve i vidite jasne snopove svetlosti u prasini. Ili zamislite gustu sumu ujutru, gde magla ispunjava prostor izmedju stabala i svetlost jedva prodire.
Bez volumetrickih efekata, svetlost bi jednostavno "teleportovala" od izvora do povrsine -- nikakav efekat u prostoru izmedju. Scena bi izgledala sterilno, veshtachki, kao da se sve desava u vakuumu.
Participating media je termin iz fizike renderinga koji opisuje svaki medijum kroz koji svetlost prolazi i sa kojim interaguje. To moze biti:
- Homogeni medijum -- uniformna gustina svuda (retko u prirodi, ali korisno za pocetno razumevanje)
- Heterogeni medijum -- gustina varira u prostoru (dim, oblaci, magla u dolini)
- Anizotropni medijum -- rasejanje zavisi od pravca (kristali, odredjene vrste magle)
Matematicki, ponasanje svetlosti u participating media opisujemo jednacinom radijativnog transfera (Radiative Transfer Equation, RTE). Nemojte se plasiti -- razlozicemo je na razumljive delove.
27.1.2 Cetiri fundamentalna procesa
Kada svetlost (foton) putuje kroz medijum koji sadrzi cestice, mogu se desiti cetiri stvari. Svaka od njih je kljucna za razumevanje volumetrickih efekata.
Absorption (Apsorpcija)
Apsorpcija je najjednostavniji proces -- medijum "guta" svetlost. Foton udara u cesticu i njegova energija se pretvara u toplotu. Svetlost nestaje.
Zamislite gusti crni dim iz pozara. Razlog zasto je taman nije zato sto dim emituje tamu (to je besmisleno), vec zato sto cestice cadji u dimu apsorbuju svetlost koja pokusava da prodje. Sto je dim gusci, vise svetlosti se apsorbuje, i scena iza dima postaje tamnija.
Matematicki, apsorpciju opisujemo koeficijentom apsorpcije sigma_a (sigma_a). Ovaj koeficijent govori koliko svetlosti se apsorbuje po jedinici duzine puta kroz medijum:
dL/ds = -sigma_a * L
Gde je:
L-- radiance (intenzitet svetlosti u datom pravcu)s-- duzina puta kroz medijumsigma_a-- koeficijent apsorpcije
Resenje ove jednacine za uniformni medijum je eksponencijalno opadanje:
L(s) = L(0) * exp(-sigma_a * s)
Ovo je poznato kao Beer-Lambert zakon (ili samo Beer's Law). Svetlost eksponencijalno opada sa rastojanjem kroz medijum. Primetite -- nikada ne doseze nulu potpuno, ali za prakticne svrhe, posle dovoljne debljine medijuma, svetlost je efektivno nestala.
Prakticna napomena: Beer-Lambert zakon cete videti svuda u volumetrickim efektima u UE5. Koristi se za oblake, maglu, podvodne scene, pa cak i za skin rendering (vidi Poglavlje 10 za podsecanje na subsurface scattering).
Out-Scattering (Rasejanje od posmatraca)
Out-scattering se desava kada foton koji putuje prema vasem oku (kameri) udari u cesticu i bude skrenjen u drugom pravcu. Iz perspektive posmatraca, efekat je slican apsorpciji -- svetlost koju ste ocekivali da vidite je nestala. Razlika je sto svetlost nije unistena, vec je promenila pravac.
Koeficijent rasejanja sigma_s opisuje koliko svetlosti se raseje po jedinici duzine:
dL/ds = -sigma_s * L
Zajedno sa apsorpcijom, definisemo koeficijent ekstinkcije (extinction coefficient):
sigma_t = sigma_a + sigma_s
Ovaj koeficijent opisuje ukupno gubljenje svetlosti duz zraka -- i apsorpcijom i rasejanjem. Beer-Lambert zakon sa punim extinction koeficijentom:
L(s) = L(0) * exp(-sigma_t * s)
Ili, ekvivalentno, koristimo koncept transmitancije (transmittance):
T(s) = exp(-sigma_t * s)
Transmitancija nam govori koji procenat svetlosti prezivljuje put od tacke A do tacke B kroz medijum. Vrednost 1.0 znaci da sva svetlost prolazi (nema medijuma), vrednost 0.0 znaci da nista ne prolazi (potpuno neproziran medijum).
Za heterogeni medijum (gde se sigma_t menja u prostoru), transmitancija postaje:
T(a, b) = exp(-integral(sigma_t(s) ds) od a do b)
Ovaj integral u eksponentu nazivamo optical depth (opticka dubina) ili optical thickness:
tau(a, b) = integral(sigma_t(s) ds) od a do b
Sto je veca opticka dubina, manje svetlosti prolazi.
In-Scattering (Rasejanje ka posmatracu)
Evo gde stvari postaju lepe! In-scattering je proces suprotan out-scatteringu, ali iz perspektive svetlosti koja dolazi iz drugih pravaca. Zamislite da imate cestica prasine u vazduhu. Sunce sija sa strane. Foton od sunca udara u cesticu i biva skrenjen -- tacno u pravcu vaseg oka. Vi vidite tu cesticu kao svetlu tacku.
Kada se ovo desi na milionima cestica, vidite svetlosni snop (light shaft) ili god ray. In-scattering je razlog zasto su volumetricki snopovi svetlosti vidljivi! Bez in-scatteringa, nikada ne biste videli sam snop svetlosti -- videli biste samo osvetljenu povrsinu gde snop udara.
In-scattering dodaje svetlost duz zraka:
dL/ds = sigma_s * integral(p(omega, omega') * L_i(omega') domega') po svim pravcima omega'
Gde je:
sigma_s-- koeficijent rasejanjap(omega, omega')-- phase function (funkcija faze) koja opisuje verovatnocu rasejanja iz pravca omega' u pravac omegaL_i(omega')-- dolazeca svetlost iz pravca omega'
U sustini, in-scattering sakuplja svetlost iz svih pravaca, filtrira je kroz phase function, i dodaje je duz vaseg zraka pogleda.
Kljucna razlika: Out-scattering oduzima svetlost (cini scenu tamnijom), in-scattering dodaje svetlost (cini medijum vidljivim, stvara svetlosne snopove).
Emission (Emisija)
Emisija se desava kada sam medijum emituje svetlost. Ovo je releventno za:
- Vatru i plamen
- Plazmu
- Lavu
- Eksplozije
- Bioluminiscentne materijale
Emisija jednostavno dodaje svetlost:
dL/ds = sigma_e * L_e
Gde je L_e emitovana radiance a sigma_e koeficijent emisije.
U UE5, emisiju u volumetrickim efektima najcesce postizete kroz Emissive svojstvo volumetrickih materijala ili kroz VDB volume podatke koji sadrze emisione informacije.
27.1.3 Kompletna jednacina radijativnog transfera (RTE)
Sada mozemo da sastavimo sve cetiri komponente u jednu jednacinu. Promena radiance duz zraka u tacki s je:
dL(s)/ds = -sigma_t(s) * L(s) [extinction: absorption + out-scattering]
+ sigma_s(s) * integral(p * L_i domega') [in-scattering]
+ sigma_e(s) * L_e(s) [emission]
Ovo je Radiative Transfer Equation -- fundamentalna jednacina volumetrickog renderinga. Svaki sistem u UE5 koji radi sa maglom, oblacima ili atmosferom resava neku aproksimaciju ove jednacine.
Naravno, analiticki resiti ovu jednacinu za proizvoljan medijum je... nemoguce u opstem slucaju. Zato koristimo numericke metode, najcesce ray marching -- koracanje duz zraka i akumuliranje svetlosti u diskretnim koracima.
27.1.4 Phase Functions -- Funkcije faze
Phase function p(theta) opisuje ugaonu distribuciju rasejane svetlosti. Kada foton udari u cesticu, u kom pravcu ce biti rasejan? Phase function daje verovatnocu za svaki pravac.
Izotropno rasejanje
Najjednostavnija phase function -- svetlost se raseje jednako u svim pravcima:
p(theta) = 1 / (4 * pi)
Ovo je retko tacno u praksi, ali je korisno kao polazna tacka i ponekad se koristi za brze aproksimacije.
Henyey-Greenstein Phase Function
Ovo je najvaznija phase function u real-time renderingu i standard u UE5. Formula:
p_HG(theta) = (1 - g^2) / (4 * pi * (1 + g^2 - 2*g*cos(theta))^(3/2))
Parametar g (anisotropy parameter) kontrolise "oblik" rasejanja:
| Vrednost g | Ponasanje | Primer |
|---|---|---|
| g = 0 | Izotropno rasejanje | Teorijski idealan slucaj |
| g > 0 (npr. 0.3-0.8) | Forward scattering -- svetlost se pretezno rasejava u pravcu kretanja | Magla, oblaci, atmosferske cestice |
| g < 0 (npr. -0.3) | Back scattering -- svetlost se pretezno rasejava nazad ka izvoru | Odredjene vrste kise, posebni efekti |
| g = 1.0 | Potpuno forward scattering (sva svetlost ide pravo) | Nefizicki, ali korisno za razumevanje |
| g = -1.0 | Potpuno back scattering | Nefizicki |
Zasto je ovo vazno u UE5?
Exponential Height Fog u UE5 ima parametar koji direktno kontrolise phase function -- najcesce cete videti "Scattering Distribution" ili slicno imenovan parametar koji je, u sustini, g parametar Henyey-Greenstein funkcije.
Kada gledate prema suncu kroz maglu, vidite svetli oreol oko sunca -- to je forward scattering (visok g). Kada se okrenete od sunca, magla izgleda ravnomerno osvetljena ili cak tamnija u pravcu sunca -- to je back scattering.
Prakticni saveti za g parametar:
- Magla: g oko 0.5-0.8 daje lep efekat svetlog kruga oko sunca
- Dim: g oko 0.0-0.3, dim je vise izotropan
- Oblaci: g oko 0.5-0.85, oblaci imaju izrazit forward scattering (silver lining efekat)
- Prasina u vazduhu: g oko 0.3-0.6
Dvofazna (Two-lobe) Phase Function
Ponekad jedan Henyey-Greenstein nije dovoljan. Oblaci, na primer, imaju jak forward scattering (svetli oreol) ALI i odredjen stepen back scatteringa (koji daje svetliji izgled sa strane suprotne od sunca). Za ovo se koristi kombinacija dve HG funkcije:
p(theta) = w * p_HG(theta, g1) + (1 - w) * p_HG(theta, g2)
Gde je w tezinski faktor (blend weight), g1 parametar za forward lobe, i g2 parametar za backward lobe.
UE5-ov sistem oblaka interno koristi slicne kombinacije za postizanje realnog izgleda oblaka.
27.1.5 Single Scattering vs. Multiple Scattering
Jedan vazan koncept pre nego sto predjemo na UE5 sisteme.
Single scattering znaci da svetlost interaguje sa medijumom samo jednom pre nego sto stigne do kamere. Foton od sunca udara u cesticu magle, biva rasejan ka kameri, i to je to. Ovo je relativno jeftino za racunanje i cesto dovoljno za retku maglu i god rays.
Multiple scattering znaci da svetlost interaguje sa medijumom vise puta. Foton od sunca udara u cesticu, biva rasejan, onda udara u drugu cesticu, opet biva rasejan, i tako dalje dok eventualno stigne do kamere (ili bude apsorbovan). Ovo je neophodno za gust medijum -- oblake, gustu maglu, dim. Bez multiple scatteringa, unutrasnjost gustog oblaka bi bila pretamna i nerealno osvetljena.
- Volumetric Fog u UE5: koristi single scattering (sa nekim aproksimacijama za ambient)
- Sky Atmosphere: koristi multiple scattering aproksimaciju
- Volumetric Clouds: koriste multi-scattering aproksimaciju (powder effect i slicno)
27.2 Tipovi magle (Fog Types)
Pre nego sto zaronimo u UE5-ove specificne sisteme, hajde da razumemo razlicite nacine na koje mozemo modelovati distribuciju gustine magle u prostoru. Ovo je vazan koncept jer ce odrediti koji UE5 alat cemo koristiti.
27.2.1 Constant Density Fog (Magla konstantne gustine)
Ovo je najjednostavniji model -- gustina magle je ista svuda u svetu. Ne zavisi od visine, ne zavisi od pozicije, potpuno je uniformna.
Transmitancija za konstantnu maglu je jednostavno:
T(d) = exp(-sigma_t * d)
Gde je d rastojanje od kamere do objekta.
Prednosti:
- Izuzetno jednostavno za implementaciju
- Gotovo besplatno u smislu performansi
- Predvidljivo ponasanje
Mane:
- Nerealno -- u prirodi gustina magle nikada nije uniformna
- Gornji delovi scene su jednako magloviti kao donji
- Nebo i planine imaju istu kolicinu magle
Upotreba u UE5: Constant density fog se retko koristi samostalno u modernim projektima, ali je korisno razumeti ga kao osnovu. Neki stariji ili mobilni projekti ga koriste jer je jeftin.
Mozete ga simulirati u UE5 koristecci Exponential Height Fog sa veoma visokim Fog Falloff vrednostima (gde se eksponencijalni pad gotovo "izravna" u opsegu vidljivosti), ili kroz post-process materijal koji jednostavno blenduje fog boju na osnovu dubine.
27.2.2 Height Fog / Exponential Height Fog
Ovo je daleko najcesci i najvazniji tip magle u UE5. Exponential Height Fog je primarni fog sistem enginea i verovatno cete ga koristiti u 99% projekata.
Ideja je jednostavna i fizicki motivirana: u realnom svetu, magla je najgusca pri tlu (gde se vlaga i cestice sakupljaju) i postaje redja sa porastom visine. Ovo modelujemo eksponencijalnim opadanjem gustine:
rho(h) = rho_0 * exp(-falloff * (h - h_0))
Gde je:
rho(h)-- gustina magle na visini hrho_0-- gustina magle na referentnoj visini h_0falloff-- stopa opadanja gustine sa visinom (Fog Height Falloff u UE5)h-- trenutna visinah_0-- referentna visina (pozicija Exponential Height Fog actora)
Kljucni parametri u UE5 (Exponential Height Fog actor):
| Parametar | Opis | Tipicne vrednosti |
|---|---|---|
| Fog Density | Osnovna gustina magle. Vise = gusca magla. | 0.001 - 0.05 |
| Fog Height Falloff | Koliko brzo gustina opada sa visinom. Vise = magla je "plica", brze nestaje iznad tla. | 0.2 - 2.0 |
| Fog Max Opacity | Maksimalna neprozirnost magle. 1.0 = potpuno neprozirna na dovoljnom rastojanju. | 0.5 - 1.0 |
| Start Distance | Rastojanje od kamere na kome magla pocinje. Korisno da se sacuva jasnost blizu kamere. | 0 - 5000 |
| Fog Inscattering Color | Boja svetlosti koja se rasejava ka kameri (in-scattering). Ovo je "boja magle" za svetlost koja dolazi od svetlosnih izvora. | Zavisno od osvetljenja |
| Directional Inscattering Color | Boja in-scatteringa specificno za direkciono svetlo (sunce). Koristite za topli oreol oko sunca. | Topla narandzasta/zuta |
| Directional Inscattering Exponent | Kontrolise koliko je "uzak" oreol oko sunca (slicno phase function g parametru). Vise = uzi, koncentrisaniji. | 2 - 16 |
| Fog Cutoff Distance | Rastojanje na kome se magla "odseca" -- predalje od ovoga nema promene. Koristi se za optimizaciju. | 0 (onemoguceno) ili velika vrednost |
| Second Fog Data | UE5 dozvoljava dva sloja height foga sa razlicitim parametrima. Izuzetno korisno za slojevitu maglu. | - |
Practicni primeri podesavanja:
Jutarnja magla u dolini:
- Fog Density: 0.02
- Fog Height Falloff: 0.5 (magla se prostire dosta visoko)
- Start Distance: 0
- Inscattering Color: belo-plava
- Direktional Inscattering: topla zuta (ako je sunce nisko)
Lagana izmaglica na otvorenom terenu:
- Fog Density: 0.005
- Fog Height Falloff: 0.2 (magla se siri visoko, tanak sloj)
- Start Distance: 1000 (blizu kamere je cisto)
- Inscattering Color: svetlo plava/siva
Gusti sumski pod:
- Fog Density: 0.03
- Fog Height Falloff: 2.0 (magla je samo pri tlu)
- Start Distance: 0
- Inscattering Color: zelenkasto-bela (ambijentno svetlo kroz lisce)
Napomena o drugom fog sloju (Second Fog Data):
UE5 omogucava da imate dva nezavisna eksponencijalna fog sloja na jednom Exponential Height Fog actoru. Ovo je izuzetno korisno za:
- Prizemna magla + visinska izmaglica: Prvi sloj sa visokim falloff (magla samo pri tlu), drugi sloj sa niskim falloff i malom gustinom (lagana izmaglica svuda)
- Slojevita magla: Dva sloja na razlicitim visinama za efekat slojevite magle
Parametri za drugi sloj su identicni prvom, samo sa prefiksom "Second".
27.2.3 Distance-Based Fog (Magla zasnovana na rastojanju)
Distance-based fog je konceptualno najjednostavniji -- gustina magle raste sa rastojanjem od kamere, bez obzira na visinu. Ovo je u sustini constant density fog, ali sa naglaskom na to kako ga koristimo.
U UE5, ne postoji poseban "distance fog" sistem. Umesto toga, Start Distance parametar na Exponential Height Fog efektivno daje distance-based kontrolu. Takodje, mozete implementirati distance fog kroz custom post-process materijal koji koristi Scene Depth.
Distance fog je najkorisniji za:
- Skrivanje pop-ina -- objekti koji se pojavljuju na velikom rastojanju mogu biti "sakriveni" maglom
- Simulacija atmosferskog rasejanja na jeftiniji nacin od punog atmospheric scatteringa
- Stilizovani vizuali -- mnoge igre koriste distance fog za estetske efekte
27.2.4 Lokalna magla (Local Fog Volumes)
Pored globalnog foga, UE5 podrzava i lokalne volumene magle kroz razlicite mehanizme:
-
Fog Volume (Volumetric Fog sa Local Volume materijalima): Postavljate Volume actor sa materijaljaom koji definise gustinu i boju magle unutar tog volumena. Ovo je idealno za lokalizovane efekte kao sto su:
- Magla u pecini
- Dim iznad jezera
- Otrovni gas u odredjenoj oblasti
-
Particle Systems sa volumetrickim materijalima: Niagara particle system moze emitovati volumetricke cestice koje dodaju u volumetricki fog grid.
Lokalni fog volumeni su mocno oruzje u vasem arsenalu za level art. Umesto da cela scena ima istu maglu, mozete targetirati specificne oblasti i stvoriti mnogo bogatiji ambijent.
27.3 Volumetric Fog u UE5
Sada dolazimo do jednog od najvaznijih sistema za volumetricke efekte u Unreal Engine 5. Volumetric Fog je full 3D fog sistem koji simulira in-scattering svetlosti u medijumu, i to za svaki piksel i svaki svetlosni izvor u sceni.
27.3.1 Kako funkcionise: Froxel Grid
Volumetric Fog u UE5 radi tako sto deli prostor ispred kamere u 3D mrezu celijastih elemenata nazvanih froxels (frustum voxels). Ovo je 3D tekstura koja pokriva view frustum kamere.
Sta je froxel?
"Froxel" je skracenica od "frustum voxel." Zamislite view frustum kamere (piramidalni oblik koji predstavlja vidljivi prostor). Sada podelite taj frustum na mrezu malih 3D celija. Svaka celija je jedan froxel.
Struktura froxel grida:
- Horizontalna i vertikalna rezolucija: Obicno znatno manja od rezolucije ekrana (tipicno oko 1/8 ili 1/16 rezolucije ekrana u svakoj dimenziji)
- Dubinska rezolucija: Obicno oko 64-128 isecaka (slices) u dubinu
- Dubinska distribucija: Eksponencijalna -- blizi iseceni su tanji (vise detalja blizu kamere), dalji su deblji (manje detalja daleko)
Za svaki froxel, sistem racuna:
- Gustinu medijuma (fog density) u toj celiji
- In-scattered light -- koliko svetlosti se rasejava ka kameri iz te celije, od svakog svetlosnog izvora
- Extinction -- koliko se svetlost gasi prolaskom kroz tu celiju
Tipicna rezolucija froxel grida:
Za Full HD (1920x1080), froxel grid bi mogao biti nesto poput 240x135x64, sto je oko 2 miliona froxela. Za svaki od tih froxela, engine racuna doprinos svetlosti. Ovo je mnogo manje od 2 miliona piksela na ekranu, sto je razlog zasto je volumetricki fog relativno pristupacen po pitanju performansi.
27.3.2 Pipeline volumetrickog foga
Evo kako UE5 renderuje volumetricki fog, korak po korak:
Korak 1: Material Voxelization
Engine evaluira materijale svih fog volumena i globalnog foga da bi popunio froxel grid sa podacima o gustini, albedo i emisiji medijuma. Za svaki froxel:
- Kolika je gustina magle/medijuma?
- Koja je boja (albedo) medijuma?
- Da li medijum emituje svetlost?
Korak 2: Light Injection
Za svaki svetlosni izvor u sceni koji doprinosi volumetrickom fogu:
- Engine racuna koliko svetlosti svaki izvor daje svakom froxelu
- Uzima u obzir senke (shadowmap) -- svetlost ne doprinosi froxelima koji su u senci
- Uzima u obzir atenuaciju svetlosnog izvora (opadanje sa rastojanjem)
- Primenjuje phase function (Henyey-Greenstein) za in-scattering
Ovaj korak je najskuplji deo volumetrickog foga i zavisi direktno od broja svetlosnih izvora koji doprinose fogu.
Vazno: Svaki svetlosni izvor u UE5 ima opciju "Volumetric Scattering Intensity". Podrazumevana vrednost je 1.0. Postavljanje na 0.0 iskljucuje taj izvor iz volumetrickog foga i stedi performanse. Ako imate mnostvo svetlosnih izvora koji ne moraju da doprinose fogu (npr. mali accent lights), postavite im ovu vrednost na 0.
Korak 3: Temporal Reprojection
Ovo je kljucni trik za kvalitet. Rezultat iz prethodnog frejma se reprojektuje (transformise u novu perspektivu kamere) i blenduje sa trenutnim rezultatom. Ovo efektivno:
- Smanjuje sum (noise) koji nastaje zbog niske rezolucije grida
- Povecava efektivnu rezoluciju jer se informacije akumuliraju kroz vreme
- Smoothira rezultat -- bez temporal reprojection, volumetricki fog bi bio znatno sumniji
Mana temporal reprojection je da moze uzrokovati ghosting -- tragove koji zaostaju pri brzom kretanju kamere ili naglim promenama osvetljenja. UE5 ima mehanizme za detekciju i korekciju ghostinga, ali ponekad se primecuju artefakti.
Korak 4: Ray March i akumulacija
Za svaki piksel na ekranu, engine koraca kroz froxel grid od kamere ka pozadini (ili do prvog neprozirnog objekta) i akumulira:
- Ukupnu in-scattered svetlost (svetlost koja se dodaje)
- Ukupnu transmitancu (koliko originalne svetlosti prolazi)
Rezultat je par vrednosti za svaki piksel: (inscattered_light, transmittance).
Korak 5: Kompoziting
Konacna slika se formira tako sto se za svaki piksel:
final_color = inscattered_light + transmittance * scene_color
Gde je scene_color boja scene bez foga (objekti, nebo, itd.).
27.3.3 Ukljucivanje Volumetric Fog-a
Da biste koristili volumetricki fog u UE5, potrebno je:
- Dodajte Exponential Height Fog actor u scenu (ako vec nije dodat)
- Ukljucite "Volumetric Fog" checkbox na tom actoru
- Opcionalno, dodajte Volumetric Fog materijale za lokalne efekte
Na Exponential Height Fog actoru, kada ukljucite Volumetric Fog, pojavice se dodatni parametri:
| Parametar | Opis |
|---|---|
| Scattering Distribution | g parametar Henyey-Greenstein phase function. Kontrolise koliko svetlosti se rasejava ka kameri naspram od kamere. 0 = izotropno, blizu 1 = jak forward scattering. |
| Albedo | Boja medijuma (koliko svetlosti se raseje vs. apsorbuje). Belo = sva svetlost se raseje (nema apsorpcije). Crno = sva svetlost se apsorbuje. |
| Extinction Scale | Skalira ukupni extinction koeficijent. Vise = gusca magla. |
| View Distance | Maksimalno rastojanje na koje volumetricki fog deluje. Vece = vise racunanja, ali pokriva vecu oblast. Tipicno 6000-10000 cm za unutrasnje scene, 60000+ za spoljasnje. |
| Override Light Colors with Fog Inscattering Colors | Ako je ukljuceno, boja svetlosti u fogu se zamenjuje bojom Inscattering Color sa Exponential Height Fog actora. Korisno za uniforman izgled. |
| Fog Inscattering Color | Boja in-scatteringa. Utice na boju volumetrickih svetlosnih snopova. |
27.3.4 Kontrola gustine foga
Gustina foga moze se kontrolisati na nekoliko nacina:
Globalno (preko Exponential Height Fog):
- Fog Density -- osnovna gustina
- Fog Height Falloff -- eksponencijalni pad sa visinom
- Extinction Scale (u Volumetric Fog sekciji) -- globalni mnozilac
Lokalno (preko Volume materijala):
- Mozete kreirati Volume Domain materijal (Material Domain = Volume) i dodeliti ga Volume actoru (ili bilo kom meshu sa volume materialom)
- U tom materijalu, gustina se definise kroz Extinction output
- Mozete koristiti noise funkcije (vidi Poglavlje 20) za varijaciju gustine
- World Position bazirane kalkulacije za oblik i distribuciju
Primer Volume materijala za lokalizovanu maglu:
- Kreirajte novi materijal
- U Details panelu, postavite Material Domain na Volume
- Postavite Blend Mode na Additive
- Koristite Extinction output za gustinu
- Koristite Albedo output za boju rasejanja
- Opcionalno, koristite Emissive za emisiju svetlosti (npr. za vatru)
// Pseudokod za volume materijal sa noise-om
float3 WorldPos = GetWorldPosition();
float noise = PerlinNoise3D(WorldPos * 0.01) * 0.5 + 0.5;
float density = noise * BaseDensity;
float falloff = saturate(1.0 - (WorldPos.z - BottomHeight) / FadeHeight);
Extinction = density * falloff;
Albedo = FogColor;
27.3.5 Interakcija svetla i volumetrickog foga
Svaki tip svetlosnog izvora u UE5 moze da doprinese volumetrickom fogu na svoj nacin:
Directional Light (Sunce):
- Najvazniji izvor za spoljasnje scene
- Stvara klasicne god rays kroz volumetricki fog
- Shadowmap od directional lighta odredjuje gde svetlost prolazi, a gde ne -- ovo je kljucno za vidljivost svetlosnih snopova
- Volumetric Scattering Intensity kontrolise jacinu doprinosa
Point Light:
- Stvara sferni volumetricki efekat oko sebe
- Izuzetno atmosfericno za unutrasnje scene (svetiljke, baklje)
- Moze biti skupo ako ih ima mnogo
Spot Light:
- Stvara konusni volumetricki snop
- Idealno za reflektore, ulicne svetiljke, pozoriste
- Shadowmap spota jasno definise oblik snopa u fogu
Rect Light (pravougaoni svetlosni izvor):
- Meksi volumetricki efekat
- Koristan za prozore, TV ekrane
Sky Light:
- Dodaje ambijentni doprinos u volumetricki fog
- Bez ovoga, delovi foga koji nisu direktno osvetljeni bi bili potpuno crni
Savjet za performance: Ako imate scenu sa 50 point lightova i volumetricki fog, racunajte da svaki od tih lightova doprinosi racunanju u svakom froxelu. Smanjite Volumetric Scattering Intensity na 0 za lightove koji ne moraju da doprinose fogu, ili smanjite njihov attenuation radius da bi uticali na manje froxela.
27.3.6 Temporal Reprojection -- detalji
Temporal reprojection je tehnika koja "reciklira" podatke iz prethodnih frejmova da bi poboljsala kvalitet. U kontekstu volumetrickog foga:
Kako funkcionise:
- U frejmu N, volumetricki fog se renderuje normalno
- U frejmu N+1, rezultat iz frejma N se reprojektuje u novi view (kompenzujuci se za pokret kamere)
- Novi rezultat se blenduje sa reprojektovanim starim -- tipicno oko 90% stari podatak, 10% novi
- Tokom vremena, informacije se akumuliraju i sum se smanjuje
Prednosti:
- Dramaticno bolji kvalitet bez povecanja rezolucije grida
- Stabilan, miran izgled bez treperenja (flickering)
Mane:
- Ghosting pri brzom kretanju kamere -- tragovi od prethodnih frejmova koji kasne
- Lag pri naglim promenama osvetljenja -- treba nekoliko frejmova da se adaptira
- Disocclusion artifacts -- kada se kamera pomeri tako da otkrije oblast koja ranije nije bila vidljiva, nema reprojektovanih podataka za tu oblast
UE5 ima mehanizme za ublazavanje ovih problema (confidence-based blending, disocclusion detection), ali je korisno biti svestan da oni postoje, posebno u scenama sa brzim kretanjem.
27.3.7 Rezolucija volumetrickog grida i kvalitet
Rezolucija froxel grida direktno utice na kvalitet i performanse volumetrickog foga.
Konzolne komande za kontrolu:
r.VolumetricFog.GridPixelSize [vrednost]
Ova komanda kontrolise koliko piksela ekrana jedan froxel pokriva horizontalno i vertikalno. Podrazumevana vrednost je oko 8. Manja vrednost = veca rezolucija grida = bolji kvalitet, ali i veci trosak.
| GridPixelSize | Grid rezolucija (za 1080p) | Kvalitet | Performance |
|---|---|---|---|
| 16 | ~120x68 | Nizak, vidljivi blokovi | Brzo |
| 8 (default) | ~240x135 | Dobar, prihvatljiv za vecinu | Umereno |
| 4 | ~480x270 | Visok, fini detalji | Skupo |
r.VolumetricFog.GridSizeZ [vrednost]
Kontrolise broj isecaka u dubini. Podrazumevano je 64. Vise isecaka = bolji kvalitet u dubini, ali vise racunanja.
r.VolumetricFog.TemporalReprojection [0 ili 1]
Ukljucuje/iskljucuje temporal reprojection. Iskljucivanje moze biti korisno za debugging, ali za shipping uvek treba biti ukljuceno.
27.4 Atmosfersko rasejanje (Atmospheric Scattering)
Dok se volumetricki fog bavi maglom i medijumom u blizini kamere, atmosfersko rasejanje se bavi interakcijom svetlosti sa celom atmosferom planete. Ovo je razlog zasto je nebo plavo, zalasci crveni, a horizont bledji od zenita.
27.4.1 Rayleigh Scattering (Rasejanje na malim cesticama)
Lord Rayleigh je 1871. godine objasnio zasto je nebo plavo. Kada svetlost interaguje sa cesticama koje su mnogo manje od talasne duzine svetlosti (kao sto su molekuli azota i kiseonika u atmosferi), dolazi do Rayleigh rasejanja.
Kljucna karakteristika: Intenzitet rasejanja je obrnuto proporcionalan cetvrtom stepenu talasne duzine:
I_scattered ~ 1 / lambda^4
Sto znaci:
- Plava svetlost (kratka talasna duzina, ~450nm) se raseje oko 5.5 puta vise od crvene svetlosti (~650nm)
- Ljubicasta svetlost se raseje jos vise, ali nase oci su manje osetljive na nju
Posledice u renderingu:
-
Plavo nebo: Sunce emituje belu svetlost. Dok prolazi kroz atmosferu, plava komponenta se raseje u svim pravcima, pa kada gledate u bilo kom pravcu (osim ka suncu), vidite rasejanu plavu svetlost.
-
Crveni zalazak: Kada je sunce nisko na horizontu, svetlost prolazi kroz mnogo veci sloj atmosfere. Vecina plave svetlosti se raseje pre nego sto stigne do vaseg oka, pa ostaje uglavnom crvena i narandzasta.
-
Bledji horizont: Na horizontu gledate kroz najtanji sloj atmosfere od gore ka dole, ali kroz najdeblji sloj horizontalno. Vise rasejanja = svetlija, belija boja na horizontu.
Rayleigh phase function:
Za Rayleigh rasejanje, phase function je:
p_R(theta) = 3/(16*pi) * (1 + cos^2(theta))
Ovo je simetricna funkcija -- jednako rasejanje napred i nazad, sa minimumom pod uglom od 90 stepeni. Primetite da je ovo razlicito od HG phase function koju koristimo za maglu.
27.4.2 Mie Scattering (Rasejanje na vecim cesticama)
Mie rasejanje se desava kada svetlost interaguje sa cesticama koje su priblizno iste velicine kao talasna duzina svetlosti ili vece. Ovo ukljucuje:
- Vodene kapljice u oblacima
- Aerosole (prasina, zagadjenje)
- Cestice peska u pustinjskom vazduhu
Kljucne razlike od Rayleigh rasejanja:
-
Manje zavisi od talasne duzine -- sve boje se rasejaju priblizno jednako, sto je razlog zasto su oblaci i izmaglica beli ili sivi (ne plavi).
-
Izrazito forward scattering -- Mie rasejanje je pretezno usmereno napred (u pravcu kretanja svetlosti). Ovo stvara svetli oreol oko sunca kada gledate kroz izmaglicu.
-
Kompleksnija phase function -- Mie phase function je komplikovanija od Rayleigh-eve, sa izrazenim forward lobom i manjim back lobom. U praksi se aproksimira sa Henyey-Greenstein funkcijom sa visokim g (0.7-0.8).
Posledice u renderingu:
- Izmaglica (haze): Mie rasejanje na aerosolima daje belu/sivu izmaglicu koja smanjuje kontrast na velikom rastojanju
- Korona oko sunca: Svetli krug oko sunca kroz izmaglicu
- Crepuscular rays (god rays): Delimicno rezultat Mie rasejanja na cesticama prasine/vlage
27.4.3 UE5 Sky Atmosphere sistem
Sky Atmosphere komponenta u UE5 je fizicki zasnovan sistem za renderovanje atmosferskog rasejanja. Implementira model zasnovan na radu Bruneton i Neyret ("Precomputed Atmospheric Scattering", 2008), sa dodatnim poboljsanjima.
Kako ga dodati:
- Dodajte Sky Atmosphere actor (ili komponentu) u scenu
- Obicno se koristi zajedno sa Directional Light (sunce) i Sky Light
- Opcionalno, dodajte Volumetric Cloud actor za oblake
Kljucni parametri Sky Atmosphere:
Transform sekcija:
- Ground Radius -- poluprecnik planete u km. Za Zemlju: 6360 km.
- Atmosphere Height -- visina atmosfere iznad tla u km. Za Zemlju: oko 60-100 km.
Rayleigh sekcija:
- Rayleigh Scattering -- boja i intenzitet Rayleigh rasejanja. Plava za Zemlju. Promena ove vrednosti menja boju neba.
- Rayleigh Scattering Scale -- mnozilac za intenzitet. Povecanje daje plavije nebo.
- Rayleigh Exponential Distribution -- kontrolise kako se Rayleigh cestica distribuiraju po visini (eksponencijalni pad).
Mie sekcija:
- Mie Scattering -- intenzitet Mie rasejanja. Povecanje daje vise izmaglice/haze.
- Mie Scattering Scale -- mnozilac.
- Mie Absorption Scale -- koliko Mie cestice apsorbuju svetlost (pored rasejanja).
- Mie Exponential Distribution -- distribucija Mie cestica po visini.
- Mie Anisotropy -- g parametar za Mie phase function. Tipicno 0.8 za realnu atmosferu.
Absorption sekcija:
- Other Absorption -- apsorcija od ozona i drugih gasova. Ozonski sloj apsorbuje odredjene talasne duzine i utice na boju neba pri zalasku/izlasku sunca. Daje karakteristicnu ljubicastu nijansu neba u sumraku.
- Other Absorption Scale -- mnozilac za apsorpciju.
Art Direction sekcija:
- Sky Luminance Factor -- mnozilac za svetlost neba. Za prilagodjavanje estetike.
- Multi Scattering Approximation -- koliko se uzima u obzir multiple scattering. Ovo je kljucno za realan izgled (vidi ispod).
- Ground Albedo -- boja i reflektivnost tla planete. Utice na svetlost koja se odbija od tla i osvetljava donji deo atmosfere.
27.4.4 Multiple Scattering Approximation
Ovo je kljucna komponenta Sky Atmosphere sistema. U stvarnosti, svetlost se raseje mnogo puta u atmosferi pre nego sto stigne do naseg oka. Single scattering (jedno rasejanje) daje pretamno nebo i prenaglasene razlike izmedju osvetljenih i neosvetljenih delova.
UE5 koristi multiple scattering aproksimaciju zasnovanu na radu Hillaire ("A Scalable and Production Ready Sky and Atmosphere Rendering Technique", 2020). Umesto da fizicki simulira svako rasejanje (sto bi bilo izuzetno skupo), koristi se aproksimativni metod koji:
- Precompute-uje LUT (Look-Up Table) za multiple scattering
- Uzima u obzir energiju koja se dobija od viseg reda rasejanja
- Rezultat je mnogo realniji izgled neba, posebno:
- Svetlije nebo na horizontu
- Meksi prelazi izmedju osvetljenih i zasenjenih oblasti
- Realnija boja neba pri razlicitim dobima dana
Multi Scattering faktor: U UE5, mozete kontrolisati intenzitet multiple scatteringa. Vrednost 1.0 je fizicki korektna. Smanjivanje daje dramaticnije, ali manje realne efekte. Povecanje iznad 1.0 moze dati preosvetljeno nebo.
27.4.5 Ground Albedo i Ozone Absorption
Ground Albedo:
Ground albedo je boja i reflektivnost povrsine planete gledane iz atmosfere. Ovo utice na "earth shine" -- svetlost koja se odbija od tla i osvetljava donji deo atmosfere. Na primer:
- Snezni krajolici imaju visok albedo (0.8+), sto daje svetlije nebo
- Okean ima nizak albedo (0.06), manje svetlosti se odbija nazad
- Sume imaju srednji albedo (0.1-0.2)
U praksi, ground albedo u UE5 najvise utice na boju neba blizu horizonta i na izgled atmosfere odozgo (npr. iz aviona ili sa planine).
Ozone Absorption:
Ozonski sloj u atmosferi apsorbuje odredjene talasne duzine svetlosti, posebno u crvenom i zelenom delu spektra. Ovo je razlog za:
- Ljubicastu nijansu neba u sumraku (twilight) -- kada je sunce ispod horizonta, svetlost prolazi kroz dugacak put kroz ozonski sloj, koji apsorbuje zelenu svetlost, ostavljajuci ljubicastu
- Plavo-ljubicaste nijanse pri zalasku
U UE5, "Other Absorption" parametar na Sky Atmosphere kontrolise ovaj efekat.
27.4.6 Promena doba dana (Time of Day)
Jedna od najlepsih stvari u UE5-ovom Sky Atmosphere sistemu je koliko je jednostavno simulirati razlicita doba dana. Potrebno je samo rotirati Directional Light koji predstavlja sunce.
Ugao sunca i izgled neba:
| Ugao sunca (iznad horizonta) | Izgled | Tehnicko objasnjenje |
|---|---|---|
| 90 (zenit) | Duboko plavo nebo, jako osvetljenje | Minimalan put svetlosti kroz atmosferu |
| 45 | Klasicno plavo nebo | Umereno rasejanje |
| 10-20 | Toplo, zlatno osvetljenje | Duzi put, vise Rayleigh rasejanja, plava se raseje pre |
| 0-5 (zalazak/izlazak) | Crveno/narandzasto nebo | Veoma dug put, skoro sva plava svetlost se raseje |
| -2 do 0 (sumrak) | Ljubicaste i plave nijanse | Svetlost ide kroz veoma dug atmosferski put, ozon apsorbuje |
| <-6 (noc) | Tamno plavo/crno nebo | Minimalna svetlost od sunca |
Prakticni tip za time-of-day sistem:
// Blueprint pseudokod za rotaciju sunca
SunAngle = lerp(-10, 190, TimeOfDay / 24.0);
DirectionalLight->SetRotation(FRotator(SunAngle, SunAzimuth, 0));
// Opcionalno: prilagodite fog gustinu vremenu dana
if (TimeOfDay < 7 || TimeOfDay > 19)
ExponentialFog->SetFogDensity(MorningFogDensity);
else
ExponentialFog->SetFogDensity(DayFogDensity);
Referenca: Za detalje o bloom efektima koji prate zalazak sunca i god rays, pogledajte Poglavlje 15 (Post-Processing efekti).
27.5 God Rays / Svetlosni snopovi (Light Shafts)
God rays, crepuscular rays, svetlosni snopovi -- svi ovi termini opisuju isti fenomen: vidljive snopove svetlosti koji prolaze kroz medijum (maglu, prasinu, dim). Ovo je jedan od najzastupljenijih i najefektnijih volumetrickih efekata u igrama.
27.5.1 Fizika iza god rays
God rays su rezultat in-scatteringa svetlosti u participating media. Evo tacno sta se desava:
- Sunce (ili drugi jak svetlosni izvor) emituje svetlost
- Neki objekti (drvece, zgrade, oblaci) blokiraju deo svetlosti -- stvarajuci senke
- Gde svetlost prolazi (izmedju prepreka), osvetljava cestice u vazduhu (prasinu, vlagu, maglu)
- Te cestica rasejaju deo svetlosti ka vasem oku (in-scattering)
- Vi vidite svetle snopove tamo gde svetlost prolazi i tamne oblasti tamo gde je blokirana
Kljucno je razumeti: ne vidite sam snop svetlosti, vec vidite rasejanu svetlost od cestica u tom snopu. Bez cestica u vazduhu, ne biste videli god rays cak ni da svetlost prolazi.
27.5.2 Metode renderinga god rays u UE5
Postoje dva osnovna nacina za renderovanje god rays u UE5:
Metod 1: Kroz Volumetric Fog sistem (preporuceno)
Ovo je fizicki korektniji i lepsi pristup. God rays su prirodna posledica volumetrickog foga -- kada se svetlost raseje u froxel gridu, oblasti koje su u senci (prema shadowmapi) ne dobijaju in-scattering, dok osvetljene oblasti dobijaju. Rezultat su vidljivi snopovi.
Kako postici:
- Ukljucite Volumetric Fog na Exponential Height Fog actoru
- Obezbedite da Directional Light ima ukljucene Dynamic Shadows (Cascaded Shadow Maps ili Virtual Shadow Maps)
- Podignite Volumetric Scattering Intensity na Directional Light-u (pocnite sa 1.0, povecajte po potrebi)
- Dodajte dovoljno gustine medijuma (Fog Density, Extinction Scale)
- Postavite objekte koji blokiraju svetlost (drvece, prozorske ramove, itd.)
Prednosti:
- 3D efekti -- snopovi su volumetricki i ispravno se ponasaju pri kretanju kamere
- Svaki svetlosni izvor moze doprineti (ne samo sunce)
- Interaguje sa lokalnim fog volumenima
- Fizicki zasnovan
Mane:
- Zavisi od rezolucije froxel grida -- moze izgledati blocky
- Performance cost zavisi od broja svetlosnih izvora
- Potrebna dovoljno kvalitetna shadowmap za ostre snopove
Metod 2: Post-Process Light Shafts (Radial Blur)
Ovo je stariji metod koji koristi post-process efekat za simulaciju god rays. Tehnicki, radi na sledeci nacin:
- Engine identifikuje piksele koji su izlozeni jakom svetlosnom izvoru (obicno suncu)
- Primenjuje radial blur -- razmazivanje piksela radijalno od pozicije svetlosnog izvora na ekranu
- Rezultat se dodaje na scenu kao svetlosni snopovi
U UE5, ovaj metod je dostupan kroz Light Shaft opcije na Directional Light actoru:
| Parametar | Opis |
|---|---|
| Light Shaft Occlusion | Ukljucuje okluziju svetlosnih snopova. Objekti izmedju svetlosnog izvora i kamere blokiraju snopove. |
| Occlusion Mask Darkness | Koliko tamni su okluzovani delovi. 0 = potpuno tamno, 1 = nema okluzije. |
| Light Shaft Bloom | Ukljucuje bloom efekat na svetlosnim snopovima. |
| Bloom Scale | Intenzitet bloom efekta na snopovima. |
| Bloom Threshold | Prag svetlosti za bloom efekat. |
| Bloom Tint | Boja bloom efekta na snopovima. |
Prednosti:
- Jeftinije od volumetrickog foga (fiksni trosak, ne zavisi od broja svetala)
- Moze dati izuzetno dramaticne rezultate
- Radi bez da fizicki imate maglu u sceni
Mane:
- 2D efekat -- ne reaguje ispravno na 3D kretanje kamere (moze delovati "nalepljeno")
- Radi samo za svetlosne izvore koji su vidljivi na ekranu
- Nije fizicki korektan
- Moze imati artefakte na ivicama ekrana
Preporuka: Za moderne projekte u UE5, koristite Volumetric Fog metod za god rays. Post-process light shafts su korisni kao dodatni estetski sloj ili za stariji hardware gde volumetricki fog nije pristupacen.
Referenca: Za vise detalja o post-process bloom efektima i kako ih kombinovati sa god rays, pogledajte Poglavlje 15.
27.5.3 Saveti za ubedljive god rays
-
Senke su kljucne. Bez kvalitetnih senki, nema vidljivih snopova. Uverite se da shadowmaps imaju dovoljnu rezoluciju (vidi VSM -- Virtual Shadow Maps u UE5).
-
Kontrast je vazan. God rays su najubedljiviji kada postoji jasan kontrast izmedju osvetljenih i zasenjenih oblasti. Scena sa potpuno otvorenim nebom nece imati god rays -- potrebni su objekti koji blokiraju svetlost.
-
Gustina medijuma. Previse magle daje uniformno belo platno, premalo ne daje vidljive snopove. Nadite balans.
-
Phase function (Scattering Distribution). Za god rays od sunca, koristite forward scattering (g = 0.5-0.8). Ovo ce pojacati snopove kada gledate prema suncu.
-
Koristite lokalne fog volumene za pojacan efekat na specificnim mestima -- unutar crkve, u sumi, itd.
27.6 Renderovanje oblaka (Cloud Rendering)
Oblaci su mozda najkompleksniji volumetricki efekat u real-time renderingu. Za razliku od magle koja je relativno homogena, oblaci imaju slozenu 3D strukturu, izuzetno kompleksno osvetljenje sa visestrukim rasejanjem, i zauzimaju ogroman prostor u sceni.
UE5 nudi Volumetric Cloud sistem koji renderuje realisticne volumetricke oblake u realnom vremenu.
27.6.1 Osnove ray marchinga za oblake
Renderovanje volumetrickih oblaka zasniva se na ray marchingu -- tehnici u kojoj za svaki piksel na ekranu "koracamo" duz zraka od kamere, uzorkujuci gustinu oblaka u redovnim intervalima.
Algoritam ray marchinga za oblake (pojednostavljen):
Za svaki piksel:
ray = generisi zrak od kamere kroz piksel
// Nadji gde zrak ulazi i izlazi iz sloja oblaka
t_enter = rastojanje do donjeg sloja oblaka
t_exit = rastojanje do gornjeg sloja oblaka
accumulated_light = 0
accumulated_transmittance = 1.0
t = t_enter
while (t < t_exit && accumulated_transmittance > 0.01):
position = ray_origin + ray_direction * t
// Uzorkuj gustinu oblaka na ovoj poziciji
density = SampleCloudDensity(position)
if (density > 0):
// Racunaj osvetljenje u ovoj tacki
light = ComputeCloudLighting(position, density)
// Akumuliraj svetlost i transmitanciju
dt = step_size
extinction = density * extinction_coefficient
local_transmittance = exp(-extinction * dt)
accumulated_light += accumulated_transmittance * (1.0 - local_transmittance) * light
accumulated_transmittance *= local_transmittance
t += step_size
final_color = accumulated_light + accumulated_transmittance * sky_color
Kljucni parametri ray marchinga:
- Step size: Koliki je korak izmedju uzoraka. Manji korak = vise uzoraka = bolji kvalitet, ali skuplje. Tipicno 64-128 koraka za oblake.
- Early termination: Ako transmitancija padne ispod praga (npr. 0.01), prekini -- oblak je dovoljno gust da nista iza njega nece biti vidljivo.
- Empty space skipping: Ako je gustina nula, mozemo preskociti taj deo i koristiti vece korake dok ne nadjemo oblak.
27.6.2 Oblici oblaka zasnovani na sumovima (Noise-based Cloud Shapes)
Kako definisati oblik oblaka? U UE5, oblaci se definisu kombinacijom razlicitih noise funkcija (vidi Poglavlje 20 za detaljnu teoriju noise-a).
Tipican pipeline za gustinu oblaka:
Korak 1: Osnovna gustina (Base Shape)
Koristi se 3D Worley noise (ili Perlin-Worley hibrid) za definisanje osnovnog oblika oblaka. Ovo daje bubbly, cumulus-like oblik.
// 3D noise za osnovni oblik
base_shape = SamplePerlinWorley3D(position * base_scale);
Perlin-Worley noise je kombinacija Perlin i Worley noise-a koja daje izuzetno prirodne oblike oblaka:
- Perlin noise daje siroku, glatku strukturu
- Worley noise (cellular noise) daje bubbly, cumulus strukturu
- Kombinacija:
PerlinWorley = remap(Perlin, 1.0 - Worley, 1.0, 0.0, 1.0)
Korak 2: Vremenski tip oblaka (Weather Map)
2D tekstura (weather map) kontrolise distribuciju oblaka po horizontalnoj ravni. Svaki kanal moze kontrolisati:
- R: Coverage (pokrivenost -- gde su oblaci)
- G: Cloud type (tip oblaka -- nizak, srednji, visok)
- B: Precipitation (padavine -- gusci oblaci daju kisu)
weather = SampleWeatherMap(position.xz * weather_scale);
coverage = weather.r;
cloud_type = weather.g;
Korak 3: Profil gustine po visini
Gustina oblaka varira po visini unutar oblaka. Na primer, cumulus oblaci su gusci u donjem delu i razredjeniji ka vrhu.
height_fraction = (position.z - cloud_bottom) / cloud_thickness;
height_density = HeightDensityProfile(height_fraction, cloud_type);
Korak 4: Detalji (Detail Noise)
Dodatni sloj 3D noise-a (obicno visi oktavi Worley-ja) erodira ivice oblaka i dodaje sitne detalje.
detail_noise = SampleWorley3D(position * detail_scale);
final_density = base_density - detail_noise * detail_strength;
final_density = max(final_density, 0.0);
Korak 5: Konacna gustina
cloud_density = base_shape * height_density * coverage;
cloud_density = Erode(cloud_density, detail_noise);
cloud_density = max(cloud_density, 0.0);
27.6.3 Osvetljenje oblaka
Osvetljenje oblaka je jedan od najizazovnijih problema u real-time renderingu. Oblaci su gust participating media sa izrazitim multiple scatteringom.
Beer-Lambert za apsorpciju
Kao sto smo diskutovali ranije, svetlost koja prolazi kroz oblak se gasi prema Beer-Lambert zakonu:
transmittance = exp(-density * sigma_t * distance)
U kontekstu oblaka, za svaku tacku u oblaku, trebamo znati koliko svetlosti od sunca stize do te tacke. Ovo se radi sekundarnim ray marchingom ka suncu:
float LightEnergy(float3 position) {
float optical_depth = 0;
float3 light_dir = normalize(SunPosition - position);
float step = light_march_step_size;
for (int i = 0; i < LIGHT_MARCH_STEPS; i++) {
float3 sample_pos = position + light_dir * step * i;
optical_depth += SampleCloudDensity(sample_pos) * step;
}
return exp(-optical_depth * extinction_coefficient);
}
Ovo znaci da za svaki uzorak duz glavnog zraka, moramo raditi dodatni ray march ka suncu! Ovo je razlog zasto su volumetricki oblaci toliko skupi -- to je ray march unutar ray marcha.
Powder Effect (Multi-scattering aproksimacija)
Cist Beer-Lambert zakon daje oblake koji su pretamni u sredini. U stvarnosti, svetlost se raseje mnogo puta unutar oblaka, i energija se "rozprostire." Ovo se modeluje takozvanim powder effectom ili Beers-Powder aproksimacijom:
float BeerPowder(float optical_depth) {
float beer = exp(-optical_depth * extinction);
float powder = 1.0 - exp(-optical_depth * extinction * 2.0);
return beer * powder;
}
Sta radi powder efekat? Zamislite tamnu stranu oblaka (strana okrenuta od sunca). Sa cistim Beer-Lambert, ta strana bi bila potpuno tamna. Ali u stvarnosti, svetlost koja udje u oblak sa strane sunca se raseje mnogo puta i eventualno dodje i do tamne strane. Powder efekat simulira ovo tako sto smanjuje energiju u plitkim delovima oblaka (gde bi inace bilo prevetlo) i dodaje energiju u dublje delove.
Rezultat: oblaci sa realnijim izgledom gde je svetlost "zarobljena" unutar oblaka i ravnomernije rasporedenija.
Silver Lining efekat
Kada gledate oblak sa suncem iza njega, ivice oblaka svetle mnogo jace od ostatka -- ovo je silver lining efekat. On nastaje zbog:
- Forward scattering: HG phase function sa visokim g daje jak forward scattering na ivicama oblaka
- Tanka ivica: Na ivicama je oblak tanak, pa vise svetlosti prolazi
- Difuzija: Svetlost se rasejava i izbija na ivicama
U renderingu, silver lining se postize kombinacijom visoke g vrednosti u phase function i razmatra se ugao izmedju pravca pogleda i pravca svetlosti.
Ambient osvetljenje oblaka
Oblaci ne primaju samo direktno svetlo od sunca. Ambijentno svetlo od neba (posebno od gore) i od tla (odbljesak) takodje doprinosi. Tipicna aproksimacija:
float3 ambient = lerp(GroundColor * GroundIntensity, SkyColor * SkyIntensity, height_fraction);
Gde height_fraction je normalizovana visina unutar oblaka (0 = dno, 1 = vrh). Donji deo oblaka dobija vise odbleska od tla, gornji deo vise svetlosti neba.
27.6.4 Volumetricki oblaci u UE5
UE5 ima ugradjeni Volumetric Cloud actor koji implementira gore opisane koncepte.
Kako dodati volumetricke oblake:
- Dodajte Volumetric Cloud actor u scenu
- Kreirajte ili dodelite Volume Cloud materijal (Material Domain = Volume)
- Podesavajte parametre za zelejeni izgled
Kljucni parametri Volumetric Cloud actora:
| Parametar | Opis |
|---|---|
| Layer Bottom Altitude | Visina donjeg sloja oblaka u km. Tipicno 1.5-3 km za cumulus. |
| Layer Height | Debljina sloja oblaka u km. Tipicno 2-5 km. |
| Tracing Start Max Distance | Maksimalno rastojanje na kome se ray marching pocinje. Kontrolise koliko daleko oblaci mogu biti. |
| Tracing Max Distance | Maksimalno rastojanje ray marchinga. Vece = dalji oblaci, ali skuplje. |
| Stop Tracing Transmittance Threshold | Prag transmitancije na kome se ray marching zaustavlja (early termination). Tipicno 0.01. |
| Shadow Tracing Distance | Rastojanje sekundarnog ray marchinga ka svetlosnom izvoru. |
Cloud materijal:
Volume Cloud materijal je srce sistema oblaka. Ovde definisete noise funkcije, weather map, i sve ostalo sto kontrolise izgled oblaka. UE5 dolazi sa nekoliko primer materijala za oblake.
Kljucni outputi Volume Cloud materijala:
- Extinction -- gustina/neprozirnost oblaka
- Albedo -- boja rasejanja (obicno bela ili blago zuta)
- Emissive -- emisija (retko koriscena za oblake, vise za specijalne efekte)
- Conservative Density -- aproksimativna gustina za optimizaciju (koristi se za empty space skipping)
27.6.5 Slojevi oblaka i vremenski uslovi
U stvarnosti, oblaci postoje u razlicitim slojevima atmosfere:
| Sloj | Visina | Tipovi oblaka | Karakteristike |
|---|---|---|---|
| Nizak | 0-2 km | Stratus, Stratocumulus | Ravni, prostiru se, magloviti |
| Srednji | 2-6 km | Altostratus, Altocumulus | Tanje, sivkasti |
| Visok | 6-12 km | Cirrus, Cirrostratus | Ledeni kristali, tanki, vlaknasti |
| Vertikalni razvoj | 1-12 km | Cumulus, Cumulonimbus | Visoki, masivni, olujni |
U UE5, mozete koristiti vise Volumetric Cloud actora ili slozene materijale za simulaciju razlicitih slojeva. Weather map se moze animirati za simulaciju kretanja oblaka i promene vremenskih uslova.
Animacija oblaka:
Oblaci se mogu animirati na nekoliko nacina:
- Pomeranje noise koordinata tokom vremena -- daje efekat kretanja oblaka vetrom
- Animacija weather mape -- menja raspored oblaka
- Promena parametara gustine -- za tranzicije izmedju vedrog i oblacnog vremena
// Pseudokod za animirane oblake
float3 wind_offset = WindDirection * WindSpeed * Time;
float3 sample_position = WorldPosition + wind_offset;
float density = SampleCloudNoise(sample_position);
27.6.6 Performanse renderovanja oblaka
Volumetricki oblaci su jedan od najskupljih efekata u UE5. Evo zasto i sta mozete uciniti:
Zasto su skupi:
- Ray marching sa mnogo uzoraka -- tipicno 64-128 uzoraka po pikselu
- Sekundarni ray march ka svetlosti -- dodatnih 6-12 uzoraka za svaki primarni uzorak
- 3D noise uzorkovanje -- visestruko uzorkovanje 3D tekstura za gustinu
- Veliki pokriveni deo ekrana -- oblaci cesto pokrivaju velik deo neba
Optimizacione strategije:
LOD za oblake (Level of Detail):
- Smanjite broj uzoraka za udaljenije oblake
- Koristite nizu rezoluciju noise-a za daleke oblake
- UE5 automatski primenjuje neke LOD strategije
Temporal Reprojection:
- Slicno volumetrickom fogu, rezultati iz prethodnih frejmova se reprojektuju
- Ovo omogucava manje uzoraka po frejmu uz akumulaciju kvaliteta
- UE5 oblaci koriste temporal upsampling -- renderuju se na nizoj rezoluciji i upscale-uju
Conservative Density za Empty Space Skipping:
- Conservative Density output u materijalu daje grubu aproksimaciju gustine
- Engine koristi ovo da brzo preskoci oblasti bez oblaka
- Pravilno podesen Conservative Density moze znacajno ubrzati rendering
Rezolucija renderovanja:
- Oblaci se obicno renderuju na pola ili cetvrtini rezolucije ekrana
- Upscaling se radi uz temporal filtriranje za minimalne artefakte
- U Project Settings mozete kontrolisati Volumetric Cloud render scale
Practicni budgeting:
- Na konzolama (PS5/Xbox Series X), volumetricki oblaci tipicno zauzimaju 2-4ms GPU vremena
- Na PC-u, zavisi od GPU snage i podesavanja
- Za mobilne platforme, volumetricki oblaci su obicno neprihvatljivi -- koristite skybox teksture ili jednostavnije aproksimacije
27.7 Napredne teme
27.7.1 Interakcija foga i transparentnih objekata
Jedan od najvecih izazova sa volumetrickim fogom je njegova interakcija sa transparentnim objektima (staklo, voda, particije, efekti). Problem je sledeci:
Volumetricki fog se renderuje u svom 3D gridu, ali transparentni objekti se renderuju posebno. Kada imate staklo sa fogom iza njega, potrebno je ispravno kombinovati:
- Fog ispred stakla
- Staklo sa svojom transparentnoshcu
- Fog iza stakla
- Scenu iza svega
UE5 resava ovo delimicno -- transparentni objekti mogu pristupiti volumetrickom fog gridu i primeniti fog na sebe. Medjutim, kompleksni slucajevi (vise slojeva transparencije sa fogom) mogu dati neocekivane rezultate.
Saveti:
- Koristite translucent materijale sa "Apply Fogging" ukljucenim (default)
- Za cestice (particles), UE5 automatski primenjuje fog
- Za komplikovane slucajeve, razmotrite da koristite opaque geometriju sa dithered opacity umesto prave transparencije -- ovo se mnogo bolje integrira sa fogom
27.7.2 Heterogeni fog sa 3D teksturama
Za napredne efekte, mozete koristiti 3D teksture ili proceduralne noise funkcije u Volume Domain materijalima da kreirate heterogeni fog:
- Vrtlozi dima -- animate noise koordinate da kreirate vrtlozno kretanje
- Eksplozije -- promenljiva gustina i emisija, animirana tokom vremena
- Magicni efekti -- svetleci oblaci magije, portali sa volumetrickim efektima
Ovi lokalni efekti koriste isti volumetricki fog sistem, ali sa prilagodjenim materijalima.
27.7.3 VDB volumeni u UE5
UE5 podrzava uvoz OpenVDB volumena -- industrijski standard za volumetricke podatke. Ovo omogucava:
- Uvoz volumetrickih simulacija iz Houdini, Blender, Embergen
- Precizne volumetricke oblike dima, vatre, eksplozija
- Reproduktibilne simulacije za cinematike
VDB volumeni se mogu koristiti sa Niagara particle sistemom ili sa volume materijalima.
27.8 Prakticne performansne smernice
27.8.1 Rezolucija volumetrickog foga
| Scenario | GridPixelSize | GridSizeZ | Ocekivani trosak |
|---|---|---|---|
| Mobilni/Nizak budžet | 16 | 32 | ~0.3ms |
| Konzola standard | 8 | 64 | ~1.0-1.5ms |
| Konzola visok kvalitet | 4 | 128 | ~2.0-3.0ms |
| PC Ultra | 4 | 128 | ~1.5-2.5ms (zavisno od GPU) |
27.8.2 Trosak renderovanja oblaka
| Konfiguracija | Ocekivani GPU trosak |
|---|---|
| Jednostavni oblaci, polovicna rezolucija | ~1.5-2.5ms |
| Detaljni oblaci, puna rezolucija | ~3.0-5.0ms |
| Vise slojeva oblaka | ~4.0-7.0ms |
| Bez oblaka (skybox) | ~0.1ms |
27.8.3 Optimizacioni checklist
Evo liste stvari koje mozete uciniti da optimizujete volumetricke efekte:
Volumetricki fog:
- Smanjite View Distance na minimum neophodan za scenu
- Iskljucite Volumetric Scattering Intensity na svetlima koja ne moraju da doprinose fogu
- Koristite vecu vrednost GridPixelSize (manja rezolucija grida) ako kvalitet dozvoljava
- Smanjite GridSizeZ ako ne trebate mnogo detalja u dubini
- Drzite temporal reprojection ukljucenom (bolje vizualno za istu cenu)
- Ogranicite Attenuation Radius na point/spot lightovima da smanjite koliko froxela pokrivaju
- Koristite Fog Cutoff Distance da ne racunate fog izvan vidljivosti
Oblaci:
- Smanjite broj primary ray march uzoraka gde je moguce
- Smanjite broj light march uzoraka (shadow)
- Koristite Conservative Density ispravno za empty space skipping
- Renderirajte oblake na nizoj rezoluciji (1/2 ili 1/4)
- Koristite temporal reprojection
- Za mobilne platforme, razmotrite 2D skybox umesto volumetrickih oblaka
- Izbegavajte vise od jednog sloja oblaka ako performanse to ne dozvoljavaju
Atmosfera:
- Sky Atmosphere je generalno jeftin zahvaljujuci LUT-ovima
- Ako ne trebate dinamicko vreme dana, razmislite o staticnom skyboxu
- Aerial perspective (atmosferski efekat na daljinu) moze se kontrolisati nezavisno
27.8.4 Profiling volumetrickih efekata
Za identifikaciju uskih grla, koristite UE5 profiling alate:
GPU Profiler (stat gpu):
- VolumetricFog -- vreme utroseno na volumetricki fog
- VolumetricCloud -- vreme utroseno na oblake
- SkyAtmosphere -- vreme utroseno na atmosferu
RenderDoc: Za detaljan uvid u svaki draw call i shader koji se izvrsava, koristite RenderDoc frame capture. Mozete videti tacno koliko vremena svaki pass trosi i koji shaderi su najskuplji.
Console komande za debugging:
// Vizualizacija froxel grida
r.VolumetricFog.GridPixelSize [vrednost]
// Iskljucivanje za testing
r.VolumetricFog 0 // Iskljuci volumetricki fog
r.VolumetricCloud 0 // Iskljuci volumetricke oblake
27.9 Integrisani primer: Atmosfericna suma
Hajde da sve sto smo naucili primenimo na konkretan primer -- atmosfericna suma sa jutarnjom maglom, volumetrickim svetlosnim snopovima i oblacima.
Korak 1: Osnovno okruzenje
- Kreirajte novu scenu sa terenom pokrivenim stablima
- Dodajte Directional Light (sunce) sa niskim uglom (10-20 stepeni iznad horizonta) za jutarnje/vecernje svetlo
- Dodajte Sky Light sa Sky Atmosphere za ambijentno osvetljenje
- Dodajte Sky Atmosphere actor
Korak 2: Magla
- Dodajte Exponential Height Fog actor
- Podesavanja:
- Fog Density: 0.015
- Fog Height Falloff: 0.8 (magla je relativno plitka, pri tlu)
- Start Distance: 0
- Fog Max Opacity: 0.85
- Inscattering Color: Blago toplija bela (npr. RGB 0.9, 0.85, 0.8)
- Directional Inscattering Color: Topla zuta-narandzasta za oreol sunca
- Directional Inscattering Exponent: 8
Korak 3: Volumetricki fog i god rays
-
Ukljucite Volumetric Fog na Exponential Height Fog actoru:
- Scattering Distribution: 0.65 (forward scattering za lepe god rays)
- Albedo: Bela (1.0, 1.0, 1.0) -- minimalna apsorpcija
- Extinction Scale: 1.0
- View Distance: 60000
-
Na Directional Light-u:
- Volumetric Scattering Intensity: 2.0 (pojacano za dramaticne snopove)
- Ukljucite Cast Shadows i koristite Virtual Shadow Maps za kvalitetne senke
-
Stabla ce automatski blokirati svetlost i stvoriti vidljive snopove kroz maglu!
Korak 4: Lokalna magla u udolinama
- Kreirajte Volume materijal sa noise-baziranom gustinom
- Postavite Box volume actore u udoline terena
- Dodelite Volume materijal
- Podesavajte gustinu i fadeout na ivicama
Korak 5: Oblaci
- Dodajte Volumetric Cloud actor
- Koristite UE5-ov default cloud materijal ili kreirajte prilagodjen
- Podesavanja:
- Layer Bottom Altitude: 2.0 km
- Layer Height: 3.0 km
- Animirajte offset u materijalu za blago kretanje oblaka
Korak 6: Atmosfera
- Na Sky Atmosphere actoru:
- Rayleigh Scattering: Blago pojacano za plavije nebo
- Mie Scattering: Pojacano za izmaglicu na horizontu
- Mie Anisotropy: 0.8
- Multi Scattering: 1.0
Rezultat
Kombinacijom svih ovih sistema, dobijate sumu sa:
- Jutarnjom maglom koja se lenja pri tlu
- Vidljivim snopovima svetlosti kroz krosnje
- Realisticnim nebom sa oblacima
- Atmosferskom izmaglicom na daljini
Ovo je potpuno dinamicno -- rotiranjem sunca menjate vreme dana, a magla, oblaci i nebo se automatski prilagodjuju.
27.10 Ceste greske i kako ih izbecci
Greska 1: Previse gustina magle = beli ekran
Problem: Postavili ste visoku fog density i sada je sve belo.
Resenje: Smanjite Fog Density. Zapamtite da je eksponencijalna -- male promene imaju veliki efekat. Pocnite sa veoma malom vrednoscu (0.001) i postepeno povecavajte.
Greska 2: God rays nisu vidljivi
Problem: Ukljucili ste volumetricki fog, ali ne vidite svetlosne snopove.
Moguce resenje:
- Proverite da Directional Light ima ukljucene senke -- bez senki nema kontrasta za snopove
- Proverite Volumetric Scattering Intensity na svetlu (mora biti > 0)
- Potrebne su prepreke koje blokiraju svetlost (drvece, zgrade)
- Povecajte fog density ili Extinction Scale
- Poverite da je Scattering Distribution > 0 (forward scattering)
Greska 3: Blocky/pikselizovani fog
Problem: Volumetricki fog izgleda blokasto, sa vidljivim "stepenicama."
Resenje:
- Smanjite GridPixelSize (npr. sa 8 na 4)
- Uverite se da je temporal reprojection ukljucen
- Povecajte GridSizeZ za bolji kvalitet u dubini
Greska 4: Ghosting pri brzom kretanju
Problem: Fog "zaostaje" za kamerom pri brzom kretanju, vidljivi su ghosting artefakti.
Resenje:
- Ovo je inherentan problem temporal reprojection
- Smanjivanje istorijskog blenda (vise tezine na trenutni frejm) smanjuje ghosting ali povecava noise
- U nekim slucajevima, prihvatite mali ghosting kao kompromis
Greska 5: Oblaci su previse skupi
Problem: Volumetricki oblaci trose 5+ ms GPU vremena.
Resenje:
- Smanjite rezoluciju renderovanja oblaka (1/2 ili 1/4 ekrana)
- Smanjite broj ray march uzoraka
- Pojednostavite cloud materijal (manje noise uzorkovanja)
- Razmotrite koriscenje 2D skybox oblaka za nebitne delove neba
Greska 6: Fog ne utice na transparentne objekte
Problem: Transparentni objekti (staklo, voda, particije) ne primaju fog.
Resenje:
- Proverite da je Apply Fogging ukljucen na materijalu transparentnog objekta
- Za cestice u Niagari, proverite da je Apply Fog opcija ukljucena na renderieru cestica
- Sortiranje transparentnih objekata sa fogom moze biti problematicno -- eksperimentisite sa render redosledom
27.11 Tabela kljucnih termina
| Termin | Srpski opis | Definicija |
|---|---|---|
| Participating Media | Ucestvujuci medijum | Medijum (gas, tecnost) koji aktivno interaguje sa svetloscu -- apsorbuje je, rasejava ili emituje |
| Absorption | Apsorpcija | Proces u kome medijum "guta" svetlost i pretvara je u toplotu |
| Scattering | Rasejanje | Proces u kome medijum menja pravac svetlosti; moze biti out-scattering (od posmatraca) ili in-scattering (ka posmatracu) |
| In-Scattering | Rasejanje ka posmatracu | Svetlost iz drugih pravaca biva rasejana ka posmatracu, cineci medijum vidljivim |
| Out-Scattering | Rasejanje od posmatraca | Svetlost koja putuje ka posmatracu biva skrenjena u drugom pravcu |
| Emission | Emisija | Medijum sam emituje svetlost (vatra, plazma) |
| Extinction | Ekstinkcija/Gasenje | Kombinovani gubitak svetlosti apsorpcijom i out-scatteringom: sigma_t = sigma_a + sigma_s |
| Transmittance | Transmitancija | Procenat svetlosti koji prezivljuje put kroz medijum: T = exp(-tau) |
| Optical Depth | Opticka dubina | Integral koeficijenta ekstinkcije duz puta svetlosti; mera "gustine" medijuma |
| Phase Function | Funkcija faze | Opisuje ugaonu distribuciju rasejane svetlosti; koliko se raseje u kom pravcu |
| Henyey-Greenstein | (ime autora) | Najcescea phase function u real-time renderingu, sa jednim parametrom g koji kontrolise anizotropiju |
| Anisotropy (g) | Anizotropija | Parametar koji kontrolise da li se svetlost raseje vise napred (g > 0) ili nazad (g < 0) |
| Forward Scattering | Rasejanje unapred | Svetlost se raseje pretezno u pravcu kretanja; daje svetli oreol oko izvora |
| Beer-Lambert Law | Bir-Lamberov zakon | Eksponencijalno opadanje svetlosti sa rastojanjem kroz apsorbujuci medijum |
| Rayleigh Scattering | Relejevo rasejanje | Rasejanje na cesticama mnogo manjim od talasne duzine; intenzitet ~ 1/lambda^4; daje plavo nebo |
| Mie Scattering | Mije rasejanje | Rasejanje na vecim cesticama; manje zavisno od talasne duzine; daje belu/sivu izmaglicu |
| Ray Marching | Koracanje zrakom | Numericka tehnika za integraciju duz zraka sa diskretnim koracima |
| Froxel | Froksel | Frustum voxel -- celija u 3D gridu koji pokriva view frustum kamere |
| Volumetric Fog | Volumetricka magla | 3D fog sistem koji racuna in-scattering svetlosti u froxel gridu |
| God Rays / Light Shafts | Svetlosni snopovi | Vidljivi snopovi svetlosti nastali in-scatteringom u participating media |
| Temporal Reprojection | Temporalna reprojekicja | Tehnika recikliranja podataka iz prethodnih frejmova za poboljsanje kvaliteta |
| Powder Effect | Efekat prasine | Multi-scattering aproksimacija za oblake; sprečava pretamne unutrasnjosti |
| Silver Lining | Srebrna ivica | Svetao rub oblaka nastao forward scatteringom na tankim ivicama |
| Weather Map | Mapa vremena | 2D tekstura koja kontrolise distribuciju i tip oblaka |
| Conservative Density | Konzervativna gustina | Aproksimativna gustina za brzo preskakanje praznog prostora u ray marchingu |
| Exponential Height Fog | Eksponencijalna visinska magla | Fog model gde gustina eksponencijalno opada sa visinom |
| Multiple Scattering | Visestruko rasejanje | Svetlost se raseje vise puta pre dolaska do posmatraca; vazno za guste medijume |
| Single Scattering | Jednostruko rasejanje | Svetlost se raseje samo jednom; dovoljno za retke medijume |
| Perlin-Worley Noise | Perlin-Vorli sum | Hibridni noise koji kombinuje Perlin i Worley za prirodne oblike oblaka |
| Sky Atmosphere | Atmosfera neba | UE5 sistem za fizicki zasnovano renderovanje atmosferskog rasejanja |
27.12 Dodatna literatura i resursi
Za dalje ucenje o volumetrickim efektima, preporucujemo sledece resurse:
Akademski radovi
-
"Precomputed Atmospheric Scattering" -- E. Bruneton, F. Neyret (2008) Osnova za vecinu modernih atmospheric scattering implementacija, ukljucujuci UE5.
-
"A Scalable and Production Ready Sky and Atmosphere Rendering Technique" -- S. Hillaire (2020, Epic Games) Rad koji opisuje konkretnu implementaciju Sky Atmosphere sistema u UE5. Obavezno stivo!
-
"Real-time Volumetric Cloudscapes" -- A. Schneider (2015, Guerrilla Games) Revolucionarni rad koji je postavio standard za real-time volumetricke oblake. Koristen u Horizon: Zero Dawn i kasnije uticao na mnoge engine implementacije.
-
"Physically Based Sky, Atmosphere and Cloud Rendering in Frostbite" -- S. Hillaire (2016) Detaljan pregled volumetricke atmosfere i oblaka u Frostbite engineu.
-
"The Real-time Volumetric Cloudscapes of Horizon: Zero Dawn" -- A. Schneider, N. Vos (2017, SIGGRAPH) Detaljniji nastavak rada iz 2015. sa vise implementacionih detalja.
UE5 dokumentacija i tutoriali
-
Unreal Engine dokumentacija: Exponential Height Fog
docs.unrealengine.com-- zvanicna dokumentacija sa svim parametrima. -
Unreal Engine dokumentacija: Volumetric Fog Opisuje froxel grid, temporal reprojection, i console komande.
-
Unreal Engine dokumentacija: Sky Atmosphere Detaljno objasnjenje svih parametara Sky Atmosphere actora.
-
Unreal Engine dokumentacija: Volumetric Clouds Vodic za podesavanje volumetrickih oblaka sa primer materijalima.
Knjige
-
"Physically Based Rendering: From Theory to Implementation" -- M. Pharr, W. Jakob, G. Humphreys Poglavlja o participating media daju odlicnu teorijsku osnovu.
-
"Real-Time Rendering" -- T. Akenine-Moller, E. Haines, N. Hoffman Poglavlje o volumetrickom renderingu pokriva sve od teorije do prakticnih tehnika.
27.13 Unakrsne reference ka drugim poglavljima
-
Poglavlje 10: Rasejanje svetlosti i subsurface efekti -- Beer-Lambert zakon koji koristimo za oblake i maglu je isti princip koji se koristi za subsurface scattering kozhe i drugih poluprozirnih materijala. Ako zelite da razumete kako svetlost prolazi kroz materijale, pogledajte Poglavlje 10.
-
Poglavlje 15: Post-Processing efekti -- Bloom efekat koji pojacava svetlosne snopove, kao i post-process light shafts (radial blur god rays), detaljno su pokriveni u Poglavlju 15. Volumetricki fog i post-process bloom se dopunjuju za maksimalan vizuelni efekat.
-
Poglavlje 20: Noise funkcije -- Perlin noise, Worley noise, i njihove kombinacije koje koristimo za oblike oblaka i heterogenu maglu su detaljno objasnjeni u Poglavlju 20. Tamo cete naci matematicku osnovu i prakticne implementacije svih noise algoritama koje koristimo u cloud materijalima.
Rezime poglavlja
U ovom poglavlju smo prosli kroz kompletnu teoriju i praksu volumetrickih efekata u Unreal Engine 5:
-
Teorija participating media -- razumeli smo cetiri fundamentalna procesa (apsorpcija, out-scattering, in-scattering, emisija) i kako se opisuju matematicki.
-
Phase functions -- naucili smo o Henyey-Greenstein funkciji i kako parametar g kontrolise forward vs. backward scattering, sto direktno utice na izgled magle i oblaka.
-
Tipovi magle -- od jednostavne konstantne magle, preko exponential height foga (UE5-ov primarni sistem), do lokalnih fog volumena.
-
Volumetricki fog -- detaljno smo razumeli froxel grid, pipeline renderovanja, temporal reprojection, i kontrolu gustine. Ovo je centralni fog sistem u UE5.
-
Atmosfersko rasejanje -- Rayleigh i Mie rasejanje, Sky Atmosphere sistem, multiple scattering, i promena doba dana.
-
God rays -- fizika iza svetlosnih snopova i dve metode renderovanja u UE5 (volumetricki fog vs. post-process).
-
Volumetricki oblaci -- ray marching, noise-bazirani oblici, Beer-Lambert i powder efekat za osvetljenje, performansne optimizacije.
-
Performanse -- konkretne smernice za budgetiranje i optimizaciju svih volumetrickih efekata.
Volumetricki efekti su ono sto pretvara "renderovanu kutiju" u ziv, disajuci svet. Magla daje dubinu, svetlosni snopovi daju magiju, oblaci daju velicinu neba, a atmosfersko rasejanje daje osecaj da se nalazite na pravoj planeti. Koristite ove alate mudro -- balans izmedju vizuelnog kvaliteta i performansi je kljucan, ali kada pogodite taj balans, rezultati su spektakularni.
U sledecem poglavlju cemo istraziti jos jedan vazan aspekt vizuelnog kvaliteta -- rad sa bojom i color grading u UE5. Vidimo se tamo!
Kraj Poglavlja 27