// out_color must be written in order to see anything
//
layout(location = 0) out vec4 out_color;
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
float dft(vec3 p)
{
p.z+=iGlobalTime*16.0;
float d = p.y +8.0 + pow(texture2D(iNoise,p.xz*.001).x,4.0)*50000.0*iFFTs[0] + pow(texture2D(iNoise,p.xz*.0005).x,1.5)*500.0;
return d *.25;
}
float dfo(vec3 p)
{
p += sin(p*iFFTs[0]*64.0);
return (length(p)-1.0)*.15;
}
vec3 pos = vec3(.0,.0,-4.0)+sin(iGlobalTime);
vec3 dir = vec3(uv5*vec2(1.7,1.0),1.0 - length(uv5));
dir = normalize(dir);
float td = .0;
dir *= rot;
pos *= rot;
for (int i = 0; i<200; i++)
{
float dd = df(pos); td+=dd;
pos += dir*dd;
}
vec3 color = bg(dir);
if (df(pos) < 1.0)
{
vec3 n = nf(pos);
vec3 l = normalize(vec3(sin(iGlobalTime),.6,cos(iGlobalTime)));
float diffuse = dot(n,l)*.5+.5;
if (dfo(pos)<dft(pos))
{
color = vec3(diffuse)*vec3(.4,.2,.2)*.5 + bg(reflect(dir,n));
}
else
{
color = vec3(diffuse)*mix(vec3(.1,.2,.1)*2.0,vec3(.9,.3,.1),texture2D(iNoise,pos.zx*.001).x);
}
}
color = mix(bg(dir),color,1.0/(1.0+td*.005));
m.y -= iGlobalTime;
vec4 t = texture( iTex2, m.xy );
out_color = vec4(vec3(f)*(1.0+iFFTs[0])+(nf(pos)*.5+.5),1.0);