Az előző cikkünkben a 3D modellek geometriájával foglalkoztunk, el is készítettünk egy szék mesh-t. Azonban a székünk megjelenése egyelőre meglehetősen egyszerű, szimpla szürke. Ahhoz, hogy felismerhető legyen, hogy mit akarunk ábrázolni, szükséges saját textúrákat alkotnunk a meshekhez.
A textúra egy, a modellre „csavart” kép. Használatához a modell minden face-éhez hozzá kell rendelnünk egy koordinátát egy kétdimenziós képen. Ezt az eljárást nevezzük UV mappingnak.
A UV mappal ellátott modellre material-okat illeszthetünk. A material egy, textúrákból és paraméterekből összeálló egység, amit a mesh-hez rendelhetünk hozzá. Minél több részletből áll egy modell (karaktereknél ruha, bőr, arc, szem, fogak, stb.), annál átláthatóbb, ha több materialt használunk.
Lássunk is neki.
Töltsük be az előzőleg elkészített székünk Blend fájlját.
Állítsuk át a render engine-t Blender Renderről Cycles Renderre. A render a matematikai alakzatok vizuális megjelenítése; ezzel a modellünk megjelenítésének módját változtatjuk meg. A Cycles a Blender renderéhez képest összetettebb, modernebb technológiára épül, így sokkal kifinomultabb fényhatásokat képes megjeleníteni.
Keressük meg a jobb oldali eszköztárban a Material fület, és adjunk is hozzá egy új materialt.
Ahhoz, hogy megtöltsük a materialt, textúrákra lesz szükségünk. A textúrakészítés egyik módja egy faszék esetében az, ha lefényképezünk egy fafelületet - széket, padlót, falat, asztalt. Fontos, hogy a fényképen minél kevesebb fényhatás, tükröződés látszódjon.
Ezen kívül természetesen rajzolhatjuk is a textúrát, ez a kívánt stílustól függ.
Mi okostelefonnal lefényképeztünk egy széket több szögből, és GIMP-pel összevágtuk a legjobb részeket, hogy homogénnek tűnjön és minél kevesebb fényhatás legyen rajta.
Hogyha azt szeretnénk, hogy a textúra ismételhető (tile-olható) legyen, azaz a széleinél összeilleszthető legyen önmagával, használjuk a GIMP Szűrők -› Leképezés -› Folytonossá tétel funkcióját. Ezt legtöbbször falak, padlók textúrázásánál használjuk, amikor nagyobb területet kell lefednünk egyetlen textúrával. A szék esetében nem szükséges a tile-olhatóság, viszont ha előrelátóak vagyunk, és több célra is fel akarjuk használni ezt a textúrát (pl. fapadló), akkor érdemes.
Fontos, hogy a végeredményt olyan méretben mentsük el, ami a gépnek a legkényelmesebb: az oldalak legyenek egyenlőek, a pixelméret pedig a kettesnek valamilyen hatványa legyen, pl.: 256x256, 512x512, 1024x1024, 2048x2048 (2K), 4096x4096 (4K).
Értelemszerűen a gépet annál jobban terheli a textúra megjelenítése, minél nagyobb felbontású. Egy szék, ha a videojátékon belül nem fontos, nem igényel nagyobb felbontást, tehát bőven elég rá egy 512-es textúra is. Rendervideóknál természetesen mindig a legjobb minőségre törekszünk, és nem számít a terhelés, mivel nem a felhasználó számítógépének kell valós időben futtatnia.
Ahhoz, hogy ez a textúra megfelelően megjelenhessen a modellen, el kell készítenünk a UV mapját. Ebben nagy segítségünkre lesznek a seam-ek. A seam edge-eken hozható létre, és azt az edge-et jelöli, ami mentén a UV map szétvágható. Ezeket célszerű kevésbé látható részre tenni, mivel sokszor egyértelmű a textúra ugrása. Emiatt szokás például egy karakter arcát seamek nélkül hagyni, és csak a nyakánál vagy a feje hátuljánál megvágni.
Seamekre azért van szükség, mert nélkülük egymásba futnának a UV-k, nem lenne se elejük, se végük, és a textúra nem nézne ki megfelelően. Van lehetőség automata seamek (smart UV) elhelyezésére, de a gép logikája nem biztos, hogy egyezni fog elképzelésünkkel.
Seamelés közben törölgessük ki a nem látható face-eket, mert teljesen feleslegesek, hibát is okozhatnak.
A széknek minden lábát meg kell vágnunk. Gondoljunk arra, hogy egy papírlapból hogyan tudunk kockát hajtogatni - ugyanígy kell megoldanunk a mesh face-eit is.
Ha elkészültünk a seam-ekkel, jelöljük ki a mesh minden elemét, nyomjuk le az [U] gombot, majd válasszuk az Unwrap opciót. Ezzel „kicsomagoljuk” a mesh UV mapját, aminek eredményét a jobb felső panelben láthatjuk is. Akkor a legegyszerűbb egy UV mappal dolgozni, ha javarészt egyenes.
Az elkészült textúrát töltsük be Blenderbe a jobb felső UV nézőkét használva.
Állítsuk át a material color paraméterét Image Texture-re. Ide töltsük be az elkészített textúránkat.
Az alsó eszköztárban állítsuk a nézetet solid-ról material-ra.
Vessünk egy pillantást a meshünkön a textúra elhelyezkedésére. Ha valahol a fa rostjai pont az ellenkező irányba állnak, mint ahogy kéne, a UV map azon részét jobb gombbal vagy [C]-vel való kijelölés után az [R] gombbal elforgathatjuk, [G]-vel mozgathatjuk - pont úgy, ahogyan a viewportban a mesh darabjait is. Állítsunk minden UV-t a megfelelő irányba. Itt nem probléma, ha a UV szigetek átlógnak egymáson, vagy kilógnak a textúra területéről, mivel egy egyszerű, ismétlődő képről van szó.
Kész is egy egyszerű faszék textúrája. Ám mi van akkor, ha szeretnénk, hogy az ülőkéje mondjuk plüss anyagból legyen?
A plüss textúrát a fához hasonlóan szerezzük be - fényképezzünk le valamilyen ruhaanyagot, szőnyeget, majd készítsük elő a már bemutatott módon.
Hozzunk létre egy új materialt az ülőkének, és töltsük be a plüss textúrát.
Jelöljük ki az ülőke felületét, és assign-oljuk az új materialhoz. Töltsük be a materialhoz a plüss textúrát.
Igazítsuk az ülőke UV-ját úgy, hogy a legjobban nézzen ki rajta az anyag. Méretezhetjük a UV-t az [S] gombbal nagyobbra , így a bolyhok a textúrán egyre kisebbnek látszanak majd.
Igazítsuk a mesh-t az ülőke anyagának megfelelően. Egy ülőpárna púposabb középen, mint egy sima falap, és minden bizonnyal vastagabb is. Alakítsuk a formát ízlés szerint.
Kész is vagyunk a diffuse textúrával. A most elkészített textúra viszont csak a színeket tartalmazza, ezen kívül nagyon sok más textúrát használhatunk egy materialon belül, felhasználási céltól és grafikus motortól függően, viszont ezek közül a legtöbbet matematikai szempontból használja a gép. Egy fekete-fehér textúrán például a fekete a nullás érték, a fehér az egyes, a szürkék pedig az ezek közti értékek, így lehet velük számításokat végezni.
Az általánosan használt textúratípusok a következők:
Specular map
Ez a textúra tartalmazza a fényhatásokat, akkor aktiválódik, mikor a modellt az adott ponton fény éri. Lehet fekete-fehér vagy színes.
Normal map
Ez határoz meg kisebb felületi változásokat a modellen. A képfájl három színe (piros, zöld, kék) reprezentálja a három tengelyt, ahonnan a fény beérkezhet. Ezt a textúrát általában nem kézzel csinálják, hanem szoftverekkel számoltatják. Képes rá a Blender is, de a profibb szoftverek közül használható erre a célra például a zBrush és a Substance Painter is.
Glossiness/Roughness map
Ez határozza meg, hogy a felület mennyire veri vissza a beérkező fényt, mennyire csillog. Ugyanazt a célt szolgálja mindkét map, csak egymás fordítottjai - a glossiness mapon a fehér rész csillog, a roughness mapon pedig a fekete.
Metallic map
Meghatározza, hogy mennyire fémes az adott ponton a mesh.
Ambient Occlusion map
Egy olyan textúra, ami az árnyékhatások megjelenését segíti az objektum felületén.
Subsurface Scattering map
Meghatározza, hogy mennyire és milyen módon hatoljon át a mesh adott pontján a fény. Például egy emberi fülön magas lenne ennek az értéke, tehát ha fény éri, vöröses lesz, esetleg átlátszanak rajta az erek.
Height map
Meghatározza, hogy milyen magasságban van az adott pont az eredeti modellhez képest. A height mapból például normal mapot lehet számolni.
Displacement map
A felület eltolódását jelöli az eredeti helyzetéhez képest.
Mask
A maskokat nagyon sokféle módon fel lehet használni. Van kétértékű mask, ami csak fekete és fehér köztes színek nélkül, ezeket például Opacity masknak szokták használni. Jó példa erre az emberi haj a legtöbb videojátékban - a meshben egy-egy hajtincs egy lap, és a rajta levő textúrát egy opacity maskkal teszik a megfelelő helyeken áttetszővé. Maskokkal tudunk továbbá két textúrát adott helyeken összemosni, egymás fölé tenni. Hasonlóan működnek, mint a képszerkesztő szoftverekben.
A későbbiekben fogunk ezekkel a textúratípusokkal is foglalkozni, de kezdésnek elég a diffuse.
És íme az elkészült munka:
Kérdésekre szívesen válaszolunk a kommentekben!