-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbackground.gdshader
More file actions
44 lines (36 loc) · 1.36 KB
/
background.gdshader
File metadata and controls
44 lines (36 loc) · 1.36 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
shader_type canvas_item;
#define GRADIENT_SIZE 3
#define SQRT2 1.41421356237f
uniform vec3 gradient_colors[GRADIENT_SIZE] : source_color;
uniform float grid_size = 0.2;
uniform float circle_base = 0.05;
uniform float circle_growth = 0.1;
uniform vec2 circle_speed = vec2(.2f);
vec3 diagonal_gradient(vec2 uv) {
float t = clamp((uv.x + uv.y) * 0.5, 0.0, 1.0);
float seg = t * float(GRADIENT_SIZE - 1);
int i = int(floor(seg));
float local_t = fract(seg);
i = clamp(i, 0, GRADIENT_SIZE - 2);
return mix(gradient_colors[i], gradient_colors[i + 1], local_t);
}
float circle_mask(vec2 uv, vec2 pixel_size) {
vec2 grid_pos = ((uv + TIME * circle_speed * .01f) / pixel_size) / grid_size;
grid_pos.x += .5f * float(int(grid_pos.y + step(0.f, sign(grid_pos.y))) % 2);
vec2 grid_uv = fract(grid_pos) - 0.5f;
float dist = length(grid_uv) / SQRT2;
float uv_dist = length(uv) / SQRT2;
float radius = mix(circle_base, circle_growth, uv_dist);
return smoothstep(radius, radius - (0.25f - .2f * uv_dist), dist);
}
void fragment() {
vec2 uv = SCREEN_UV;
vec2 pixel_size = SCREEN_PIXEL_SIZE;
vec3 bg = diagonal_gradient(uv);
float circle_mask = circle_mask(uv, pixel_size);
ivec2 pixel = ivec2(FRAGCOORD.xy);
float checker = float((pixel.x / 2 + pixel.y / 2) % 2);
vec3 color = mix(bg * 0.4, bg, circle_mask);
color = mix(color * .5f, color, checker);
COLOR = vec4(color, 1.0);
}