Files
bluflame/hgplus/ShaderMinifier/tests/real/metatunnel.frag
2026-04-18 22:31:51 +02:00

44 lines
1.2 KiB
GLSL

uniform vec2 resolution;
uniform float time;
float h(vec3 q)
{
float f=1.*distance(q,vec3(cos(time)+sin(time*.2),.3,2.+cos(time*.5)*.5));
f*=distance(q,vec3(-cos(time*.7),.3,2.+sin(time*.5)));
f*=distance(q,vec3(-sin(time*.2)*.5,sin(time),2.));
f*=cos(q.y)*cos(q.x)-.1-cos(q.z*7.+time*7.)*cos(q.x*3.)*cos(q.y*4.)*.1;
return f;
}
void main()
{
vec2 p = -1.0 + 2.0 * gl_FragCoord.xy / resolution.xy;
vec3 o=vec3(p.x,p.y*1.25-0.3,0.);
vec3 d=vec3(p.x+cos(time)*0.3,p.y,1.)/64.;
vec4 c=vec4(0.);
float t=0.;
for(int i=0;i<75;i++)
{
if(h(o+d*t)<.4)
{
t-=5.;
for(int j=0;j<5;j++)
{
if(h(o+d*t)<.4)
break;
t+=1.;
}
vec3 e=vec3(.01,.0,.0);
vec3 n=vec3(.0);
n.x=h(o+d*t)-h(vec3(o+d*t+e.xyy));
n.y=h(o+d*t)-h(vec3(o+d*t+e.yxy));
n.z=h(o+d*t)-h(vec3(o+d*t+e.yyx));
n=normalize(n);
c+=max(dot(vec3(.0,.0,-.5),n),.0)+max(dot(vec3(.0,-.5,.5),n),.0)*.5;
break;
}
t+=5.;
}
gl_FragColor=c+vec4(.1,.2,.5,1.)*(t*.025);
}