godot-learning-shaders/shaders/016_line/line.gdshader
2025-01-07 17:11:41 +01:00

32 lines
1 KiB
Text

shader_type spatial;
uniform vec2 resolution = vec2(600.0, 400.0);
uniform vec3 line_color: source_color = vec3(0.2, 0.6, 0.2);
uniform float line_thickness: hint_range(0.01, 1.0, 0.01) = 0.05;
uniform float speed = 0.5;
uniform float amp_coef = 0.1;
uniform float freq_coef = 0.5;
uniform float iterations: hint_range(1.0, 20.0, 1.0) = 5.0;
uniform float brightness: hint_range(0.1, 20.0, 0.1) = 0.5;
vec3 draw_line(vec2 uv, vec3 color, float shift, float freq) {
uv.y += (1.0 - smoothstep(0.0, 1.0, abs(uv.x))) * sin(uv.x + shift * freq) * amp_coef * sin(uv.x + shift);
return (1.0 - smoothstep(0.0, line_thickness * (smoothstep(-0.2, 0.9, abs(uv.x))), abs(uv.y))) * color;
}
void fragment() {
// Move the center of the uv to the center of the Mesh
vec2 uv = UV - 0.5;
// Apply the aspect ratio
uv.x *= resolution.x / resolution.y;
float shift = TIME * speed;
vec3 color = vec3(0.0);
for (float i = 0.0; i < iterations; i += 1.0) {
color += draw_line(uv, line_color, shift + i * 0.4, 1.0 + freq_coef);
}
ALBEDO = color * brightness;
}