Pixel Perfect outline Shader
Uploading this because couldn’t find one on this site.
Same outline size from any distance, perfect for interactable objects.
Mode for Godot 4.
To use in Godot 3 replace “source_color” with “hint_color”
Shader code
shader_type spatial;
render_mode cull_front, unshaded;
uniform vec4 outline_color : source_color;
uniform float outline_width = 1.0;
void vertex() {
vec4 clip_position = PROJECTION_MATRIX * (MODELVIEW_MATRIX * vec4(VERTEX, 1.0));
vec3 clip_normal = mat3(PROJECTION_MATRIX) * (mat3(MODELVIEW_MATRIX) * NORMAL);
vec2 offset = normalize(clip_normal.xy) / VIEWPORT_SIZE * clip_position.w * outline_width * 2.0;
clip_position.xy += offset;
POSITION = clip_position;
}
void fragment() {
ALBEDO = outline_color.rgb;
if (outline_color.a < 1.0) {
ALPHA = outline_color.a;
}
}
thanks
Looks really nice, but I can’t seem to get it working. On a simple cube there is gaps between the corners, any idea why this may be? I’m using Godot v4.0.beta1
I have the same problem
It only works on mesh with smoothed normals.
Oh this one just works! Thanks!