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);
}
The shader code and all code snippets in this post are under CC0 license and can be used freely without the author's permission. Images and videos, and assets depicted in those, do not fall under this license. For more info, see our License terms.

More from axilirate

Simple Energy Shield

Stylized Sky Shader With Clouds For Godot 4

Speed Lines Shader for Godot 4

Related shaders

2D Outline and Rainbow outline 2 in 1

Reupload of outline shader

Smooth outline 2D

guest

1 Comment
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
Torguen
Torguen
8 months ago

Good shader for outlines, thanks!.