Terrain-Shader: Ganzzahl-Hash statt sin()-Hash im Kanten-Warp (gerade harte Kanten weg)

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) <noreply@anthropic.com>
This commit is contained in:
slyphax 2026-10-25 00:58:08 +02:00
parent 5a70824dd5
commit 9f2a32df70

View file

@ -63,8 +63,15 @@ void vertex() {
// 1-m-Raster — ohne Störung zeichnet die bilineare Mischung dessen Treppen // 1-m-Raster — ohne Störung zeichnet die bilineare Mischung dessen Treppen
// nach. Ein leichter Domain-Warp (Value-Noise in Rasterzellen, ±0,45 Zelle) // nach. Ein leichter Domain-Warp (Value-Noise in Rasterzellen, ±0,45 Zelle)
// verwackelt die Abtaststelle, die Kante wird unregelmäßig wie echter Boden. // 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) { 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) { float vnoise(vec2 p) {