From 8934a8201d3dfa82666c4597ea914dee2ecdf594 Mon Sep 17 00:00:00 2001 From: Jeroen Schweitzer Date: Fri, 27 Feb 2026 19:33:47 +0100 Subject: [PATCH] fix(assets): tune fog shader alpha and clean cone edge per D-059 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Layer 2 (peripheral): reduce peak alpha 0.55→0.38, noise 0.1→0.05, taper noise to zero near clear boundary for a clean gradient edge. Layer 3 (deep fog): reduce alpha range 0.78-0.90→0.62-0.76 so zone temperature tint breathes through. Layer 5 unchanged (alpha 1.0). Ticket: #564 Co-Authored-By: Claude Opus 4.6 --- client/shaders/fog.gdshader | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/client/shaders/fog.gdshader b/client/shaders/fog.gdshader index f39a9b721..2590be87d 100644 --- a/client/shaders/fog.gdshader +++ b/client/shaders/fog.gdshader @@ -53,8 +53,11 @@ void fragment() { // D-059: animated Perlin noise, 8-10s cycle float noise_val = texture(noise_tex, tile * 0.03 + vec2(time * 0.11, time * 0.07)).r; float coverage = smoothstep(PERIPHERAL_LOW, CLEAR_THRESHOLD, vis); - // Blend from heavy fog (alpha ~0.55) to lighter fog near clear edge - float alpha = mix(0.55, 0.25, coverage) + noise_val * 0.1; + // Blend from heavy fog (alpha ~0.38) to lighter fog near clear edge + // Taper noise to zero near the clear boundary — preserves breathing in deep + // peripheral but keeps the Layer 1/2 transition clean (no curly edge) + float noise_weight = 1.0 - smoothstep(0.5, 1.0, coverage); + float alpha = mix(0.38, 0.25, coverage) + noise_val * 0.05 * noise_weight; COLOR = vec4(DARK_OVERLAY, alpha); } } else if (explored > 0.3) { @@ -63,7 +66,7 @@ void fragment() { vec3 zone_tint = texture(zone_tint_tex, tex_uv).rgb; float noise_val = texture(noise_tex, tile * 0.015 + vec2(time * 0.045, time * 0.03)).r; vec3 tint_color = mix(vec3(0.04), zone_tint, 0.1); - float alpha = mix(0.78, 0.90, noise_val); // Fog breathes + float alpha = mix(0.62, 0.76, noise_val); // Fog breathes COLOR = vec4(tint_color, alpha); } else { // Layer 5: Unexplored, no maps — information zero