40 lines
1.5 KiB
Text
40 lines
1.5 KiB
Text
shader_type spatial;
|
|
render_mode unshaded, cull_front, shadows_disabled, blend_mix;
|
|
|
|
// Außenhüllen-Kontur (U6, Karte t_639135dd): dezente Auswahl-Markierung
|
|
// statt Vollflächen-Orange. Das Grundmaterial (inkl. Textur) bleibt komplett
|
|
// sichtbar — die Kontur lebt als eigene Hülle um das Modell:
|
|
//
|
|
// VERTEX += NORMAL * breite_m bläht das Volumen entlang der Normalen auf,
|
|
// cull_front rendert nur die RÜCKseiten der Hülle. Sichtbar bleibt darum
|
|
// genau der schmale Saum, der außerhalb der Silhouette liegt (der Rest
|
|
// wird vom Objekt selbst per Tiefentest verdeckt) — die klassische
|
|
// Inverted-Hull-Outline-Technik.
|
|
//
|
|
// Farbton, Deckkraft und Breite kommen aus dem Theme (theme/editor_theme.tres,
|
|
// Abschnitt "Editor") — der Shader selbst kennt keine festen Farben.
|
|
//
|
|
// Gestrichelte Variante (Spiegel-Zwilling): streifen_hz > 0 unterteilt die
|
|
// Kontur in Bänder entlang der Welthöhe — dünn + gestrichelt statt voll.
|
|
|
|
uniform vec4 linien_farbe : source_color = vec4(1.0, 0.6, 0.15, 0.95);
|
|
uniform float breite_m : hint_range(0.0, 1.0) = 0.08;
|
|
uniform float streifen_hz : hint_range(0.0, 40.0) = 0.0;
|
|
|
|
varying vec3 welt_pos;
|
|
|
|
void vertex() {
|
|
VERTEX += NORMAL * breite_m;
|
|
welt_pos = (MODEL_MATRIX * vec4(VERTEX, 1.0)).xyz;
|
|
}
|
|
|
|
void fragment() {
|
|
if (streifen_hz > 0.5) {
|
|
// Gestrichelt (Zwilling): Bänder entlang der Welthöhe, ~55 % Strich.
|
|
if (fract(welt_pos.y * streifen_hz) > 0.55) {
|
|
discard;
|
|
}
|
|
}
|
|
ALBEDO = linien_farbe.rgb;
|
|
ALPHA = linien_farbe.a;
|
|
}
|