// Adapted from Leafshade Interactive's outline shader // explained and shown in https://youtu.be/yh1Kdr37RmI. shader_type canvas_item; uniform vec4 line_color : source_color = vec4(1.0); uniform float line_thickness : hint_range(0.0, 10.0) = 2.0; void fragment() { vec2 size = TEXTURE_PIXEL_SIZE * line_thickness; float outline = texture(TEXTURE, UV + vec2( size.x, 0)).a + texture(TEXTURE, UV + vec2(-size.x, 0)).a + texture(TEXTURE, UV + vec2(0, size.y)).a + texture(TEXTURE, UV + vec2(0, -size.y)).a + texture(TEXTURE, UV + vec2( size.x, size.y)).a + texture(TEXTURE, UV + vec2(-size.x, size.y)).a + texture(TEXTURE, UV + vec2(-size.x, -size.y)).a + texture(TEXTURE, UV + vec2( size.x, -size.y)).a; float alpha = min(outline, 1.0) - texture(TEXTURE, UV).a; COLOR = vec4(line_color.rgb, line_color.a * alpha); }