Color vignette
Vignette + color, you can change the color and the alpha of the effect.
You can use this in fullscreen with a TextureRect node.
[!] But don’t forget to add a full white bitmap (or other bitmap 🙂 ) in TextureRect.
Enjoy.
Shader code
shader_type canvas_item;
uniform float vignette_intensity = 0.4;
uniform float vignette_opacity : hint_range(0.0, 1.0) = 0.5;
uniform vec4 vignette_rgb : hint_color = vec4(0.0, 0.0, 0.0, 1.0);
float vignette(vec2 uv){
uv *= 1.0 - uv.xy;
float vignette = uv.x * uv.y * 15.0;
return pow(vignette, vignette_intensity * vignette_opacity);
}
void fragment(){
vec4 color = texture(SCREEN_TEXTURE, SCREEN_UV);
vec4 text = texture(TEXTURE, UV);
text.rgba *= (vignette_rgb.rgba);
text.rgba *= (1.0 - vignette(UV));
COLOR = vec4((text.rgb)*color.rgb,text.a);
}
Hi, @EliasGD here!
Godot 4.1 code update. To use this shader code, just add a white ColorRect – Full Rect, and add a new ShaderMaterial with the following code:
shader_type canvas_item;
uniform float vignette_intensity = 0.4;
uniform float vignette_opacity : hint_range(0.0, 1.0) = 0.5;
uniform vec4 vignette_rgb : source_color = vec4(0.0, 0.0, 0.0, 1.0);
uniform sampler2D SCREEN_TEXTURE : hint_screen_texture, filter_linear_mipmap;
float vignette(vec2 uv){
uv *= 1.0 – uv.xy;
float vignette = uv.x * uv.y * 15.0;
return pow(vignette, vignette_intensity * vignette_opacity);
}
void fragment(){
vec4 color = texture(SCREEN_TEXTURE, SCREEN_UV);
vec4 text = texture(TEXTURE, UV);
text.rgba *= (vignette_rgb.rgba);
text.rgba *= (1.0 – vignette(UV));
COLOR = vec4((text.rgb)*color.rgb,text.a);
}
Thank you. It works nicely.