Files

38 lines
1.5 KiB
Plaintext

shader_type spatial;
render_mode blend_mix, depth_prepass_alpha, cull_disabled, diffuse_burley, specular_schlick_ggx;
uniform float scroll_speed : hint_range(0.0, 4.0) = 1.35;
uniform vec3 shadow_color : source_color = vec3(0.11, 0.39, 0.54);
uniform vec3 water_color : source_color = vec3(0.39, 0.73, 0.82);
uniform vec3 light_color : source_color = vec3(0.85, 0.96, 0.94);
uniform vec3 foam_color : source_color = vec3(0.91, 0.97, 0.9);
void vertex() {
float edge_weight = 1.0 - abs(UV.x * 2.0 - 1.0);
float curtain_wobble = sin(UV.y * 13.0 - TIME * 2.2 + UV.x * 8.0) * 0.05;
VERTEX.z += curtain_wobble * edge_weight;
}
void fragment() {
vec2 flow_uv = UV;
flow_uv.y += TIME * scroll_speed;
float long_thread = sin(flow_uv.x * 32.0 + sin(flow_uv.y * 3.1) * 2.4) * 0.5 + 0.5;
float soft_thread = sin(flow_uv.x * 13.0 - flow_uv.y * 7.0) * 0.5 + 0.5;
float falling_detail = sin(flow_uv.y * 27.0 + flow_uv.x * 7.0) * 0.5 + 0.5;
float thread = smoothstep(0.36, 0.9, long_thread * 0.6 + soft_thread * 0.4);
float broken_foam = smoothstep(0.61, 0.94, falling_detail * thread);
float base_foam = smoothstep(0.58, 1.0, UV.y);
float edge_fade = smoothstep(0.0, 0.08, UV.x) * (1.0 - smoothstep(0.92, 1.0, UV.x));
vec3 color = mix(shadow_color, water_color, 0.5 + thread * 0.35);
color = mix(color, light_color, thread * 0.35 + broken_foam * 0.35);
color = mix(color, foam_color, base_foam * (0.38 + broken_foam * 0.42));
ALBEDO = color;
ROUGHNESS = mix(0.16, 0.32, broken_foam);
SPECULAR = 0.65;
ALPHA = edge_fade * mix(0.76, 0.95, thread * 0.56 + base_foam * 0.3);
}