← naspäť na zoznam cvík

21.4

08 : textúry III

Použité obrázky pre toto cviko: obr.zip

Teória

Dnes to bude o tom, ako za lacno urobiť krásne efekty. Ide asi o toto. Povedzme že chceme mať realistický múr.

Asi tušíme, že nestačí iba urobiť rovnú plochu a nalepiť na neho takúto textúru. Múr je hrboľatý a potrebujeme od neho, aby reagoval na svetelné zdroje, takže odrážal svetlo ako hrboľatý objekt. To sa dá zabezpečiť dvoma spôsobmi.

  1. Upravíme mesh. Rozdelíme si ho na maličké plôšky a vymodelujeme všetky ryhy medzi tehličkami. Miesto jednej steny so štyrmi vrcholmi budeme mať megaveľa malých stien, čo je nevýhodné. A modelovanie nám bude veľmi dlho trvať.
  2. Budeme chytrejší a necháme mesh tak ako je. Miesto toho iba pozmeníme to, ako sa od neho odráža svetlo.

Čo sa deje matematicky? Každá plocha v 3D priestore má priradený normálový vektor, tj vektor kolmý na plochu. (toto ste už zrejme mali niekde na lineárnej algebre?). Dĺžka nás až tak nezaujíma, dôležité je, že smer je priradený jednoznačne.

Ak by sme sa na to pozreli zboku (priemet do 2D), vyzerá to takto:

Ak by sme ručne modelovali tehličky na stene, spravili by sme niečo takéto:

Miesto toho to okašleme a spravíme toto:

Vďaka úžasnej jednoduchosti sa tento trik používa úplne všade. Za lacno máte krásne efekty.

Pamätáte sa, keď sme si prepínali v blendri shading smooth a shading flat? Je to ten istý trik. Namiesto pravdivých normál pre jednotlivé steny ich okolo hrán nejakým spôsobom interpoluje. Toto je obrázok dvoch identických gúľ, ale jedna má shading smooth a druhá shading flat. Na okraji tej hladkej je vidno, že je v skutočnosti tiež hranatá.

Dobre, teraz poďme na praktickú stránku veci.

Bump mapping

Bump mapping je jednoduchšia metóda menenia normál. Spočíva v tom, že na danú plochu zobrazíme funkciu (modrá), ktorá nám v každom bode dá nejakú výšku.

Pozrieme sa aké normály má plocha pozmenená o výšky funkcie a spätne ich priradíme našej ploche.

Modrá funkcia sa reprezentuje pomocou čiernobielej textúry. Výška v našej funkcii je určená farbou pixla, teda číselnou hodnotou na škále biela-čierna. Vyzerá to asi takto:

Normal mapping

Normal mapping je matematicky jednoduchší a univerzálnejší, no je zložitejší na výrobu. Robí sa znova pomocou textúry, ale tentokrát farebnej. Metóda spočíva v tom, že v každom bode si jednoducho vymyslíme nový žiadaný smer normály a priradíme ho.

Znamená to, že miesto jednej hodnoty (ako v bumb mape) potrebujeme v každom bode priradiť tri nové hodnoty – hodnoty x,y,z pre koncový bod novej normály. Tieto sú reprezentované zložkami (R,G,B) farebnej textúry.

Vyzerá to asi takto:

Displacement mapping

Displacement mapping je v podstate bump mapping, pri ktorom meníme aj štruktúru meshu. Vizuálne asi takto:

Nejde teda o oklamávanie svetlom, ale o naozajstnú úpravu meshu. Princíp výroby je ale podobný, preto sa to učíme spolu. Neušetríme pri ňom síce miesto na disku na jednoduchšom meshi, ale uľahčí nám námahu pri modelovaní. Požíva sa všade tam, kde si vieme uľahčiť zložité modelovanie nejakej opakujúcej sa štruktúry, napríklad vlnený vzor na oblečení, alebo štruktúry, ktoré nám je jednoduchšie načrtnúť na rovine a následne zobraziť na nerovnú plochu, ako príklad vrásky. (na príklade vidno jazvy).

Jeho hlavnou výhodou oproti bump a normal mape je, že nám vyrieši aj okraje modelu. To sú miesta, kde bump a normal mapa zlyháva.

Dobre, tak si to ideme vyskúšať. Začeme s Bump a Normal mappingom. Displacement bude na konci cvika

Bump mapping

Najprv povedzme, že už bump textúru máme a chceme ju použiť na náš objekt.

Prepnite si layout na shading – to je to rozdelenie obrazovky, ktoré sme využívali minule. Znova budeme chcieť používať nodes. Zmažte si kocku a pridajte do stredu obrazovky nový objekt: plochu. Trochu si ju zväčšite. Na ňu pridajte kamienkovú textúru tak, ako sme to robili minule, pomocou nodes.

Teraz jej pridáme bump mapu. Pridajte druhú textúru, tentokrát bumpmapovú. Keďže bump-mapa je vlastne vlastnosť normálových vektorov, budeme ju pripájať na input bodku Normal.

Ak by ste to pripojili takto priamo, nebude to fungovať. To preto, že posúvaná informácia nie je v správnom formáte. Asi ste si všimli, že jednotlivé input a output bodky sú rôznych farieb. Jednotlivé farby predstavujú rôzne typy informácie.

  • žltá = farba
  • sivá = číslo
  • modrá = vektor
  • zelená = shader

Prepájať smiete iba bodky rovnakých farieb, a to z logických aj informatických dôvodov. Niekedy blender dokáže nejak vyhodnotiť aj prepojenie rôznych farieb (my sme minule napájali číslenú hodnotu na farbu materiálu, ak si pamätáte), ale vo všeobecnosti sa na to nedá a ani nemá spoliehať.

My sme sa tu pokúsili pripnúť farebnú informáciu na vektor, čo nejde. Takže ju potrebujem transformovať. Na bump mapy je tu špeciálny node – bump. Výška „bumpu“ je určená vlastnosťou Height, takže to je práve to miesto, kam ho prepojíme. Na výstupe už máme vektor, čo sa nám páči. Stále sa nám tu ešte deje prepojenie farba – číslo. Textúry majú tento problém riešený tak, že miesto RGB im povieme, že chceme mať informáciu typu „non-color“.

Tak sa poďme pozrieť na to, čo sme stvorili. Aby sme dobre videli, pomôžeme si našim svetelným zdrojom. Pri zobrazení, čo máme vybraté sú vnútorné svetelné zdroje vypnuté, my si ich chceme zapnúť. Vo viewport shading (vpravo hore) si zaškrknite Scene Lights. Ak trochu pobeháte svetlom okolo plochy, bump by už mal fungovať.

Bump node má aj nejaké vlastnosti, nás bude najviac zaujímať vlastnosť. Vlastnosťou Distance určujeme aký vysoký má byť vlastne maximálny bump. Vlastnosť strength znižuje samotnú bump mapu percentuálne – akoby ste postupne textúru zošeďovali. V realite zvyknú byť bump mapy veľmi silné a stačí im dať Distance okolo 0.1. To už treba potom prispôsobiť konkrétnemu modelu.

Môže sa vám zísť aj invert, ktorý, zjavne, invertuje farby na bump mape. Takže miesto kopcov budú priehlbiny a opačne.

Čo ak chceme mať naše kamienky drobnejšie? Máme seamless textúru, tak by sme to mohli využiť. Môžete si ich buď rozbaliť v UV priestore, tak ako sme to už robili namapovaný štvorček zväčšiť, alebo šikovne použiť nodes.

Vieme na to využiť vstupný node Texture Coordinates. Urobíme nasledovný trik: vypýtame si vektor súradníc každého bodu, vektor naškálujeme na väčší a následne ho vrátime. Poďme na to.

Nezabudnite toto preškálovanie priradiť aj Bump mape, ináč nebude sedieť s textúrou. Tu si vieme podobne textúru aj posunúť, alebo zrotovať.

Prečo sa nám vlastne textúra opakuje, keď nie je dosť veľká? Je to vlastnosť textúry. Vieme jej nastaviť čo chceme aby robila, keď je menšia ako UV namapovanie. Ďalšie možnosti sú: Clip (zvyšok nechá prázdny) a Extend (vezme krajný pás textúry a skopíruje ho donekonečna – toto je vhodné na situácie, keď vám chýba len malý kúsok textúry, ktorý možno ani nebude poriadne vidno). My používame Repeat (opakovanie).

Ľubovoľný čiernobiely obrázok sa dá využiť ako bump-mapa. Skúste si v gimpe vyrobiť čierny obrázok a načmárať na neho niečo biele. Bude to fungovať ako dobrá bump mapa.

pošlite mi render!

Normal mapping

Teraz poďme na normal mapu. Najprv si pozrieme ako vyzerá.

Objektu sa priraďuje veľmi podobne ako Bump mapa. Je na ňu určený node Normal map. Vyskúšame si to.

SAMOSTATNÉ CVIČENIE

Vytvorte si vlastnú bump textúru v gimpe pre tento múrik:

Potrebujeme urobiť správnu zmenu farieb tak, aby v škárach bola farba tmavá a na kachličkách svetlá. Je veľmi, veľmi, veľmi dôležité textúru rozmazať. Ostré hrany znamenajú ostré skoky v bump mape. (Celkom pekne k tomu vyzerá median blur) Tiež odporúčam neukladať ako .jpg – alebo keď už, dajte mu nižšiu kompresiu, aby na ňom nevznikali také tie škaredé jpg-ové šumy.

Mohli by sme získať napríklad niečo takéto:

Nečakajte, že hneď prvý pokus bude hneď krásny. Väčšinou sa takéto niečo vyrába na viackrát.

Pošlite mi render!

Aké sú možnosti získavania textúr na bump/normal mapping?

Pre niektoré materiály si ich viete vyrobiť sami. Napríklad pre takýto múrik sa bump mapa vyrába relatívne jednoducho, pre iné je to ťažšie a prplavejšie.

