játékfejlesztés.hu
FórumGarázsprojectekCikkekSegédletekJf.hu versenyekKapcsolatokEgyebek
Legaktívabb fórumozók:
Asylum:    5448
FZoli:    4892
Kuz:    4455
gaborlabor:    4449
kicsy:    4304
TPG:    3402
monostoria:    3284
DMG:    3172
HomeGnome:    2919
Matzi:    2520

Pretender:    2498
szeki:    2440
Seeting:    2306
Geri:    2188
Orphy:    1893
Joga:    1791
Bacce:    1783
MaNiAc:    1735
ddbwo:    1625
syam:    1491
Source Tutorial #3 - Textúra készítés 2009.10.04 13:36




A mostani tutorial a saját textúrák és az azokhoz tartozó további effektek elkészítéséről szól, hogy mi is az a normal map, enviroment map. Itt már sajnos nem elég egyszerűen megrajzolni a képet és berakni a megfelelő mappába, a Valve Texture format (VTF) és a Valve Material Type (VMT) szerkesztését is meg kell tanulni. Ezekhez a műveletekhez már néhány programra is szükség lesz, amik szerencsére könnyen beszerezhetőek.

Textúrák készítéséhez szükséges programok

VTFedit - kezeli a Half-Life 2 textúrákat és a hozzájuk tartozó VMT fájlokat, valamint konvertálni és normal mapet készíteni is lehet vele. Szinte hivatalosnak mondható Source motorhoz való textúrázó program.

Valamilyen rajzoló program aminek a segítségével megrajzolhatjuk vagy átalakíthatjuk a textúrákat, Photo Shop-hoz van VTFplugin amivel konvertálás nélkül szerkeszthetjük a textúrákat. Használható még erre a célra Paint Shop Pro, Gimp vagy bármilyen rajzoló program ami tud TGA formátumba menteni.

