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
}
Kod: Zaznacz cały
tdm_sign_shield01
{ wood
diffusemap models/darkmod/props/textures/sign_shield01
bumpmap models/darkmod/props/textures/sign_shield01_local
}
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
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
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
Kod: Zaznacz cały
specularmap textures/darkmod/stone/flat/ceramic_mosaic_decorative01_s
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
Kod: Zaznacz cały
{
blend diffusemap
map models/darkmod/props/textures/sign_shield01
alphatest 0.5
}
Kod: Zaznacz cały
{
blend diffusemap
map ścieżka/obrazek
}
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
}
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
}
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
}
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
}
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
(...)
}
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
}