Poglavlje 27: Volumetricki Efekti

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:

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:

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:

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:

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:

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.


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:

Mane:

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:

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:

Lagana izmaglica na otvorenom terenu:

Gusti sumski pod:

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:

  1. Prizemna magla + visinska izmaglica: Prvi sloj sa visokim falloff (magla samo pri tlu), drugi sloj sa niskim falloff i malom gustinom (lagana izmaglica svuda)
  2. 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:

27.2.4 Lokalna magla (Local Fog Volumes)

Pored globalnog foga, UE5 podrzava i lokalne volumene magle kroz razlicite mehanizme:

  1. 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
  2. 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:

Za svaki froxel, sistem racuna:

  1. Gustinu medijuma (fog density) u toj celiji
  2. In-scattered light -- koliko svetlosti se rasejava ka kameri iz te celije, od svakog svetlosnog izvora
  3. 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:

Korak 2: Light Injection

Za svaki svetlosni izvor u sceni koji doprinosi volumetrickom fogu:

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:

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:

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:

  1. Dodajte Exponential Height Fog actor u scenu (ako vec nije dodat)
  2. Ukljucite "Volumetric Fog" checkbox na tom actoru
  3. 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):

Lokalno (preko Volume materijala):

Primer Volume materijala za lokalizovanu maglu:

  1. Kreirajte novi materijal
  2. U Details panelu, postavite Material Domain na Volume
  3. Postavite Blend Mode na Additive
  4. Koristite Extinction output za gustinu
  5. Koristite Albedo output za boju rasejanja
  6. 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):

Point Light:

Spot Light:

Rect Light (pravougaoni svetlosni izvor):

Sky Light:

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:

  1. U frejmu N, volumetricki fog se renderuje normalno
  2. U frejmu N+1, rezultat iz frejma N se reprojektuje u novi view (kompenzujuci se za pokret kamere)
  3. Novi rezultat se blenduje sa reprojektovanim starim -- tipicno oko 90% stari podatak, 10% novi
  4. Tokom vremena, informacije se akumuliraju i sum se smanjuje

Prednosti:

Mane:

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:

Posledice u renderingu:

  1. 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.

  2. 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.

  3. 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:

Kljucne razlike od Rayleigh rasejanja:

  1. Manje zavisi od talasne duzine -- sve boje se rasejaju priblizno jednako, sto je razlog zasto su oblaci i izmaglica beli ili sivi (ne plavi).

  2. Izrazito forward scattering -- Mie rasejanje je pretezno usmereno napred (u pravcu kretanja svetlosti). Ovo stvara svetli oreol oko sunca kada gledate kroz izmaglicu.

  3. 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:

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:

  1. Dodajte Sky Atmosphere actor (ili komponentu) u scenu
  2. Obicno se koristi zajedno sa Directional Light (sunce) i Sky Light
  3. Opcionalno, dodajte Volumetric Cloud actor za oblake

Kljucni parametri Sky Atmosphere:

Transform sekcija:

Rayleigh sekcija:

Mie sekcija:

Absorption sekcija:

Art Direction sekcija:

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:

  1. Precompute-uje LUT (Look-Up Table) za multiple scattering
  2. Uzima u obzir energiju koja se dobija od viseg reda rasejanja
  3. 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:

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:

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:

  1. Sunce (ili drugi jak svetlosni izvor) emituje svetlost
  2. Neki objekti (drvece, zgrade, oblaci) blokiraju deo svetlosti -- stvarajuci senke
  3. Gde svetlost prolazi (izmedju prepreka), osvetljava cestice u vazduhu (prasinu, vlagu, maglu)
  4. Te cestica rasejaju deo svetlosti ka vasem oku (in-scattering)
  5. 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:

  1. Ukljucite Volumetric Fog na Exponential Height Fog actoru
  2. Obezbedite da Directional Light ima ukljucene Dynamic Shadows (Cascaded Shadow Maps ili Virtual Shadow Maps)
  3. Podignite Volumetric Scattering Intensity na Directional Light-u (pocnite sa 1.0, povecajte po potrebi)
  4. Dodajte dovoljno gustine medijuma (Fog Density, Extinction Scale)
  5. Postavite objekte koji blokiraju svetlost (drvece, prozorske ramove, itd.)

Prednosti:

Mane:

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:

  1. Engine identifikuje piksele koji su izlozeni jakom svetlosnom izvoru (obicno suncu)
  2. Primenjuje radial blur -- razmazivanje piksela radijalno od pozicije svetlosnog izvora na ekranu
  3. 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:

Mane:

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

  1. Senke su kljucne. Bez kvalitetnih senki, nema vidljivih snopova. Uverite se da shadowmaps imaju dovoljnu rezoluciju (vidi VSM -- Virtual Shadow Maps u UE5).

  2. 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.

  3. Gustina medijuma. Previse magle daje uniformno belo platno, premalo ne daje vidljive snopove. Nadite balans.

  4. 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.

  5. 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:

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:

Korak 2: Vremenski tip oblaka (Weather Map)

2D tekstura (weather map) kontrolise distribuciju oblaka po horizontalnoj ravni. Svaki kanal moze kontrolisati:

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:

  1. Forward scattering: HG phase function sa visokim g daje jak forward scattering na ivicama oblaka
  2. Tanka ivica: Na ivicama je oblak tanak, pa vise svetlosti prolazi
  3. 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:

  1. Dodajte Volumetric Cloud actor u scenu
  2. Kreirajte ili dodelite Volume Cloud materijal (Material Domain = Volume)
  3. 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:

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:

  1. Pomeranje noise koordinata tokom vremena -- daje efekat kretanja oblaka vetrom
  2. Animacija weather mape -- menja raspored oblaka
  3. 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:

  1. Ray marching sa mnogo uzoraka -- tipicno 64-128 uzoraka po pikselu
  2. Sekundarni ray march ka svetlosti -- dodatnih 6-12 uzoraka za svaki primarni uzorak
  3. 3D noise uzorkovanje -- visestruko uzorkovanje 3D tekstura za gustinu
  4. Veliki pokriveni deo ekrana -- oblaci cesto pokrivaju velik deo neba

