logo
maps
.
. .: cstrike
.: cs-fun
.: cs:source
.: cs-arena
.: sonstige
.: detailtexes
.
mapping
.
. .: tutorials
.: tutorials²
.: downloads
.
other stuff
.
. .: about
.: news
.: gbook
.: impressum
.
.
.Materials: Normalmaps, Specularmaps
.
. Dieses Tutorial beschreibt die Erzeugung eines 3D-Effekts mit Hilfe von Normalmaps und erklärt den "reflektierende" Texturen-Effekt der Source Engine. Als krönenden Abschluss erfolgt zum Schluss noch eine Beschreibung wie man beide Effekte kombiniert.

Bevor ihr dieses Tutorial est, solltet ihr "Materials: Texturen in *.vtf umwandeln" gelesen und verstanden haben.

Normalmaps

Normalmaps sorgen für einen Tiefeneffekt auf eigentlich zweidimensionalen Flächen und können sogar je nach Lichteinfall den Schatteneinfall "auf der Textur" verändern.

Zunächst erstellen wir uns wie bei HL1 eine "normale Textur" mit einem Grafikprogramm unserer Wahl. Profis bezeichnen diese als "Diffuse Map". Ich werde als Beispiel einer meiner eigenen Texturen verwenden, es funktioniert prinzipiell aber mit jeder anderen Textur genauso.



Um für diese Textur eine hübsche Normalmap zu kreieren bieten sich zwei Möglichkeiten an.
Zunächst einmal ist es möglich ein dreidimensionales Model der Textur in einem Modelprogramm wie Maya, 3D-Studio Max oder Softimage XSI zu erzeugen und diese Textur mit zusätzlichen Programmen berechnen zu lassen. Ein Beispiel für ein solches Programm wäre Nvidias Melody. Da ich dies selbst noch nicht ausprobiert habe hier die einfachere Variante mit der man auch ganz gute Ergebnise hinkriegt. Hierfür müsst ihr euch einen Normalmapfilter für euer Grafikprogramm herunterladen. Für Photoshop bietet erneut Nvidia ein Normalmap-Plugin an. Nachdem ihr also gerüstet seid, kanns losgehen:

Erstmal vorneweg es gibt keine ultimativen Einstellungen für dieses Tool, ein bisschen Ausprobieren ist angesagt.



Filter Type: Bestimmt wie grob / detailiert der Filter arbeitet. 4 sample liefert die ausgeprägtesten Ergebnisse, während 9x9 doch schon recht blurry wirkt.
Alternate Conversions: Stellen ebenfalls eine Auswahl verschiedener Arten zu filtern dar. Das deutlichste Ergebnis liefert hier wohl meistens Max (RGB), aber auch die anderne Einstellungen können je nach Wunsch Sinn ergeben.
Alpha Field: Solle auf Unchanged gelassen werden, da es, zumindest bei mir, sonst zu Fehlern kommt.
Invert x/y: Wenn ihr das Gefühl habt, dass der Filter einer eigentlichen "Tiefe" in eurer Textur eine "Höhe" zuordnet solltet ihr diese Auswahlkästchen benutzen um den Effekt zu invertieren.

So könnte eine fertige Normalmap aussehen:



Der Rest ist eigentlich ganz einfach. Die Textur als *.tga File mit dem Dateinamen "xxx_normal" abspeichern und in eine *.vtf Datei umwandeln.
Jetzt muss man sie nur noch in der *.vmt einer "normalen Textur" (Diffuse Map)" zuordnen, was wie folgt aussehen könnte:

"lightmappedGeneric"
{
"$baseTexture" "de_alps/gimboden1a"
"$surfaceprop" "concrete"
"$bumpmap" "de_alps/gimboden1a_normal"
"%keywords" "cstrike"
}


Wie ihr seht braucht die Normalmap keine eigene vmt-Datei sondern wird lediglich in der vmt-Datei des Materials, das sie benutzen soll mit dem Befehl "$bumpmap" aufgelistet.

Ihr könnt nun Ingame gehen und das Ganze testen, bedenkt aber, dass eine Normalmap immer eine Lichtquelle braucht um den Effekt sichtbar zu machen, am deutlichsten sieht man es bei sich bewegenden Lichtern durch ein light_dynamic-Entity oder mit der Flashlight.


Specularmasks

Specularmaks erzeugen eine Refkletion der Umgebung auf einer Textur und können sehr stark zur Athmosphäre in einer Map beitragen.

Dieser Effekt ist leichter zu erstellen als eine Normalmap, alles was wir machen müssen ist ein Graustufen-Abbild unserer Textur, wobei Weiß eine vollständige Spiegelung der Umgebung und Schwarz eine "matte" Textur ohne jegliche Spiegelung darstellt.

Für unser obiges Beispiel könnte das so aussehen:



Wie gewohnt als *.tga Abspeichern und in eine *.vtf Datei umwandeln. Auch hier gilt es wieder auszuprobieren wie es Ingame am besten aussieht. Eine Veränderung der Specularmask erfordert keinen Neucompile der Map. Bedenkt aber, dass ihr ein env_cubemap Entity in die Nähe eurer Textur platziert haben müsst und nach dem erstmaligen Compilevorgang der Befehl "buildcubemaps" ind er Konsole ausgeführt worden sein muss.

Die *.vmt Datei für eine Textur mit Specularmask sieht so aus:

"lightmappedGeneric"
{
"$baseTexture" "de_alps/gimboden1a"
"$surfaceprop" "concrete"
"$envmap" "env_cubemap"
"$envmapmask" "de_alps/gimboden1a_specmask256"
"%keywords" "cstrike"
"$envmapcontrast" 1
"$envmapsaturation" 1
"$envmaptint" "[.55 .55 .55]"
}


Die Namen sind frei gewählt, die Specularmask braucht eigentlich keine spezielle Dateinamenerweiterung.
Envmapcontrast, Envmapsaturation, Envmaptint sind Werte mit denen man spielen kann um die Reflektivitätseigenschaften zu verändern. Standardmäßig betragen alle "1" und man kann sie auch weglassen.


Normalmap + Specularmasks auf der selben Textur

Um beide Effekte gleichzeitig verwenden zu können bedarf es eines Tricks. Anstatt eine seperate *.vtf für die Specularmask zu verwenden, fügen wir die Maske als Alphakanal in der Normalmap ein.



Dazu einfach in das "Kanäle-Fenster" wechseln und nach einem Klick auf "Neu" die Textur rüberkopieren.
VORISCHT bei diesem Kombieffekt muss das Graustufen-Abbild um einiges heller sein als die einfache Specularmap um eine ähnlich starke Spiegelung zu erziehlen. Ich persönlich finde die beiden Effekte getrennt sogar etwas gelungener, da man sie alleine jeweils stärker ausgeprägt sind.

Die *.vmt Datei für die "Kombitextur" sieht dann so aus:

"lightmappedGeneric"
{
"$baseTexture" "de_alps/gimboden1a"
"$surfaceprop" "concrete"
"$bumpmap" "de_alps/gimboden1a_normal"
"$envmap" "env_cubemap"
"%keywords" "cstrike"
"$normalmapalphaenvmapmask" 1
"$envmaptint" "[.01 .01 .01]"
}


Wie ihr sehen könnt entfällt der spererate Eintrag der Specularmap, dafür erfährt die Engine durch den Befehl ""$normalmapalphaenvmapmask" 1", dass die Specularmask der Alpha-Kanal in der Normalmap ist.

Viel Spaß beim Tüfteln!
.
.
.Gimli.

wip
 
site navi
Admin-Login
Statistik
links
.
.
.
.
.
Webdesign und Webhosting von optinet24.de aus Aschaffenburg
.
 
.
page ende