Wobbly shader
adds a customizable wobble effect around the texture
Shader code
shader_type canvas_item;
uniform float alpha_tresh : hint_range(0.0, 1.0, 0.01) = 0.8;
uniform float shrink = 2.0;
uniform float offset_mul = 2.0;
uniform float coff_angle = 0.0;
uniform float coff_mul = 0.5;
uniform float coff_std:hint_range(0.0, 3.0, 0.1) = 0.2;
uniform float amp1 = 0.125;
uniform float freq1 = 4;
uniform float speed1 = 5.0;
uniform float amp2 = 0.125;
uniform float freq2 = 9;
uniform float speed2 = 1.46;
uniform sampler2D cols;
uniform sampler2D base_offset;
void vertex() {
UV *= shrink;
UV -= vec2((shrink-1.0)/2.0);
}
void fragment() {
if (COLOR.a <= alpha_tresh) {
float angle = atan(UV.y-0.5, UV.x-0.5);
if (angle < 0.0) {
angle += 2.0 * PI;
}
float h = amp1*sin(angle*freq1 + TIME*speed1) + amp2*sin(angle*freq2 + TIME*speed2);
h += amp1+amp2;
float b_off = texture(base_offset, vec2(1.0-angle/(2.0*PI),0)).r;
h += b_off*offset_mul;
float c_diff1 = angle-mod(coff_angle,2.0*PI);
float c_diff = min(min(abs(c_diff1),abs(c_diff1-2.0*PI)),abs(c_diff1+2.0*PI));
float c_off = exp(-c_diff*c_diff/(2.0*coff_std*coff_std));
h += c_off*coff_mul;
h /= 2.0*(amp1+amp2) + offset_mul;
//h = clamp(h, 0.0, 1.0);
float r = length(vec2(UV.x-0.5,UV.y-0.5))*2.0/shrink;
if (r < h) {
COLOR = texture(cols, vec2(r/h));
}else{
COLOR = vec4(0.0,0.0,0.0,0.0);
}
}
}
idk if I do something wrong, but this shrinks the canvas item (had to change Shrink value to 1.0 instead of the default 2.0), and applies the effect only inside it. So all canvas items must be made with it in mind, instead of adding this shader atop any canavs item.
Also what should the 2 variables take in
Cols
andBase Offset
? There is no indication, I did texture2D and NoiseTexture and it works, but I’m not sure it works as intended.