Poglavlje 19: Teksturne tehnike u materijalima

Poglavlje 19: Teksturne tehnike u materijalima


"Geometrija ti daje oblik. Teksture ti daju dusu. Ali prave teksturne tehnike -- one ti daju iluziju koja vara i najiskusnije oko."


Dosli smo do poglavlja koje ce, bez preterivanja, potpuno promeniti nacin na koji razmisljas o povrsinama u Unreal Engine 5. Do sada smo naucili sta su teksture (Poglavlje 05), kako UV koordinate rade (Poglavlje 04), sta su normale i zasto su bitne (Poglavlje 03), i kako PBR materijali koriste sve te informacije da stvore uverljiv izgled (Poglavlje 11). Sada cemo zaroniti duboko u konkretne tehnike koje profesionalni environment artisti i technical artisti koriste svaki dan.

Ovo poglavlje pokriva sedam velikih tema:

  1. Normal Mapping -- lazna geometrija koju svako koristi
  2. Parallax Mapping -- dubina bez poligona
  3. Displacement Mapping -- prava geometrija iz teksture
  4. Detail Textures -- resenje za blizinu kamere
  5. Texture Blending -- kako spojiti razlicite materijale
  6. Triplanar Mapping -- teksturiranje bez UV-a
  7. Decals -- projektovanje materijala na povrsine

Svaka od ovih tehnika resava specificnu vrstu problema, i profesionalni projekti ih kombinuju sve zajedno. Krenimo.


19.1 Normal Mapping

19.1.1 Sta je Normal Map i zasto postoji

Zamisli da pravis zid od cigle. Ako bi svaku ciglu, svaki deo maltera, svaku pukotinu modelovao kao pravu geometriju, imao bi mesh sa milionima poligona -- za jedan obican zid. To je ocito neodrzivo u real-time renderingu.

Normal map resava ovaj problem tako sto laze osvetljenju. Umesto da menja geometriju, normal map menja pravac normale na svakoj tacki povrsine. Posto osvetljenje zavisi od pravca normale (kao sto smo detaljno objasnili u Poglavlju 03), promena normale menja i to kako se svetlost odbija -- i odjednom ravna povrsina izgleda kao da ima udubljenja i izbocine.

Normal map je RGB tekstura gde:

Vrednosti su mapirane iz opsega [-1, 1] u [0, 255] (za 8-bitnu teksturu), pa neutrana normala (0, 0, 1) -- koja znaci "pravo nagore od povrsine" -- postaje (128, 128, 255), sto je ona prepoznatljiva ljubicasto-plava boja koju vidis kad otvoris normal map.

19.1.2 Tangent Space vs World Space Normals

Postoje dva fundamentalno razlicita pristupa kodiranju normala u mapi:

Tangent Space Normal Maps

Ovo je daleko najcesci tip i onaj koji ces koristiti u 99% slucajeva u UE5.

Tangent space normal map kodira normale relativno u odnosu na povrsinu mesha. To znaci da je svaka normala izrazena u lokalnom koordinatnom sistemu koji se sastoji od tri vektora:

Ova tri vektora formiraju TBN matricu (o kojoj cemo detaljnije za minut).

Prednosti tangent space normal mapa:

Zato su tangent space normal mape standardni tip koji UE5 ocekuje na svom Normal ulazu materijala.

World Space Normal Maps

World space normal map kodira normale u globalnom koordinatnom sistemu scene. Plavi kanal uvek znaci "nagore u svetu", crveni "desno u svetu", zeleni "napred u svetu".

Kada otvoris world space normal map, videces raznolike boje -- crvene, zelene, plave, zute -- jer razliciti delovi povrsine gledaju u razlicitim pravcima u globalnom prostoru.

Prednosti world space normal mapa:

Mane:

U praksi u UE5, world space normal mape se koriste uglavnom za teren i za specificne efekte gde su tangent space mape problematicne. Za vecinu asset-a, koristices tangent space.

19.1.3 TBN matrica -- kako zapravo radi

Ovo je deo koji mnogi preskace, ali razumevanje TBN matrice ti daje moc da debugujes probleme sa normal mapama koje bi inace bile misteriozne.

TBN matrica je 3x3 matrica koja transformise normale iz tangent space-a u world space (ili obrnuto). Svaki vertex mesha ima tri vektora:

T = tangent vector (pravac U koordinate)
B = bitangent vector (pravac V koordinate)
N = vertex normal (normala povrsine)

Matrica izgleda ovako:

| Tx  Bx  Nx |
| Ty  By  Ny |
| Tz  Bz  Nz |

Kada shadder procita vrednost iz tangent space normal mape (recimo (0.5, 0.3, 0.8) nakon remapiranja u [-1,1] opseg), on tu vrednost pomnozi sa TBN matricom da dobije konacnu normalu u world space-u, koju zatim koristi za osvetljenje.

worldNormal = tangentNormal.x * T + tangentNormal.y * B + tangentNormal.z * N

Ovo je razlog zasto tangent space normal mape rade sa animacijom -- T, B, i N vektori se transformisu zajedno sa meshom, pa se i rezultujuca normala automatski azurira.

Bitan detalj: UE5 interno racuna bitangent u vertex shaderu koristeci cross product tangenta i normale, plus sign vrednost sacuvanu u W komponenti tangent vektora:

B = cross(N, T) * T.w

Ta T.w vrednost (koja je +1 ili -1) odredjuje "handedness" tangent space-a i kljucna je za ispravan rad sa mirrored UV-om (o cemu ce biti vise reci u sekciji o artefaktima).

19.1.4 Baking normala -- od high-poly do low-poly

Proces kreiranja normal mapa iz visoko-detaljnog modela naziva se baking i to je jedan od najvaznijih workflow-ova u game art produkciji.

Koncept

Imas dva mesha:

  1. High-poly mesh -- milioni poligona, svi detalji su prava geometrija (sculpt u ZBrush-u, na primer)
  2. Low-poly mesh -- optimizovani game-ready mesh, obicno nekoliko hiljada poligona

Baking proces radi sledece:

  1. Za svaki piksel na UV mapi low-poly mesha:
    • Ispali zrak (ray) od povrsine low-poly mesha u pravcu njegove normale
    • Pronadji gde taj zrak pogadja high-poly mesh
    • Zapisi normalu high-poly mesha u tom pogotku
    • Transformisi tu normalu u tangent space low-poly mesha
    • Sacuvaj rezultat kao piksel u normal mapi

Alati za baking

Najcesci alati su:

Cage

Vecina alata koristi koncept cage mesha -- to je blago "naduvana" verzija low-poly mesha koja definise maksimalnu udaljenost za ray casting. Cage spreclava da zraci promaashe high-poly mesh ili pogode pogresne delove geometrije.

Pravilno podesavanje cage-a je cesto razlika izmedju dobre i lose normal mape. Previise mali cage ce propustiti detalje; preveliki ce uhvatiti pogresnu geometriju.

Synced tangent basis

Kritican detalj koji mnogi pocetnici ne znaju: tangent basis koji koristi tvoj baking alat mora da se poklapa sa tangent basis-om koji koristi tvoj engine.

UE5 koristi MikkTSpace tangent basis (razvijen od strane Morten Mikkelsen-a). Kad bake-ujes normal mape za UE5, uvek:

  1. Exportuj low-poly mesh sa MikkTSpace tangent-ima
  2. U alatu za baking izaberi MikkTSpace kao tangent basis
  3. Importuj mesh u UE5 sa opcijom "Use MikkTSpace Tangent" ukljucenom

Ako se tangent basis ne poklapa, dobices suptilne ali iritantne greske u osvetljenju -- blagi "lumps" ili "dents" koji ne bi trebalo da budu tu.

19.1.5 Cesti artefakti i kako ih resiti

Problem sa mirrored UV

Ovo je jedan od najcescih problema sa normal mapama i vredi ga detaljno objasniti.

Kada modelujes simetrican objekat (recimo ljudsko lice), prirodno je da UV-mapiras samo jednu polovinu i onda mirror-ujes UV drugu polovinu, tako da obe strane koriste istu teksturu. Ovo stedi teksturni prostor i memoriju.

Problem nastaje na seamuu izmedju originalne i mirror-ovane strane. Zato sto je UV mirror-ovan, tangent vektor na jednoj strani gleda u suprotnom pravcu od tangenta na drugoj strani. Ako normal mapa nije svesna ove promene, dobices vidljiv seam -- liniju gde se osvetljenje naglo menja.

Resenja:

  1. Ispravan sign u T.w -- Kao sto smo pomenuli, UE5 koristi T.w da kodira handedness. Mesh exporter mora pravilno da postavi ovu vrednost. Vecina modernih alata to radi automatski.

  2. Seam na sredini -- Postavi UV seam tacno na liniji simetrije (obicno sredina lica, centar tela). Ne postavljaj seam na vidljivom mestu gde ce artefakt biti uocljiv.

  3. Padding u teksturi -- Obezbedi dovoljno padding-a (minimum 4-8 piksela) oko UV ostrvaca da se spreci "bleeding" boja sa susednog ostrva.

  4. Bake sa averaged normals na seamu -- Mnogi alati imaju opciju da koriste averaged (usrednjene) vertex normale na seamu, sto pomaze da se tranzicija izgladi.

Incorrect tangent basis

Simptomi:

Resenje: Proveri da li tangent basis u baking alatu odgovara UE5 (MikkTSpace). Reimportuj mesh sa ispravnim podesavanjima.

Seams na UV ostrvacima

Cak i sa ispravnim tangent basis-om, mozes videti blage seam-ove na ivicama UV ostrva. Resenja:

19.1.6 BC5 format -- zasto ga koristiti za normal mape

Kada uvezes normal map u UE5, engine ce je podrazumevano kompresovati. Za normal mape, BC5 (ponekad nazivan "BC5 / 3Dc" ili u UE5 interfejsu "Normalmap") je daleko najbolji izbor. Evo zasto:

Kako BC5 radi

BC5 je blok kompresioni format koji cuva samo dva kanala (R i G) sa visokom preciznoscu. Treci kanal (B, tj. Z komponenta normale) se rekonstruise u shaderu iz preostala dva kanala koristeci formulu:

Z = sqrt(1 - X*X - Y*Y)

Ovo radi zato sto su normale uvek normalizovane (duzina vektora = 1), pa ako znas X i Y, mozes izracunati Z (uz pretpostavku da je Z pozitivan, sto je uvek tacno u tangent space-u).

Zasto je BC5 bolji od BC1/DXT1 ili BC3/DXT5

U UE5, kada importujes teksturu i postavis Compression Settings na Normalmap, engine automatski koristi BC5 format. Uvek koristi ovu opciju za normal mape. Nemoj ih ostavljati kao Default kompresiju.

Velicina na disku:

Format Bajta po pikselu Kvalitet za normal mape
BC1 0.5 Los
BC3 1.0 Srednji
BC5 1.0 Odlican
Nekompresovano 4.0+ Savrsen (ali preskupo)

19.1.7 Reoriented Normal Mapping (RNM) -- blendovanje normal mapa

Jedna od najcescih potreba u materijalima je blendovanje dve normal mape -- na primer, imaas osnovu cigle sa velikom normal mapom za oblik cigle, i detail normal map sa sitnom teksturom povrsine cigle.

Zasto prosto "lerp" ne radi

Naivan pristup bi bio da linearno interpoliras dve normal mape:

result = lerp(normal1, normal2, alpha)
normalize(result)

Ovo daje pogresne rezultate. Linearna interpolacija normala ne cuva njihovu orjentaciju pravilno -- rezultujuce normale ce biti "spljoostene" ka (0, 0, 1) i gubice detalje obe mape.

Metoda "Whiteout Blending"

Bolji pristup, poznat kao "Whiteout Blending" (ili "partial derivative blending"):

result.xy = normal1.xy * normal2.z + normal2.xy * normal1.z
result.z = normal1.z * normal2.z
normalize(result)

Ovo daje mnogo bolje rezultate jer pravilno kombinuje "nagibe" obe mape. UE5 Material Editor ima cvor BlendAngleCorrectedNormals koji koristi upravo ovu metodu.

Reoriented Normal Mapping (RNM)

Najsavremeniji pristup, koji daje fizicki najkorektnije rezultate, je Reoriented Normal Mapping. Ovaj algoritam, koji su razvili Colin Barre-Brisebois i Stephen Hill, radi tako sto:

  1. Konstruise rotacionu matricu koja transformise baznu normalu (0, 0, 1) u normalu iz prve mape
  2. Primeni tu istu rotaciju na normalu iz druge mape

U kodu (HLSL):

float3 ReorientedNormalMapping(float3 n1, float3 n2)
{
    float3 t = n1 + float3(0, 0, 1);
    float3 u = n2 * float3(-1, -1, 1);
    return normalize(t * dot(t, u) - u * t.z);
}

RNM daje najbolje rezultate jer:

U UE5 Material Editoru, ako zelis da koristis RNM, mozes ga implementirati kao Custom Expression ili Material Function. Za vecinu slucajeva, medjutim, BlendAngleCorrectedNormals cvor daje dovoljno dobre rezultate.

Prakticni savet

Kada blendujess normal mape u materijalu:

  1. Drzi baznu (makro) normal map na prvom ulazu
  2. Drzi detail (mikro) normal map na drugom ulazu
  3. Koristi BlendAngleCorrectedNormals cvor
  4. Rezultat prikljuci na Normal ulaz materijala
[Base Normal Map] ----\
                       >-- [BlendAngleCorrectedNormals] --> [Normal]
[Detail Normal Map] --/

19.2 Parallax Mapping

19.2.1 Motivacija -- dubina bez geometrije

Normal mapping menja samo osvetljenje -- silueta objekta ostaje potpuno ravna. Ako pogledas ciglu sa normal map-om pod ostrrim uglom, videces da su cigle "nalepljene" na ravnu povrsinu. Nema stvarne dubine, nema okluzije, malter izmedju cigala ne "tone" u zid.

Parallax mapping je familija tehnika koje simuliraju dubinu pomeranjem UV koordinata na osnovu height mape i ugla posmatranja. Rezultat je vizuelni utisak dubine koji je mnogo uverljiviji od samog normal mapping-a, a da pritom ne zahteva dodatnu geometriju.

19.2.2 Basic Parallax Mapping (Simple Offset)

Najjednostavnija forma parallax mapping-a radi ovako:

  1. Imamo height map -- grayscale tekstura gde belo = visoko, crno = nisko
  2. Racunamo view direction u tangent space-u
  3. Pomeramo UV koordinate u pravcu suprotnom od view direction-a, skalirane visinom

Formalno:

heightValue = sample(heightMap, uv)
offset = viewDir.xy / viewDir.z * heightValue * scale
newUV = uv - offset

Zatim koristimo newUV umesto originalnih uv za sve ostale texture sample-ove (albedo, normal, roughness, itd).

Intuicija: Zamisli da gledas pod uglom na povrsinu sa udubljenjem. Dno udubljenja bi trebalo da bude vidljivo na malo drugom mestu nego sto bi bilo da je povrsina ravna. Pomeranjem UV-a u smeru suprotnom od pogleda, simuliramo ovaj efekat.

Problemi sa basic parallax-om

Uprkos ogranicenjima, basic parallax je izuzetno jeftin (samo jedan dodatni texture sample) i moze dati pristojne rezultate za suptilne efekte dubine.

U UE5 Material Editoru, mozes implementirati basic parallax ovako:

  1. Dodaj Camera Vector cvor (daje view direction u world space)
  2. Transformisi ga u tangent space koristeci Transform Vector cvor
  3. Izracunaj offset koristeci visinu iz height mape
  4. Dodaj offset na UV koristeci Add cvor
  5. Koristi nove UV za sve texture sample-ove

19.2.3 Steep Parallax Mapping

Steep parallax mapping resava mnoge probleme basic metode koristeci iterativni pristup:

  1. Podeli raspon visine u N jednake slojeve (layers)
  2. Kreni od vrha (kamera) i kraci niz height field u koracima
  3. Na svakom koraku, uporedi trenutnu dubinu sa visinom iz height mape
  4. Kada nadjes korak gde si "zaronijo" ispod height field-a, stani -- to je priblizna tacka preseka
// Pseudo-kod za steep parallax
layerDepth = 1.0 / numLayers
currentDepth = 0
currentUV = startUV

for (i = 0; i < numLayers; i++)
{
    heightFromMap = sample(heightMap, currentUV)
    if (currentDepth > heightFromMap)
        break;  // Nasli smo presek
    
    currentUV += uvStep
    currentDepth += layerDepth
}

Vise slojeva = bolji rezultat, ali i vise texture sample-ova. Tipicno se koristi 8-32 sloja, cesto vise pod ostrijim uglovima posmatranja (gde je greska veca).

Banding artefakt: Posto se koristi diskretan broj slojeva, moze se videti "stepenicasti" efekat na ivicama. Ovo se resava linearnom interpolacijom izmedju poslednja dva koraka (gde se presao iz "iznad" u "ispod" height field-a). Ova varijanta se naziva Parallax Mapping with Relief Mapping ili jednostavno relief mapping.

19.2.4 Parallax Occlusion Mapping (POM)

POM je najnaprednija varijanta parallax mapping-a i ona koja je najcesace koriscena u profesionalnim projektima. UE5 ima ugradjeni Parallax Occlusion Mapping cvor u Material Editoru koji sve ovo implementira za tebe.

Kako POM radi

POM kombinuje steep parallax sa binarnom pretragom za preciznije nalazenje preseka:

  1. Ray Marching faza: Isto kao steep parallax -- koraca kroz height field u diskretnim koracima dok ne pronadje presek
  2. Refinement faza: Kada nadje priblizni presek, vrsi 3-5 koraka binarne pretrage izmedju poslednja dva linearna koraka za precizno nalazenje tacke preseka
  3. UV Offset: Racuna finalne UV koordinate na osnovu tacke preseka

Self-shadowing u POM

Jedan od najimpresivnijih efekata POM-a je self-shadowing -- sposobnost da visi delovi height field-a bacaju senku na nize delove.

Princip rada:

  1. Nakon sto nadjes tacku na povrsini (kroz ray march od kamere), ispali drugi zrak od te tacke ka svetlu
  2. Ako taj zrak pogodi height field pre nego sto izadje, tacka je u senci
  3. Rezultat koristi za atenuaciju direktnog osvetljenja

Self-shadowing dramaticno poboljsava uverljivost, ali dupllira broj texture sample-ova jer zahteva drugi ray march.

UE5 Parallax Occlusion Mapping cvor

U UE5 Material Editoru, POM cvor (ParallaxOcclusionMapping) ima sledece ulaze:

Izlazi:

Vazan detalj: Pixel Depth Offset je veoma koristan jer bez njega POM geometrija nece pravilno "ulaziti" u drugu geometriju na ivicama -- videces ostar rez gde se mesh zavrsava. Sa PDO, dubina u Z-bufferu se koriguje da prati virtualnu POM povrsinu.

Performanse POM-a

POM je skup efekat. Evo zasto:

Prakticna pravila za performanse:

Parametar Niska cena Srednja cena Visoka cena
Min Steps 4 8 16
Max Steps 16 32 64
Self-shadow Ne -- Da
Tipicna upotreba Podovi daleko od kamere Zidovi srednje udaljenosti Hero asset-i blizu kamere

Kada koristiti POM umesto displacement-a

POM je bolji izbor kada:

Displacement je bolji kada:


19.3 Displacement Mapping

19.3.1 Prava geometrija iz teksture

Za razliku od normal mapping-a (koji samo menja osvetljenje) i parallax mapping-a (koji samo pomera UV-e), displacement mapping zaista pomera vertekse mesha na osnovu height mape. To znaci da dobijas:

Ali ovo ima cenu -- da bi pomerao vertekse, moras imati dovoljno verteksa. Mesh sa 4 verteksa (jedan quad) ne moze prikazati detaljan displacement jer nema sta da se pomera.

19.3.2 Tessellation u UE5

Tradicionalno, displacement mapping se koristio sa hardverskom teselacijom -- GPU bi dinamicki delio poligone na manje delove pre displacement-a.

Vazna napomena: UE5 je ukinuo tradicionalnu hardversku teselaciju u korist Nanite-a. Stari tessellation materijali iz UE4 nece raditi u UE5 sa Lumen/Nanite renderingom.

Medjutim, postoje situacije gde jos uvek mozes koristiti displacement:

Opcija 1: World Position Offset

U UE5 materijalu, World Position Offset ulaz na Material node-u ti dozvoljava da pomeris vertekse u world space-u. Ovo se racuna u vertex shaderu.

Pristup:

  1. Sample-uj height map u vertex shaderu (koristeci UV koordinate)
  2. Pomnozi visinu sa normalom povrsine
  3. Prikaci rezultat na World Position Offset
[Height Map (VS)] --> [Multiply] --> [World Position Offset]
                         ^
[Vertex Normal] --------/

Ogranicenje: Ovo radi samo na postojecim verteksima. Ako mesh nema dovoljno poligona, displacement ce biti grub i "poligonalan". Resenje je da mesh ima visok poly count, sto ponistava ideju o stednji geometrije.

Opcija 2: Nanite Displacement (UE 5.4+)

Unreal Engine 5.4 je uveo Nanite Tessellation koja kombinuje Nanite-ovu efikasnost sa displacement mapping-om. Ovo je revolucionarna funkcionalnost jer:

  1. Nanite dinamicki odredjuje koliko trougolova je potrebno na osnovu udaljenosti od kamere
  2. Displacement se primenjuje na teselirane trouglove
  3. Rezultat ulazi u Nanite-ov virtualni geometry pipeline za efikasan rendering

Da bi koristio Nanite displacement:

  1. Mesh mora biti Nanite-enabled (Settings > Enable Nanite u Static Mesh editoru)
  2. U materijalu, omoguci Displacement u Material Properties
  3. Prikaci height map na Displacement ulaz materijala
  4. Podesi Displacement Magnitude -- koliko se verteksi pomeraju (u Unreal jedinicama, tj. centimetrima)

Napomena: U vreme pisanja ovog teksta, Nanite displacement je relativno nova funkcionalnost i moze imati ogranicenja u nekim workflow-ovima. Proveravaj Release Notes za najnovije informacije.

19.3.3 Prakticna razmatranja

Height map kvalitet

Za displacement, height map mora biti visokog kvaliteta:

Kombinovanje displacement-a sa normal mapping-om

Cest workflow u profesionalnoj produkciji:

  1. Macro displacement -- krupni oblici (kameni blokovi, velika udubljenja) rade se sa displacement-om
  2. Micro detail -- sitni detalji (tekstura kamena, pukotice) rade se sa normal map-om

Ovo daje najbolji odnos kvaliteta i performansi -- displacement obezbjedjuje pravilnu siluetu i makro senke, a normal map dodaje sitne detalje osveetljenja.

Shadow casting

Jedna od najvecih prednosti displacement-a nad parallax-om je pravilno bacanje senki. Displaced geometrija:

Ovo je posebno vazno za terene i velike povrsine gde POM self-shadowing ne moze da zameni prave shadow map senke.

Correct silhouettes

Mozda najociglednija prednost displacement-a. Zamisli kamen:

19.3.4 Performanse displacement-a

Displacement mapping je najskuplja od svih tehnika u ovom poglavlju. Razlozi:

  1. Visok polygon count -- bilo da koristis pre-tessellated mesh ili runtime tessellation, broj poligona dramaticno raste
  2. Vertex shader cost -- displacement se racuna za svaki vertex, sto ukljucuje texture sample u vertex shaderu (sto je manje efikasno nego u pixel shaderu)
  3. Overdraw -- displaced geometrija moze izazvati vece overdraw jer se menja dubina piksela
  4. Shadow pass -- vise poligona znaci i skuplji shadow pass

Nanite znacajno ublazava ove probleme jer:

Uprkos ceni, displacement je gold standard za visoko-kvalitetne povrsine u filmskim i AAA produkcijama.


19.4 Detail Textures

19.4.1 Problem blizine kamere

Zamisli da imas teren sa teksturom zemlje. Na normalnoj udaljenosti izgleda sjajno -- boja je lepa, normal map daje utisak neravnina. Ali kada se kamera priblizi, tekstura pocinje da gubi detalje i postaje "muddy" -- pikseli postaju preveliki i vidi se da je to samo slika nalepljena na poligone.

Detail textures resavaju ovaj problem dodavanjem visoko-frekventnog detalja koji je tile-ovan na mnogo visem nivou od bazne teksture.

19.4.2 Kako detail textures rade

Princip je jednostavan:

  1. Imas baznu teksturu (albedo, normal) koja se tile-uje na normalnom nivou (recimo, jednom po metru)
  2. Imas detail teksturu koja se tile-uje na mnogo visem nivou (recimo, deset puta po metru)
  3. Blendujees ih tako da detail tekstura dodaje detalj bez da menja ukupni izgled

Detail Albedo

Za albedo, detail tekstura se obicno blenduje koristeci overlay ili multiply mod:

Overlay blending:

if (base < 0.5)
    result = 2 * base * detail
else
    result = 1 - 2 * (1 - base) * (1 - detail)

Multiply-then-double blending:

result = base * detail * 2

Druga metoda je jednostavnija i daje dobre rezultate. Kljucno je da je detail tekstura oko srednje vrednosti (0.5) -- svetlije oblasti dodaju svetle detalje, tamnije dodaju tamne detalje, ali ukupna svetlina bazne teksture se cuva.

U UE5 Material Editoru:

[Base Albedo (UV * 1)] ----\
                            >-- [Multiply] --> [Multiply by 2] --> [Base Color]
[Detail Albedo (UV * 10)] -/

Detail Normal Map

Za normale, koristimo vec pomenuti BlendAngleCorrectedNormals cvor:

[Base Normal (UV * 1)] ------\
                              >-- [BlendAngleCorrectedNormals] --> [Normal]
[Detail Normal (UV * 10)] ---/

Bazna normal mapa daje krupne oblike (cigle, kameni blokovi), dok detail normal mapa daje sitnu teksturu povrsine (hrapavost, pore, mikro-pukotice).

19.4.3 UV Scale razlike

Razlika u UV scale-u izmedju bazne i detail teksture je kljucna za efekat:

DetailUV = BaseUV * DetailTilingScale

Gde je DetailTilingScale parametar koji mozes podesavati u Material Instance-u.

19.4.4 Distance-based blending

Pametan trik je da detail teksture blendujees na osnovu udaljenosti od kamere:

Ovo ima dve prednosti:

  1. Eliminise tiling artefakte na velikoj udaljenosti -- detail tekstura se ne vidi dovoljno daleko da bi se repeticija primetila
  2. Stedi performanse -- na velikoj udaljenosti, detail texture sample-ovi se mogu preskociti

U UE5:

Distance = length(CameraPosition - WorldPosition)
DetailBlend = saturate((FadeDistance - Distance) / FadeRange)

FinalAlbedo = lerp(BaseAlbedo, BaseAlbedo * DetailAlbedo * 2, DetailBlend)

19.4.5 Prakticni workflow

  1. Kreiraj baznu teksturu -- ovo je tvoja glavna tekstura sa ukupnim izgledom materijala
  2. Kreiraj detail teksturu -- ovo je tileable tekstura sa sitnim detaljima
    • Detail albedo treba da bude oko srednje sivee (0.5) da ne bi menjao ukupnu boju
    • Detail normal treba da bude suptilan -- ako je prejak, izgubices makro oblike
  3. Podesi tiling -- eksperimentisi sa razlicitim scale vrednostima
  4. Dodaj distance fade -- da se izbeggne vidljiva repeticija na daljini
  5. Napravi Material Instance -- izlozi tiling scale i fade distance kao parametre

19.5 Texture Blending Techniques

19.5.1 Zasto nam treba blendovanje tekstura

U realnom svetu, materijali se retko zavrsavaju ostrrim ivicama. Sneg prekriva stene na planini, mahovinom obrasta kamen u sumi, pesak prelazi u travu na plazi. Da bismo reprodukovali ove prelaze u igrama, moramo da blendujemo razlicite teksture na istoj povrsini.

UE5 nudi vise nacina za blendovanje, od jednostavnih do izuzetno sofisticiranih.

19.5.2 Simple Lerp Blending

Najjednostavniji pristup -- linearna interpolacija dve teksture na osnovu mask-e:

result = lerp(textureA, textureB, mask)

Gde je mask vrednost od 0 do 1 (obicno iz vertex color-a, posebne teksture, ili proceduralnog izvora).

Problem: Rezultat izgleda lose. Prelaz je mekan, "muljevit" -- kao da su dva materijala prosto rastvorena jedan u drugom. U realnom svetu, sneg na kamenu ne izgleda kao poluprovidan sneg blendovan sa poluprovitdnim kamenom. Sneg lezi na vrhu kamena, sa ostrim prelazima po visini terena.

// Primer u UE5 Material Editoru
[Rock Albedo] ----\
                   >-- [Lerp (Alpha = Vertex Color R)] --> [Base Color]
[Snow Albedo] ----/

Lerp blending je koristan za:

Za sve ostalo, postoji bolji nacin.

19.5.3 Height-Based Blending

Height-based blending je tehnika koja koristi height mape oba materijala da odredi koji je "visi" i zato bi trebalo da bude vidljiv. Ovo proizvodi mnogo realisticnije prelaze.

Kako radi

Princip je elegantno jednostavan:

  1. Imas height map za svaki materijal
  2. Na svakom pikselu, poredis visine oba materijala
  3. Materijal sa vecom visinom "pobedjuje" i postaje vidljiv

Ali umesto hard cut-off-a, dodajes blend zonu za glatki prelaz:

float HeightBlend(float heightA, float heightB, float mask, float blendSharpness)
{
    float adjustedA = heightA + (1.0 - mask);  // Povecaj A gde mask kaze "A"
    float adjustedB = heightB + mask;            // Povecaj B gde mask kaze "B"
    
    float maxHeight = max(adjustedA, adjustedB);
    float threshold = maxHeight - blendSharpness;
    
    float weightA = max(adjustedA - threshold, 0);
    float weightB = max(adjustedB - threshold, 0);
    
    return weightB / (weightA + weightB);  // Normalizovan blend factor
}

Vizuelni rezultat

Razlika je dramaticna:

Za kamme obraslao mahovinom:

Blend Sharpness parametar

blendSharpness (ponekad nazivan "contrast" ili "hardness") kontrolise koliko je ostar prelaz:

19.5.4 Implementacija u UE5

Evo korak-po-korak kako da napravis height-based blending u UE5 Material Editoru:

  1. Kreiraj dve grupe tekstura: Za svaki materijal ti treba albedo, normal, roughness/metallic, i height map

  2. Dodaj blend mask: Ovo moze biti:

    • Vertex Color (najcesci pristup -- paintuj direktno na meshu)
    • Zasebna tekstura
    • World Position bazirani izvor (npr. visina u svetu za sneg)
  3. Izracunaj height-based blend factor:

// U Material Editoru koristeci math cvorove:

HeightA = [Rock Height Map]
HeightB = [Snow Height Map]
Mask = [Vertex Color R]

AdjustedA = HeightA + (1 - Mask)
AdjustedB = HeightB + Mask

MaxH = Max(AdjustedA, AdjustedB)
Threshold = MaxH - BlendSharpness

WeightA = Max(AdjustedA - Threshold, 0)
WeightB = Max(AdjustedB - Threshold, 0)

FinalBlend = WeightB / (WeightA + WeightB + 0.001)
// Dodajemo 0.001 da izbegnemo deljenje nulom
  1. Primeni blend factor na sve kanale:
FinalAlbedo = Lerp(RockAlbedo, SnowAlbedo, FinalBlend)
FinalNormal = BlendAngleCorrectedNormals(RockNormal, SnowNormal, FinalBlend)
FinalRoughness = Lerp(RockRoughness, SnowRoughness, FinalBlend)
  1. Material Instance parametri:

Izlozi kao parametre:

19.5.5 Vertex Color painting

UE5 ima ugradjeni alat za vertex color painting (Mesh Paint Mode). Ovaj alat ti dozvoljava da direktno "farbbas" vertex boje na mesh u editoru.

Prednosti:

Ogranicenja:

19.5.6 Napredne varijacije

Tri-materijal blending

Isti princip mozes prosiriti na tri ili vise materijala koristeci razlicite kanale vertex boja:

Height-based blending se racuna za svaki par materijala.

World-aligned blending

Za efekat poput sneg-a koji prekriva sve od gore, mozes koristiti world space normal kao mask:

SnowMask = saturate(dot(WorldNormal, float3(0, 0, 1)))
SnowMask = pow(SnowMask, SnowFalloff)  // Kontrolise koliko je sneg "ostar"

Ovo automatski stavlja sneg na svaku povrsinu koja gleda nagore, bez ikakvog rucnog paintovanja. Kombinovano sa height-based blending-om, daje izuzetno prirodan rezultat.

Macro variation

Cak i sa height-based blending-om, ponavljanje tekstura na velikoj povrsini moze biti ocigledno. Dodavanje macro variation teksture (velika, nisko-rezoluciona tekstura varijacije) pomaze:

MacroVariation = sample(macroVariationMap, worldUV * 0.01)  // Veoma mali tiling
BlendSharpness *= MacroVariation  // Varira ostrrinu prelaza

19.6 Triplanar Mapping

19.6.1 Problem sa UV koordinatama

U normalnim okolnostima, svaki mesh ima UV koordinate koje definisu kako se tekstura "obmotava" oko njega (detaljno objasnjeno u Poglavlju 04). Ali postoje situacije gde UV koordinate ne postoje, ne rade dobro, ili ih je nemoguce napraviti:

Triplanar mapping resava ove probleme tako sto potpuno zaobilazi UV koordinate i umesto toga projektuje teksture iz tri ortogonalne ose (X, Y, Z).

19.6.2 Kako triplanar mapping radi

Princip je sledeci:

  1. Tri projekcije: Za svaki piksel, uzmi tri uzorka teksture:

    • Sa X ose -- koristi YZ world koordinate kao UV
    • Sa Y ose -- koristi XZ world koordinate kao UV
    • Sa Z ose -- koristi XY world koordinate kao UV
  2. Blend na osnovu normale: Odredi koliko je povrsina okrenuta ka svakoj osi koristeci apsolutnu vrednost world space normale:

float3 blendWeights = abs(worldNormal);
blendWeights = normalize(blendWeights); // Normalizuj da suma bude 1
  1. Pomesaj tri uzorka:
float4 texX = sample(texture, worldPos.yz * tiling);
float4 texY = sample(texture, worldPos.xz * tiling);
float4 texZ = sample(texture, worldPos.xy * tiling);

float4 result = texX * blendWeights.x 
              + texY * blendWeights.y 
              + texZ * blendWeights.z;

Rezultat: Povrsina koja gleda nagore (pod, teren) koristi uglavnom Z projekciju. Vertikalni zid koji gleda na istok koristi uglavnom X projekciju. I tako dalje. Na kosim povrsinama, dve ili tri projekcije se blenduju, dajuci gladak prelaz.

19.6.3 Poboljsanja osnovnog pristupa

Sharpness kontrola

Bazni triplanar cesto daje previse mekan prelaz na ivicama. Dodavanje eksponenta (sharpness) pomaze:

blendWeights = pow(abs(worldNormal), sharpness);
blendWeights /= (blendWeights.x + blendWeights.y + blendWeights.z);

Sa sharpness = 1, prelaz je mekan. Sa sharpness = 4 ili vise, prelaz postaje ostriji i svaka projekcija dominira na svojoj strani.

Normal map u triplanar-u

Triplanar mapping sa normal mapama zahteva dodatni korak -- normale iz svake projekcije su u razlicitim koordinatnim sistemima i moraju se pravilno transformisati:

Za svaku projekciju:

  1. Procitaj normalu iz normal mape (tangent space)
  2. Reorjentisi je da odgovara osi projekcije:
// Za X projekciju (YZ ravaan)
normalX = float3(normalMap.z, normalMap.y, -normalMap.x);

// Za Y projekciju (XZ ravan)
normalY = float3(normalMap.x, normalMap.z, -normalMap.y);

// Za Z projekciju (XY ravan)
normalZ = float3(normalMap.x, normalMap.y, normalMap.z); // Trivijalan slucaj
  1. Blenduj korigovane normale sa tezinama

Ovo je cesto izvor gresaka -- ako ne transformises normale pravilno, dobices cudne artefakte u osvetljenju na prelazima izmedju projekcija.

Tiling i offset

Posto triplanar koristi world position za UV, mozes kontrolisati tiling i offset:

float2 uvX = worldPos.yz * tiling + offset;
float2 uvY = worldPos.xz * tiling + offset;
float2 uvZ = worldPos.xy * tiling + offset;

Bitan detalj: Ako pomeras objekat u svetu, tekstura se nece pomeriti sa njim -- jer je bazirana na world position-u, ne na object position-u! Ako zelis da tekstura prati objekat, koristi Object Position umesto World Position:

// U UE5 Material Editoru
[ObjectPosition] umesto [WorldPosition] za projekciju

19.6.4 Performansni aspekti

Triplanar mapping je tri puta skuplji od obicnog teksturiranja jer zahteva tri texture sample-a umesto jednog. Za materijal sa 4 teksture (albedo, normal, roughness, height), to je 12 texture sample-ova umesto 4.

Optimizacije:

  1. Reduce na dve projekcije: Ako znas da neka osa nikad nece biti dominantna (npr. za teren gde je Z uvek gore), mozes izbaciti jednu projekciju

  2. Single-axis fallback: Na malim uglovima, koristi samo jednu projekciju umesto tri:

if (maxWeight > 0.95)
    result = dominantAxisSample; // Samo jedna projekcija
else
    result = triplanarBlend;     // Pune tri projekcije
  1. Channel packing: Pakuj razlicite informacije u kanale jedne teksture da smanjis ukupan broj texture sample-ova

  2. LOD bias: Koristi nizi mip level za manje dominantne projekcije

19.6.5 Kada koristiti triplanar mapping

Koristi triplanar za:

Ne koristi triplanar za:

19.6.6 Implementacija u UE5 Material Editoru

UE5 nema ugradjen "Triplanar" cvor, ali implementacija je straightforward:

  1. World Position: WorldPosition cvor (ili ObjectPosition za object-relative)
  2. World Normal: VertexNormalWS ili PixelNormalWS cvor
  3. Tri Texture Sample-a: Svaki sa razlicitim parom koordinata iz world position-a
  4. Abs + Power + Normalize: Za blend weights
  5. Multiply + Add: Za finalnu kombinaciju

Mozess ovo zamotati u Material Function da bi ga lako ponovo koristio u razlicitim materijalima. Mnogi studiji imaju biblioteku Material Function-a koja ukljucuje triplanar mapping.


19.7 Decals

19.7.1 Sta su decali i zasto su vazni

Decali (dekali) su nacin da projektujees materijal na postojece povrsine bez modifikovanja originalnih mesheva ili materijala. Zamisli ih kao "nalepnice" koje lepis na svet.

Primeri upotrebe:

Decali su izuzetno korisni jer ti dozvoljavaju da dodas unikatni detalj svakoj sceni bez kreiranja unikatnih tekstura za svaki mesh.

19.7.2 Kako decali rade -- tehniki pregled

Princip decal renderinga:

  1. Decal volume: Decal se definise kao box (kutija) u prostoru scene
  2. Projekcija: Engine renderuje ovaj box i za svaki piksel unutar njega:
    • Odredjuje gde piksel "pada" na scenu (koristeci depth buffer)
    • Racuna UV koordinate na osnovu projekcije kutije
    • Sample-uje decal teksture koristeci te UV-e
    • Blenduje rezultat sa postojecim podacima u G-buffer-u (ili frame buffer-u)

Kljucni detalj: Decali se renderuju kao geometrija (box mesh) ali njihov efekat je screen-space projekcija -- oni se "projektuju" na sve sto se nalazi unutar njihovog volume-a.

19.7.3 Tipovi decala u UE5

UE5 ima dva glavna sistema za decale, i razumevanje razlika je kljucno za pravilnu upotrebu:

Deferred Decals

Deferred decali se renderuju tokom deferred rendering pass-a, nakon sto je G-buffer popunjen ali pre nego sto je osvetljenje izracunato.

Karakteristike:

Da kreiras deferred decal u UE5:

  1. Kreiraj novi Material sa Domain podesenim na Deferred Decal
  2. U Decal Blend Mode izaberi sta zeliss da modifikujes:
    • Translucent -- modifikuje boju (Base Color + opciono druge kanale)
    • Stain -- modifikuje samo boju, ne i normale
    • Normal -- modifikuje samo normale
    • DBuffer Translucent -- koristi DBuffer (vidii ispod)
    • Drugi modovi za specificne potrebe
  3. Postavi teksture i logiku materijala
  4. Kreiraj Decal Actor u sceni i dodeli mu materijal
  5. Podesi velicinu i orijentaciju box-a

DBuffer Decals

DBuffer (Decal Buffer) decali su napredniji sistem koji se renderuje pre G-buffer pass-a. Podaci se cuvaju u posebnom buffer-u koji se zatim primenjuje tokom base pass-a.

Prednosti DBuffer decala:

Mane:

Da bi koristio DBuffer decale:

  1. Omoguci DBuffer Decals u Project Settings > Rendering > DBuffer Decals
  2. U materijalu, postavi Decal Blend Mode na jedan od DBuffer modova:
    • DBuffer Translucent Color, Normal, Roughness (najcesci -- modifikuje sve)
    • DBuffer Translucent Color, Normal (bez roughness modifikacije)
    • DBuffer Translucent Color (samo boja)

Za Nanite projekte, DBuffer decali su preporuceni jer obicni deferred decali mogu ne raditi pravilno na Nanite meshevima u nekim situacijama.

19.7.4 Automatski decali -- Decal Component i Blueprints

U praksi, decale ces cesto postavljati programatski:

Primer: Metci koji ostavljaju rupe

  1. Kreiraj decal material za rupu od metka (albedo sa alpha, normal map za "udubljenje")
  2. U Blueprint-u za pogodak (Hit Event):
    • Spawn Decal at Location
    • Podesi rotaciju da decal "gleda" u pravcu normale pogodjeene povrsine
    • Postavi lifetime (npr. 30 sekundi) nakon kog decal nestaje
    • Opciono: Fade out pre nestanka
// Blueprint pseudo-kod
OnHit(HitLocation, HitNormal):
    Rotation = HitNormal.ToRotation()
    SpawnDecalAtLocation(BulletHoleMaterial, Size, HitLocation, Rotation)

Primer: Krvave fleke

Slicno, ali sa randomizacijom:

  1. Vise varijacija tekstura (3-5 razlicitih krvaavih fleka)
  2. Random rotacija oko normale
  3. Random velicina (scale)
  4. Opciono: Animiran material koji simulira sirenje fleke

19.7.5 Performanse decala

Decali imaju performansnu cenu koja zavisi od:

  1. Velicina decala na ekranu -- veci decal = vise piksela za obradu = skuplje
  2. Broj decala -- svaki decal je dodatni draw call i fill operacija
  3. Kompleksnost materijala -- kompleksniji decal materijal = skuplja obrada
  4. Overlap -- preklapanje vise decala na istom mestu multiplicira cost

Prakticna pravila:

19.7.6 Decal Sorting i prioritet

Kada se vise decala preklapa, redosled renderovanja odredjuje koji je "ispred":

Prakticno: Ako imas decal za prljavstinu (Sort Order = 0) i decal za rupu od metka (Sort Order = 1), rupa ce uvek biti "iznad" prljavstine, sto je vizuelno logicno -- metak je napravljen nakon sto se prljavstina nakupila.

19.7.7 Tipicne greske sa decalima

  1. Decal se "isteze" na kosim povrsinama -- Decal se projektuje duz jedne ose, pa na kosim povrsinama tekstura postaje istegnuta. Resenje: Postavi decal da gleda normalno na povrsinu, ne uvek duz jedne ose.

  2. Decal se vidi na pogresnom meshu -- Box volume decala obuhvata vise mesheva. Resenje: Smanji box ili koristi Receives Decals = false na meshevima koji ne bi trebalo da primaju decale.

  3. Z-fighting -- Decal "treperi" jer je preblizu povrsini. Resenje: Koristi bias podesavanja u decal materijalu.

  4. Decal ne radi na Nanite meshu -- Proveeri da koristis DBuffer decal mode i da je DBuffer omogucen u projektu.


19.8 Kombinovanje tehnika -- prakticni primeri

19.8.1 Primer: Kameni zid sa mahovinom

Ovaj primer kombinuje skoro sve tehnike iz ovog poglavlja:

  1. Bazni materijal kamena:

    • Albedo, Normal, Roughness, Height mape za kamen
    • Detail normal map za mikro-teksturu povrsine kamena
    • Triplanar mapping jer je kamen organski oblik bez dobrih UV-a
  2. Materijal mahovine:

    • Albedo, Normal, Roughness, Height mape za mahovinu
    • Detail textures za pojedinacne travke mahovine
  3. Height-based blending izmedju kamena i mahovine:

    • Vertex color kao makro mask
    • Height mape za realistican prelaz
    • World normal bias -- mahovina preferira povrsine koje gledaju nagore
  4. POM za malter izmedju kamenih blokova:

    • Daje utisak dubine izmedju blokova bez dodatne geometrije
  5. Decali za dodatni detalj:

    • Pukotine u kamenu
    • Fleke vlage

