shader_type canvas_item; uniform float sigma: hint_range(0.0, 20.0) = 3.3; float gaussian(float x, float std) { return exp(x * x / (-2.0 * std * std)) / (sqrt(2.0 * PI) * std); } void fragment() { float ksize = round(3.0 * sigma); float std = (sigma != 0.0 ? sigma : 1.0); vec4 col = vec4(0.0); float total_weight = 0.0; for(float i = -ksize ; i <= ksize; ++i) { for(float j = -ksize; j <= ksize; ++j) { float weight = gaussian(i, std) * gaussian(j, std); col += texture(TEXTURE, UV + vec2(i, j) * SCREEN_PIXEL_SIZE) * weight; total_weight += weight; } } COLOR = col / total_weight; }