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 |
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 |
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
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.
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.
#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; ... }
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.
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";.