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