through the endless night...
Log in to post a comment.
#version 300 es
precision highp float;
#define MAX_ITER 16
uniform float iTime;
uniform vec2 iResolution;
out vec4 fragColor;
vec2 vpow2(vec2 v){
return vec2(v.x * v.x - v.y * v.y, 2. * v.x * v.y);
}
vec2 rv(vec2 v, float r){
float a = atan(v.y, v.x);
a += r;
return vec2(cos(a), sin(a)) * length(v);
}
vec3 fog(vec2 c, vec2 v){
vec2 r = c - v;
return vec3(.1, .1, .1) * max(0., 1. - 1. * length(r)) * (1. + .3 * sin(r.x * 7.) + .3 * sin(6. * r.y));
}
void main() {
// Screen coordinate (from [-aspect, -1] to [aspect, 1])
vec2 q = (2. * gl_FragCoord.xy - iResolution) / iResolution.y;
vec2 c = q * 1. + vec2(-0.5, 0.25);
vec2 c2 = rv(c, 0.1 * sin(iTime)) + vec2(0., .15) * sin(iTime);
vec2 z = vec2(0., 0.);
int i = 0;
while(length(z) < 1024. && i < 64){
z = vpow2(z) + c2;
i++;
}
float it = float(i) + 1. - log(log(length(z))) / log(2.);
float mit = c.y * 46. + 3. * sin(c.x * 2.5 + iTime);
// Pixel color
vec3 col;
if(it < mit){
col = vec3(1., 1., 1.) * it / (64. - mit);
//fog effect
for(int i = 0; i < 64; i++){
float sx = 2. + 1. * sin(float(i) * 2345.);
float x = 3. * sin(1000. * float(i)) + 0.5 * sin(sx * iTime);
float y = 4. * sin(1235. * float(i));
col += fog(c, vec2(x, y));
}
}
else{
col = vec3(0., 0., 0.);
}
// Output
fragColor = vec4(col, 1.);
}