Multitexture Terrain
Home Nach oben

 

Nach oben
Dungeons
Detailmap
Einführung
Multitexture Terrain
Plantbox
Aussenlevel (Block)
Tag & Nachtwechsel
KI
Waving Grass
Framerate

Multiterrain-Shader

Problem:

Die Problemstellung für den hier vorgestellten Terrainshader ist es eine Maskierung zu erstellen deren Rot, Grün und Blaufarben jeweils in einem Durchgang zu überblenden. Zusätzlich soll noch eine Basistextur angegeben werden.

Da diese Basistexture meist von Generierungstools mit einer sehr schlechten Auflösung erstellt wird und daher sehr "schwammig" erscheint soll über diese Basistextur noch eine Detailmap gelegt werden.

Bild: Links Basistextur ohne Detailmap/Rechts Basistextur mit Detailmap

Für mehr Informationen Erstellung einer Detailmap

Lösung und Einschränkungen:

Für die Realisierung des Shaders ist es erforderlich dass 6 verschiedene Texturen miteinander kombiniert werden:

Texture1        RGB Maske
Texture2        Basistextur
Texture3        Textur für die Farbe Rot in der RGB Maske
Texture4        Textur für die Farbe Grün in der RGB Maske
Texture5        Textur für die Farbe Blau in der RGB Maske
Texture6        Detailmap

Um 6 Texturen überblenden zu können ist mindestens eine Grafikkarte erforderlich die das Shader Modell 1.4 unterstützt. Der vorgestellte Shader ist nur mit dem Shader Modell 2.0 getestet. Hierzu ist z.B. eine Grafikkarte vom Typ Nvidia 6200 erforderlich.

Link zu Microsoft MSDN: Microsoft MSDN

Maximale Anzahl von Texturen die in einem Pass überblendet werden können:

ps_1_1 to ps_1_3 4 texture samplers
ps_1_4 6 texture samplers
ps_2_0 16 texture samplers

Der Shader wurde bisher auf Nvidia 6200 und ATI Radeon X700 getestet. Beide Karten unterstützen das Shader Modell 2. Bei älteren Karten wird der Shader nicht funktionieren. Hierfür müsste eine Fallback Technik implementiert werden.

 

Die C-Script Sprache und die Struktur Material unterstützen maximal 4 Texturen. Daher müssen die 6 Texturen über das Terrainmodell und das Material verteilt werden.

Das Modell enthält die Basistextur und die RGB Maske:

 

Die Basistextur wird dort erscheinen wo in der Maskierungstextur die Farbe Schwarz gewählt wurde.

Die Texturen die über die Farben Rot, Grün und Blau gelegt werden werden im Material als Skin1, Skin2 und Skin3 geladen.

Die Detailmap wird als Skin4 geladen

Es ist sehr wichtig dass alle Texturen die gleiche Größe haben !!!

 

Der Shader legt jetzt die Basistextur über die schwarze Fläche in der Maske und blendet die Detailmap darüber. Anschließend wird über die rote Fläche die Grasstextur, über die grüne Fläche die Wegtextur und über die blaue Fläche die Sandtextur gelegt.

Download Beispielprojekt