43 lines
1.4 KiB
Plaintext
43 lines
1.4 KiB
Plaintext
[gd_resource type="ShaderMaterial" load_steps=2 format=2]
|
|
|
|
[sub_resource type="Shader" id=8]
|
|
code = "shader_type canvas_item;
|
|
|
|
uniform vec2 resolution = vec2(64.0, 64.0);
|
|
uniform float noise : hint_range(0.0, 1.0) = 0.2;
|
|
uniform float distort : hint_range(0.0, 1.0) = 0.06;
|
|
uniform float offset : hint_range(0.0, 1.0) = 0.0;
|
|
|
|
vec2 random(vec2 uv){
|
|
uv = vec2(dot(uv, vec2(127.1,311.7)), dot(uv, vec2(269.5,183.3)));
|
|
return -1.0 + 2.0 * fract(sin(uv) * 43758.5453123);
|
|
}
|
|
|
|
float between(float lower, float upper, float value) {
|
|
return step(lower, value) * step(value, upper);
|
|
}
|
|
|
|
void fragment()
|
|
{
|
|
vec2 uv = UV;
|
|
// Distort
|
|
float oy = offset / 10.;
|
|
float dist = distort * clamp(offset / 2., 0.25, 0.75);
|
|
uv.x += dist * between(0.7, 0.8, fract(offset + TIME/4.)) * between(0.4, 0.41 + oy, uv.y);
|
|
uv.x -= dist * between(0.1, 0.15, fract(offset + TIME/3.)) * between(0.7, 0.71 + oy, uv.y);
|
|
uv.x += dist * between(0.15, 0.25, fract(offset + TIME/3.)) * between(0.6, 0.61 + oy, uv.y);
|
|
uv.x += dist * between(0.5, 0.55, fract(offset + TIME/7.)) * between(0.5, 0.73 - oy, uv.y);
|
|
// Add noise
|
|
vec4 pxl = texture(TEXTURE, uv);
|
|
pxl.rgb += clamp(random((ceil(UV * resolution) / resolution) + trunc(fract(TIME) * 4.)).x, 0.0, 1.0) * noise;
|
|
// Shade
|
|
COLOR = pxl;
|
|
}"
|
|
|
|
[resource]
|
|
shader = SubResource( 8 )
|
|
shader_param/resolution = Vector2( 64, 64 )
|
|
shader_param/noise = 0.2
|
|
shader_param/distort = 0.06
|
|
shader_param/offset = 0.0
|