{
  "license": "CC0-1.0",
  "shader": {
    "id": "wd6pdyhp",
    "title": "number matrix",
    "license": "CC0-1.0",
    "provenance_type": "user_upload",
    "made_with": "glslop",
    "status": "active",
    "compile_ok": true,
    "tags": [
      "number"
    ],
    "parents": [],
    "author": "jab6zg50vals",
    "author_name": "ogcraig",
    "author_url": "/u/ogcraig",
    "created_at": "2026-06-30T13:32:38.071Z",
    "poster_url": "/posters/wd6pdyhp.webp",
    "stats": {
      "slops": 1,
      "views": 165,
      "forks": 0
    },
    "self": "/api/v1/shaders/wd6pdyhp",
    "isf": "/*{\n  \"DESCRIPTION\": \"Rainbow Matrix Falling Characters\",\n  \"CREDIT\": \"you\",\n  \"CATEGORIES\": [\"generator\"],\n  \"INPUTS\": [\n    {\n      \"NAME\": \"speed\",\n      \"TYPE\": \"float\",\n      \"DEFAULT\": 1.0,\n      \"MIN\": 0.1,\n      \"MAX\": 5.0\n    },\n    {\n      \"NAME\": \"density\",\n      \"TYPE\": \"float\",\n      \"DEFAULT\": 45.0,\n      \"MIN\": 10.0,\n      \"MAX\": 120.0\n    },\n    {\n      \"NAME\": \"characterSize\",\n      \"TYPE\": \"float\",\n      \"DEFAULT\": 18.0,\n      \"MIN\": 5.0,\n      \"MAX\": 50.0\n    },\n    {\n      \"NAME\": \"rainbow\",\n      \"TYPE\": \"float\",\n      \"DEFAULT\": 1.0,\n      \"MIN\": 0.0,\n      \"MAX\": 1.0\n    }\n  ]\n}*/\n\n\n// random generator\nfloat hash(float n)\n{\n    return fract(sin(n)*43758.5453123);\n}\n\n\n// pseudo character pattern\nfloat character(vec2 p, float seed)\n{\n    p *= 5.0;\n\n    float r = hash(seed);\n\n    float pattern = step(\n        0.45,\n        fract(\n            sin(\n                dot(\n                    floor(p),\n                    vec2(12.9898,78.233)\n                )\n            )*43758.5453\n        )\n    );\n\n    return pattern;\n}\n\n\n// HSV rainbow\nvec3 hsv(float h)\n{\n    vec3 rgb = clamp(\n        abs(\n            mod(\n                h*6.0 + vec3(0.0,4.0,2.0),\n                6.0\n            )-3.0\n        )-1.0,\n        0.0,\n        1.0\n    );\n\n    return rgb;\n}\n\n\nvoid main()\n{\n\n    vec2 uv = isf_FragNormCoord;\n\n    vec3 color = vec3(0.0);\n\n\n    // columns\n    float columns = density;\n\n    float xIndex = floor(uv.x * columns);\n\n    float columnSeed = hash(xIndex);\n\n\n    // falling animation\n    float fall =\n        fract(\n            TIME *\n            speed *\n            (0.3 + columnSeed)\n            +\n            columnSeed\n        );\n\n\n    float y =\n        uv.y * columns;\n\n\n    float stream =\n        fract(\n            uv.y * columns\n            +\n            fall\n        );\n\n\n    // character positions\n    vec2 charUV;\n\n    charUV.x =\n        fract(uv.x * columns);\n\n    charUV.y =\n        fract(\n            uv.y *\n            characterSize\n        );\n\n\n    float mask =\n        character(\n            charUV,\n            columnSeed +\n            floor(y)\n        );\n\n\n    // distance fade trail\n    float trail =\n        smoothstep(\n            1.0,\n            0.0,\n            stream\n        );\n\n\n    // rainbow color\n    vec3 rainColor =\n        hsv(\n            fract(\n                xIndex /\n                columns\n                +\n                TIME *\n                0.05\n            )\n        );\n\n\n    rainColor *= rainbow + 0.15;\n\n\n    color +=\n        rainColor *\n        mask *\n        trail;\n\n\n    // glow\n    color +=\n        rainColor *\n        0.15 *\n        trail;\n\n\n    gl_FragColor =\n        vec4(\n            color,\n            1.0\n        );\n}"
  }
}