(32 lines)
1 #define TAU 6.2831853071795864769252867665590057683943387987502116419492 #define PHI 1.6180339887498948482045868343656381177203091798057628621353 #define MAX_RESOLUTION 644 extern int resolution;5 extern float sigma;6 extern float amplitudes[MAX_RESOLUTION];7 extern vec2 offsets[MAX_RESOLUTION];8 extern vec2 range_min, range_max;10 float cdf(float x) {11 return .5 + .5*sign(x)*sqrt(1.-exp(-4./TAU * x*x));12 }14 float noise2d(vec2 pos) {15 float noise = 0.;16 for (int i=0; i < resolution; i++) {17 float angle = mod(float(i)*PHI, 1.)*TAU;18 float u = pos.x*cos(angle) - pos.y*sin(angle);19 float v = pos.x*cos(angle+TAU/4.) - pos.y*sin(angle+TAU/4.);20 float a = amplitudes[i];21 noise += a*mix(cos(u/a + offsets[i].x), cos(v/a + offsets[i].y), .5);22 }23 return cdf(noise/sigma);24 }27 vec4 effect(vec4 color, Image texture, vec2 texture_coords, vec2 pixel_coords)28 {29 vec2 coords = mix(range_min,range_max,texture_coords);30 float n = noise2d(coords);31 return vec4(n,n,n,1.);32 }