86 lines
2.7 KiB
GLSL
Executable File
86 lines
2.7 KiB
GLSL
Executable File
//SHADER ORIGINALY CREADED BY "FMS_Cat" FROM SHADERTOY
|
|
//MODIFIED AND PORTED TO GODOT BY AHOPNESS (@ahopness)
|
|
//LICENSE : CC0
|
|
//COMATIBLE WITH : GLES2, GLES3
|
|
//SHADERTOY LINK : https://www.shadertoy.com/view/XtBXDt
|
|
|
|
shader_type canvas_item;
|
|
|
|
uniform float tape_wave_amount :hint_range (0, .04) = 0.003;
|
|
uniform float tape_crease_amount :hint_range (0, 15) = 2.5;
|
|
uniform float color_displacement :hint_range (0, 5) = 1;
|
|
uniform float lines_velocity :hint_range (0, 5) = 0.1;
|
|
|
|
const float PI = 3.14159265;
|
|
|
|
vec3 tex2D( sampler2D _tex, vec2 _p ){
|
|
vec3 col = texture( _tex, _p ).xyz;
|
|
if ( 0.5 < abs( _p.x - 0.5 ) ) {
|
|
col = vec3( 0.1 );
|
|
}
|
|
return col;
|
|
}
|
|
|
|
float hash( vec2 _v ){
|
|
return fract( sin( dot( _v, vec2( 89.44, 19.36 ) ) ) * 22189.22 );
|
|
}
|
|
|
|
float iHash( vec2 _v, vec2 _r ){
|
|
float h00 = hash( vec2( floor( _v * _r + vec2( 0.0, 0.0 ) ) / _r ) );
|
|
float h10 = hash( vec2( floor( _v * _r + vec2( 1.0, 0.0 ) ) / _r ) );
|
|
float h01 = hash( vec2( floor( _v * _r + vec2( 0.0, 1.0 ) ) / _r ) );
|
|
float h11 = hash( vec2( floor( _v * _r + vec2( 1.0, 1.0 ) ) / _r ) );
|
|
vec2 ip = vec2( smoothstep( vec2( 0.0, 0.0 ), vec2( 1.0, 1.0 ), mod( _v*_r, 1. ) ) );
|
|
return ( h00 * ( 1. - ip.x ) + h10 * ip.x ) * ( 1. - ip.y ) + ( h01 * ( 1. - ip.x ) + h11 * ip.x ) * ip.y;
|
|
}
|
|
|
|
float noise( vec2 _v ){
|
|
float sum = 0.;
|
|
for( float i=1.0; i<9.0; i++ ){
|
|
sum += iHash( _v + vec2( i ), vec2( 2. * pow( 2., float( i ) ) ) ) / pow( 2., float( i ) );
|
|
}
|
|
return sum;
|
|
}
|
|
|
|
void fragment(){
|
|
vec2 uv = FRAGCOORD.xy / (1.0 / SCREEN_PIXEL_SIZE).xy;
|
|
vec2 uvn = uv;
|
|
vec3 col = vec3( 0.0 );
|
|
|
|
// tape wave
|
|
uvn.x += ( noise( vec2( uvn.y, TIME ) ) - 0.5 )* 0.005;
|
|
uvn.x += ( noise( vec2( uvn.y * 100.0, TIME * 10.0 ) ) - 0.5 ) * tape_wave_amount;
|
|
|
|
// tape crease
|
|
float tcPhase = clamp( ( sin( uvn.y * 8.0 - TIME * PI * 1.2 ) - 0.92 ) * noise( vec2( TIME ) ), 0.0, 0.01 ) * tape_crease_amount;
|
|
float tcNoise = max( noise( vec2( uvn.y * 100.0, TIME * 10.0 ) ) - 0.5, 0.0 );
|
|
uvn.x = uvn.x - tcNoise * tcPhase;
|
|
|
|
// switching noise
|
|
float snPhase = smoothstep( 0.03, 0.0, uvn.y );
|
|
uvn.y += snPhase * 0.3;
|
|
uvn.x += snPhase * ( ( noise( vec2( uv.y * 100.0, TIME * 10.0 ) ) - 0.5 ) * 0.2 );
|
|
|
|
col = tex2D( SCREEN_TEXTURE, uvn );
|
|
col *= 1.0 - tcPhase;
|
|
col = mix(
|
|
col,
|
|
col.yzx,
|
|
snPhase
|
|
);
|
|
|
|
// bloom
|
|
for( float x = -4.0; x < 2.5; x += 1.0 ){
|
|
col.xyz += vec3(
|
|
tex2D( SCREEN_TEXTURE, uvn + vec2( x - 0.0, 0.0 ) * 0.007 ).x,
|
|
tex2D( SCREEN_TEXTURE, uvn + vec2( x - color_displacement, 0.0 ) * 0.007 ).y,
|
|
tex2D( SCREEN_TEXTURE, uvn + vec2( x - color_displacement * 2.0, 0.0 ) * 0.007 ).z
|
|
) * 0.1;
|
|
}
|
|
col *= 0.6;
|
|
|
|
// ac beat
|
|
col *= 1.0 + clamp( noise( vec2( 0.0, uv.y + TIME * lines_velocity ) ) * 0.6 - 0.25, 0.0, 0.1 );
|
|
|
|
COLOR = vec4( col, 1.0 );
|
|
} |