48 lines
1.1 KiB
Text
48 lines
1.1 KiB
Text
/*
|
|
Glitch Effect Shader by Yui Kinomoto @arlez80
|
|
|
|
MIT License
|
|
*/
|
|
|
|
shader_type canvas_item;
|
|
|
|
uniform float shake_power = 0.03;
|
|
uniform float shake_rate : hint_range( 0.0, 1.0 ) = 0.2;
|
|
uniform float shake_speed = 5.0;
|
|
uniform float shake_block_size = 30.5;
|
|
uniform float shake_color_rate : hint_range( 0.0, 1.0 ) = 0.01;
|
|
uniform sampler2D screen_texture : hint_screen_texture;
|
|
|
|
float random( float seed )
|
|
{
|
|
return fract( 543.2543 * sin( dot( vec2( seed, seed ), vec2( 3525.46, -54.3415 ) ) ) );
|
|
}
|
|
|
|
void fragment( )
|
|
{
|
|
float enable_shift = float(
|
|
random( trunc( TIME * shake_speed ) )
|
|
< shake_rate
|
|
);
|
|
|
|
vec2 fixed_uv = SCREEN_UV;
|
|
fixed_uv.x += (
|
|
random(
|
|
( trunc( SCREEN_UV.y * shake_block_size ) / shake_block_size )
|
|
+ TIME
|
|
) - 0.5
|
|
) * shake_power * enable_shift;
|
|
|
|
vec4 pixel_color = textureLod( screen_texture, fixed_uv, 0.0 );
|
|
pixel_color.r = mix(
|
|
pixel_color.r
|
|
, textureLod( screen_texture, fixed_uv + vec2( shake_color_rate, 0.0 ), 0.0 ).r
|
|
, enable_shift
|
|
);
|
|
pixel_color.b = mix(
|
|
pixel_color.b
|
|
, textureLod( screen_texture, fixed_uv + vec2( -shake_color_rate, 0.0 ), 0.0 ).b
|
|
, enable_shift
|
|
);
|
|
COLOR = pixel_color;
|
|
}
|