Item Highlighter
How to use:
Add shader to Next Pass in the Surface Material of the MeshInstance
In Godot 4:
Change hint_color
to source_color
and CAMERA_MATRIX
to INV_VIEW_MATRIX
.
Shader code
shader_type spatial;
render_mode unshaded, depth_draw_never;
uniform vec4 shine_color : hint_color = vec4( 1.0, 1.0, 1.0, 1.0 );
uniform float cycle_interval : hint_range(0.5, 5.0) = 1.0;
uniform float shine_speed : hint_range(1.0, 5.0) = 3.0;
uniform float shine_width : hint_range(1.0, 100.0) = 3.0;
void fragment( )
{
vec3 vertex = ( CAMERA_MATRIX * vec4( VERTEX, 1.0 ) ).xyz;
float width = shine_width * 0.001 * cycle_interval;
float frequency = floor( sin( vertex.z * cycle_interval + TIME * shine_speed * cycle_interval ) + width );
ALBEDO = shine_color.rgb;
ALPHA = clamp( ( 1.0 - dot( NORMAL, VIEW ) ) * frequency * shine_color.a, 0.0, 1.0 );
}
It would be amazing if there was a 2D version of this <3
I went looking and found something similar, uploaded it to the site: https://godotshaders.com/shader/2d-shine-highlight/?post_id=3807
Good news! https://godotshaders.com/shader/2d-item-highlight-shader/
I love this so much!
For it to work in Godot 4 you need to do two little adjustments:
Change hint_color to source_color and CAMERA_MATRIX to VIEW_MATRIX
CAMERA_MATRIX was renamed INV_VIEW_MATRIX not VIEW_MATRIX 🙂
https://github.com/godotengine/godot/pull/59268
Is there a way to change the angle of the shine?
Is it possible to use it on a Sprite3D?
I really like this effect, but because you use the view transform on the vertices, if you are rotating the camera while the effect is playing it has a strange behavior (very rapid oscillations). Changing it to just use VERTEX directly seems to work better for me.
So you can just change the first line to: