Skip to content

Commit b46f73e

Browse files
Add 4-octave fractal noise implementation to noiseGLSL.glsl
1 parent f300fcf commit b46f73e

File tree

1 file changed

+15
-4
lines changed

1 file changed

+15
-4
lines changed

src/webgl/shaders/functions/noiseGLSL.glsl

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,23 +7,34 @@ vec2 random2(vec2 st) {
77
return -1.0 + 2.0 * fract(sin(st) * 43758.5453123);
88
}
99

10-
float noise(vec2 st) {
10+
float baseNoise(vec2 st) {
1111
vec2 i = floor(st);
1212
vec2 f = fract(st);
1313

14-
// Four corners in 2D of a tile
1514
vec2 a = random2(i);
1615
vec2 b = random2(i + vec2(1.0, 0.0));
1716
vec2 c = random2(i + vec2(0.0, 1.0));
1817
vec2 d = random2(i + vec2(1.0, 1.0));
1918

20-
// Smooth interpolation
2119
vec2 u = f * f * (3.0 - 2.0 * f);
2220

23-
// Mix the results
2421
return mix(mix(dot(a, f - vec2(0.0, 0.0)),
2522
dot(b, f - vec2(1.0, 0.0)), u.x),
2623
mix(dot(c, f - vec2(0.0, 1.0)),
2724
dot(d, f - vec2(1.0, 1.0)), u.x), u.y);
2825
}
2926

27+
// Fractal noise using 4 octaves
28+
float noise(vec2 st) {
29+
float result = 0.0;
30+
float amplitude = 1.0;
31+
float frequency = 1.0;
32+
33+
for (int i = 0; i < 4; i++) {
34+
result += amplitude * baseNoise(st * frequency);
35+
frequency *= 2.0;
36+
amplitude *= 0.5;
37+
}
38+
39+
return result;
40+
}

0 commit comments

Comments
 (0)