-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathlight_ripples.frag
More file actions
78 lines (66 loc) · 1.95 KB
/
light_ripples.frag
File metadata and controls
78 lines (66 loc) · 1.95 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#ifdef GL_ES
precision mediump float;
#endif
uniform float u_time;
uniform vec2 u_resolution;
vec3 mod289(vec3 x){
return x-floor(x*(1.0/289.0))*289.0;
}
vec2 mod289(vec2 x){
return x-floor(x*(1.0/289.0))*289.0;
}
vec3 permute(vec3 x){
return mod289(((x*34.0)+1.0)*x);
}
float simple_noise(vec2 v){
const vec4 C = vec4(
0.211324865405187,
// (3.0-sqrt(3.0))/6.0,
0.366025403784439,
// 0.5*(sqrt(3.0)-1.0),
-0.577350269189626,
// -1.0 + 2.0 * C.x,
0.024390243902439
// 1.0 / 41.0
);
// First corner (x0)
vec2 i = floor(v+dot(v,C.yy));
vec2 x0 = v-i+dot(i,C.xx);
// Other two corners (x1, x2)
vec2 i1 = vec2(0.0);
i1 = (x0.x > x0.y) ? vec2(1.0,0.0) : vec2(0.0,1.0);
vec2 x1 = x0.xy+C.xx-i1;
vec2 x2 = x0.xy+C.zz;
// Do some permutations to avoid truncation effects in permutation
i = mod289(i);
vec3 p = permute(permute(i.y+vec3(0.0,i1.y,1.0))+i.x+vec3(0.0,i1.x,1.0));
vec3 m = max(0.5-vec3(
dot(x0,x0),
dot(x1,x1),
dot(x2,x2)
),0.0);
m = m*m ;
m = m*m ;
// Gradients: 41 pts uniformly over a line, mapped onto a diamond
// The ring size 17*17 = 289 is close to a multiple of 41 (41*7 = 287)
vec3 x = 2.0*fract(p*C.www)-1.0;
vec3 h = abs(x)-0.5;
vec3 ox = floor(x+0.5);
vec3 a0 = x-ox;
// Normalise gradients implicitly by scaling m
// Approximation of: m *= inversesqrt(a0*a0 + h*h);
m *= 1.79284291400159-0.85373472095314*(a0*a0+h*h);
// Compute final noise value at P
vec3 g = vec3(0.0);
g.x = a0.x*x0.x+h.x*x0.y;
g.yz = a0.yz*vec2(x1.x,x2.x)+h.yz*vec2(x1.y,x2.y);
return 130.0*dot(m, g)*0.5+0.5;
}
void main(){
vec2 st = gl_FragCoord.st/u_resolution;
st.x *= u_resolution.x/u_resolution.y;
vec3 color = vec3(0.4,0.6,0.7);
color += (vec3(0.8,0.9,0.8)-color)*smoothstep(0.1,-0.0,abs(simple_noise(st*-vec2(3.0,18.0))-0.5))*0.3;
color += (vec3(0.9,1.0,0.9)-color)*smoothstep(0.5,-0.5,abs(simple_noise(st*vec2(3.0,18.0))-0.5))*0.6;
gl_FragColor = vec4(color, 1.0);
}