33 lines
1.4 KiB
Plaintext
33 lines
1.4 KiB
Plaintext
shader_type canvas_item;
|
|
|
|
uniform sampler2D screen_texture: hint_screen_texture, repeat_disable, filter_linear_mipmap;
|
|
uniform float blur_radius : hint_range(0, 1) = 0.2; // Radius of the blur effect
|
|
uniform float blur_amount : hint_range(0, 5) = 1.0; // Strength of the blur effect
|
|
uniform float blur_inner : hint_range(0, 1) = 0.6; // Inner edge of the blur effect
|
|
uniform float blur_outer : hint_range(0, 1) = 0.66; // Outer edge of the blur effect
|
|
|
|
void fragment() {
|
|
// Original color of the pixel from the screen
|
|
vec4 pixelColor = texture(screen_texture, UV);
|
|
|
|
// Color with blur effect from the screen
|
|
vec4 blurColor = textureLod(screen_texture, SCREEN_UV, blur_amount);
|
|
|
|
// Calculate distance from the center of the screen
|
|
float distance = length(UV - vec2(0.5, 0.5));
|
|
|
|
// Apply smoothstep function to control transition between areas
|
|
float blur = smoothstep(blur_inner - blur_radius, blur_outer, distance);
|
|
|
|
// Mix colors of the blur effect and the original color based on the smoothstep value
|
|
pixelColor.rgb = mix(blurColor.rgb, COLOR.rgb, -blur);
|
|
|
|
// Set the alpha component of the blur effect to the smoothstep value
|
|
blurColor.a = blur;
|
|
|
|
// Mix colors of the blur effect with white for an additional effect
|
|
blurColor.rgb = mix(blurColor.rgb, vec3(1.0), 0.1);
|
|
|
|
// Set the final color to the modified color of the blur effect
|
|
COLOR = blurColor;
|
|
} |