Higher Detail Outline Shader
The same as this: https://godotshaders.com/shader/2d-outline-stroke/ but with more detail.
feel free to add suggestions for improvement.
Shader code
shader_type canvas_item;
uniform vec4 line_color : hint_color = vec4(1);
uniform float line_thickness : hint_range(0, 10) = 1.0;
void fragment() {
vec2 size = TEXTURE_PIXEL_SIZE * line_thickness;
float outline = texture(TEXTURE, UV + vec2(-size.x, 0)).a;
outline += texture(TEXTURE, UV + vec2(0, size.y)).a;
outline += texture(TEXTURE, UV + vec2(size.x, 0)).a;
outline += texture(TEXTURE, UV + vec2(0, -size.y)).a;
outline += texture(TEXTURE, UV + vec2(-size.x, size.y)).a;
outline += texture(TEXTURE, UV + vec2(-size.x, size.y * 0.5)).a;
outline += texture(TEXTURE, UV + vec2(size.x, size.y)).a;
outline += texture(TEXTURE, UV + vec2(size.x, size.y * 0.5)).a;
outline += texture(TEXTURE, UV + vec2(-size.x, -size.y)).a;
outline += texture(TEXTURE, UV + vec2(-size.x, -size.y * 0.5)).a;
outline += texture(TEXTURE, UV + vec2(size.x, -size.y)).a;
outline += texture(TEXTURE, UV + vec2(size.x, -size.y * 0.5)).a;
outline = min(outline, 1.0);
vec4 color = texture(TEXTURE, UV);
COLOR = mix(color, line_color, outline - color.a);
}
Good shader for outlines, thanks!.
How can I have this shader work on a ColorRect and draw an outline for anything underneath it instead of adding this shader to every object you need an outline for?