shader_type canvas_item; render_mode blend_add; uniform float radius : hint_range(0.0, 1.0, 0.01) = .7; uniform float thickness : hint_range(0.0, 1.0, 0.01) = .2; uniform vec4 color : source_color = vec4(0.9, 0.4, 0.1, 1.0); uniform float brightness : hint_range(0.0, 15.0, 0.01) = 5.0; uniform float angular_speed : hint_range(-5.0, 5.0, 0.01) = 2.5; uniform float radial_speed : hint_range(-5.0, 5.0, 0.01) = 1.4; uniform float alpha : hint_range(0.0, 1.0, 0.01) = .5; uniform sampler2D noise; void fragment() { vec2 v = vec2(.5) - UV; float d = length(v) * 2.; float angle = atan(v.y, v.x) + (TIME * angular_speed); float thick_ratio = 1. - (abs(d - max(0., radius)) / max(.0001, thickness)); vec2 polar = fract(vec2(angle / 6.28, d + (TIME * radial_speed))); vec4 col = thick_ratio * brightness * color; vec3 tex = texture(noise, polar).rgb; col.a = (alpha * (tex.r + tex.g + tex.b) * clamp(thick_ratio, 0., 1.)) / 3.; COLOR = col; }