19.8.2 Primer: Sci-fi pod sa ostecenjima

  1. Bazni materijal metalnog poda:

    • Tileable teksture sa PBR parametrima
    • Detail normal map za sitnu metalnu teksturu
    • POM za udubljena polja na podu
  2. Osteceni materijal:

    • Ogrebotine i ostecenja kao drugi sloj
    • Height-based blending -- ostecenja se pojavljuju na ivicama i uzvissenjima
  3. Decali za specificna ostecenja:

    • Rupe od metaka
    • Tragovi paljevine
    • Fleke ulja i tekucina
  4. Displacement na ivicama:

    • Gde se pod spojio sa zidom, displacement daje uverljivu deformaciju

19.9 Optimizacija i best practices

19.9.1 Texture memory management

Svaka tehnika u ovom poglavlju dodaje texture sample-ove, a svaki sample koristi memoriju i bandwidth:

Tehnika Dodatni sample-ovi Memorijski impact
Normal Map 1 (vec standardno) Nizak
Detail Textures 2-4 (albedo + normal) Srednji
POM 8-64 (ray march) Visok (ali ista tekstura)
Height Blending 2x sve teksture Visok
Triplanar 3x sve teksture Veoma visok

19.9.2 Prakticna pravila

  1. Texture streaming: UE5 automatski stream-uje teksture na osnovu vidljivosti. Ali prevelik broj unikatnih tekstura moze izazvati "texture pop-in". Koristi tileable teksture gde god mozes.

  2. Channel packing: Pakuj grayscale teksture u kanale jedne RGB(A) teksture:

    • R: Metallic
    • G: Roughness
    • B: Ambient Occlusion
    • A: Height

    Ovo smanjuje broj texture sample-ova i memoriju.

  3. Material Instances: Uvek koristi Material Instances umesto dupliranja materijala. Base material definise logiku, instance definise parametre (teksture, boje, scale-ove).

  4. Quality switches: Koristi Quality Switch cvor u materijalu da pruzis razlicite nivoe kvaliteta:

    • High: POM + detail textures + height blending
    • Medium: Normal maps + detail textures + lerp blending
    • Low: Normal maps samo
  5. Distance-based complexity: Smanjuj kompleksnost materijala na osnovu udaljenosti:

    • Blizu: Puna kompleksnost
    • Srednja udaljenost: Bez POM, bez detail textures
    • Daleko: Samo bazne teksture

19.9.3 Debugging

Kada materijal ne izgleda kako ocekujes:

  1. Buffer Visualization (u UE5 Viewport > Buffer Visualization):

    • World Normal -- proveri da li su normale ispravne
    • Base Color -- da li je boja kako treba
    • Roughness -- da li je roughness pravilan
  2. Shader Complexity view mode:

    • Zeleno = jeftino
    • Crveno = skupo
    • Belo = preskupo (previse texture sample-ova ili instrukcija)
  3. Statistics panel:

    • Material Editor > Stats -- prikazuje broj instrukcija i texture sample-ova
    • Cilj: Ispod 200 instrukcija za vecinu materijala

19.10 Kljucni pojmovi

Termin Objasnjenje
Normal Map RGB tekstura koja kodira pravce normala za simulaciju detalja povrsine bez dodatne geometrije
Tangent Space Lokalni koordinatni sistem na povrsini mesha definisan T, B, N vektorima
World Space Normals Normale kodirane u globalnom koordinatnom sistemu scene
TBN Matrix Matrica 3x3 koja transformise normale izmedju tangent space-a i world space-a
Baking Proces prenosenja detalja sa high-poly na low-poly mesh u formi teksture
MikkTSpace Standard za racunanje tangent basis-a, koriscen u UE5
BC5 Blok kompresioni format optimizovan za normal mape (dva nezavisna kanala)
RNM (Reoriented Normal Mapping) Tehnika za fizicki korektno blendovanje dve normal mape
Parallax Mapping Tehnika koja pomera UV koordinate na osnovu height mape i ugla posmatranja
POM (Parallax Occlusion Mapping) Napredna parallax tehnika sa ray marching-om kroz height field
Self-shadowing Sposobnost POM-a da simulira senke koje visi delovi bacaju na nize
Pixel Depth Offset Korekcija Z-buffer dubine za pravilnu intersekciju POM povrsina
Displacement Mapping Tehnika koja zaista pomera vertekse mesha na osnovu height mape
Nanite Displacement UE5 sistem koji kombinuje Nanite teselaciju sa displacement mapping-om
Detail Textures Visoko-frekventne teksture koje se tile-uju iznad baznih za poboljsanje blizine
Overlay Blending Metoda mesanja boja gde svetle oblasti postaju svetlije a tamne tamnije
Height-Based Blending Tehnika blendovanja koja koristi height mape za realisticne prelaze izmedju materijala
Blend Sharpness Parametar koji kontrolise ostrinu prelaza u height-based blendingu
Triplanar Mapping Projekcija teksture sa tri ose, ne zahteva UV koordinate
Deferred Decals Decali koji se renderuju tokom deferred pass-a modifikujuci G-buffer
DBuffer Decals Napredniji decal sistem koji radi pre base pass-a i kompatibilan je sa Nanite-om
Vertex Color Painting Rucno "farbanje" vertex boja na meshu za kontrolu blendovanja
Channel Packing Pakovanje vise grayscale tekstura u kanale jedne RGBA teksture za ustedu
Cage Mesh "Naduvana" verzija low-poly mesha koja definise opseg za baking ray casting
Texture Streaming UE5 sistem koji automatski ucitava i uklanja mip nivoe tekstura
Material Instance Instanca baznog materijala sa razlicitim parametrima bez dupliranja logike

19.11 Dodatno citanje i resursi

Zvanicna dokumentacija

Naucni radovi i clanci

Tutoriali i kursevi

Knjige

Povezana poglavlja u ovoj knjizi


Rezime poglavlja: Teksturne tehnike su arsenal alata koji ti omogucavaju da lazes, varas, i simuliras -- sve u sluzbi stvaranja uverljivih povrsina. Normal mapping menja osvetljenje, parallax pomera UV-e, displacement pomera geometriju. Detail textures resavaju problem blizine, height blending pravi prirodne prelaze, triplanar zaobilazi UV probleme, a decali dodaju unikatni detalj. Kljuc uspeha je u kombinovanju pravih tehnika za pravu situaciju -- i u znanju kada je "dovoljno dobro" zaista dovoljno. U sledecem poglavlju prelazimo na dinamicke materijale i parameterizaciju -- kako da tvoji materijali zive, disu, i reaguju na svet oko sebe.