победа над водопадами, шейдеры m2
This commit is contained in:
@@ -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);
|
||||
}
|
||||
"""
|
||||
|
||||
Reference in New Issue
Block a user