open .fs {
"DESCRIPTION" : "Endless flight through a gyroid lattice — shaded shell surfaces with glowing fresnel rims and floating light-orbs in the gaps." ,
"CREDIT" : "claude-opus-4-8" ,
"INPUTS" : [
{ "NAME" : "speed" , "TYPE" : "float" , "DEFAULT" : 0.6 , "MIN" : 0.0 , "MAX" : 2.0 } ,
{ "NAME" : "density" , "TYPE" : "float" , "DEFAULT" : 3.0 , "MIN" : 1.5 , "MAX" : 8.0 } ,
{ "NAME" : "glow" , "TYPE" : "float" , "DEFAULT" : 0.8 , "MIN" : 0.1 , "MAX" : 1.6 } ,
{ "NAME" : "orbs" , "TYPE" : "float" , "DEFAULT" : 0.9 , "MIN" : 0.0 , "MAX" : 2.0 } ,
{ "NAME" : "tint" , "TYPE" : "float" , "DEFAULT" : 0.5 , "MIN" : 0.0 , "MAX" : 1.0 }
]
}
mat2 rot (float a){ float c = cos (a), s = sin (a); return mat2 (c, -s, s, c); }
float gyroid (vec3 p){ return dot (sin (p), cos (p.yzx)); }
float map (vec3 p){
return abs (gyroid (p * density)) / density - 0.045 ;
}
vec3 normal (vec3 p){
vec2 e = vec2 (0.012 , 0.0 );
return normalize (vec3 (
map (p + e.xyy) - map (p - e.xyy),
map (p + e.yxy) - map (p - e.yxy),
map (p + e.yyx) - map (p - e.yyx)));
}
vec3 palette (float t){
return 0.5 + 0.5 * cos (6.28318 * (t + vec3 (0.0 , 0.28 , 0.55 ) + tint));
}
vec3 orbGlow (vec3 ro, vec3 rd, float tmax){
vec3 acc = vec3 (0.0 );
float t = 0.2 ;
for (int i = 0 ; i < 60 ; i++){
if (t > tmax) break ;
vec3 p = ro + rd * t;
float slab = 4.0 ;
float zc = floor (p.z / slab);
vec2 oc = 1.25 * vec2 (sin (zc * 2.1 + 1.0 ), cos (zc * 1.7 ));
vec3 oc3 = vec3 (oc, (zc + 0.5 ) * slab);
float od2 = dot (p - oc3, p - oc3);
acc += palette (zc * 0.2 + 0.6 ) * (0.06 / (0.05 + od2 * od2 * 35.0 )) * exp (-t * 0.12 );
t += 0.16 ;
}
return acc;
}
void main (){
vec2 uv = (gl_FragCoord .xy - 0.5 * RENDERSIZE ) / RENDERSIZE .y;
vec3 ro = vec3 (0.0 , 0.0 , TIME * speed);
vec3 rd = normalize (vec3 (uv, 1.25 ));
rd.xy *= rot (0.25 * sin (TIME * 0.25 ));
rd.xz *= rot (0.20 * cos (TIME * 0.20 ));
float t = 0.25 , hitT = -1.0 ;
for (int i = 0 ; i < 150 ; i++){
if (map (ro + rd * t) < 0.0 ){ hitT = t; break ; }
t += 0.075 ;
}
vec3 col;
if (hitT > 0.0 ){
vec3 p = ro + rd * hitT;
vec3 n = normal (p);
vec3 ld = normalize (vec3 (0.5 , 0.7 , -0.5 ));
float diff = 0.35 + 0.65 * max (0.0 , dot (n, ld));
float fres = pow (1.0 - abs (dot (n, rd)), 3.0 );
vec3 base = palette (0.14 * p.z + 0.05 * p.y + 0.05 * TIME );
col = base * diff;
col += fres * palette (0.14 * p.z + 0.5 ) * 1.4 * glow;
col *= exp (-hitT * 0.11 );
} else {
col = vec3 (0.0 );
}
col += orbGlow (ro, rd, hitT > 0.0 ? hitT : 24.0 ) * orbs;
col = col / (1.0 + col);
col = pow (max (col, 0.0 ), vec3 (0.82 ));
gl_FragColor = vec4 (col, 1.0 );
}