• NFT
  • Explore
  • Challenge
Sign in Sign up
Create Art arrow_drop_down
settings
Templates Resources
help CANCEL
Save
xxxxxxxxxx
42
 
1
precision highp float;
2
uniform vec2 resolution;
3
uniform float time;
4
float map(vec3 p){    
5
  if (mod(time * 2., 14.) <= 7.) {
6
    return length(p)-(0.009)*pow(mod(time * 2., 7.), 4.);         
7
  } else {   
8
    return length(p)-(0.009)*pow(mod(-time * 2., 7.), 4.);
9
  }
10
}
11
vec3 getNormal(vec3 p){
12
  float d = 0.0001;
13
  return normalize(vec3(map(p+vec3(d,0.,0.))-map(p+vec3(-d,0.,0.)),map(p+vec3(0.,d,0.))-map(p+vec3(0.,-d,0.)),map(p+vec3(0.,0.,d))-map(p+vec3(0.,0.,-d))));
14
}
15
void main(){
16
    vec4 display = vec4(0.0);
17
    vec2 uv=(gl_FragCoord.xy-.5*resolution)/resolution.y;
18
    vec3 rd=normalize(vec3(uv,1));
19
    vec3 p=vec3(0,0,-18);
20
    float d=1.,i;
21
    for(int i=0;i<99;i++){
22
      p+=rd*(d=map(p));
23
    }
24
    if(d<.001) {
25
      vec3 normal = getNormal(p);
26
      vec3 lightDir = vec3(0,0,-1.0);
27
      float diff = clamp(dot(lightDir, normal), 0.2, 1.0);
28
      float light = 1.0;
29
      if (mod(time * 2., 14.) <= 7.) {
30
        if ((0.009)*pow(mod(time * 2., 7.), 4.) > 15.) {
31
          light = 1. - (0.009)*pow(mod(time * 2., 7.), 4.) + 15.;
32
        }
33
      } else {   
34
        if ((0.009)*pow(mod(-time * 2., 7.), 4.) > 15.) {
35
          light = 1. - (0.009)*pow(mod(-time * 2., 7.), 4.) + 15.;
36
        }
37
      }          
38
      display = vec4(vec3(diff * light) , 1.0);
39
    }
autorenew