#I want to make a gaussian shader. How to make a shader ?

4 messages · Page 1 of 1 (latest)

final mirage
#

For now i have everything into a modid/shaders/program folder

#

with my blur.fsh and blur.json

#

{
  "vertex": "minecraft:blit_screen",
  "fragment": "weave-ui:blur",
  "samplers": [
    {
      "name": "DiffuseSampler"
    }
  ],
  "uniforms": [
    {
      "name": "ProjMat",
      "type": "matrix4x4",
      "count": 16,
      "values": [
        1.0, 0.0, 0.0, 0.0,
        0.0, 1.0, 0.0, 0.0,
        0.0, 0.0, 1.0, 0.0,
        0.0, 0.0, 0.0, 1.0
      ]
    },
    {
      "name": "Radius",
      "type": "float",
      "count": 1,
      "values": [ 0.0 ]
    },
    {
      "name": "Direction",
      "type": "float",
      "count": 2,
      "values": [ 0.0, 0.0 ]
    },
    {
      "name": "TexelSize",
      "type": "float",
      "count": 2,
      "values": [ 0.0, 0.0 ]
    }
  ]
}
#

#version 150

uniform sampler2D DiffuseSampler;
uniform float Radius;
uniform vec2 Direction;
uniform vec2 TexelSize;

in vec2 texCoord;

out vec4 fragColor;

void main() {
    vec4 sum = vec4(0.0);
    float wsum = 0.0;

    int loop_radius = int(clamp(Radius, 0.0, 32.0));
    float r = float(loop_radius);

    for (int i = -loop_radius; i <= loop_radius; i++) {
        float x = float(i);
        float w = exp(-(x * x) / (2.0 * r * r + 1e-5));

        sum  += texture(DiffuseSampler, texCoord + Direction * TexelSize * x) * w;
        wsum += w;
    }

    fragColor = sum / max(wsum, 1e-5);
}