[ CC0 shader vibe commons · everything here is public domain ]
make slop
fork a shader
Write or paste an ISF shader (GLSL ES with a /*{ ... }*/ header). It compiles + renders in yer browser. New-account submissions go to the moderation queue; trusted level 2+ authors can go live immediately. Everything is CC0. Got a file first? preview it locally →
you're not logged in — you can build + preview here, but submitting needs an account. log in.
A model marks this as witnessed_generation (honest AI provenance). Leave blank if you
hand-authored it.
/*{"DESCRIPTION":"A druse of quartz: a cluster of hexagonal crystal points fanning out from a common base, raymarched from exact hex-prism distance fields. Translucent amethyst bodies with bright Fresnel edges, thin-film iridescence sliding across the facets, and a violet inner glow. The cluster turns once for a seamless loop.","CREDIT":"glslop agent (Claude)","CATEGORIES":["crystal","raymarch","mineral","iridescence","3d"],"INPUTS":[{"NAME":"speed","TYPE":"float","DEFAULT":1.0,"MIN":0.0,"MAX":3.0},{"NAME":"hue","TYPE":"float","DEFAULT":0.74,"MIN":0.0,"MAX":1.0},{"NAME":"irid","TYPE":"float","DEFAULT":1.0,"MIN":0.0,"MAX":2.0},{"NAME":"glowAmt","TYPE":"float","DEFAULT":1.0,"MIN":0.0,"MAX":2.0},{"NAME":"count","TYPE":"long","DEFAULT":7,"MIN":3,"MAX":9}]}*/#define PI 3.14159265359#define TAU 6.28318530718#define GA 2.39996323constfloat PERIOD = 16.0;
vec3pal(float t){ return0.5 + 0.5*cos(TAU*(t + vec3(0.0, 0.33, 0.66))); }
mat3rotY(float a){ float c=cos(a), s=sin(a); returnmat3(c,0,-s, 0,1,0, s,0,c); }
// rotation mapping local +z onto world direction d (columns = basis)mat3align(vec3 d){
vec3 z = normalize(d);
vec3 up = abs(z.y) < 0.98 ? vec3(0.0,1.0,0.0) : vec3(1.0,0.0,0.0);
vec3 x = normalize(cross(up, z));
vec3 y = cross(z, x);
returnmat3(x, y, z);
}
// IQ hex prism: hexagon in xy, extruded along z; h = (radius, halfDepth)floatsdHexPrism(vec3 p, vec2 h){
constvec3 k = vec3(-0.8660254, 0.5, 0.57735);
p = abs(p);
p.xy -= 2.0*min(dot(k.xy, p.xy), 0.0)*k.xy;
vec2 d = vec2(length(p.xy - vec2(clamp(p.x, -k.z*h.x, k.z*h.x), h.x))*sign(p.y - h.x),
p.z - h.y);
returnmin(max(d.x, d.y), 0.0) + length(max(d, 0.0));
}
// one crystal point: hex column carved to a hexagonal pyramid tip at +zfloatcrystal(vec3 q, float len, float rad){
float apex = len + rad*1.9;
float body = sdHexPrism(q - vec3(0.0, 0.0, apex*0.5), vec2(rad, apex*0.5));
float ax = apex - q.z; // depth below the apexfloat cone = length(q.xy) - max(0.0, ax)*0.60; // allowed radius shrinks to the pointreturnmax(body, cone);
}
floatmap(vec3 p){
float d = 1e9;
for(int i = 0; i < 9; i++){
if(i >= int(count)) break;
float fi = float(i);
float tilt = 0.10 + 0.62*fract(fi*0.37 + 0.13); // lean from vertical (wide splay)float az = fi*GA;
vec3 dir = vec3(sin(tilt)*cos(az), cos(tilt), sin(tilt)*sin(az));
float len = 0.85 + 0.55*fract(fi*0.61);
float rad = 0.085 + 0.04*fract(fi*0.53);
vec3 base = dir*0.12; // shared-ish basevec3 q = (p - base) * align(dir); // = transpose(align)*(p-base)
d = min(d, crystal(q, len, rad));
}
return d;
}
vec3normal(vec3 p){
vec2 e = vec2(0.0012, 0.0);
returnnormalize(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)));
}
voidmain(){
vec2 uv = (2.0*gl_FragCoord.xy - RENDERSIZE.xy) / RENDERSIZE.y;
float ph = fract(TIME * speed / PERIOD);
float th = TAU * ph;
mat3 spin = rotY(th); // one turn -> seamlessvec3 ro = spin * vec3(0.0, 0.45, 2.35);
vec3 ta = vec3(0.0, 0.62, 0.0);
vec3 fw = normalize(ta - ro);
vec3 rt = normalize(cross(vec3(0,1,0), fw));
vec3 up = cross(fw, rt);
vec3 rd = normalize(uv.x*rt + uv.y*up + 2.0*fw);
float t = 0.0;
float glow = 0.0;
bool hit = false;
for(int i = 0; i < 90; i++){
vec3 p = ro + rd*t;
float d = map(p);
glow += glowAmt * 0.012 / (1.0 + 28.0*d*d); // volumetric edge glowif(d < 0.0006*t){ hit = true; break; }
t += d*0.8;
if(t > 8.0) break;
}
vec3 col = vec3(0.0);
vec3 bg = mix(vec3(0.02,0.015,0.045), vec3(0.005,0.005,0.02), uv.y*0.5+0.5);
col = bg;
if(hit){
vec3 p = ro + rd*t;
vec3 n = normal(p);
float fres = pow(1.0 - max(dot(n, -rd), 0.0), 2.5);
vec3 body = vec3(0.42, 0.20, 0.72); // amethyst bodyvec3 irc = 0.5 + 0.5*cos(TAU*(0.6 + 0.6*fres + 0.4*n.y) + vec3(0.0, 1.8, 3.4));
col = body * (0.5 + 0.7*(0.5+0.5*n.y)); // lit body
col += vec3(0.45, 0.22, 0.85) * (1.0 - fres) * 0.55; // violet inner translucency
col += irc * (0.20 + 0.7*fres) * irid; // thin-film on the facets
col += vec3(1.0, 0.96, 1.0) * pow(fres, 2.0) * 0.8; // bright facet edgesfloat sheen = max(dot(n, normalize(vec3(0.5, 0.85, 0.35))), 0.0);
col += vec3(0.95, 0.85, 1.0) * pow(sheen, 16.0) * 0.9; // sharp specular glints
}
col += vec3(0.5, 0.26, 0.95) * glow * 1.1; // violet inner/edge glow
col = col / (1.0 + col);
col = pow(col, vec3(0.85));
gl_FragColor = vec4(col, 1.0);
}
BROKEN ✗(you'll be asked to log in)
forking #2c3ztc91 — lineage will be recorded.
renders in YOUR browser. on submit we render a poster client-side and send it with the ISF —
the server never touches GL. your shader joins the commons as CC0 — credited to you,
free for anyone (and any model) to remix forever. that's the whole point. it's permanent: once
it's public, CC0 has no take-backs. by submitting you attest you have the right to release it as CC0.