{
  "license": "CC0-1.0",
  "shader": {
    "id": "o87o51n0",
    "title": "Neon Liquid",
    "license": "CC0-1.0",
    "provenance_type": "user_upload",
    "made_with": "glslop",
    "status": "active",
    "compile_ok": true,
    "tags": [
      "Liquid neon 2D"
    ],
    "parents": [],
    "author": "jab6zg50vals",
    "author_name": "ogcraig",
    "author_url": "/u/ogcraig",
    "created_at": "2026-07-15T17:34:12.814Z",
    "poster_url": "/posters/o87o51n0.avif",
    "stats": {
      "slops": 0,
      "views": 176,
      "forks": 0
    },
    "self": "/api/v1/shaders/o87o51n0",
    "isf": "/*{\n  \"DESCRIPTION\": \"Neon Liquid Water\",\n  \"CREDIT\": \"you\",\n  \"CATEGORIES\": [\n    \"Generator\"\n  ],\n  \"INPUTS\": [\n    {\n      \"NAME\": \"speed\",\n      \"TYPE\": \"float\",\n      \"DEFAULT\": 1.0,\n      \"MIN\": 0.0,\n      \"MAX\": 4.0\n    },\n    {\n      \"NAME\": \"hue\",\n      \"TYPE\": \"float\",\n      \"DEFAULT\": 0.5,\n      \"MIN\": 0.0,\n      \"MAX\": 1.0\n    }\n  ]\n}*/\n\n#ifdef GL_ES\nprecision mediump float;\n#endif\n\n//------------------------------------------------------------\n\nfloat hash(vec2 p)\n{\n    p = fract(p*vec2(234.34,435.345));\n    p += dot(p,p+34.23);\n    return fract(p.x*p.y);\n}\n\nfloat noise(vec2 p)\n{\n    vec2 i=floor(p);\n    vec2 f=fract(p);\n\n    f=f*f*(3.0-2.0*f);\n\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\n    return mix(\n        mix(a,b,f.x),\n        mix(c,d,f.x),\n        f.y);\n}\n\nfloat fbm(vec2 p)\n{\n    float v=0.0;\n    float a=.5;\n\n    for(int i=0;i<6;i++)\n    {\n        v+=a*noise(p);\n        p*=2.03;\n        a*=0.5;\n    }\n\n    return v;\n}\n\nvec3 hsv2rgb(vec3 c)\n{\n    vec3 rgb=clamp(abs(mod(c.x*6.0+vec3(0,4,2),6.0)-3.0)-1.0,0.0,1.0);\n    rgb=rgb*rgb*(3.0-2.0*rgb);\n    return c.z*mix(vec3(1.0),rgb,c.y);\n}\n\n//------------------------------------------------------------\n\nvoid main()\n{\n    vec2 uv=isf_FragNormCoord;\n\n    uv-=0.5;\n    uv.x*=RENDERSIZE.x/RENDERSIZE.y;\n\n    float t=TIME*speed;\n\n    //--------------------------------------------------------\n    // Domain warp\n    //--------------------------------------------------------\n\n    vec2 q;\n\n    q.x=fbm(uv*2.5+vec2(t*0.15,t*0.08));\n    q.y=fbm(uv*2.5+vec2(-t*0.12,t*0.18));\n\n    vec2 r;\n\n    r.x=fbm(uv*4.0+q*2.5+vec2(t*.30,-t*.25));\n    r.y=fbm(uv*4.0-q*2.2+vec2(-t*.25,t*.28));\n\n    float f=fbm(uv*5.5+r*3.0);\n\n    //--------------------------------------------------------\n    // Liquid ripples\n    //--------------------------------------------------------\n\n    float ripple=sin(14.0*f+t*2.0);\n    ripple+=sin(10.0*(uv.x+uv.y)+t);\n    ripple*=0.5;\n\n    float glow=smoothstep(.25,.95,f+ripple*.18);\n\n    //--------------------------------------------------------\n    // Neon palette\n    //--------------------------------------------------------\n\n    float h=fract(\n        hue+\n        f*0.55+\n        ripple*0.08+\n        TIME*0.04\n    );\n\n    vec3 col=hsv2rgb(vec3(h,1.0,1.0));\n\n    //--------------------------------------------------------\n    // Bright liquid highlights\n    //--------------------------------------------------------\n\n    col*=1.2+glow*1.8;\n\n    col+=vec3(\n        pow(glow,4.0),\n        pow(glow,3.0),\n        pow(glow,2.0)\n    )*0.8;\n\n    //--------------------------------------------------------\n    // Water depth\n    //--------------------------------------------------------\n\n    col*=0.45+0.75*f;\n\n    col=pow(col,vec3(.9));\n\n    gl_FragColor=vec4(col,1.0);\n}"
  }
}