Talaj készítése Unity-ben (1. rész)

Talaj készítése Unity-ben (1. rész)

Bevezetés

A leírás a Unity Terrain Engine-t mutatja be, melynek használata bizonyos szintű előképzettséget igényel, ezért aki csak most kezd bele a Unity-be, annak az alapokat bemutató írásokat javasoljuk az induláshoz.

A következő anyag megértéséhez fontos, hogy tisztában legyünk az alapfogalmakkal, projektekkel, az asset-kezeléssel és a GameObject-komponens modellel.

Talaj létrehozása

A scene-hez történő talaj létrehozásához kattintsunk a Terrain/Create Terrain menüponton, a főmenüben:

Talaj készítése

Ez a lépés egy új Terrain Asset-et ad a Project nézethez, továbbá egy GameObject is létrejön a scene-ben egy Terrain (Script) komponenssel, valamint egy Terrain Collider komponens, amely az új Terrain Asset-re fog mutatni.

Új talaj

 

Talaj felbontása

Amennyiben a jelenleg kiválasztott talaj beállításait szeretnénk módosítani, használjuk a Terrain/Set Resolution menüt a főmenüből:

Talaj felbontás

 

A Set Heightmap Resolution párbeszédablakban a következő jellemzőket láthatjuk:

  • Terrain Width: Megadhatjuk a talaj szélességét (X tengely) világegységben.
  • Terrain Height: Megadhatjuk a talaj maximális magasságát (Y tengely) világegységben.
  • Terrain Length: Megadhatjuk a talaj hosszát (Z tengely) világegységben.
  • Heightmap Resolution: A magasságtérkép felbontását állíthatjuk be. A magasságtérkép mindig egy négyzet alakú textúra. Ez az érték lesz a szélesség és hosszúság is, függetlenül a talaj alakjátol.
  • Detail Resolution: A részletességtérkép felbontása szabályozza a füvet és a háló sűrűségét. A legjobb teljesítmény érdekében ezt az értéket a lehető legalacsonyabban érdemes tartani, amely még hozza az elvárt részletességet.
  • Detail Resolution Per Patch: A részletes textúra e szerint a paraméter szerint szétbontásra kerül, és minden így keletkező darab egy geometriaként és egy textúraként tartalmaz minden részletet (fű és háló). Ha például a Detail Resolution 1024×1024 és a Detail Resolution Per Patch 8, akkor a darab felbontása 128×128 lesz. A nagyob paraméter kevesebb részletet jelent, így a GPU is kevessebbet számol, ha nagy a belátható terület. A kisebb értékek több rajzolást eredményeznek. A legoptimálisabb az, ha laposabb a terület, ekkor inkább nagyobb értéket (64-128) használjunk. Viszont ha hegyes-völgyes a táj, akkor kisebb beállításokkal (8-16) is operálhatunk.
  • Control Texture Resolution: A vezérlő textúra felbontása, melyet a talaj különböző textúráinak festéséhez használunk.
  • Base Texture Resolution: Alap textúra, melyet akkor használunk, ha a megfigyelő kellő távolságban van.

Talaj magasságtérképe

A magasságtérkép egy 2D-s textúra, amely a talaj magasságát kódolja. Az ábrázolás többnyire 8 vagy 16 biten történik, és az értkek 0 és 1 között találhatóak. A 0 a legalacsonyabb, míg az 1 a legmagasabb pontot jelöli.

Terrain 257x257

Magasságtérképet külső eszközzel, például Terragen-nel vagy az Asset Store-ban elérhető plugin-nel generálhatunk.

Terrain Toolbar

Az első három gomb a Terrain Toolbar-on a talaj magasságának módosítását teszi lehetővé:

  • Raise/Lower Height: Többféle ecset használatával állíthatjuk a magasságot.
  • Paint Height: Egy adott magasságra “festhetjük” a talajt.
  • Smooth Height: Ezzel az eszközzel finomíthatunk a talaj durva élein.

Raise/Lower Height

Ahogyan a neve is sugallja, ezzel az eszközzel növelhetjük vagy csökkenthetjük a magasságot. A talaj maximum magassága legfeljebb 1 lehet, és nem is állíthatunk be 0-nál kisebb értéket. A magasságérték mindig egy 0 és 1 közé eső tört.

Raise-Lower Height

A talajra való kattintással fokozatosan növelhetjük a magasságot. A Shift nyomva tartásával a magasságot ugyanígy csökkenthetjük. Az egérgomb folyamatos nyomva tartásával a csökkentést/növelést is folyamatossá tehetjük.

Raise-Lower Terrain Tool

A Raise/Lower Height ecset az alábbi paraméterekkel rendelkezik:

  • Brush Size: A csúszkával az ecset méretét állíthatjuk a magasságtérkép felbontási egységében. A minimum érték 1 magasság pixel, míg maximum értékként 100 magasság pixelt állíthatunk be.
  • Brush Opacity: Az ecset-átlátszóság határozza meg a változás intenzitását. A 0-ás értékkel nem fogunk előidézni változást, míg 100-ason a talaj a maximális növekménnyel fog változni.

Paint Height

A Paint Height segítségével lapos talajt készíthetünk úgy, hogy egy adott magasságot kezdünk el festeni. Síkságok és fennsíkok készítésére kiváló eszköz.

Paint Height Terrain Tool

A Paint Height ecset paraméterei a következők:

  • Brush Size: Az ecset sugarát állíthatjuk itt be a Raise/Lower Height-hez hasonlóan. A minimum és maximum értékek itt is 1 és 100 magasság pixelek.
  • Brush Opacity: Az ecset-átlátszóság határozza meg a változás intenzitását. A 0-ás értékkel nem fogunk előidézni változást, míg 100-ason a talaj itt is maximális mértékben fog változni.
  • Height: Az ecset lényege, itt adhatjuk meg, hogy milyen magasra fesse a talajt az eszköz. Ez az érték világegységben értendő. A minimum érték 0, a maximum a Terrain Height paraméter, amelyet a Terrain Heightmap Resolution-nél állítottunk be. Ezt az értéket kézzel is tudjuk állítani a csúszka segítségével, de ha a Shift-et nyomva tartva kattintunk egy ponton a talajon, akkor annak a magasságát is beállíthatjuk.

Smooth Height

Miután többször módosítottuk a talajt a Raise/Lower és a Paint Height eszközökkel, az elég darabossá tud válni. A Smooth Height az ilyen durva szerkezeteket simítja ki, így egy sokkal természetesebb talajt kapunk. Ez hasonló az erózióhoz, melyet több ezer év időjárási hatása okoz.

Az alábbi kép szemlélteti, milyen durva felületek tudnak létrejönni:

Talaj simítás előtt

Simítás után:

Talaj simítás után

A Smooth Height a következő paraméterekkel rendelkezik:

  • Brush Size: Az ecset sugarát állíthatjuk itt be a már ismert módon. A minimum és maximum értékek itt is 1 és 100 magasság pixelek.
  • Brush Opacity: Az ecset-átlátszóság határozza meg a változás intenzitását. A 0-ás értékkel nem fogunk előidézni változást, míg 100-ason a talaj a legnagyobb simítást kapja.

Magasságtérkép importálás/exportálás

A tökéletes magasságtérkép elkészülte után lehetőségünk van exportálni azt, hogy később egy másik projektünkben is használjuk vagy külső programmal finomítsunk még rajta. Külső programmal (pl.: Bryce, Terragen, vagy Photoshop) készült magasságtérképünket ugyanitt importálhatjuk is.

Az exportáláshoz kattintsunk a Terrain/Export Heightmap – Raw… menüponton a főmenüben:

Export Heightmap

Ezután az Export Heightmap párbeszédablaknak kell megjelennie:

Heightmap Export párbeszédablak

Az esetek többségében az alapbeállítások megfelelőek, ezért kattintsunk az Export gombon, ígyaz alkotásunk átkerül egy nyers fájlba.

Mivel nyers formában került exportálásra a magasságtérkép, nem tartalmazza a pixel formátumot vagy dimenziót, ezért ezeket ajánlott beleírni a fájlnévbe. Péládul egy 16 bites, 257×257 pixeles magasságtérképet valami hasonló néven javasolt elmenteni: terrain_257x257_16-bit.raw

