aboutsummaryrefslogtreecommitdiff
path: root/src/main/resources/shaders/modules/noise.glsl
diff options
context:
space:
mode:
authorAkshay Nair <phenax5@gmail.com>2026-09-14 11:46:56 +0530
committerAkshay Nair <phenax5@gmail.com>2026-09-14 11:46:56 +0530
commit707c8896cef6bff291f5d2f3339cf9bf46ee2242 (patch)
treefd62d97b8d92c0b0cc8ff817ce2477df771d20d7 /src/main/resources/shaders/modules/noise.glsl
parent42b66232530f933b184d446a7461e2e9f8d42bce (diff)
downloadart-playground-openrndr-707c8896cef6bff291f5d2f3339cf9bf46ee2242.tar.gz
art-playground-openrndr-707c8896cef6bff291f5d2f3339cf9bf46ee2242.zip
Refactor stuff
Diffstat (limited to 'src/main/resources/shaders/modules/noise.glsl')
-rw-r--r--src/main/resources/shaders/modules/noise.glsl67
1 files changed, 67 insertions, 0 deletions
diff --git a/src/main/resources/shaders/modules/noise.glsl b/src/main/resources/shaders/modules/noise.glsl
new file mode 100644
index 0000000..ebedd6d
--- /dev/null
+++ b/src/main/resources/shaders/modules/noise.glsl
@@ -0,0 +1,67 @@
+// Noise Related Functions
+float mod289(float x) { return x - floor(x * (1.0 / 289.0)) * 289.0; }
+vec4 mod289(vec4 x) { return x - floor(x * (1.0 / 289.0)) * 289.0; }
+vec4 perm(vec4 x) { return mod289(((x * 34.0) + 1.0) * x); }
+float noise(vec3 p) {
+ vec3 a = floor(p);
+ vec3 d = p - a;
+ d = d * d * (3.0 - 2.0 * d);
+ vec4 b = a.xxyy + vec4(0.0, 1.0, 0.0, 1.0);
+ vec4 k1 = perm(b.xyxy);
+ vec4 k2 = perm(k1.xyxy + b.zzww);
+ vec4 c = k2 + a.zzzz;
+ vec4 k3 = perm(c);
+ vec4 k4 = perm(c + 1.0);
+ vec4 o1 = fract(k3 * (1.0 / 41.0));
+ vec4 o2 = fract(k4 * (1.0 / 41.0));
+ vec4 o3 = o2 * d.z + o1 * (1.0 - d.z);
+ vec2 o4 = o3.yw * d.x + o3.xz * (1.0 - d.x);
+ return o4.y * d.y + o4.x * (1.0 - d.y);
+}
+float PHI = 1.61803398874989484820459; // Φ = Golden Ratio
+float gold_noise(in vec2 xy, in float seed) {
+ return fract(tan(distance(xy * PHI, xy) * seed) * xy.x);
+}
+float random(vec3 scale, float seed) {
+ return fract(sin(dot(gl_GlobalInvocationID.xyz + seed, scale)) * 43758.5453 +
+ seed);
+}
+
+// Fractal Brownian Noise
+float fbm(vec3 x, int octaves) {
+ float v = 0.0;
+ float a = 0.5;
+ vec3 shift = vec3(100);
+ for (int i = 0; i < octaves; ++i) {
+ v += a * noise(x);
+ x = x * 2.0 + shift;
+ a *= 0.5;
+ }
+ return v;
+}
+
+float random(vec2 st) {
+ return fract(sin(dot(st.xy, vec2(12.9898, 78.233))) * 43758.5453123);
+}
+
+float noise(vec2 st) {
+ vec2 i = floor(st);
+ vec2 f = fract(st);
+ float a = random(i);
+ float b = random(i + vec2(1.0, 0.0));
+ float c = random(i + vec2(0.0, 1.0));
+ float d = random(i + vec2(1.0, 1.0));
+ vec2 u = f * f * (3.0 - 2.0 * f);
+ return mix(a, b, u.x) + (c - a) * u.y * (1.0 - u.x) + (d - b) * u.x * u.y;
+}
+
+float fbm(vec2 st) {
+ float value = 0.0;
+ float amplitude = 0.5;
+ for (int i = 0; i < 5; i++) {
+ value += amplitude * noise(st);
+ st *= 2.0;
+ amplitude *= 0.5;
+ }
+ return value;
+}