Vordefinierte Materialien

Es gibt einige in der Engine vordefinierte Materialien, die Entities je nach ihrem Typ und ihren Flags automatisch zugewiesen werden. Es sei denn, die Entity hat ihr eigenes Material. Sie können die Gesamtbeleuchtung eines Levels ändern, indem Sie die Eigenschaften dieser Materialien abändern.

Materialname

Zugewiesen
zu

albedo ambient diffuse specular emissive power Bemerkungen
mtl_flat unschattierte
Blocks
100 200 150 0 0 2  
mtl_shaded shaded blocks 0 200 200 0 0 2  
mtl_terrain Terrain-Entities 100 200 200 0 0 2  
mtl_model Modell-Entities 100 200 200 0 0 2  
mtl_sprite Sprite-Entities 50 100 100 0 0 2  
mtl_metal METAL-Entiies 100 100 100 255 0 10 Metal gesetzt in WED
mtl_unlit UNLIT-Entities 0 0 0 0 128 2 Unlit gesetzt in WED
mtl_sky Sky-Entities 0 255 0 0 0 2  
mtl_particle Partikel, 3D-Zeilen 0 0 0 0 128 2  
mtl_shadow Schatten 0 0 0 0 0 0 Für Transparenz- und Stencil-Blur-Effekt

Beispiel:

vec_set(mtl_model.ambient_blue,vector(0,0,255));
// gives all models a reddish tint by reflecting only the red part of static lights

Vordefinierte Objekt-Shader

Die MtlFX.c-Bibliothek im Code-Unterordner enthält eine Sammlung an vordefinierten Oberflächen-Shadern. Sämtliche Shader lassen sich im Shader Viewer untersuchen und editieren. Um einen Oberflächen-Shader zu benutzen, fügen Sie mtlFX.c in Ihr Main-Skript ein (include), weisen Sie der Entity die Shader-Aktion zu und passen Sie die Entity-Skills, die als Shader-Parameter dienen an.

Im Vergleich zu externen Shadern sind die Bibliotheks-Shader vorzuziehen, denn sie sind a) sehr schnell und b) funktionieren in einer großen Reihe von Situationen. Die folgenden Standard-Oberflächenshader und Materialien stehen zur Verfügung:

