Files
PRD_TU_MP550/Shaders/load.gdshader
2025-02-12 12:12:33 +03:00

59 lines
1.9 KiB
Plaintext

shader_type canvas_item;
uniform float frequency = 5.0;
uniform float amplitude = 0.1; // Уменьшаем амплитуду для корректного отображения
uniform float speed = 5.0;
uniform float direction: hint_range(-1.0, 1.0) = -1.0;
uniform vec4 color1: source_color = vec4(0.0, 0.0, 0.0, 1.0);
uniform vec4 color2: source_color = vec4(0.235, 0.18, 0.235, 1.0);
uniform vec4 color3: source_color = vec4(0.235, 0.18, 0.235, 0.5);
uniform vec4 color4: source_color = vec4(0.0, 0.0, 0.0, 0.0);
uniform float opacity: hint_range(0.0, 1.0) = 0.5;
uniform float turn = 0.785; // 45 градусов в радианах (TAU / 8)
vec2 rotate_uv(vec2 uv, vec2 pivot, float rotation) {
float cosa = cos(rotation);
float sina = sin(rotation);
uv -= pivot;
return vec2(
cosa * uv.x - sina * uv.y,
sina * uv.x + cosa * uv.y
) + pivot;
}
void fragment() {
vec2 uv = FRAGCOORD.xy;
// Нормализуем UV-координаты в диапазоне [0, 1]
uv = uv * 0.15 - 1.0; // Преобразуем в диапазон [-1, 1]
// Поворот UV-координат на 45 градусов
float angle = radians(-60.0); // Преобразуем градусы в радианы
vec2 origin = vec2(0.0, 0.0);
uv = rotate_uv(uv, origin, angle);
// Преобразуем обратно в диапазон [0, 1]
uv = uv * 0.05 + 0.05;
// Вычисляем синусоидальную волну
float sine_wave = sin(uv.x * frequency + TIME * speed * direction) * amplitude;
uv.y += sine_wave;
float t = sin(uv.x * frequency + TIME * speed * direction);
vec4 final_color;
if (t < -0.5) {
final_color = color1;
} else if (t < 0.0) {
final_color = color2;
} else if (t < 0.5) {
final_color = color3;
} else {
final_color = color4;
}
final_color *= vec4(1.0, 1.0, 1.0, opacity);
COLOR = final_color;
}