shader_type canvas_item; render_mode unshaded; uniform sampler2D screen_texture : hint_screen_texture, repeat_disable, filter_nearest; uniform vec2 extent = vec2(1.0); uniform vec2 center = vec2(0.5); uniform float progress : hint_range(0.0, 1.0) = 0.0; void fragment() { vec2 delta = (UV - center) * extent; float distance_px = length(delta); float radius = progress * length(extent); float band = 1.0 - smoothstep(0.0, 28.0, abs(distance_px - radius)); float fade = 1.0 - progress; vec2 direction = delta / max(distance_px, 1.0); vec2 offset = direction * sin((distance_px - radius) * 0.18) * band * 4.0 * fade * SCREEN_PIXEL_SIZE; vec4 scene = texture(screen_texture, SCREEN_UV + offset); scene.rgb += vec3(0.18, 0.28, 0.22) * band * fade; COLOR = vec4(scene.rgb, 1.0); }