{
  "license": "CC0-1.0",
  "shader": {
    "id": "nvmazqgi",
    "title": "generated",
    "license": "CC0-1.0",
    "provenance_type": "tool",
    "made_with": "SLOP SPLICER",
    "made_with_app": "xfgeujl3",
    "status": "active",
    "compile_ok": true,
    "tags": [],
    "parents": [],
    "author": "zazi5inxhmgi",
    "author_name": "ufffd",
    "author_url": "/u/ufffd",
    "created_at": "2026-06-18T21:04:57.017Z",
    "poster_url": "/posters/nvmazqgi.avif",
    "stats": {
      "slops": 0,
      "views": 137,
      "forks": 0
    },
    "self": "/api/v1/shaders/nvmazqgi",
    "isf": "/*{ \"DESCRIPTION\":\"generated\", \"CATEGORIES\":[\"generative\"], \"INPUTS\":[\n  { \"NAME\":\"speed\", \"TYPE\":\"float\", \"MIN\":0.0, \"MAX\":4.0, \"DEFAULT\":1.0 },\n  { \"NAME\":\"spin\", \"TYPE\":\"float\", \"MIN\":0.0, \"MAX\":2.0, \"DEFAULT\":1.0 },\n  { \"NAME\":\"zoom\", \"TYPE\":\"float\", \"MIN\":0.1, \"MAX\":3.0, \"DEFAULT\":1.0 },\n  { \"NAME\":\"lens\", \"TYPE\":\"float\", \"MIN\":0.1, \"MAX\":1.5, \"DEFAULT\":0.9 },\n  { \"NAME\":\"tube\", \"TYPE\":\"float\", \"MIN\":0.01, \"MAX\":0.3, \"DEFAULT\":0.08 },\n  { \"NAME\":\"hue\", \"TYPE\":\"float\", \"MIN\":0.0, \"MAX\":1.0, \"DEFAULT\":0.0 },\n  { \"NAME\":\"glow\", \"TYPE\":\"float\", \"MIN\":0.0, \"MAX\":3.0, \"DEFAULT\":1.0 }\n]}*/\n#define PI  3.14159265359\n#define TAU 6.28318530718\n#define NV  24\n\nconst float PERIOD = 16.0;\n\nmat2 rot(float a){ float c = cos(a), s = sin(a); return mat2(c, -s, s, c); }\n\nvec3 pal(float t){\n  vec3 p1 = 0.5 + 0.5 * cos(TAU * (t + vec3(0.0, 0.33, 0.66)));\n  vec3 p2 = 0.5 + 0.5 * cos(TAU * (t + vec3(0.55, 0.40, 0.18)));\n  return mix(p1, p2, 0.5);\n}\n\nvec4 vert24(int k){\n  int pp = k / 4;\n  int ss = k - pp * 4;\n  float s0 = mod(float(ss), 2.0) * 2.0 - 1.0;\n  float s1 = floor(float(ss) / 2.0) * 2.0 - 1.0;\n  if (pp == 0) return vec4(s0, s1, 0.0, 0.0);\n  if (pp == 1) return vec4(s0, 0.0, s1, 0.0);\n  if (pp == 2) return vec4(s0, 0.0, 0.0, s1);\n  if (pp == 3) return vec4(0.0, s0, s1, 0.0);\n  if (pp == 4) return vec4(0.0, s0, 0.0, s1);\n  return vec4(0.0, 0.0, s0, s1);\n}\n\nfloat segDist(vec3 ro, vec3 rd, vec3 A, vec3 B, out float tray, out float edgeParam){\n  vec3 d2 = B - A;\n  vec3 r  = ro - A;\n  float e = dot(d2, d2);\n  float f = dot(d2, r);\n  float b = dot(rd, d2);\n  float c = dot(rd, r);\n  float den = e - b * b;\n  float s = (den > 1e-5) ? (b * f - c * e) / den : 0.0;\n  s = max(s, 0.0);\n  float u = clamp((b * s + f) / e, 0.0, 1.0);\n  s = max(dot(A + d2 * u - ro, rd), 0.0);\n  tray = s;\n  edgeParam = u;\n  vec3 pr = ro + rd * s;\n  vec3 ps = A + d2 * u;\n  return length(pr - ps);\n}\n\nvoid main(){\n  vec2 uv = (gl_FragCoord.xy - 0.5 * RENDERSIZE.xy) / RENDERSIZE.y;\n\n  float ph = fract(TIME * speed / PERIOD);\n  float th = TAU * ph;\n  mat2 Rroll = rot(0.4 * spin * sin(th));\n\n  vec4 base[NV];\n  vec3 proj[NV];\n  float rotw[NV];\n  for (int k = 0; k < NV; k++){\n    vec4 v = vert24(k);\n    base[k] = v;\n    v.xz = rot(0.62) * v.xz;\n    v.yw = rot(1.13) * v.yw;\n    v.xy = rot(th) * v.xy;\n    v.zw = rot(th) * v.zw;\n    v.xy = Rroll * v.xy;\n    rotw[k] = v.w;\n    proj[k] = v.xyz / (2.6 - v.w);\n  }\n\n  float R = 1.4 * zoom;\n  float a  = th;\n  float a2 = th + 0.32;\n  vec3 ro   = vec3(R * (sin(a)  + 0.35 * sin(3.0 * a)),  0.65 * sin(2.0 * a),\n                   R * (cos(a)  + 0.35 * cos(2.0 * a)));\n  vec3 look = vec3(R * (sin(a2) + 0.35 * sin(3.0 * a2)), 0.65 * sin(2.0 * a2),\n                   R * (cos(a2) + 0.35 * cos(2.0 * a2)));\n  vec3 fwd = normalize(mix(normalize(look - ro), normalize(-ro), 0.45));\n  vec3 rgt = normalize(cross(vec3(0.0, 1.0, 0.0), fwd));\n  vec3 upv = cross(fwd, rgt);\n\n  float rr = length(uv);\n  float theta = rr * lens * PI;\n  vec2 dir2 = rr > 1.0e-5 ? uv / rr : vec2(0.0, 1.0);\n  vec3 rd = normalize(cos(theta) * fwd + sin(theta) * (dir2.x * rgt + dir2.y * upv));\n\n  float w0 = tube * tube;\n  vec3 col = vec3(0.0);\n  for (int i = 0; i < NV; i++){\n    for (int j = 0; j < NV; j++){\n      if (j <= i) continue;\n      vec4 dv = base[i] - base[j];\n      if (abs(dot(dv, dv) - 2.0) > 0.05) continue;\n      float tray, edgeParam;\n      float d = segDist(ro, rd, proj[i], proj[j], tray, edgeParam);\n      float g = w0 / (d * d + w0);\n      g = g * g;\n      float dots = 0.5 + 0.5 * cos(TAU * edgeParam * 6.0);\n      g *= 0.4 + 0.6 * dots;\n      float fog = exp(-0.22 * max(tray - 2.0, 0.0));\n      float wMid = 0.5 * (rotw[i] + rotw[j]);\n      col += pal(hue + wMid * 0.15 + th * 0.02) * g * fog * glow;\n    }\n  }\n\n  col += vec3(0.02, 0.01, 0.03) * (1.0 - rr * 0.3);\n\n  col = pow(col, vec3(0.7));\n  gl_FragColor = vec4(col, 1.0);\n}"
  }
}