{
  "license": "CC0-1.0",
  "shader": {
    "id": "8tj0av90",
    "title": "liquid glass",
    "license": "CC0-1.0",
    "provenance_type": "user_upload",
    "made_with": "glslop",
    "status": "active",
    "compile_ok": true,
    "tags": [
      "liquid",
      "boxes",
      "color"
    ],
    "parents": [],
    "author": "jab6zg50vals",
    "author_name": "ogcraig",
    "author_url": "/u/ogcraig",
    "created_at": "2026-06-30T13:28:20.216Z",
    "poster_url": "/posters/8tj0av90.avif",
    "stats": {
      "slops": 1,
      "views": 151,
      "forks": 0
    },
    "self": "/api/v1/shaders/8tj0av90",
    "isf": "/*{\n  \"DESCRIPTION\": \"Clean Liquid Flow Noise\",\n  \"CREDIT\": \"you\",\n  \"CATEGORIES\": [\"generator\"],\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      \"NAME\": \"warp\",\n      \"TYPE\": \"float\",\n      \"DEFAULT\": 0.8,\n      \"MIN\":0.0,\n      \"MAX\":2.0\n    },\n    {\n      \"NAME\": \"ripples\",\n      \"TYPE\":\"float\",\n      \"DEFAULT\":0.7,\n      \"MIN\":0.0,\n      \"MAX\":3.0\n    }\n  ]\n}*/\n\n\nfloat hash(vec2 p)\n{\n    return fract(\n        sin(dot(p,vec2(127.1,311.7)))\n        *43758.5453\n    );\n}\n\n\nfloat noise(vec2 p)\n{\n\n    vec2 i = floor(p);\n    vec2 f = fract(p);\n\n    f = f*f*(3.0-2.0*f);\n\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\n    return mix(\n        mix(a,b,f.x),\n        mix(c,d,f.x),\n        f.y\n    );\n\n}\n\n\n\nfloat fbm(vec2 p)\n{\n\n    float value = 0.0;\n    float amplitude = 0.5;\n\n\n    for(int i = 0; i < 5; i++)\n    {\n\n        value += noise(p) * amplitude;\n\n        p *= 2.0;\n\n        amplitude *= 0.5;\n\n    }\n\n\n    return value;\n\n}\n\n\n\nvoid main()\n{\n\n    vec2 uv = isf_FragNormCoord;\n\n\n    uv -= 0.5;\n\n    uv.x *= RENDERSIZE.x / RENDERSIZE.y;\n\n\n\n    float time = TIME * speed * 0.15;\n\n\n\n    // smooth liquid motion\n    vec2 flow;\n\n    flow.x = fbm(\n        uv*1.8 + time\n    );\n\n    flow.y = fbm(\n        uv*1.8 - time\n    );\n\n\n\n    // gentle warp\n    uv += (flow - 0.5) * warp;\n\n\n\n    // prevent edge artifacts\n    uv = clamp(\n        uv,\n        -1.5,\n        1.5\n    );\n\n\n\n    // water ripple field\n    float ripple = sin(\n        length(uv)*8.0\n        -\n        time*3.0\n        +\n        fbm(uv*2.5)*5.0\n    );\n\n\n\n    ripple *= 0.15;\n\n\n\n    float liquid = fbm(\n        uv*3.0 + ripple*ripples\n    );\n\n\n\n    // smooth liquid contrast\n    liquid = smoothstep(\n        0.15,\n        0.85,\n        liquid\n    );\n\n\n\n    // your original rainbow color idea\n    vec3 col = 0.5 + 0.5*cos(\n        liquid*6.2831\n        +\n        vec3(\n            0.0,\n            2.0,\n            4.0\n        )\n        +\n        hue*6.2831\n    );\n\n\n\n    // soft glossy highlights\n    col += pow(liquid,5.0)*0.25;\n\n\n\n    gl_FragColor = vec4(\n        col,\n        1.0\n    );\n\n}"
  }
}