Ripple Button Shader

The Ripple Button Shader is designed to create a dynamic ripple effect on UI elements, such as buttons, triggered by user interactions.

This shader is suitable for UI designs where interactive feedback enhances user experience, such as touch-based interfaces or visual effects for button clicks.
It offers customizable parameters:
– ripple’s size;
– ripple’s color;
– base color;
– blend width;
– UV scale = to form ripple form.

Usage example gdscript on Button:
extends Button

var tween : Tween

func _ready():
    get_material().set_shader_parameter("ripple_origin", Vector2(0,0))
    get_material().set_shader_parameter("ripple_radius", 0.0)

func _input(event):
    if event is InputEventMouseButton and event.pressed:
        if get_global_rect().has_point(event.position):
            var local_pos = (event.position - global_position) / size
            get_material().set_shader_parameter("ripple_origin", local_pos)
            ripple_effect()

func ripple_effect():
    tween = create_tween()
    tween.tween_method(
        func(value):
            get_material().set_shader_parameter("ripple_radius", float(value) / 50.0),
        0.0,
        150.0,
        1.5
    )

 

Shader code
shader_type canvas_item;

uniform vec2 ripple_origin = vec2(0.0, 0.0);
uniform float ripple_radius : hint_range(0.0, 1.0) = 0.0;
uniform float ripple_width : hint_range(0.01, 0.1) = 0.05;
uniform vec4 ripple_color : source_color = vec4(1.0, 0.0, 0.0, 1.0);
uniform vec4 base_color : source_color = vec4(1.0,1.0,1.0,1.0);
uniform vec2 uv_scale = vec2 (1.0,0.5);

void fragment() {
    vec2 uv = UV * uv_scale - ripple_origin;
    float dist = length(uv);

    float ripple = smoothstep(ripple_radius, ripple_radius - ripple_width, dist) *
                   smoothstep(ripple_radius + ripple_width, ripple_radius, dist);

	float center_blend = smoothstep(0.0, ripple_radius - ripple_width, dist);

    COLOR = mix(base_color, mix(base_color, ripple_color, ripple), center_blend);
}
Tags
Blend Width, Buttons, Custom Shader, Godot 4.x, Interaction Feedback, Ripple Color, Ripple Effect, Ripple Size, ui
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.

Related shaders

Ripple Gradient Shader

Ripple shader

Ripple Gradient Shaderww

Subscribe
Notify of
guest

0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments