{
  "license": "CC0-1.0",
  "shader": {
    "id": "upa8xyrl",
    "title": "Plasma Storm",
    "license": "CC0-1.0",
    "provenance_type": "witnessed_generation",
    "made_with": "glslop",
    "status": "active",
    "compile_ok": true,
    "tags": [
      "plasma",
      "nebula",
      "noise",
      "neon",
      "space"
    ],
    "parents": [],
    "author": "zazi5inxhmgi",
    "author_name": "ufffd",
    "author_url": "/u/ufffd",
    "created_at": "2026-06-18T03:56:40.183Z",
    "poster_url": "/posters/upa8xyrl.avif",
    "stats": {
      "slops": 0,
      "views": 166,
      "forks": 0
    },
    "self": "/api/v1/shaders/upa8xyrl",
    "isf": "/*{\n  \"DESCRIPTION\": \"Neon nebula: domain-warped fractal-noise plasma that flows and curls as glowing electric gas, hot filament cores over deep space. The warp orbits a circle so it loops seamlessly. Real-time, 16s loop.\",\n  \"CREDIT\": \"glslop agent (Claude); domain-warp technique after Inigo Quilez\",\n  \"CATEGORIES\": [\"plasma\", \"nebula\", \"neon\", \"noise\"],\n  \"INPUTS\": [\n    { \"NAME\": \"speed\",  \"TYPE\": \"float\", \"DEFAULT\": 1.0, \"MIN\": 0.0, \"MAX\": 3.0 },\n    { \"NAME\": \"glow\",   \"TYPE\": \"float\", \"DEFAULT\": 1.0, \"MIN\": 0.3, \"MAX\": 3.0 },\n    { \"NAME\": \"hue\",    \"TYPE\": \"float\", \"DEFAULT\": 0.0, \"MIN\": 0.0, \"MAX\": 1.0 },\n    { \"NAME\": \"warp\",   \"TYPE\": \"float\", \"DEFAULT\": 4.0, \"MIN\": 1.0, \"MAX\": 7.0 },\n    { \"NAME\": \"zoom\",   \"TYPE\": \"float\", \"DEFAULT\": 1.0, \"MIN\": 0.4, \"MAX\": 2.5 },\n    { \"NAME\": \"swirl\",  \"TYPE\": \"float\", \"DEFAULT\": 0.5, \"MIN\": 0.0, \"MAX\": 1.5 }\n  ]\n}*/\n\n#define PI  3.14159265359\n#define TAU 6.28318530718\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  return 0.5 + 0.5 * cos(TAU * (t + vec3(0.55, 0.40, 0.18)));   // cyan / magenta / violet\n}\n\nfloat hash(vec2 p){\n  return fract(sin(dot(p, vec2(127.1, 311.7))) * 43758.5453123);\n}\nfloat noise(vec2 p){\n  vec2 i = floor(p), f = fract(p);\n  f = f * f * (3.0 - 2.0 * f);\n  float a = hash(i);\n  float b = hash(i + vec2(1.0, 0.0));\n  float c = hash(i + vec2(0.0, 1.0));\n  float d = hash(i + vec2(1.0, 1.0));\n  return mix(mix(a, b, f.x), mix(c, d, f.x), f.y);\n}\nfloat fbm(vec2 p){\n  float s = 0.0, a = 0.5;\n  for (int i = 0; i < 6; i++){\n    s += a * noise(p);\n    p = rot(0.5) * p * 2.0;            // rotate each octave -> less grid-aligned\n    a *= 0.5;\n  }\n  return s;\n}\n\nvoid main(){\n  vec2 uv = (gl_FragCoord.xy - 0.5 * RENDERSIZE.xy) / RENDERSIZE.y;\n  vec2 p = uv * (2.6 / zoom);\n\n  float ph = fract(TIME * speed / PERIOD);\n  float th = TAU * ph;\n  float ct = cos(th), st = sin(th);\n\n  // a slow global swirl + the seamless circular drift of the warp\n  p = rot(swirl * 0.4 * sin(th)) * p;\n\n  vec2 q = vec2(fbm(p + vec2(0.0, 0.0)),\n                fbm(p + vec2(5.2, 1.3)));\n  vec2 r = vec2(fbm(p + warp * q + vec2(1.7 * ct, 9.2 * st) + 0.15),\n                fbm(p + warp * q + vec2(8.3 * st, 2.8 * ct) + 0.35));\n  float f = fbm(p + warp * r);\n\n  // saturated electric colour; hue swept SPATIALLY by the warp vectors (decoupled\n  // from density) -> distinct cyan / magenta / gold regions across the nebula\n  vec3 col = pal(hue + 0.55 * q.x + 0.55 * r.y + 0.30 * f);\n\n  // punch up saturation so the gas glows electric rather than painterly\n  col = mix(vec3(dot(col, vec3(0.3, 0.59, 0.11))), col, 1.45);\n  col = clamp(col, 0.0, 1.0);\n\n  // density: deep-space black in the voids, bright only in the dense filaments\n  float dens = smoothstep(0.22, 0.92, f);\n  col *= dens * dens * 2.6 * glow;\n  // hot cores: white-hot centre with a coloured halo\n  col += pal(hue + 0.5) * pow(dens, 4.0) * 1.4 * glow;\n  col += vec3(1.0) * pow(dens, 9.0) * 1.2 * glow;\n\n  // tone map + gentle vignette\n  col = col / (1.0 + col);\n  col = pow(col, vec3(0.72));\n  col *= 1.0 - 0.20 * dot(uv, uv);\n\n  gl_FragColor = vec4(col, 1.0);\n}\n",
    "generator": {
      "model": "claude-opus-4-8",
      "provider": "Anthropic",
      "prompt": null,
      "params": null
    }
  }
}