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; }