победа над водопадами, шейдеры m2

This commit is contained in:
2026-07-07 10:45:43 +04:00
parent 8738c2495d
commit 44614a79e4
38 changed files with 4820 additions and 192 deletions
@@ -9,6 +9,10 @@ static func clear_cache() -> void:
_cache.clear()
static func _ensure_wow_shader_globals() -> void:
pass
static func build(liquid_id: int) -> ShaderMaterial:
var key := "adt:%d" % liquid_id
if _cache.has(key):
@@ -108,6 +112,7 @@ static func _get_shader() -> Shader:
if _shader:
return _shader
_ensure_wow_shader_globals()
_shader = Shader.new()
_shader.code = """
shader_type spatial;
@@ -123,7 +128,12 @@ uniform float fresnel_power = 2.3;
uniform float emission_strength = 0.025;
uniform float magma_mode = 0.0;
global uniform vec4 wow_fog_color;
global uniform vec2 wow_fog_range;
global uniform float wow_fog_density;
varying vec3 world_pos;
varying vec3 view_pos;
float hash21(vec2 p) {
return fract(sin(dot(p, vec2(127.1, 311.7))) * 43758.5453123);
@@ -140,8 +150,16 @@ float noise21(vec2 p) {
return mix(mix(a, b, u.x), mix(c, d, u.x), u.y);
}
vec3 apply_wow_fog(vec3 color) {
float dist = length(view_pos);
float range_fog = smoothstep(wow_fog_range.x, wow_fog_range.y, dist);
float fog_amount = range_fog * clamp(wow_fog_density, 0.0, 1.0);
return mix(color, wow_fog_color.rgb, fog_amount);
}
void vertex() {
world_pos = (MODEL_MATRIX * vec4(VERTEX, 1.0)).xyz;
view_pos = (MODELVIEW_MATRIX * vec4(VERTEX, 1.0)).xyz;
float t = TIME * wave_speed;
float wave_a = sin(world_pos.x * wave_scale + t);
float wave_b = cos(world_pos.z * wave_scale * 1.37 - t * 1.21);
@@ -170,7 +188,7 @@ void fragment() {
EMISSION = color * emission_strength;
}
ALBEDO = color;
ALBEDO = apply_wow_fog(color);
ALPHA = clamp(alpha_base + fresnel * 0.18 + ripple * 0.06, 0.0, 1.0);
}
"""