Druhá možnosť je využiť internet. Je na ňom k dispozícii veľmi veľa textúr už s predvyrobenými bump alebo normal mapami. Existujú služby, ktoré majú profesionálne vyrobené krásne textúry aj spolu s mapami pre bump alebo normal, ale aj pre odlesky, metalickosť a podobne. (napríklad Poliigon.com) Samozrejme, že sú platené, zmysel majú skôr pre profesionálov/prílišných nadšencov.

Taktiež existujú aj automatické vyrábače bump textúr. Nemôžte čakať, že výsledok bude vždy super, ale nejakú úspešnosť to má.

Z tohoto by som rada upozornila na tento (open source) vyrábač rôznych máp. Okrem rôznych konverzií ponúka výrobu bump/normal mapy na základe osvetlenia objektu zo štyroch strán: https://cpetry.github.io/NormalMap-Online/. Môžete si v ňom urobiť z vašej bump mapy normal mapu :) .

Plus internet je plný tutorialov, ako to robiť ručne. Proste treba googliť.

K čomu sa chceme dostať dnes ešte my, je využitie procedurálnych textúr, aby sme dodali materiálu realistickosť pomocou nedokonalostí. Vrátime sa k našej hrdzavej guli.

Procedurálne textúry

Urobíme si ju znova, tentokrát aj s využitím bump máp.

Začneme rovnako ako minule. Vyrobte si guľu, prepnite jej shading na smooth a vytvorte jej nový materiál. Urobte ho plne metalický.

Vytvorte si Textútu Noise. Tentokrát miesto Base Color použijeme jej čiernobielu zložku ako Bump mapu.

Teraz si ju trochu upravíme. Za prvé cheme, aby bola hustejšia. Upravte vlastnosti Noise textúry, aby bola zrnitejšia.

Za druhé, potrebujeme, aby zrnitosť existovala iba na určitých fľakoch. Využijeme tak ako minule trik s Color Ramp. Všetky tie odtiene sivej textúry si namapujeme na veľa bielej (tam obraz rozmrvený nebude) a nejaké sivé.

Aby zbyšok gule nebol taký hladký, môžeme si k tomu pričítať ďalšiu bump mapu – tentokrát jemnú a drobnú.

Ďalej by sme pokračovali ako minule. Skúste si to dokončiť. V súčte by sme mohli dostať napríklad niečo takéto.

Displacement

Poďme sa ešte pozrieť na ten displacement. V Eevee (to je to rýchlejšie a jednoduchšie rendrovanie, to čo používame) sa nedá robiť cez nodes, ako vlastnosť materiálu. Máme tu ale k dispozícii Displace Modifier.

Vytvorte si nový projekt, vezmite si svoj gimpový čiernobiely obrázok a zobrazte ho na plochu. Tejto budeme priraďovať displace modifier.

Najprv ale musíme dať našemu objektu textúru k dispozícii, z nejakeho dôvodu ju nevezme len tak. To vieme v textúrovom menúčku (ktoré sme doteraz nepoužívali – je to tak trošku pozostatok starších verzií blendra).

Teraz môžeme ísť na ten modifier a zvoliť náš obrázok.

Zatiaľ sa nám ale nič nedeje, možno vám ten obrázok len trochu poskočil. To preto, že mesh je len jedna stena, takže displacement nemá s čím pracovať. Využijeme preto subdivision surface. Prepnite jeho typ z Catmull-Clark (ktorý je vhodný skôr na prirodzené a hladké plochy) na Simple a zvýšte Viewport (to je počet rezov) na 2. Stále nič.

Modifiers sa totižto vykonávajú postupne, odhora dole. Takže nám sa najprv vykoná Displacement, potom Subdivision. Potrebujeme ich prehodiť. Na zmenu poradia sú tam také malé šípočky vpravo.

Teraz vieme zvýšiť mieru Subdivision na dostatočnú hladkosť. Ak sa vám zdá displacement príliš silný, vieme ho upraviť pomocou vlastnosti Strength.

A máme to. Ak chceme, môžeme modifiers „zapiecť“ pomocou Apply. Alebo si ich môžeme nechať aktívne ak by sme ich chceli ďalej upravovať.

  • UPDATE 30.4: malé dovysvetlenie, ktoré som zabudla vopred spomenúť. Pri subdivision surface sú dôležité dve hodnoty:

    • Viewport (to sme si nastavovali) = počet rezov, ktoré nám ukazuje v náhlade
    • Render (o riadok vyššie) = počet rezov vo finálnom rendri.

    Ak ich máte rôzne, výsledok bude odlišný pre náhľad a render. Riešenie je buď si ich nastaviť na rovnakú hodnotu, alebo zapiecť modifier pomocou Apply. Je to určené hlavne na to, aby ste mohli mať vo výsledku krásne hladký mesh v rendri, ale pracovať s menej hladkým (a menej náročným na pamäť).

Pošlite mi render!

Na záver dôležitá vec: Ak používate vlastné textúry, alebo iné extrerné materiály, je nutné ich vždy prikladať k blend súboru ak ho chcete niekam prenášať, alebo posielať. Našťastie to blender vie urobiť aj za vás cez File → External Data.