Optimizacione strategije:

LOD za oblake (Level of Detail):

Temporal Reprojection:

Conservative Density za Empty Space Skipping:

Rezolucija renderovanja:

Practicni budgeting:


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:

  1. Fog ispred stakla
  2. Staklo sa svojom transparentnoshcu
  3. Fog iza stakla
  4. 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:

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:

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:

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:

Oblaci:

Atmosfera:

27.8.4 Profiling volumetrickih efekata

Za identifikaciju uskih grla, koristite UE5 profiling alate:

GPU Profiler (stat gpu):

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

  1. Kreirajte novu scenu sa terenom pokrivenim stablima
  2. Dodajte Directional Light (sunce) sa niskim uglom (10-20 stepeni iznad horizonta) za jutarnje/vecernje svetlo
  3. Dodajte Sky Light sa Sky Atmosphere za ambijentno osvetljenje
  4. Dodajte Sky Atmosphere actor

Korak 2: Magla

  1. Dodajte Exponential Height Fog actor
  2. 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

  1. 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
  2. Na Directional Light-u:

    • Volumetric Scattering Intensity: 2.0 (pojacano za dramaticne snopove)
    • Ukljucite Cast Shadows i koristite Virtual Shadow Maps za kvalitetne senke
  3. Stabla ce automatski blokirati svetlost i stvoriti vidljive snopove kroz maglu!

Korak 4: Lokalna magla u udolinama

  1. Kreirajte Volume materijal sa noise-baziranom gustinom
  2. Postavite Box volume actore u udoline terena
  3. Dodelite Volume materijal
  4. Podesavajte gustinu i fadeout na ivicama

Korak 5: Oblaci

  1. Dodajte Volumetric Cloud actor
  2. Koristite UE5-ov default cloud materijal ili kreirajte prilagodjen
  3. Podesavanja:
    • Layer Bottom Altitude: 2.0 km
    • Layer Height: 3.0 km
  4. Animirajte offset u materijalu za blago kretanje oblaka

Korak 6: Atmosfera

  1. 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:

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:

Greska 3: Blocky/pikselizovani fog

Problem: Volumetricki fog izgleda blokasto, sa vidljivim "stepenicama."

Resenje:

Greska 4: Ghosting pri brzom kretanju

Problem: Fog "zaostaje" za kamerom pri brzom kretanju, vidljivi su ghosting artefakti.

Resenje:

Greska 5: Oblaci su previse skupi

Problem: Volumetricki oblaci trose 5+ ms GPU vremena.

Resenje:

Greska 6: Fog ne utice na transparentne objekte

Problem: Transparentni objekti (staklo, voda, particije) ne primaju fog.

Resenje:


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

  1. "Precomputed Atmospheric Scattering" -- E. Bruneton, F. Neyret (2008) Osnova za vecinu modernih atmospheric scattering implementacija, ukljucujuci UE5.

  2. "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!

  3. "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.

  4. "Physically Based Sky, Atmosphere and Cloud Rendering in Frostbite" -- S. Hillaire (2016) Detaljan pregled volumetricke atmosfere i oblaka u Frostbite engineu.

  5. "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

  1. Unreal Engine dokumentacija: Exponential Height Fog docs.unrealengine.com -- zvanicna dokumentacija sa svim parametrima.

  2. Unreal Engine dokumentacija: Volumetric Fog Opisuje froxel grid, temporal reprojection, i console komande.

  3. Unreal Engine dokumentacija: Sky Atmosphere Detaljno objasnjenje svih parametara Sky Atmosphere actora.

  4. Unreal Engine dokumentacija: Volumetric Clouds Vodic za podesavanje volumetrickih oblaka sa primer materijalima.

Knjige

  1. "Physically Based Rendering: From Theory to Implementation" -- M. Pharr, W. Jakob, G. Humphreys Poglavlja o participating media daju odlicnu teorijsku osnovu.

  2. "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


Rezime poglavlja

U ovom poglavlju smo prosli kroz kompletnu teoriju i praksu volumetrickih efekata u Unreal Engine 5:

  1. Teorija participating media -- razumeli smo cetiri fundamentalna procesa (apsorpcija, out-scattering, in-scattering, emisija) i kako se opisuju matematicki.

  2. 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.

  3. Tipovi magle -- od jednostavne konstantne magle, preko exponential height foga (UE5-ov primarni sistem), do lokalnih fog volumena.

  4. Volumetricki fog -- detaljno smo razumeli froxel grid, pipeline renderovanja, temporal reprojection, i kontrolu gustine. Ovo je centralni fog sistem u UE5.

  5. Atmosfersko rasejanje -- Rayleigh i Mie rasejanje, Sky Atmosphere sistem, multiple scattering, i promena doba dana.

  6. God rays -- fizika iza svetlosnih snopova i dve metode renderovanja u UE5 (volumetricki fog vs. post-process).

  7. Volumetricki oblaci -- ray marching, noise-bazirani oblici, Beer-Lambert i powder efekat za osvetljenje, performansne optimizacije.

  8. 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