052 – Jelenetek textúrázása VII. - Felületi normális térképek (Normal-map) használata Munkánk során egy olyan területre tévedtünk, mely módfelett sajnálatos módon a Blender fejlesztői számára még alighanem komoly kihívásokat tartogat. Ugyanis számtalan érthetetlen, megmagyarázhatatlan szoftverleállás hátráltatott minket, nem kis bosszúságot okozva, és napokat rabolva el az életünkből. Ami miatt mégis foglalkoztunk ezzel a témával az az, hogy a későbbiekben talán javulni fog majd a helyzet, bízva abban, hogy a Blender újabb stabil verziói már képesek lesznek majd felülkerekedni a jelen verziók hibáin. Eddigi munkánk során tehát azzal foglalkoztunk, amiben a Blender igencsak jól teljesít, most viszont olyan feladat előtt állunk, amiben már sokkal szerényebbek a képességei. Kis sci-fi példajelenetünk felületi domborzat szimulációjához (Bump-mapping) ugyan elkészítettük már a szükséges domborzati térképeket (Bump-map), viszont egyes esetekben, főként ha közelebbi felvételeket is szeretnénk készíteni a későbbiekben, ez a módszer nem elég jó. Ennek okán úgy határoztunk, hogy minden jelenetalkotó objektum számára létrehozunk egy-egy felületi normális térképet (Normal-map). Erre a célra első körben úgy gondoltuk, hogy a GIMP NormalMap pluginjét fogjuk használni, végül aztán beláttuk, egyszerűbb és gyorsabb ha inkább célszoftvert alkalmazunk erre a feladatra.
Így tehát az SSBump Generator nevű aprócska, ingyenes program lett a legideálisabb eszközünk. Ezt az incifinci, 100%-osan ingyenesen elérhető és mindenféle korlátozás nélkül használhatóü szoftverecskét bárki letöltheti a következő webcímen keresztül: 1
http://sourceforge.net/projects/ssbumpgenerator/files/SSbump_N ormal%20Generator%205.3/SSbump_Generator_5_3_Bugfix.zip/download
A GIMP NormalMap pluginjéről a Blender Kódex Ismeretek 2 102. (168. oldal) és 105. fejezetében (191. oldal) található komplex információ. Az SSBump Generator szoftverről itt is volt szó korábban a 13. fejezetben, de azért úgy gondoltuk, ejtünk még róla néhány szót. Ha másért nem, akkor ismétlés gyanánt. Mint a felületi domborzati térképek (Bump-map) elkészítése során, úgy most is egyenként kellett elvégezni az egyes lépéseket minden modellen, és kiindulási alapként a már elkészült domborzati térképek (Bump-map) előző fejezetben elkészített képfájljait használtuk fel. Tehát dióhéjban az történt eddig, hogy a GIMP-ben elkészített textúraalapokat, melyeket magassági /domborzati térképként (Height/Bump-map) használtunk fel a Blenderben, most az SSBump Generator segítségével kicsit tovább alakítva már felületi normális térképként (Normalmap) fogjuk majd hasznosítani.
2
Kifutópálya Palya modellünk felületi normális térképét (Normal-map) az előző fejezetben ismertetett módon létrehozott Palya_Bump_Full01.jpg képből kiindulva készítettük el. Megnyitottuk az SSBump Generator programot, majd hozzáadtuk [Alt+A] a Palya_Bump_Full01.jpg képünket.
A beállítás (Settings) panelen bejelöltük a Normal Map Only jelölőt, mert csak a felületi normálisok térképére (Normal-map) lesz majd szükségünk.
Ezután a beállítás (Settings) gombot megnyomva átváltottunk az SSBump Generator felületi normális beállítási ablakára (Normal Map Settings). A bal alsó sarokban található zöld pluszjelre kattintva létrehoztunk egy új munkaréteget (Layer).
3
A Choose Preset ablakban pedig a jó minőséget (Fine Detail) választottuk ki. Az alapértelmezett Fine Detail1 rétegnevet aztán PályaNormal-ra változtattuk.
Utána az első szem ikonra (Preview Selected Layers) kattintva megnyílt az előnézeti (Preview) ablak, ahol előnézetben meg lehet állapítani kis gyakorlattal, megfelelő-e az alapértelmezett beállításokkal elért eredmény.
4
Ehhez persze célszerű az előnézeti (Preview) ablakot jóval nagyobbra méretezni. Innentől kezdve a felületi normális térkép beállításait (Normal Map Settings) megváltoztattuk annyiban, hogy a magassági méretezést (Height Scale) az alapértelmezett 05,00 értékről 10,00-ra változtattuk. A szem ikonra kattintva lezajlott az új kép kiszámítás, és az előnézeti ablakban (Preview) való megjelenítése is.
5
A beállítási ablak OK gombjára kattintással elfogadtuk a megváltoztatott paramétereket. Ekkor bezáródott mind a parametrizáló (Normal Map Settings), mind pedig az előnézeti (Preview) ablak is, és visszatért az SSBump Generator központi ablaka.
Itt már csak annyi volt a dolgunk, hogy legeneráljuk a felületi normális térképet (Normal-map) egy képfájlba. Ehhez a kiválasztott elkészítése (Generated Selected) gombra kellett csak kattintanunk. Ekkor Palya_Bump_Full01_Normal.jpg néven a Palya_Bump_Full01,jpg forrásfájlunk mellett el is készült a felületi normális térkép (Normal Map) textúra alapanyaga. Mivel azonban ez kellemetlenül hosszú volt, mi átneveztük Palya_Normal_01.jpg-re.
A továbbiakban megnyitottuk a Blenderben a példajelenetünket, és a kifutópálya modellünk eddig létrehozott textúrarétegeit mind kikapcsoltuk. Létrehoztunk melléjük egy újabb kép típusú (Image or Movie) textúraréteget Heia_Palya_NormalTex néven. Ide az imént elkészült Palya_Normal_01.jpg képünket töltöttük be. Az térképezési (Mapping) panel beállításai, úgy mint UV-térkép (UV-map) beállítása után az Influence panel Color paraméterezője helyett a Geometry Normalt tettük aktívvá. A továbbiakban viszont az Image Sampling (kép mintavételezés) panelen bekapcsoltuk a Normal Map funkciót is. Ennek köszöngetően a Blender a Heia_Palya_NormalTex textúránkba betöltött Palya_Normal_01.jpg kép színinformációit is felhasználja a felületi domborzat leképezéséhez. 6
Ezután már nem tudjuk befolyásolni a felületi domborzat szimulációjának (Bump Mapping) minőségét, de eredendően jobb végeredményt kaptunk, mint a pusztán érték (Value) alapú felületi domborzati árnyékolással (Bump-map).
7
Mivel a felületi normálisok térképek (Normal-map) és a felületi domborzati térképek (Bumpmap) más és más módon működnek, a felületi domborzat szimuláció (Bump-map) beállításakor megadott 0,010 értékű Geometry Normal érték a felületi normális térkép (Normal-map) megfelelő megjelenítéséhez édeskevésnek bizonyult. Az értékelhető eredményhez ebben ez esetben kicsit az SSBump Generator szeszélyességének is köszönhetően a -0.700 érték tűnk a leginkább alkalmasnak.
Végezetül visszakapcsoltuk Palya modellünk Heia_Palya_DiffColorTex textúráját, és a Heia_Palya_NormalTex textúrával együttesen készítettünk egy újabb tesztrendert annak megítélésére, megfelelőnek nevezhető-e a két textúraréteg képi összhatása.
Futómű Sci-fi példajelenetünk futómű modelljének esetében csaknem ugyanúgy jártunk el, mint azt a kifutópálya Palya modelljénél. Elsőként itt is az SSBump Generator programot indítottuk el. Hozzáadtuk [Alt+A] a kép listához (Image List) a HEIA_FUTO_BumpFull_01.jpg képet. Itt is a Normal Map Only beállítási sablont választottuk, majd a beállítások (Settings) gombra kattintva a Normal Map Setting ablakban létrehoztunk egy új réteget (Layer) jó minőséget (Fine Detai) beállítva hozzá, majd ezt a réteget nyomban át is neveztük FutoNormal-ra. Kértünk egy előnézetet (Preview Selected Layer) a FutoNormal rétegünkről, majd kicsit felnagyítottuk az előnézeti (Preview) ablakot, hogy pontosabbon paraméterezhessük a beállításokat. Ez alatt konkrétan a magassági méretezés (Height Scale) alapértelmezett 5,00-ás értékét 10,00-ra való növelését értjük. A beállítások elfogadása után a Generate Selected (kiválasztott létrehozása) gombra kattintással az SSBump Generator szoftver az általunk használt HEIA_FUTO_BumpFull_01.jpg kép mellé, ugyanabba a mappába hozta létre a kész felületi normális térkép (Normal-map) képfájlját HEIA_FUTO_BumpFull_01_Normal.jpg néven. Mivel ezt túl hosszúnak találtuk, ráadásul fennállt a veszélye, hogy összekeverjük a két képet hosszú nevei miatt, egyből át is neveztük HEIA_FUTO_Normal_01.jpg névre. A továbbiakban a Blenderben dolgoztunk tovább. Ahol kikapcsoltuk a Futo_ modellek három eddig elkészült textúrarétegének, a Futomu_Alap_, Futo_ _FestDiff, és a FutoJ_BumpFull textúrarétegeknek a láthatóságát. Létrehoztunk egy új, kép típusú (Image or Movie) textúraréteget Futo_NormalTex néven. E textúrába aztán az SSBump Generator szoftverrel elkészített HEIA_FUTO__Normal_01.jpg képfájlunkat töltöttük be. A Mapping csoportban beállítottuk a 8
textúra által használt UV-térképet, és GLSL nézetben már jól látszódott, hogy megfelelő-e az illeszkedés a FUTO_ modellek felületére.
Ezt követően az Influence csoportban kikapcsoltuk a Diffuse Color paraméterezőt, majd a Geometry Color paraméterezőt aktiváltuk helyette. Emellett az Image Sampling csoportban bekapcsoltuk a Normal Map használatát is. Végül esetünkben úgy tűnt, hogy felületi normális térkép (Normal-map) használata mellett jelen esetünkben a Geometry Normal paraméterező a 0,350 értékre állítva adta a leginkább reálisnak mondható végeredményt.
9
Ezzel végezve visszakapcsoltuk a Futo_ modellek diffúz textúrarétegeit, konkrétan a Futomu_Alap_ és a Futo_ _FestDiff textúrarétegeket egy közös tesztrender erejéig, hogy megfelelően sikerült-e a felületi normális térkép (Normal-map) alapú felületi domborzat szimulációnk (Bump Mapping).
A géptest Sci-fi vadászgépünk géptestének HEIA_Body nevű modelljénél is ezeket a lépéseket követve készítettük el a modell felületi normális térképét (Normal-map). Ugyancsak az SSBump Generator szoftverrel dolgoztunk tovább. Itt a kép hozzáadása (Add Image) [Alt+A] gombokkal adtuk hozzá a projektünkhöz a HEIA_Body modell felületi domborzat térképeinek (Bump-map) képeit, nevezetesen az előző fejezetben létrehozott HEIA_Body_Bump_Gyari_01.jpg és HEIA_Body_Bump_Kopott_01.jpg képfájlokat.
Így az SSBump Generator szoftver képlistájában (Image List) ezúttal már két képfájl jelent meg. Mindkét kép esetében a beállítások (Settings) felületen csak a felületi normál térképeket létrehozó munkaprofilt (Normal Map Only) választottuk ki.
10
Elsőként a HEIA 2x3 vadászgépünk vadonatúj, gyári állapotának felületi domborzati térképeként (Bump-map) elkészített HEIA_Body_Bump_Gyari_01.jpg képfájlt dolgoztuk fel. A beállítások (Settings) gombon keresztül értük el a felületi normális beállításainak ablakát (Normal Map Settings), ahol létrehoztunk egy jó minőségben (Fine Detail) kezelt új képréteget, amit aztán GyáriNormal névvel láttunk el. Ezután a kiválasztott réteg előnézetét (Selected Layer Preview) gombbal előhívtuk. Itt ellenőriztük, milyen változtatásokat célszerű véghezvinnünk a felületi normális térkép beállításaiban (Normal Map Settings). Úgy tűnt, hogy a magassági méretezés (Height Scale) alapértelmezett 5,00 értékének 20,00-ra való növelésén kívül nincs szükség egyéb változtatásokra. Elfogadva az OK gombbal az aktualizált paramétereket, majd visszatértünk az SSBump Generator főablakához. Itt aztán a kiválasztott generálása (Generate Selected) gombbal elindítottuk a felületi normális térkép (Normal-map) fájljának leszámolását. Ezután áttértünk a képlistában alul elhelyezkedő HEIA_Body_Bump_Kopott_01.jpg képfájlra, mely esetében ugyancsak egy új munkaréteget hoztunk létre jó minőségben (Fine Detail) dolgozva. Ezt KopottNormal névvel láttuk el. Ugyancsak minimális módosítást hajtottunk csak végre a felületi normális térkép beállításai (Normal Map Settings) között, ami szintén a magassági méretezés (Height Scale) értékének 20,00ra emelését jelentette. E beállítás elfogadása után megint elindítottunk egy generálási folyamatot a Generate Selected gombbal. A továbbiakban már nem volt szükségünk az SSBump Generatorra, ezért azt bezártuk, majd az általa legenerált igencsak hosszú nevű HEIA_Body_Bump_Gyari_01_Normal.jpg és HEIA_Body_Bump_Kopott_01_Normal.jpg képfájlokat HEIABody_Normal_Gyari01.jpg, illetve HEIABody_Normal_Kopott01.jpg névvel illettük a továbbiakban.
Ezt követően végre ismét a Blenderben dolgozhattunk tovább. Az első dolgunk az volt, hogy a HEIA_Body modell két diffúz (Diffúz_Gyári_Tex, és a Diffúz_Kopott_Tex) valamint az ugyancsak két felületi domborzat (Bump_Gyari_Tex, és Bump_Kopott_Tex) textúrarétegének láthatóságát kikapcsoltuk. Csak ezután hoztunk létre újabb kép típusú (Image or Movie) textúraréteget, Normal_GyáriTex néven. Ebbe az új textúrarétegbe aztán az SSBump Generator által legenerált HEIABody_Normal_Gyari01.jpg képfájlunkat töltöttük be. Aztán a textúra panel (Texture) Influence csoportjában elvégeztük a szükséges módosításokat, vagyis hogy a Diffuse Color paraméterező kikapcsolása után a Geometry Normal paraméterezőt aktiváltuk, valamint az Image Sampling csoportban aktívvá tettük a Normal Map paraméterezőt.
11
Ezek után némi kísérletezés eredményeként arra a megállapításra jutottunk, hogy a Normal map funkció használata mellett 0,300 értékre kalibrált Geometry Normal paraméterező adott megfelelő végeredményt. Mintegy utolsó ellenőrzéshez bekapcsoltuk még a HEIA_Body modellünk Diffúz_Gyári_Tex textúrarétegének is a láthatóságát, és immár két textúraréteg együttes használata mellett készítettünk egy újabb tesztrendert.
12
Mindezek után kikapcsoltuk az összes textúraréteg láthatóságát, hogy egy újabbat hozzunk létre, ami immár a hatodik. Az új textúraréteget kép (Image or Movie) típusúnak állítottuk be, és Normal_KopottTex névvel láttuk el. Ide aztán a HEIABody_Normal_Kopott01.jpg képünket töltöttük be, amit korábban az SSBump Generator szoftverrel hoztunk létre.
A textúra (Texture) panel térképezés (Mapping) csoportjában beállítottuk a textúra kivetítési alapjául szolgáló UV-térképet (UV-map). Az Influence csoportban, miként az előzőekben, most is kicseréltük a Diffuse Color paraméterezőt a Geometry Normalra. Bekapcsoltuk az Image Sampling csoportban a Normal Map funkciót, és néhány tesztrenderrel kikísérleteztük, hogy a megfelelő eredményt 0,350 Geometry Normal értékkel érhetjük el.
13
Ezután az új, Normal_KopottTex textúraréteg mellé visszakapcsoltuk a Diffúz_Kopott_Tex megjelenítését is, hogy így készítsünk egy egyesített tesztrendert.
A kedvező megjelenésű végeredmény ellenére munkánk során azt tapasztaltuk, hogy jeleneten belül több objektum egyidejű felületi normális térképének (Normal-map) párhozamos kezelése nem sorolható sajnos a Blender erősségei közé. Mikor ugyanis egyszerre csak egy objektumon dolgoztunk, nem jelentkezett semmi probléma. Viszont amint megjelenítettük sci-fi példajelenetünk összes objektumát, és úgy indítottuk el a tesztrendereket, nagyon sok esetben a Blender bedobta a törölközőt, és leállt. Próbálkoztunk több dologgal is, hogy e problémát kiküszöböljük, de sajnálatos módon nem sikerült orvosolnunk a dolgot. Sem a jelenet renderrétegekre történő kiosztásával, sem 14
a textúrák alapjául szolgáló képek méretének csökkentésével, sem pedig a renderelt képméret csökkentésével nem tudtunk javítani a helyzeten. Öt-hat render indításából jó esetben ha mindössze egy alkalommal sikerült a Blendernek végigvinnie a folyamatot.
Mikor azonban próbaképpen kikapcsoltuk a felületi normális térképeket (Normal-map) tartalmazó textúráknál a textúra (Texture) panel Image Sampling csoportjában a Normal Map funkciót, ismét stabilan működött minden. Csakhogy így már csupán egyszerű domborzati térképként működtek tovább ezek a textúrarétegek, aminek igazából semmi értelme nem volt, ezért döntöttünk úgy, hogy annak ellenére, hogy igyekszünk nagyon nem a legfrissebb Blender verziót használni, egy kicsit újabb, magasabb verziószámú változatra váltani. Ez a gyakorlatban mindösszesen annyit jelentett, hogy a Blender 2.69-es verziója helyett már a 2.70-es változatot fogjuk használni, kifejezetten a kicsit stabilabb felületi normális térkép (Normal-map) kezelés miatt.
15