TUTORIAL: Materiały

Zaglądnij tutaj, jeśli masz pytania lub uwagi dotyczące różnorodnych aspektów tworzenia misji w edytorze Darkmod, jak też związanego z nimi oprogramowania i sprzętu.

Moderatorzy: peter_spy, timon

Awatar użytkownika
Juliusz
Złodziej
Posty: 2774
Rejestracja: 04 stycznia 2004, 11:28
Lokalizacja: Dublin
Kontakt:

TUTORIAL: Materiały

Post autor: Juliusz »

MATERIAŁY

1. Materiały - co to takiego?
2. Podstawowa składnia deklaracji
3. Przezroczystości - sposób 1 (alphatest)
4. Zmiana kolorystyki tekstur
5. Efekt rozświetlania obiektów (frob highlight)
6. Rodzaje powierzchni
7. Przesunięcia, skalowanie, animacja tekstur



1. Materiały - co to takiego?
Deklaracje materiałów (czasem nazywane także shader'ami) odpowiadają przede wszystkim za wygląd powierzchni brushy oraz modelów. Możliwości w tej mierze są ogromne i trzeba być starym wyjadaczem, żeby wszystkie kiedykolwiek wypróbować, ale wystarczy ich podstawowa znajomość, żeby radzić sobie w 90% przypadków, a średnia, żeby znacząco ożywić wygląd obiektów w grze.

Innymi rzeczami, za które materiały są odpowiedzialne to właściwości fizyczne powierzchni oraz interakcje gracza oraz AI z daną powierzchnią. Materiały odpowiadają za dźwięki wydawane przy kolizji oraz reakcje na zderzenie strzały (powierzchnie drewniane, metalowe, szklane itp.), Tutaj ustala się, czy po danej powierzchni gracz może się wspinać, strażnik może chodzić, pocisk być zablokowany oraz wiele innych.

2. Podstawowa składnia deklaracji
Deklaracje materiałów znajdują się we folderze darkmod/materials w plikach tekstowych z rozszerzeniem .MTR. Można umieszczać je także w innych folderach czy plikach, ale wówczas taka deklaracja musi być poprzedzona słowem "MATERIAL" (przed nazwą).

Przykładowy prosty materiał, używany przy teksturowaniu brushy wygląda tak:

Kod: Zaznacz cały

textures/darkmod/stone/flat/ceramic_mosaic_decorative01
{
    stone
    qer_editorimage textures/darkmod/stone/flat/ceramic_mosaic_decorative01_ed

    diffusemap      textures/darkmod/stone/flat/ceramic_mosaic_decorative01    
    bumpmap         textures/darkmod/stone/flat/ceramic_mosaic_decorative01_local
    specularmap     textures/darkmod/stone/flat/ceramic_mosaic_decorative01_s

}
A dla modelu na przykład tak:

Kod: Zaznacz cały

tdm_sign_shield01
{   wood

    diffusemap  models/darkmod/props/textures/sign_shield01
    bumpmap     models/darkmod/props/textures/sign_shield01_local
} 
Pierwsza linijka to nazwa. W przypadku tekstur używanych w edytorze brushy jest równoznaczna ze ścieżką dostępu do tekstury diffuse. W przypadku modeli nie ma takiej konieczności - grunt, żeby nazwa materiału nadana w programie 3D była identyczna z nazwą materiału. Nazwy materiałów dla modeli przyjmuje się zaczynać przedrostkiem "tdm_", ale nie jest to sztywna reguła.

Następnie: całość deklaracji zawarta jest w klamrach { }. Klamrami zaznaczane są również poszczególne etapy materiału (stages), które wymagają większej ilości danych i nie mieszczą się w jednej linijce (później o nich więcej).

Następnie pojawia się lista słów globalnych materiału - najczęściej jest to rodzaj powierzchni (metal, stone, wood itp.), co ma wpływ głównie na dźwięki kolizji, kroków, a także reakcje strzał (wbija się, łamie itp.) O tym więcej nieco później.

Kod: Zaznacz cały

qer_editorimage textures/darkmod/stone/flat/ceramic_mosaic_decorative01_ed
ten parametr nie jest konieczny - określa tylko ścieżkę dostępu do tekstury używanej w edytorze. Jest to po prostu miniatura tekstury, np. 256x256, format .JPG.
Niektóre skomplikowane materiały nie są rozpoznawane przez edytor map, więc tutaj można zdefiniować teksturę zastępczą.

Następnie część główna, czyli tzw. etapy rysowania materiału:

Kod: Zaznacz cały

diffusemap      textures/darkmod/stone/flat/ceramic_mosaic_decorative01
Najważniejsza część materiału - mapa typu diffuse, czyli kolory w świetle rozproszonym. Ten etap odpowiada za cieniowanie powierzchni. Odpowiednik tekstur w Dromedzie.

Rozszerzenie tekstur nie jest konieczne w deklaracji. Doomengine zezwala na formaty .TGA oraz .DDS.

Tekstura dla etapu diffuse miewa często przyrostek _d, ale nie jest to konieczne.

Kod: Zaznacz cały

    bumpmap         textures/darkmod/stone/flat/ceramic_mosaic_decorative01_local
Mapa normalnych, czyli złudzenie nierówności na powierzchni. Tekstura ma przyrostek _local

Kod: Zaznacz cały

specularmap     textures/darkmod/stone/flat/ceramic_mosaic_decorative01_s
Tekstura połyskliwości. Najczęściej w odcieniach szarości, ale może być także kolorowa (np. metale wyglądają lepiej z odbiciami kolorowymi). Silnik Dooma ma tendencje do przesadzania z tymi odbiciami, więc zalecam stosowanie jej tylko do powierzchni naprawdę tego potrzebujących, i raczej w ciemnych tonach.
Przyrostek dla tekstur połyskliwości to _s


Tak wygląda jakieś 80% materiałów i powyższe wystarczy na przygotowanie materiałów do większości tekstur używanych na ścianach, podłogach itp.



3. Przezroczystości - sposób 1
Aby uzyskać materiały imitujące drobną architekturę (np. kraty, metalowe poręcze) albo inne ażurowe formy, jak liście itp. należy stworzyć maskę przezroczystości. Jest to czarnobiały obrazek, gdzie biel oznacza widoczną część tekstury, a czerń niewidoczną. Należy ją zapisać jako kanał o nazwie Alpha1 (domyślna nazwa) w teksturze typu diffuse we formacie .TGA 32-bit. (normalnie tekstury zapisujemy jako .TGA 24-bit).

Następnie etap diffuse, np.:

Kod: Zaznacz cały

diffusemap  models/darkmod/props/textures/sign_shield01
należy zastąpić czymś takim:

Kod: Zaznacz cały

{
  blend diffusemap
  map models/darkmod/props/textures/sign_shield01
  alphatest  0.5
}
Wpierw słowo wyjaśnienia: wyrażenie diffusemap ścieżka/obrazek jest po prostu skróconą formą od

Kod: Zaznacz cały

{
  blend diffusemap
  map ścieżka/obrazek
}
A więc w powyższym przykładzie dochodzi nam tylko jedna komenda: alphatest. Oznacza ono, że tekstura będzie rysowana w zależności od koloru w kanale alpha, a wartość 0.5 jest wartością szarości, która jest niejako progiem - wszystko co ciemniejsze jest traktowane jak czerń, a wszystko co jaśniejsze jest traktowane jak biel. Nie ma tutaj półtonów. Można z tą wartością poeksperymentować, jeśli krawędzie wyglądają w sposób niezadowalajacy.


4. Zmiana kolorystyki tekstur
Masz teksturę, która się Tobie podoba, ale ma nie taki odcień, jaki byś chciał? Nie musisz tworzyć nowej - możesz ją przekolorować korzystając z kilku kolejnych komend:

ŚCIEMNIANIE
Aby ściemnić jakąś teksturę użyj parametru RGB oraz wartości od 0 do 1, np.

Kod: Zaznacz cały

{
  blend diffusemap
  map models/darkmod/props/textures/sign_shield01
  rgb 0.9
}
powyższe spowoduje nieznaczne ściemnienie tekstury - 0.9 aktualnej jasności.

ZMIANA ODCIENIA
RGB ściemnia obrazek jednolicie. Możemy za pomocą słów Red, Green lub Blue zmieniać osobno jasność kanałów czerwonego, zielonego i niebieskiego. ,np:

Kod: Zaznacz cały

{
  blend diffusemap
  map models/darkmod/props/textures/sign_shield01
  red   0.3
  green 0.8
}
spowoduje to zakolorowanie się tekstury na niebiesko- zielonkawy odcień. (zmniejszyliśmy znacząco zawartość czerownego, lekko zielonego, zostawiając niebieski nieruszony).

Można też to samo uzyskać w jednej linijce:
color 0.3, 0.8, 1, 1
trzecia jedynka oznacza nieruszony kanał niebieski, natomiast czwarta liczba tyczy się kanału alpha - możemy w ten sposób zwiększać przezroczystość obiektu (ściemniając kanał alpha)

ROZJAŚNIANIE
Rozjaśnianie jest nieco bardziej złożone, bowiem nie da się po prostu użyć komendy rgb z liczbą większą od 1. Trzeba użyć dodatkowego etapu - etapu dodawania (ADD stage)

Kod: Zaznacz cały

{
  blend add
  map _white.tga
  rgb 0.2
}
_white.tga (a także _black.tga) są to tekstury systemowe - całkowita biel i całkowita czerń. Jeśli chcemy rozjaśnić nieznacznie, musimy białą teksturę przyciemnić parametrem rgb do pożądanego odcienia szarości. W przeciwnym razie pokryjemy całą powierzchnię obiektu mleczną bielą.

Możemy zamiast rgb zastosować parametry red, green i blue (lub color), powodując, że tekstura oprócz rozjaśnienia zmieni także zabarwienie.


5. Efekt rozświetlania obiektów (frob highlight)
W Dark Modzie, efekt podświetlania obiektów podczas frobowania jest obsługiwany również poprzez materiały (i kod oczywiście też). Do każdego materiału obiektu, który może być frobowany należy dołączyć taki fragment kodu:

Kod: Zaznacz cały

{
        if ( parm11 > 0 )
        blend       gl_dst_color, gl_one
        map         _white.tga
        rgb         0.40 * parm11
    }
    {
        if ( parm11 > 0 )
        blend       add
        map         models/darkmod/props/textures/curtain01_d.tga
        rgb         0.15 * parm11
    }
Są to dwa etapy, które rysowane są warunkowo (if). Wartość parametru parm11 ustawiana jest przez skrypt. Pierwszy etap rozjaśnia model w zależności od oświetlenia, a drugi rozjaśnia teksturą diffuse. Można pobawić się parametrami rgb 0.40 oraz 0.15, jeśli dany materiał rozświetla się za słabo lub za mocno.


6. Rodzaje powierzchni
Rodzaj powierzchni, z jakiego wykonana jest dana powierzchnia określa się po pierwszej klamrze, przed pierwszym etapem materiału.
Dostępne są standardowe materiały Dooma':
* none
* metal
* stone
* flesh
* wood
* cardboard
* liquid
* glass
* plastic
* ricochet
* surftype10
* surftype11
* surftype12
* surftype13
* surftype14


Ponadto Dark Mod oferuje kolejne do wyboru:
* tile
* carpet
* dirt
* gravel
* grass
* rock
* twigs
* foliage
* sand
* mud
* brokeglass
* snow
* ice
* squeakboard
* puddle
* moss
* cloth
* ceramic
* climbable
* slate
* straw
* armor_leath
* armor_chain
* armor_plate

O ile powierzchnie Doomowe stosuje się bezpośrednio, np.

Kod: Zaznacz cały

textures/darkmod/stone/flat/ceramic_mosaic_decorative01
{
    stone

    qer_editorimage textures/darkmod/stone/flat/ceramic_mosaic_decorative01_ed
    (...)
}
o tyle nowe powierzchnie dark moda wpisuje się w opisie powierzchni surftype15, np:

Kod: Zaznacz cały

textures/darkmod/stone/flat/ceramic_mosaic_decorative01
{
    surftype15
    description "tile"

    qer_editorimage textures/darkmod/stone/flat/ceramic_mosaic_decorative01_ed
    (...)
}

7. Przesunięcia, skalowanie, animacja tekstur
Do przesuwania tekstury w osiach X i Y służą polecenia:
scroll x, y lub translate x, y

Skalować możemy względem lewego-górnego rogu:
scale x, y
bądź względem środka:
centerscale x, y

Obracanie:
Rotate X

W połączeniu z parametrem time, który jest ciągle rosnącą wartością oznaczającą czas w sekundach, możemy uzyskać efekt animowanej tekstury. Dla przykładu, tak wygląda etap diffuse mikstury prędkości (speed potion):

Kod: Zaznacz cały

{
		blend	diffusemap
		map	models/darkmod/props/textures/speedpotion.tga
		rgb	0.5
		scroll	time * -0.5 , time * .2	
	}
daje to efekt wirującego płynu. Zmieniając liczby w parametrze scroll wpływamy oczywiście na prędkość ruchu.
Ostatnio zmieniony 07 sierpnia 2008, 10:14 przez Juliusz, łącznie zmieniany 1 raz.
Awatar użytkownika
Dziarsky
Garrett
Posty: 4861
Rejestracja: 02 listopada 2003, 12:26
Lokalizacja: Gliwice
Kontakt:

Re: TUTORIAL: Materiały

Post autor: Dziarsky »

Będę walczył przy punkcie trzecim z pytaniami :).

1. Domyślnie obrazek ma już trzy kanały i ten utworzony Alpha1 ma być czwartym ?
2. Gdy ustawiam sobie warstwę diffuse by mieć dobre zaznaczenie i na bazie jego zrobię ten czarno-biały kanał to jak zrobić by wyjściowa warstwa diffuse powróciła do pierwotnego koloru i wyglądu bez wpływu na stworzony w między czasie kanał? Czy da się więć zrobić "na boku" wzór naszego kanału, który po utworzeniu Alpha1 wkleimy w to miejsce?
Obrazek
Awatar użytkownika
Juliusz
Złodziej
Posty: 2774
Rejestracja: 04 stycznia 2004, 11:28
Lokalizacja: Dublin
Kontakt:

Re: TUTORIAL: Materiały

Post autor: Juliusz »

1. Tak: Red, Green, Blue i Alpha1

2. Tak, coś w tym stylu. W jakim programie pracujesz? We Photoshopie? Stwórz po prostu sobie kolejną warstwę poprzez skopiowanie diffuse albo ręcznie od zera (zależy, jak łatwiej) . Zaznacz cały cz-b obrazek (CTRL+A) i Copy. Następnie wejdź do zakładki Kanały , utwórz nowy - domyślna nazwa to Alpha1 i tak niech zostanie. Zaznacz ten kanał (ekran powinien być czarny) i wklej to co masz w schowku.
Żeby wrócić do pracy nad normalnym obrazkiem, zaznacz kanał RGB. A tą dodatkową warstwę możesz wyłączyć (ikonka oka przy miniaturze warstwy).
Awatar użytkownika
Dziarsky
Garrett
Posty: 4861
Rejestracja: 02 listopada 2003, 12:26
Lokalizacja: Gliwice
Kontakt:

Re: TUTORIAL: Materiały

Post autor: Dziarsky »

Ok w wolnej chwili zastosuje wskazówki. Ostatnio myślałem o tej metodzie ale jakoś nie chciało mi się ruszać bez pewności.
Dzięki.

Kod: Zaznacz cały

Kod:
diffusemap  models/darkmod/props/textures/sign_shield01
czy tutaj nie powinno być na końcu rozszerzenia .tga ?


Textura działa ale efekt widać tylko w grze! Warto zapamiętać niż męczyć się w edytorze czemu nie widać efektów:P

Acha i ta wartość alphatest 0.5 - W stronę zera pokazuje nam więcej textury (cześć biała widzialna) a w stronę wartości 1 zabiera nam widzialną cześć textury.

[ Dodano: Pon 26 Lis, 2007 21:53 ]
Jak dodać efekt mokrej powierzchni do naszych tekstur:
:arrow: http://modetwo.net/darkmod/index.php?showtopic=6685
Obrazek
ODPOWIEDZ