//#define iTime iChannelTime[0] float det=.005, maxdist=50., pi=3.1416, gl=0.; vec2 id; float hash12(vec2 p) { p*=1000.; vec3 p3 = fract(vec3(p.xyx) * .1031); p3 += dot(p3, p3.yzx + 33.33); return fract((p3.x + p3.y) * p3.z); } mat2 rot(float a) { float s=sin(a), c=cos(a); return mat2(c,s,-s,c); } float box(vec3 p, vec3 c) { vec3 pc=abs(p)-c; return length(max(vec3(0.),pc))-min(0.,max(pc.z,max(pc.x,pc.y))); } vec2 amod(vec2 p, float n, float off, out float i) { float l=length(p)-off; float at=atan(p.x,p.y)/pi*n*.5; i=abs(floor(at)); float a=fract(at)-.5; return vec2(a,l); } float ring(vec3 p,inout vec2 id) { p.xy=amod(p.xy*rot(iTime*0.), 20., 2., id.x); float h=max(0.,texture(iChannel0,vec2(.5+fract(id.x*.2+id.y*.1),0.)*.5).r*3.-.5); h+=sin(iTime*10.+id.x)*.2; float d=box(p+vec3(0.,-h*1.5,0.),vec3(.1,h,.1)); return d*.5; } float de(vec3 p) { float d=100.,ii=0.; p.xz*=rot(iTime); p.yz*=rot(sin(iTime)); float r=4.; vec2 ids; for (float i=0.; imaxdist) break; td+=d; gl+=.1/(10.+d*d*10.)*step(.7,hash12(id+floor(iTime*5.))); } if (d