https://www.shadertoy.com/view/3d3Bzl
void mainImage( out vec4 fragColor, in vec2 FC )
{
vec2 uv=(FC*2.-iResolution.xy)/iResolution.y;
float e,d=0.;
vec3 p,rd=vec3(uv,1);
int i;
for(i=0;i<99;i++){
p=rd*d;
d+=e=length(p)-1.;
if(e<.01)break;
}
float col=0.;
if(i<99)col=1.;
fragColor = vec4(vec3(col),1.0);
}
void mainImage( out vec4 fragColor, in vec2 FC )
{
vec2 uv=(FC*2.-iResolution.xy)/iResolution.y;
float e,d=0.;
vec3 p,rd=vec3(uv,1);
int i;
for(i=0;i<99;i++){
p=rd*d-vec3(0.,0.,2.);
d+=e=length(p-vec3(0.,0.,sin(iTime)))-1.;
if(e<.01)break;
}
float col=1./d;
fragColor = vec4(vec3(col),1.0);
}
mat2 rot(float a){float s=sin(a),c=cos(a);return mat2(c,-s,s,c);}
float sdTorus( vec3 p, vec2 t ){
vec2 q = vec2(length(p.xz)-t.x,p.y);
return length(q)-t.y;
}
float dist(vec3 p){
p.xz*=rot(p.y*4.+iTime);
//p.yz*=rot(iTime);
p.yz*=rot(3.14/2.);
return sdTorus(p, vec2(.5,.2+.1))*.8;//length(p)-1.;
}
void mainImage( out vec4 fragColor, in vec2 FC )
{
vec2 uv=(FC*2.-iResolution.xy)/iResolution.y;
float e,d=0.;
vec3 p,rd=vec3(uv,1);
int i;
for(i=0;i<99;i++){
p=rd*d-vec3(0.,0.,1.5);
d+=e=dist(p);
if(e<.01)break;
}
float col=1./d;
fragColor = vec4(vec3(col),1.0);
}
mat2 rot(float a){float s=sin(a),c=cos(a);return mat2(c,-s,s,c);}
float sdTorus( vec3 p, vec2 t ){
vec2 q = vec2(length(p.xz)-t.x,p.y);
return length(q)-t.y;
}
float dist(vec3 p){
//p.xz*=rot(p.y*4.+iTime);
//p.yz*=rot(iTime);
//p.yz*=rot(3.14/2.);
return length(p)-1.;
//return sdTorus(p, vec2(.5,.2+.1))*.8;
}
vec3 norm(vec3 p){
vec2 e = vec2(.01,0.);
return normalize(vec3(
dist(p+e.xyy)-dist(p-e.xyy),
dist(p+e.yxy)-dist(p-e.yxy),
dist(p+e.yyx)-dist(p-e.yyx)
));
}
void mainImage( out vec4 fragColor, in vec2 FC )
{
vec2 uv=(FC*2.-iResolution.xy)/iResolution.y;
float e,d=0.;
vec3 p,rd=vec3(uv,1);
int i;
for(i=0;i<99;i++){
p=rd*d-vec3(0.,0.,2.5);
d+=e=dist(p);
if(e<.01)break;
}
p.xz*=rot(iTime);
vec3 col=norm(p)*.5+.5;
fragColor = vec4(vec3(col),1.0);
}
mat2 rot(float a){float s=sin(a),c=cos(a);return mat2(c,-s,s,c);}
float sdTorus( vec3 p, vec2 t ){
vec2 q = vec2(length(p.xz)-t.x,p.y);
return length(q)-t.y;
}
float dist(vec3 p){
float scale=2.;
//p.xz*=rot(p.y*4.+iTime);
p.xz*=rot(iTime);
//p.yz*=rot(3.14/2.);
//return sdTorus(p, vec2(.5,.2+.1))*.8;
int i;
for(i=0;i<3;i++){
p.xy*=rot(iTime);
p.zy*=rot(iTime);
p*=scale;
p=abs(p);
p-=.4;
}
return (length(p)-.5)/pow(scale,float(i));
}
vec3 norm(vec3 p){
vec2 e = vec2(.01,0.);
return normalize(vec3(
dist(p+e.xyy)-dist(p-e.xyy),
dist(p+e.yxy)-dist(p-e.yxy),
dist(p+e.yyx)-dist(p-e.yyx)
));
}
void mainImage( out vec4 fragColor, in vec2 FC )
{
vec2 uv=(FC*2.-iResolution.xy)/iResolution.y;
float e,d=0.;
vec3 p,rd=vec3(uv,1);
int i;
for(i=0;i<99;i++){
p=rd*d-vec3(0.,0.,1.2);
d+=e=dist(p);
if(e<.01)break;
}
vec3 col=norm(p)*.5+.5;
fragColor = vec4(vec3(col),1.0);
}
mat2 rot(float a){float s=sin(a),c=cos(a);return mat2(c,-s,s,c);}
float sdTorus( vec3 p, vec2 t ){
vec2 q = vec2(length(p.xz)-t.x,p.y);
return length(q)-t.y;
}
float dist(vec3 p){
float scale=2.;
//p.xz*=rot(p.y*4.+iTime);
//p.xz*=rot(iTime);
//p.yz*=rot(3.14/2.);
//return sdTorus(p, vec2(.5,.2+.1))*.8;
int i;
for(i=0;i<30;i++){
if(i>0){
p.xy*=rot(iTime/10.);
p.zy*=rot(iTime/10.);
}
p*=scale;
p=abs(p);
p-=.4;
}
return (length(p)-.5)/pow(scale,float(i));
}
vec3 norm(vec3 p){
vec2 e=vec2(.01,0.);
float dp=dist(p);
return normalize(vec3(
dp-dist(p-e.xyy),
dp-dist(p-e.yxy),
dp-dist(p-e.yyx)
));
}
void mainImage( out vec4 fragColor, in vec2 FC )
{
vec2 uv=(FC*2.-iResolution.xy)/iResolution.y;
float e,d=0.;
vec3 p,rd=vec3(uv,1),ro=vec3(0.,0.,1.);
//ro.xz*=rot(iTime);
//rd.xz*=rot(-iTime);
int i;
for(i=0;i<99;i++){
p=rd*d-ro;
d+=e=dist(p);
if(e<.002)break;
}
//p.xz*=rot(iTime);
vec3 col=vec3(.3)/d;//norm(p)*.5+.5;
fragColor = vec4(vec3(col),1.0);
}