Amint ezek a programok megvannak, neki is kezdhetünk a textúra gyártásának. Először is rajzoljunk mondjuk egy 512x512-es textúrát. ( Arra mindig figyeljünk oda, hogy a textúrák mérete mindig a jó öreg "Power of 2" elv szerint készüljenek, tehát például 128x512 vagy 256x256. Maximum talán a 2048x2048-as textúrát érdemes használni, de ez leginkább csak modelleknél ajánlott, például Alyx textúrájánál. Miután megrajzoltuk a textúrának szánt képet, mentsük el TGA formátumba. Az én textúrám így néz ki, de ez persze csak a bemutatás céljából készült.



Most ezt az 512x512-es képet át kell konvertálnunk VTF-be és meg kell hozzá írni a megfelelő VMT-t is. Aki Photo Shopot használ az a plugin segítségével egyből VTF-be tudja menteni a képet. A konvertáláshoz pedig nyissuk meg a VTFedit-et és importáljuk be a textúránk TGA kiterjesztésű változatát. Itt felugrik egy ablak amin beállíthatjuk, hogy magától átállítsa a kép méretét a "Power of 2" méretekre és még sok más amiket az elején nem kell nagyon állítgatni. Ha ezzel megvagyunk akkor érdemes megnézni a Ctrl+T-vel, hogy a textúránk ismételhető-e. Mert ha például téglafalat szeretnénk csinálni, ott fontos, hogy ne látszódjon az átmenet a két textúra között.



Nekem most szerencsém volt és alapból egy olyan fal textúrát találtam ami ismételhető és nem látszik az átmenet. Az options fülnél legyen bepipálva, hogy "auto create VMT file", így a program magától ír majd nekünk egy alap VMT fájlt amin esetenként sok mindent kell még állítgatni. Most már csak el kell menteni a textúrát. Fontos, hogy a textúráinkat mindig jó helyre mentsük, az én textúrámat a "steamapps / felhasználónév / half-life2 / hl2/ materials / concrete" mappába fogom menteni, tehát ha a Half-Life 2 fogja használni ( például a Counter-Strike nem fogja megtalálni ). Általában minden játéknál van materials mappa amibe a textúrákat lehet pakolni. Most keressük meg az elmentett textúránk mellett lévő VMT fájlt.



Ez egy alapvető VMT amiben semmi más nincs, csak az alap textúra helye és az, hogy ez a textúra falakra való. Most leírok pár paramétert amiket használni lehet a VMT fájlokban.

$basetexture - Az alap textúra helyét határozza meg, a material mappa a gyökér könyvtár.
$surfaceprop - A textúra felszínének anyagát határozza meg, lehet például fa, fém, üveg, stb. A pontos listát itt lehet megtekinteni.
$detail - A textúra felszínére lehet egy detail textúrát rakni amitől töredezett beton vagy acéllemez szerű lesz a felület. A Source SDK hivatalos honlapján meg lehet nézni a detail textúra típusait és hogy mennyivel teszi szebbé a textúrákat.
$envmap - Egyszerű tükröződés ami a környezetet tükrözi vissza, pédául üvegeknél és fémeknél szokták használni, ezekhez szükséges az env_cubemap entity.
$bumpmap - Normal map ( vagy bump map ) helyét határozza meg, hogy aminek kell, az a fény hatására domborodjon, téglák, deszkákból álló falak, sziklás talaj.

Egy körülbelül mostani elvárásoknak megfelelő Source textúra körülbelül ennyi adatot tartalmaz. Ezeket a paramétereket nekünk kell majd megírni a textúra elvárásainak megfelelően.



A legelső "LightmappedGeneric"-re érdemes odafigyelni mert ez határozza meg, hogy a textúránk falakhoz használható vagy modellekhez. Ha valaki model textúrát szeretne csinálni akkor ott a "VertexLitGeneric" paramétert kell használni, különben nem tudja a játék kirajzolni a textúrát. A saját textúránkhoz tartozó VMT fájl elvileg alapból jól fog működni és egyelőre nem kell hozzáírni semmit, nyissuk meg a Hammer Editort az SDK-ból és keressük meg a textúránkat. Húzzuk rá a textúrát valamilyen falra és nézzük meg a játékban is, hogy mit alkottunk.



Eddig jól néz ki a dolog de még nem az igazi. A tégláknak szépen kéne domborodnia ha fény éri őket, ez által is növelve az élethű megjelenést. A bump map-et vagy más nevén normal map-et lehet programmal is generálni mint például crazybump vagy lehet a VTFedit-tel is konvertálni. Ilyenkor ismét be kell importálni a TGA-t és a felugró ablakban bepipálni, hogy generate normal map. Mivel az én falam elég darabos és kilógnak belőle a téglák ezért a scale-t felhúzom 8.00-ra és miután rányomunk az Ok-ra, kész is a normal map, ami körülbelül így nézhet ki.



Vegyük ki az options fülön az "auto create VMT file" pipát mivel ez most nem egy új textúra lesz, aztán mentsük el ugyanoda ahol a sima textúra van. A szép és rendezett munka kedvéért tegyük utána mindig, hogy _normal. Az én textúrám tehát Ashkandi_normal.vtf lett. Nyissuk meg a textúrához tartozó VMT fájlunkat és írjunk egy olyan sort, hogy

"$bumpmap" "concrete/ashkandi_normal"

Természetesen mindenki a saját textúrájának nevével és elérési útjával csinálja. Így néz ki a jelenlegi VMT fájl, amihez két textúra van rendelve: egy base map és egy normal map.



Most pedig fogjuk a zseblámpánkat és világítsuk meg a textúrát a játékban, hogy mennyire sikerült élethűre varázsolni azt a téglát. Ehhez kicsit lejjebb kell húzni a fények erejét, hogy jobban lássuk a különbséget. Nekem most így sikerült a téglás felületet megcsinálni, persze sokat el lehet időzni a megfelelő beállításokkal, hogy még tökéletesebb legyen.



Ha esetleg enviroment map-et ( tükröződést ) lenne kedvünk csinálni, az is megoldható, persze a téglás falamon nem a legjobb tükröződést használni, de végülis miért ne. Fontos, hogy bumpmap és Envmap NEM lehet egyszerre a textúrán, ilyen esetben a normal map alpha channeljére kell rajzolni a fekete-fehér mintát és a "$normalmapalphaenvmapmask" 1 paramétert használni. Ilyenkor a normal map alapján csillog majd a fal, ezt talán a Left4Dead használja a legjobban a sok nyírkos, ködös helyen.

Az enviroment map-hez csinálnunk kell egy fekete fehér képet a textúránkból, amiben a fehér jelenti a csillogást és a fekete a matt felületet. A textúrát az eddig tanultak alapján konvertáljuk át VTF-be, adjunk a nevéhez egy _ref jelzőt amiből tudni fogjuk, hogy ez a tükröződést meghatározó textúra, aztán a VMT-hez írjunk 2 sort pluszba:

$envmap env_cubemap
$envmapmask "concrete/ashkandi_ref"

( A bump mapes sort töröljük mert a kettő együtt nem működik )

A textúránál nyugodtan használjunk átmeneteket és szürke színeket is. Én most csak egy véletlenszerűen sötétített és fekete-fehér képet csináltam a textúrából ami így néz ki:



Jól látszik, hogy a téglák többnyire matt felülettel rendelkeznek majd ( fekete szín ) és a felirat környéke fog egy picit csillogni ( szürke szín ).A teszteléshez ne feledkezzünk meg az env_cubemap entity-ről amit körülbelül térd magasságban helyezzünk el a pályán. Ez az entity csinál hat képet maga körül amiket visszatükröz majd. Miután leraktuk az entity-t és összeraktuk a mapot, irány tesztelni. Amikor elindítottuk a játékot, a konzolba üssük be a Buildcubemaps parancsot, pár másodperc ( vagy több env_cubemap esetén több perc ) után el is készülnek a tükröződő képek és a falunk szépen csillog majd.



Az én téglából készült falam elég idétlenül néz ki, de végülis sikerült összehozni a tükröződést. Egy fémlemeznél, ablaknál, parkettánál nagyon jól mutat ez az effekt, érdemes szánni rá egy kis időt és megcsinálni hozzá azt az egy darab fekete-fehér képet.

Értékelés: 10.00

Új hozzászólás
k_wili          2010.08.19 13:21
hello

most találtam rá erre a tavalyi cikkedre, ami szerintem nagyon jó
egy forma1-es lebegő autot szeretnék berakni egy játékba, és hl2-re esett a választás
mert úgy tűnik jól modolható. max formátumú az autó, szerinted jó ötlet ebbe a játékba írni és
készíteni hozzá egy pályát editorral, vagy más játékba könnyebb lenne? nekem egyelőre
a leírások alapján nagyon szimpatikus a hl2 (ep2) kis rendszerigény, jo effektek, sok editor...
köszi a segítséget,
üdv,

Wili
Ashkandi          2009.10.17 10:49
Itt lehet megtekinteni: Source SDK oldala
proof88          2009.10.17 08:41
Photo Shop - egybeírandó

Először is rajzoljunk mondjuk egy 512x512-es textúrát. ( Arra mindig figyeljünk oda, -ennek a végén nem zártad a zárójelet.

$surfaceprop - A textúra felszínének anyagát határozza meg, lehet például fa, fém, üveg, stb. A pontos listát itt lehet megtekinteni. - nincs link!

Amúgy grat a cikkhez!