Action/Material
Shader
Lichter
LM*
NM*
HM*
LOD*
SM*
Geschwindigkeit
anpassbare Parameter
Bemerkungen
fx_bump
mtl_bump
Bump mapping (Lambert)
3
ja
ja
-
-
-
Schnell
Ambient, Diffuse, Emissive
Erfordert Normalenmap auf 2. Skin.
fx_specBump
mtl_specBump
Specular bump mapping (Blinn)
3
ja
ja
-
ja
-
Schnell
Ambient, Diffuse, Specular, Power, Emissive
Erfordert Normalenmap auf 2. Skin.
fx_parallax
mtl_parallax
Parallax mapping (Lambert)
2
ja
ja
ja
-
-
Schnell
Ambient, Diffuse, Emissive
Erfordert Höhenmap auf Normalen-Alpha.
fx_specParallax
mtl_specParallax
Parallax mapping (Phong)
2
ja
ja
ja
ja
-
Schnell
Ambient, Diffuse, Specular, Power, Emissive
Erfordert Höhenmap auf Normalen-Alpha.
fx_pom
mtl_pom
Occlusion mapping (Lambert)
2
ja
ja
ja
-
-
Langsam
Ambient, Diffuse, Emissive
Erfordert Höhenmap auf Normalen-Alpha.
fx_specPom
mtl_specPom
Occlusion mapping (Phong)
2
ja
ja
ja
ja
-
Langsam
Ambient, Diffuse, Specular, Power, Emissive
Erfordert Höhenmap auf Normalen-Alpha.
fx_toon
mtl_toon
Cartoon shading
8
ja
-
-
-
-
Schnell
Ambient, Diffuse, Emissive, Shadow, Edgewidth, Threshold, Smooth
fx_gooch
mtl_gooch
Gooch shading
1
-
ja
-
-
-
Langsam
facAmbient, facDiffuse, facSpecular, facPower
Für Experimentierzwecke nicht optimiert
fx_chrome
mtl_chrome
Chrome mapping
1
-
-
-
ja
-
Schnell
Sun color, Entitity color, Scale, Ambient, Diffuse, Specular, Power, Emissive
Verwendet Reflexions-Map chrome.dds
fx_chromeBump
mtl_chromeBump
Chrome bump mapping
1
ja
ja
-
ja
-
Schnell
Sun color, Entitity color, Scale, Ambient, Diffuse, Specular, Power, Emissive
Verwendet Reflexions-Map chrome.dds
fx_envGlass
mtl_envGlass
Environment glass mapping
1
-
-
-
-
-
Schnell
Alpha, Albedo, Rainbow, Texture
Verwendet Level-Skywürfel
fx_envGlassBump
mtl_envGlassBump
Environment glass bump mapping
1
-
ja
-
-
-
Schnell
Alpha, Albedo, Rainbow, Texture
Verwendet Level-Skywürfel
fx_envMap
mtl_envMap
Environment mapping
8
-
-
-
-
-
Schnell
Ambient, Diffuse, Specular, Power, Emissive
Fester Funktionseffekt; verwendet Level-Skywürfel
fx_envBump
mtl_envBump
Environment bump mapping
n/a
-
ja
-
ja
-
Schnell
Sun color, Entitity color, Scale, Texture, Ambient, Diffuse, Emissive
Verwendet Level-Skywürfel
fx_terraintex
mtl_terraintex
Terrain multitexture effect
8
ja
-
-
-
-
Schnell
Ambient, Diffuse, Specular, Power, Emissive
Fester Funktionseffekt; gekachelte Texturen mit Maske auf Alpha
fx_terraintex3
mtl_terraintex3
Terrain 3-texture shader
8
-
-
-
-
-
Schnell
Verwende fx_terraintex für neue Projekte. Zuweisung nur per Aktion.
fx_envWater
mtl_envWater
Water environment reflection
1
-
-
-
-
-
Schnell
Sun color, Entitity color, Alpha, Albedo, xWind, yWind, Ripple, Scale
Verwendet wellenartige Textur water.dds und Level-Skywürfel.
fx_mirrorWater
mtl_mirrorWater
Water realtime reflection
1
-
-
-
-
-
Langsam
Sun color, Entitity color, Alpha, xWind, yWind, Ripple, Scale
Erstellt einen Spiegel-View; verwendet wellenartige Textur water.dds
fx_mirrorFloor
mtl_mirrorFloor
Floor realtime reflection
8
-
-
-
-
-
Langsam
Ambient, Diffuse, Specular, Albedo
Erstellt einen Spiegel-View
fx_uvspeed
mtl_uvspeed
Texture shifting
8
ja
-
-
-
-
Schnell
Ambient, Diffuse, Specular, Power, Emissive, uSpeed, vSpeed
Kein Shader - verschiebt lediglich u, v.
fx_animTree
mtl_animTree
Tree/grass wind animation
8 - - - - 2 Schnell x Wind, y Wind, Oscillation speed
Funktioniert für Modelle und Sprites
-
mtl_nomipmap
Suppressed Mipmaps
8 ja - - -   Schnell Ambient, Diffuse, Specular, Power, Emissive
-
mtl_wireframe
Wireframe rendering
8 - - - -   Schnell Ambient, Diffuse, Specular, Power, Emissive
-
mtl_lightcount
Display number of lights in range
8 - - - -   Schnell -
Farbcodierte Lichtnummer für Testzwecke (siehe unten).
-
mtl_default
Dummy shader
8 ja - - -   Schnell Ambient, Diffuse, Specular, Power, Emissive
Erzwingt Default-Rendering.

Die Lichter-Spalte zeigt die Anzahl der simmultan pro Mesh unterstützten Lichter an und die Lightmap-Spalte zeigt an ob der Shader ausserdem Lichtmaps auf der zweiten Skin von Blocks, Modellen oder Terrain unterstützt. Alle Shader benötigen Shader-Modell 2.0.Für Eintelheiten über die Shader lesen Sie bitte die Kommentare in mtlFX.c.

*SM: Unterstützt eine Specular-Map auf dem Alphakanal der Textur. Sie bestimmt den ´Glanz´ der Textur. Bei Alpha = 100 ist die Textur glänzend, bei Alpha = 0 ist sie matt. Hat die Textur keinen Alphakanal, werden 100% Glanz angenommen.

*NM: Unterstützt eine Normal-Map auf der zweiten oder dritten Skin, je nachdem ob eine Lightmap benutzt wird. Eine Normal-Map ist eine RGB-Textur, die die drei Komponenten einer lokalen Oberflächennormalen bestimmt. Für gewöhnlich wird sie durch ein spezielles Tool in einem High-Polygon Modell-Editor erstellt oder aus einer Höhenmap konvertiert.

*HM: Erfordert eine Tiefenmap (depth map) auf dem Alphakanal der Normalenmap. Eine Tiefenmap bestimmt die Höhenabstimmung der Oberfläche. Bei Alpha = 100 hat die Oberfläche eine Einbuchtung, bei Alpha = 0 hat sie eine Ausbuchtung. Die Tiefenmap verwendet dieselben Koordinaten wie die Normalenmap. Ohne sie funktioniert der Shader nicht.

