From 9f2a32df706a3cbb2c64a08ce66be7ce029f35e7 Mon Sep 17 00:00:00 2001 From: slyphax Date: Sun, 25 Oct 2026 00:58:08 +0200 Subject: [PATCH] Terrain-Shader: Ganzzahl-Hash statt sin()-Hash im Kanten-Warp (gerade harte Kanten weg) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sly 25.10.: nah gezoomt gerade, rechteckige harte Kanten in den Verläufen. Ursache: sin() großer Argumente ist auf der GPU ungenau, die Warp-Noise bekam rasterförmige Sprünge. Mit malentest.svmap reproduziert (ohne Warp weg, mit Ganzzahl-Hash weg, Warp bleibt organisch). Co-Authored-By: Claude Opus 5.5 (1M context) --- src/viewport/terrain_contour.gdshader | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/viewport/terrain_contour.gdshader b/src/viewport/terrain_contour.gdshader index d168f14..e6a0654 100644 --- a/src/viewport/terrain_contour.gdshader +++ b/src/viewport/terrain_contour.gdshader @@ -63,8 +63,15 @@ void vertex() { // 1-m-Raster — ohne Störung zeichnet die bilineare Mischung dessen Treppen // nach. Ein leichter Domain-Warp (Value-Noise in Rasterzellen, ±0,45 Zelle) // verwackelt die Abtaststelle, die Kante wird unregelmäßig wie echter Boden. +// Ganzzahl-Hash statt sin()-Hash (Karte 25.10.): sin() großer Argumente ist +// auf der GPU ungenau — die Noise bekam gerade, rasterförmige Sprünge, die +// als harte Kanten durch die Verläufe liefen (Sly-Befund, nah gezoomt). float hash2(vec2 p) { - return fract(sin(dot(p, vec2(127.1, 311.7))) * 43758.5453); + uvec2 q = uvec2(ivec2(p) + ivec2(4096)); + uint h = q.x * 1597334677u ^ q.y * 3812015801u; + h = (h ^ (h >> 16u)) * 2246822519u; + h = h ^ (h >> 13u); + return float(h & 65535u) / 65535.0; } float vnoise(vec2 p) {