Ezzel a módszerrel, ha külső programmal akarjuk használni ezt a fájlt, egyből láthatjuk, milyen is a benne lévő adat. Photoshop-ban például egy ilyen párbeszédablakban tudjuk beállítani, hogyan értelmezze a program a fájlunkat:

Photoshop nyers fájl opciók

Abban az esetben, ha helyesen adtuk meg az értékeket, a Photoshop-ban is ugyanazt kell lássuk mint Unity-ben:

Photoshop nyers fájl szerkesztés

A kívánt módosítások elvégzése után importálhatjuk is az új fájlt Unity-be. Kattintsunk a Terrain/Import Heightmap – RAW… menüponton, és megkezdhetjük az importálást.

Talaj textúrák

A textúrákat a Paint Texture eszközzel tudjuk rátenni a talajra:

Paint Texture

Mielőtt bármilyen textúrát rá tudnánk tenni a talajra, legalább egyet hozzá kell adnunk a talajhoz. A gyors haladás érdekében a Unity terrain asseteket is tartalmaz a Standard Package-ben. Az importáláshoz válasszuk ki az Assets/Import Package/Terrain Assets menüt:

Import Terrain Assets

 

 

Kattintsunk az Import gombon, így bekerülnek a textúrák a projektbe.

A Paint Texture eszközt kiválasztva kattintsunk az Edit Textures… gombon, és válasszuk ki az Add Texture opciót a felugró lehetőségek közül:

Textúra hozzáadása

Ezután az Add Terrain Texture párbeszédablaknak kell megjelennie:

Add Texture párbeszédablak

Az Add Terrain Texture párbeszédablakban a következő paraméterek találhatóak:

  • Splat: A textúra, amit alkalmazni kell.
  • Tile Size: A csempe mérete, melyre rá lesz húzva a textúra. Nagyobb csempeméret esetén kevesebb csempedarabból fog állni a talaj. Kisebb méret esetén a textúra többször fog ismétlődni.
  • Tile Offset: A paramétert állítva eltolhatjuk a textúrát. Ez akkor hasznos, ha több réteget szeretnénk összeolvasztani ugyanazzal a textúrával, hogy megtörjük az ismétlődést.

Kattintsunk a Splat paraméteren, és válasszuk ki az alkalmazandó textúrát:

Textúra kiválasztása

Az alkalmazás után a textúrának be kell borítania az egész talajt:

Textúrázott talaj

A Paint Texture eszköznek a következő paraméterei vannak:

  • Textures: Itt láthatjuk a talajhoz rendelt textúrákat. Maximum 255 textúrát adhatunk hozzá a talajhoz.
  • Brush Size: A Paint Brush sugara pixelben a Control Texture felbontásában.
  • Opacity: A textúra alkalmazásának intenzitása, melyet százalékban adhatunk meg.
  • Target Strength: Itt szabályozhatjuk az aktuálisan használt textúra alkalmazhatóságának limitjét. Ez egy arányszám a textúra és az alatta lévő textúra között. Ha nem szeretnénk több, mint 50%-os Opacity-t használni, akkor ezt 0.5-re kell állítanunk.

Mielőtt textúrákat mosnánk össze a talajon, legalább kettő textúrának kell lennie a listában. Adjunk hozzá néhány textúrát, és használjuk a Paint Texture eszközt talajunk kicsinosításához. Az aktuálisan használt textúra kékkel lesz bekeretezve az Inspector nézetben.

Textúrázott talaj

Tudomásunk szerint nincs opció arra, hogy magasság és lejtés szerint alkalmazzunk textúrákat, azonban valószínűleg erre létezik (fizetős) plugin.

A következő részben egy mérföldkőhöz érkezünk, mivel a talajunkra objektumokat is el fogunk helyezni. Kezdésképpen megtanuljuk, hogyan kell fát ültetni.

3DGEP

Skeldar

0 válaszok

Hagyjon egy választ

Want to join the discussion?
Feel free to contribute!

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük