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; }