*LM: Unterstützt eine Lightmap entweder auf der zweiten Skin eines Blocks oder auf dem zweiten Koordinatensatz eines Modells oder über den lightmap-Pointer der Entity. Eine Lightmap ist eine RGB-Textur, die Abstimmung von Licht und Schatten der Oberfläche festlegt. Sie verwendet normalerweise ein anderes Auflösungs- und Koordinatenset als die Textur. Hat das Objekt keine Lightmap, wird eine Weißlichtanpassung von 100% angenommen. Shader, die Lightmaps unterstützen lassen sich sowohl Modellen als auch Level-Geometrie zuordnen.

*LOD: Shader über dem gegebenen LOD-Schritt abgeschaltet - aus Gründen der Geschwindigkeit.

Bemerkungen

Um einer Entity in einem lite-C-Skript einen Shader zuzuweisen, setzen Sie die 4 Shader-Variablen (so sie anwendbar sind) und das Material am Anfang der Entity-Aktion.

Example (lite-C)::

#include <mtlFX.c>
...
action toon_warrior()
{
  my.skill41 = floatv(50);  // Shadow
  my.skill42 = floatv(50);  // Edgewidth
  my.skill43 = floatv(50);  // Threshold
  my.skill44 = floatv(50);  // Smooth
  my.material = mtl_toon;
  ...
}

mtl_terraintex effect

Kein Shader, aber ein fixer Funktionseffekt, der eine unbegrenzte Anzahl von Skintexturen auf Terrain rendert. JedeTextur ist ein RGBA-Bild (32 bit TGA oder DDS) mit gekachelter Textur in den RGB-Kanälen und einer Maske im Alpha-Kanal. Diese Alpha-Maskel ist nicht gekachelt, bedeckt aber das gesamte Terrain und läßt die legt fest, wo die RGB-Textur erscheint. Die Texturen werden in derselben Reihenfolge wie die Skins übereinander gerendert. Niedriger liegende Skins sind durch die transparenten Teile der Alpha-Maske der höher liegenden Skins sichtbar. Die Skalierung der gekachelten Texturen bzw. die Anzahl der Kacheln läßt sich über die Variable detail_size setzen.

Wenn Sie direkt auf das Terrain malen, erstellt der Spieleeditor GED die Texturen automatisch und weist sie zu. Haben Sie die Texturen in einem anderen Programm erstellt, öffnen Sie das Terrain in MED und weisen Sie texture1 der ersten Skin zu, texture2 der Zweiten usw. Jede Textur verlangt einen extra Renderdurchgang, verwenden Sie also nicht zuviele davon. Sind einem Terrain drei oder mehr Texturen zugewiesen, stellt MEDs Engine Preview das Terrain automatisch mit dem Shader mtl_terraintex dar.

mtl_lightcount shader

Befindet sich ein Objekt im Bereich von mehr als 8 dynamischen Lichtern, kann das Sortieren Artifakte verursachen, vor allem unter der Verwendung von Shadern. Lichter, die im Bereich eines bestimmten Mesh-Vertex´ liegen, werden von Lichtern, die näher am Mittelpunkt des Objektes dran sind, aber außerhalb der Reichweite des Vertex´ liegen, 'entfernt'. Der Effekt besteht in sharfen Helligkeitsunterschieden entlang der Meshkanten. Aus diesem Grund verwenden Sie zum Anpassen von Reichweiten und Positionen dynamischer Lichter in Ihrem Level den Shader mtl_lightcount. So gehen Sie sicher, dass sich keine Mesh in der Reichweite von mehr als 8 dynamischen Lichtern befindet. Der Shader zeigt die Anzahl der Lichter im Bereich des View-Frustums an und ein Mesh im Farbcode: schwarz = 0, grau = 1, blau = 2, grün = 3, zyan = 4, rot = 5, magenta = 6, gelb = 7, weiß = 8 oder mehr. Versuchen Sie die Lichter so einzustellen, dass, solange die Sonne via sun_light = 0 ausgeschaltet ist, kein Bereich des Levels weiß ist.

Um irgendeinen der vordefinierten Shader zeitweilig durch den Count-Shader zu ersetzenm, kopieren Sie mtlFX.c in Ihren Work-Ordner, editieren die Material-Definition und ersetzen Sie vorübergehend die Originalzeile effect = "....fx"; durch effect = "lightcount.fx";.

Siehe auch:

entity.material, view.material, Postprocessing-Shader

► Aktuelle Version Online