scopedvr-map-editor/shaders/selection_outline.gdshader
Hermes (scopedvr-dev) 5dca5513da U6 t_639135dd: dezente Auswahl — Kontur statt Vollorange (Textur bleibt sichtbar).
Neu shaders/selection_outline.gdshader: Inverted-Hull-Außenhülle (unshaded,
cull_front, Grow entlang der Normalen; Streifen-Uniform für den Zwilling).

Markierung jetzt über Outline-Kind am Mesh (Auswahl/Hover/Partner); Farben +
Breiten aus theme/editor_theme.tres (selection_outline*, *_width_mm) — eine
Quelle. material_override wird von der Markierung nicht mehr angefasst:
GLB-Texturen bleiben im Auswahl-Zustand voll sichtbar, der Tint bleibt beim
Markieren sichtbar (kein "Orange gewinnt" mehr).

Spawn-Zonen: konstante Disc-Deckkraft + dezenter Kontur-Ring (Torus) statt
Aufhellung/Emission; Label-Farbe aus dem Theme statt hartkodiertem Gelb.
Bau-Teile: Kontur um das Bauteil-Mesh statt halbtransparenter Vollbox.
Neu: set_hover()-API (schwächste Stufe) — Anschluss an die Mausbewegung
liegt in interaction.gd (Grenze dieser Karte) und folgt als eigene Karte.

Suite tests/test_selection_look.gd (41 checks: Theme-Quelle, Grundmaterial
unangetastet, Outline nur bei Markierung, restlos weg bei Abwahl, Zwilling
dünner+gestrichelt, Spawn-Ring, Bau-Teil-Kontur). Altsuiten an die neue
Semantik angepasst (test_glb_view: GLB-Auswahl ohne Override; test_map_tint
T3: Kontur statt Orange-gewinnt; test_object_mirror: Partner per Kontur).

Beweise: 4 Renderproben (fass, echtes GLB — vorher Vollorange / nachher
Kontur, je auf Sand und Fels) in /opt/data/scopedvr/work/u6_auswahl_beweise/.
Voll-Batterie 32/32 grün (EXIT 0) inkl. der drei angepassten Suiten.
2026-10-20 10:33:04 +00:00

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