3D selection Ring or AOE

A dynamic ring-based VFX shader for Godot 4, useful for gameplay indicators such as player selection circles, AOE warnings, targeting zones, danger indicators, and hologram-style UI rings.

 

This shader uses a mask texture to define the ring shape and scrolls it over time to create a smooth animated effect.

You can customize the color, scroll direction, speed, and intensity to create anything from subtle highlights to strong attack warnings.

 

Features:-

Works in 3D (spatial)

Additive & unshaded for a clean glowing look

Texture scrolling animation

Adjustable effect intensity

Mask-based ring shaping

Fully color-controlled

Lightweight and performance-friendly

 

Parameters:-

color – main color of the ring

offset – texture scrolling direction

speed – scroll speed

mask_texture – just put empty noise texture (to get exact result)

intensity – glow strength

 

Use Cases:-

Player or enemy selection indicators

AOE / skill warning circles

Attack telegraphs

Targeting markers

Sci-fi / hologram rings

Environment or UI effects

This shader requires a mesh (custom mesh) to display properly. Please visit my GitHub by clicking “Get demo project” to download the whole project (mesh + texture).

or 

you can visit my youtube channel to see tutorial by clicking on “See more about this shader”.

Shader code
shader_type spatial;
render_mode blend_add, unshaded,cull_disabled;

//Main color of the effect
uniform vec4 color:source_color;

//scrolling direction
uniform vec2 offset;

// scroll speed of the texture
uniform float speed;

// Mask Texture
uniform sampler2D mask_texture;

//Intensity of effect
uniform float intensity;

void fragment(){
	
	vec2 uv = UV;
	
	float scroll = TIME * speed;
	
	float scroll_amount = offset.x * scroll;
	
	vec2 scrolled = uv + vec2(scroll_amount);
	
	vec4 mask_color = texture(mask_texture,scrolled);
	
	float mask_alpha = mask_color.a;
	
	float mask_binary = round(mask_color.r);
	
	vec3 final_color = color.rgb * mask_binary;
	
	float clamped_intensity = clamp(intensity, 0, 5.0);
	float final_alpha = color.a * mask_alpha * clamped_intensity;
	
	ALBEDO = final_color;
	ALPHA = final_alpha;
}

This shader requires a mesh (custom mesh) to display properly. Please visit my GitHub by clicking “Get demo project” to download the whole project (mesh + texture).

or 

you can visit my youtube channel to see tutorial by clicking on "See more about this shader".
Tags
3d, 3D effect, circle effect.AOE, godot4, ring effect, shader, Spatial, Unshaded, vfx
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 Dev Quest

Slash Shader

Related shaders

Focus circle / ring

Ring / Wave shader

guest

0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments