open .fs {
"DESCRIPTION" : "Gilded foam — an Apollonian gasket of nested circles, glowing as soft golden filigree drifting in and out." ,
"CREDIT" : "claude-opus-4-8" ,
"INPUTS" : [
{ "NAME" : "zoom" , "TYPE" : "float" , "DEFAULT" : 1.4 , "MIN" : 0.6 , "MAX" : 3.0 } ,
{ "NAME" : "fold" , "TYPE" : "float" , "DEFAULT" : 1.08 , "MIN" : 0.9 , "MAX" : 1.3 } ,
{ "NAME" : "glow" , "TYPE" : "float" , "DEFAULT" : 0.7 , "MIN" : 0.2 , "MAX" : 1.5 } ,
{ "NAME" : "warm" , "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 apollonian (vec2 p, out float sc){
float scale = 1.0 ;
for (int i = 0 ; i < 7 ; i++){
p = -1.0 + 2.0 * fract (0.5 * p + 0.5 );
float r2 = dot (p, p);
float k = fold / r2;
p *= k;
scale *= k;
}
sc = scale;
return 0.25 * abs (p.y) / scale;
}
float apoD (vec2 p){
float scale = 1.0 ;
for (int i = 0 ; i < 7 ; i++){
p = -1.0 + 2.0 * fract (0.5 * p + 0.5 );
float r2 = dot (p, p);
float k = fold / r2;
p *= k; scale *= k;
}
return 0.25 * abs (p.y) / scale;
}
float height (vec2 p){ return 1.0 / (1.0 + apoD (p) * 45.0 ); }
void main (){
vec2 uv = (gl_FragCoord .xy - 0.5 * RENDERSIZE ) / RENDERSIZE .y;
vec2 p = uv * zoom;
p *= rot (TIME * 0.05 );
p += vec2 (0.3 * sin (TIME * 0.07 ), 0.2 * cos (TIME * 0.05 ));
float sc;
float d = apollonian (p, sc);
float e = 0.0026 ;
float H = height (p);
float Hx = height (p + vec2 (e, 0.0 )) - height (p - vec2 (e, 0.0 ));
float Hy = height (p + vec2 (0.0 , e)) - height (p - vec2 (0.0 , e));
vec3 n = normalize (vec3 (-Hx, -Hy, 0.035 ));
vec3 L = normalize (vec3 (0.5 , 0.6 , 0.7 ));
float diff = 0.32 + 0.7 * max (0.0 , dot (n, L));
float spec = pow (max (0.0 , dot (reflect (-L, n), vec3 (0.0 , 0.0 , 1.0 ))), 18.0 );
float depth = fract (log (sc) * 0.13 + 0.04 * TIME );
vec3 amber = vec3 (0.92 , 0.42 , 0.08 );
vec3 pale = vec3 (1.0 , 0.88 , 0.55 );
vec3 gold = mix (amber, pale, depth);
vec3 col = gold * H * diff * 1.5 ;
col += pale * spec * H * glow;
col += amber * exp (-d * 11.0 ) * 0.10 * glow;
col *= 1.0 - 0.42 * dot (uv, uv);
col = col / (1.0 + 0.5 * col);
col = pow (max (col, 0.0 ), vec3 (0.9 ));
gl_FragColor = vec4 (col, 1.0 );
}