Ebben a blogbejegyzésben összefoglaljuk, hogyan tudunk egy teljes berendezett jelenetet fényekkel együtt textúrára égetni.
Az egész művelet alapja, hogy rendelkeznünk kell egy kész jelenettel, amit ki szeretnénk égetni. Ebben a posztban példaként használt jelenetben adott egy terem, amiben különböző tárgyak vannak: székek, asztalok, padok, lámpák stb. Ezt a termet még Blenderen belül fényeljük be, hogy amikor később bármilyen engine-be importáljuk azt, már az általunk látni kívánt végeredmény jelenjen meg, mindenféle utófényelés nélkül.
Mivel egy teremben igen sok objektum lehet, különböző material slot-okkal, különböző textúrákkal ellátva, esetenként egy adott objektumból több is el van helyezve a terem különböző pontjain, ezért az első dolgunk, hogy magát a jelenetet rendezzük, rendszerezzük. Első ízben érdemes a teljes jelenetet, esetleg a teljes projektfájlt duplikálnunk, hogy ha valahol félrenyúlunk, biztosan legyen egy eredeti verzió, ahonnan tudjuk javítani az esetleges hibát.
A fő célunk az, hogy a jelenetben található számos objektum textúráit redukáljuk a lehető legkevesebbre (az optimalizáltság szempontjából), valamint ezen textúrák közül a diffuse map-re legyenek a jelenet fényei is ráégetve. Ehhez célszerű főbb csoportokra bontanunk a jelenetben található objektumokat.
Ezt vegyük úgy, hogy egy csoport = egy material → 3 - 6 texture map, függően attól, hogy metallic, emission vagy alpha map kell-e. Itt nem árt eme utóbbi kérdést figyelembe vennünk a csoportosításnál; például, ha több objektum is rendelkezik metallic map-el, akkor azokat érdemes egy külön csoportba összeszedni, ugyanígy az alpha map-eseket, emission-el rendelkezőket. Az alap, fix 3 map-ünk a diffuse, roughness és normal.
Csoportosításnál figyelnünk kell, hogy a metal, fémszerű vagy fémes elemmel rendelkező objektumok kerüljenek egy csoportba. A terem elemeit - gondolunk itt falakra, padlóra, plafonra, ablakokra, esetleg falon lévő dolgokra (például egy festmény vagy tárolórekesz) - érdemes szintén egy külön csoportba venni. Ezt leginkább azért tesszük, mert nagy, egybefüggő felületeink vannak, amik sok helyet elfognak a UV-n. A harmadik csoportba sorolhatók az egyéb objektumok: padok, asztalok, kisebb tárgyak. Természetesen, ha sokkal több objektumot tartalmaz egy jelenet, érdemes tovább bontani, mert ha túl sok elem kerül egy UV-re, akkor elvesznek a részletek, és nagyon rossz lesz a végeredmény minősége.
Módosítók jóváhagyása
Itt kitérnénk egy kicsit arra, hogy mire figyeljünk a csoportosítás előtt.
Sokszor ismétlődő objektumok esetén előfordulhatnak mirror, array vagy linkelt másolatú objektumok, vagy ezek vegyített változatai, például linkelt objektum mirror-ral. Ezeket mindenképpen alkalmaznunk kell egyesítések előtt. Ezután alkalmazzuk a scale-t és a rotation-t, majd nézzük meg minden objektumon, hogy a normal irányok megfelelően állnak-e. Végül edit mode-ban nézzünk át mindent, hogy nincsenek-e overlap-ek.
Figyelnünk kell arra is, hogy van-e auto smooth az adott objektumon, és ha van, akkor a normal értéke hány fokra van állítva. Ugyanis, ha ezen érték különböző az adott objektumokon egy csoportban, és azokat össze join-oljuk, akkor egyes objektumok megjelenése változni fog, ami eltér(het) a kívánttól. Ilyenkor ezen objektumoknál elkerüljük a mergelést.
Fontos még, hogy minden objektum alap UV-ja ugyanazon nevet viselje (pl.: BaseUV), ugyanis merge után csak egy UV-t tudunk kiválasztani, amiről égetünk. Ha ez nem lesz azonos, akkor az eltérő nevű objektumok esetében nem a kívánt eredményt kapjuk majd vissza égetés után.
Join
Ha mindent rendben találtunk, alkalmaztunk minden módosítót, méretet, akkor az adott csoportokat érdemes össze join-olni egy objektummá. Ez megkönnyíti számunkra a csoportok átlátását, illetve bake-nél is egyben fogja bake-elni, nem objektumonként megy sorba - ami talán picit gyorsabb művelet végrehajtást is eredményez. Viszont, az imént leírt smooth-normal fok esetében előfordulhat, hogy egy-egy elemet ki kell hagynunk a merge-ből, hogy a kívánt eredményt kapjuk. Ilyenkor külön figyelni kell, hogy semmi ne maradjon ki a bake-ből.
Létre kell hoznunk a merge-elt és esetleg szándékosan külön hagyott objektumoknak egy új UV-t, amire majd égetni fogunk. A létrehozás után egyből menjünk is edit mode-ba (itt fontos, hogy ki legyen választva az esetlegesen külön hagyott objektum is), jelöljünk ki mindent, és bontsunk ki egy új UV-t. Ez lesz az újraégetett textúránk alapja.
Material-ok előkészítése
Ezután jön a dolog "nehezebb" része, vagyis, hogy ne vesszünk el a sok elem között. Mire is gondolunk pontosan?
Ugye join-oltunk rengeteg elemet egy objektummá. Ilyenkor az összes material, amit az adott elemen használtunk, rajta lesz a merge-elt objektumon. Itt mindegyik material-ban létre kell hoznunk egy image node-ot, ami azt a képfájlt tartalmazza, amire égetni fogunk. Ennek a legtisztább módja, hogy a listán szereplő első material-ban létrehozzuk az image node-ot, amibe előre bekötünk egy UV node-ot is, ahol kiválasztjuk a UV-t, amire égetni szeretnénk.
Ezt a két node-ot kijelöljük és átmásoljuk a merge-elt objektum összes material slot-jába. Fontos, hogy ha valahonnan kimarad, akkor az eredeti egyik texturánkat fogja felülírni a bake, amit nagyon nem szeretnénk. Bemásolás után ki kell választatnuk az új image node-ot, ugyanis az égetés mindig az aktív node-ra történik (ez szintén igaz minden material slot-ra, mindenhol az új image node kell, hogy az aktív legyen).
Ha minden material-ban szerepel az új image, amire égetni szeretnék, akkor ki kell választatnunk az újonnan létrehozott UV-t is. Figyeljünk arra, hogy az új legyen az aktív, a kiválasztott, viszont a régi UV láthatósága legyen csak bekapcsolva, ugyanis a láthatót fogja égetni az aktívra.
Baking
Célszerű először a diffuse-zal kezdeni, mivel fényeket is be akarunk égetni. Azért hasznos először azzal eljátszani, mert előfordulhat, hogy beégetve egészen más eredményt kapunk fényelés terén, mint amit viewport-on render nézetben látunk. Érdemes előbb diffuse-t égetni, megnézni, hogy minden fény jól jön-e vissza, majd azután tovább menni normal-ra, roughness-re és a többire, ha szükséges.
Diffuse esetében célszerűbb a bake listában a diffuse opció helyett a combined opciót választani, ugyanis az a tapasztalat, hogy az alap diffuse esetén zajos képet kapunk vissza. Combined módnál vegyük ki a pipát minden lehetőség alól, csak a direct, indirect lighting és a diffuse maradjon bekapcsolva, csak azokra van szükségünk. Így ugyanazt a folyamatot égetjük, mintha direkt a diffuse opciót választanánk, viszont itt nem lesz zajos a végeredmény.
Ha kiégettük a diffuse map-ünket, nézzük meg, hogy minden jó-e. Ha nem, állítsunk, amin állítani kell (pl.: fények), ha jó, akkor mentsük az image fájlt, és mehetünk tovább a normal-ra.
Mentésnél a save as opciót válasszuk, ugyanis szándékosan csak egy image node-ot hoztunk létre minden material slot-ban a belekavarodás elkerülése érdekében, hogy ne kelljen minden map-nél végigmenni minden material-on, és átállítani az aktívot a kívánt image node-ra. Viszont mivel csak egy node-unk van, ezért, ha folyamatosan a sima save-re nyomunk, akkor mindig felülírnánk az előzőleg kiégetett mapet. Minden égetés után save as, majd az adott néven (diffuse, normal stb.) mentjük le a képet.
A normal map-et is érdemes égetés után szemrevételezni, ugyanis történt már velünk olyan anomália, hogy a substane-ből kijött jól kinéző normal map blenderben újraégetve rossz eredményt adott vissza. Ennek orvoslása annyiban történt meg, hogy substance-ben le lett cserélve a hibát okozó textúra.
Ha a normalt is rendben találjuk, jön a roughness, és kész is az alap felállás. Ezután már csak az extrák vannak, mint pl.: metallic, emission. Ezen két példa esetében problémásabb az alap blender bake-et használni, ezért segítségül hívjuk a TexTools addont, amivel pár kattintásból ki tudjuk égetni mindkét map-et. Alpha esetén nem szükséges külön alpha map-et égetni, ugyanis a diffuse is tartalmaz alpha adatot, ezt fel tudjuk használni.
Ha megvan minden kívánt map, duplikálnunk kell a merge-elt objektumot, majd törölni róla minden material-t és az alap UV-t, amiről égettünk. Ezután létrehozunk egy új material-t, amibe bekötjük az égetett map-eket, és kész is a végeredmény.
Az egyes map-ek ellenőrzését is ugyanígy tudjuk elvégezni: másolt objektum, material slot-ok törlése, bekötés, viszont figyelni kell arra, hogy ellenőrzés után töröljük a másolt teszt objektumot, nehogy felszaporodjanak és elvesszünk, vagy elfelejtsünk visszaváltani újraégetés esetén, és rosszat égessünk ki. Legtisztább előnézet után törölni, majd ha mindennel megvagyunk, újramásolni a végső változatot. Ezzel könnyen elkerülhető a belekavarodás.
Ha az első csoportnál minden rendben, akkor nincs más dolgunk, mint megcsinálni a többit ugyanezen lépések mentén.
Ha érdekel a Blender világa, tarts velünk későbbi blogposztjainknál is!
A cikket írta és szerkesztette: Cs. Krisztián