38 lines
1.5 KiB
Plaintext
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);
|
|
}
|