fix snow and rain for grass
This commit is contained in:
@@ -89,7 +89,6 @@ func _apply_wind_noise_to_node(node: Node, noise_tex: Texture2D) -> void:
|
|||||||
|
|
||||||
func ApplyWeatherShaderToMaterials():
|
func ApplyWeatherShaderToMaterials():
|
||||||
var weather_shader = preload("res://core/daynight/weather_overlay.tres")
|
var weather_shader = preload("res://core/daynight/weather_overlay.tres")
|
||||||
|
|
||||||
for node in get_tree().get_nodes_in_group("weather_node"):
|
for node in get_tree().get_nodes_in_group("weather_node"):
|
||||||
if node is GeometryInstance3D:
|
if node is GeometryInstance3D:
|
||||||
node.material_overlay = weather_shader
|
node.material_overlay = weather_shader
|
||||||
@@ -97,14 +96,17 @@ func ApplyWeatherShaderToMaterials():
|
|||||||
for child in node.get_children():
|
for child in node.get_children():
|
||||||
if child is GeometryInstance3D:
|
if child is GeometryInstance3D:
|
||||||
child.material_overlay = weather_shader
|
child.material_overlay = weather_shader
|
||||||
|
break
|
||||||
|
|
||||||
|
var weather_plain_shader = preload("res://core/daynight/weather_plain_shader.tres")
|
||||||
for node in get_tree().get_nodes_in_group("weather_vegetables_node"):
|
for node in get_tree().get_nodes_in_group("weather_vegetables_node"):
|
||||||
if node is GeometryInstance3D:
|
if node is GeometryInstance3D:
|
||||||
node.material_overlay = weather_shader
|
node.material_overlay = weather_plain_shader
|
||||||
else:
|
else:
|
||||||
for child in node.get_children():
|
for child in node.get_children():
|
||||||
if child is GeometryInstance3D:
|
if child is GeometryInstance3D:
|
||||||
child.material_overlay = weather_shader
|
child.material_overlay = weather_plain_shader
|
||||||
|
break
|
||||||
|
|
||||||
func select_day_time(normalized_time: float) -> void:
|
func select_day_time(normalized_time: float) -> void:
|
||||||
#set show_day_time_debug = true to show debug on screen
|
#set show_day_time_debug = true to show debug on screen
|
||||||
|
|||||||
@@ -8,7 +8,10 @@ global uniform float global_wind_speed;
|
|||||||
global uniform float global_wind_strength;
|
global uniform float global_wind_strength;
|
||||||
global uniform vec2 global_wind_direction;
|
global uniform vec2 global_wind_direction;
|
||||||
//global uniform sampler2D global_wind_noise : filter_linear_mipmap;
|
//global uniform sampler2D global_wind_noise : filter_linear_mipmap;
|
||||||
global uniform float global_snow_amount;
|
global uniform float global_snow_start_time;
|
||||||
|
global uniform float global_snow_accumulation_speed;
|
||||||
|
global uniform float global_snow_melt_time;
|
||||||
|
global uniform float global_snow_melt_speed;
|
||||||
|
|
||||||
// --- PARAMETRI ESTETICI ---
|
// --- PARAMETRI ESTETICI ---
|
||||||
uniform bool billboard_enabled = true;
|
uniform bool billboard_enabled = true;
|
||||||
@@ -109,10 +112,19 @@ void fragment() {
|
|||||||
float noise_sample = texture(color_variance_noise, v_world_pos.xz * variance_scale).r;
|
float noise_sample = texture(color_variance_noise, v_world_pos.xz * variance_scale).r;
|
||||||
// Applichiamo la variazione al colore finale dell'erba
|
// Applichiamo la variazione al colore finale dell'erba
|
||||||
vec3 varied_grass_color = mix(v_final_color, variance_color.rgb, noise_sample * variance_intensity);
|
vec3 varied_grass_color = mix(v_final_color, variance_color.rgb, noise_sample * variance_intensity);
|
||||||
|
|
||||||
|
float snow_amount = 0.0;
|
||||||
|
if (global_snow_start_time >= 0.0) {
|
||||||
|
snow_amount = clamp((TIME - global_snow_start_time) * global_snow_accumulation_speed, 0.0, 1.0);
|
||||||
|
}
|
||||||
|
if (global_snow_melt_time >= 0.0) {
|
||||||
|
float melt = clamp((TIME - global_snow_melt_time) * global_snow_melt_speed, 0.0, 1.0);
|
||||||
|
snow_amount *= (1.0 - melt);
|
||||||
|
}
|
||||||
|
|
||||||
float top_mask = 1.0 - shifted_uv.y;
|
float top_mask = 1.0 - shifted_uv.y;
|
||||||
float snow_mask = smoothstep(1.0 - global_snow_amount, 1.2 - global_snow_amount, top_mask);
|
float snow_mask = smoothstep(1.0 - snow_amount, 1.2 - snow_amount, top_mask);
|
||||||
snow_mask *= step(0.01, global_snow_amount);
|
snow_mask *= step(0.01, snow_amount);
|
||||||
|
|
||||||
vec3 dark_snow = snow_color.rgb * (1.0 - shadow_intensity);
|
vec3 dark_snow = snow_color.rgb * (1.0 - shadow_intensity);
|
||||||
vec3 shaded_snow = mix(dark_snow, snow_color.rgb, v_shade_factor);
|
vec3 shaded_snow = mix(dark_snow, snow_color.rgb, v_shade_factor);
|
||||||
@@ -131,4 +143,4 @@ void light() {
|
|||||||
float shadow_factor = mix(1.0 - cast_shadow_strength, 1.0, ATTENUATION);
|
float shadow_factor = mix(1.0 - cast_shadow_strength, 1.0, ATTENUATION);
|
||||||
float cutoff_mask = smoothstep(0.0, 0.05, ATTENUATION);
|
float cutoff_mask = smoothstep(0.0, 0.05, ATTENUATION);
|
||||||
DIFFUSE_LIGHT += (shadow_factor * LIGHT_COLOR) * cutoff_mask;
|
DIFFUSE_LIGHT += (shadow_factor * LIGHT_COLOR) * cutoff_mask;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,11 +6,12 @@ global uniform vec2 global_wind_direction;
|
|||||||
global uniform float global_wind_scale;
|
global uniform float global_wind_scale;
|
||||||
global uniform float global_wind_strength;
|
global uniform float global_wind_strength;
|
||||||
global uniform float global_wind_fade;
|
global uniform float global_wind_fade;
|
||||||
|
/*
|
||||||
global uniform float global_snow_start_time;
|
global uniform float global_snow_start_time;
|
||||||
global uniform float global_snow_accumulation_speed;
|
global uniform float global_snow_accumulation_speed;
|
||||||
global uniform float global_snow_melt_time;
|
global uniform float global_snow_melt_time;
|
||||||
global uniform float global_snow_melt_speed;
|
global uniform float global_snow_melt_speed;
|
||||||
global uniform vec4 global_snow_color;
|
global uniform vec4 global_snow_color;*/
|
||||||
global uniform float global_rain_intensity;
|
global uniform float global_rain_intensity;
|
||||||
|
|
||||||
uniform sampler2D wind_noise : filter_linear_mipmap;
|
uniform sampler2D wind_noise : filter_linear_mipmap;
|
||||||
@@ -87,24 +88,25 @@ void fragment() {
|
|||||||
vec2 shifted_uv = UV + texture_offset;
|
vec2 shifted_uv = UV + texture_offset;
|
||||||
vec4 tex = texture(alpha_texture, shifted_uv);
|
vec4 tex = texture(alpha_texture, shifted_uv);
|
||||||
|
|
||||||
// Snow accumulation
|
//// Snow accumulation
|
||||||
float snow_amount = 0.0;
|
//float snow_amount = 0.0;
|
||||||
if (global_snow_start_time >= 0.0) {
|
//if (global_snow_start_time >= 0.0) {
|
||||||
snow_amount = clamp((TIME - global_snow_start_time) * global_snow_accumulation_speed, 0.0, 1.0);
|
//snow_amount = clamp((TIME - global_snow_start_time) * global_snow_accumulation_speed, 0.0, 1.0);
|
||||||
}
|
//}
|
||||||
if (global_snow_melt_time >= 0.0) {
|
//if (global_snow_melt_time >= 0.0) {
|
||||||
float melt = clamp((TIME - global_snow_melt_time) * global_snow_melt_speed, 0.0, 1.0);
|
//float melt = clamp((TIME - global_snow_melt_time) * global_snow_melt_speed, 0.0, 1.0);
|
||||||
snow_amount *= (1.0 - melt);
|
//snow_amount *= (1.0 - melt);
|
||||||
}
|
//}
|
||||||
|
//
|
||||||
float top_mask = 1.0 - shifted_uv.y;
|
//float top_mask = 1.0 - shifted_uv.y;
|
||||||
float snow_mask = smoothstep(1.0 - snow_amount, 1.2 - snow_amount, top_mask);
|
//float snow_mask = smoothstep(1.0 - snow_amount, 1.2 - snow_amount, top_mask);
|
||||||
snow_mask *= step(0.01, snow_amount);
|
//snow_mask *= step(0.01, snow_amount);
|
||||||
|
|
||||||
vec3 dark_snow = global_snow_color.rgb * (1.0 - shadow_intensity);
|
|
||||||
vec3 shaded_snow = mix(dark_snow, global_snow_color.rgb, v_shade_factor);
|
|
||||||
vec3 final_albedo = mix(v_final_color, shaded_snow, snow_mask);
|
|
||||||
|
|
||||||
|
//vec3 dark_snow = global_snow_color.rgb * (1.0 - shadow_intensity);
|
||||||
|
//vec3 shaded_snow = mix(dark_snow, global_snow_color.rgb, v_shade_factor);
|
||||||
|
//vec3 final_albedo = mix(v_final_color, shaded_snow, snow_mask);
|
||||||
|
vec3 final_albedo = v_final_color;
|
||||||
|
|
||||||
// Rain wetness: darken and make shinier
|
// Rain wetness: darken and make shinier
|
||||||
float rain_int = clamp(global_rain_intensity, 0.0, 1.0);
|
float rain_int = clamp(global_rain_intensity, 0.0, 1.0);
|
||||||
final_albedo *= mix(1.0, 1.0 - wetness_darkening, rain_int);
|
final_albedo *= mix(1.0, 1.0 - wetness_darkening, rain_int);
|
||||||
|
|||||||
@@ -5,3 +5,17 @@
|
|||||||
[resource]
|
[resource]
|
||||||
render_priority = 0
|
render_priority = 0
|
||||||
shader = ExtResource("1_weather")
|
shader = ExtResource("1_weather")
|
||||||
|
shader_parameter/snow_noise_scale = 0.15
|
||||||
|
shader_parameter/snow_edge_softness = 0.2
|
||||||
|
shader_parameter/snow_roughness_variation = 0.15
|
||||||
|
shader_parameter/snow_color_variation = 0.05
|
||||||
|
shader_parameter/ripple_scale = 1.5
|
||||||
|
shader_parameter/ripple_speed = 2.0
|
||||||
|
shader_parameter/ripple_layers = 3.0
|
||||||
|
shader_parameter/streak_scale = 2.0
|
||||||
|
shader_parameter/streak_speed = 0.8
|
||||||
|
shader_parameter/wetness_darkening = 0.25
|
||||||
|
shader_parameter/wet_roughness = 0.05
|
||||||
|
shader_parameter/rain_normal_strength = 0.4
|
||||||
|
shader_parameter/puddle_noise_scale = 0.08
|
||||||
|
shader_parameter/puddle_threshold = 0.45
|
||||||
|
|||||||
@@ -100,7 +100,7 @@ extends Resource
|
|||||||
|
|
||||||
#Rain weather settings
|
#Rain weather settings
|
||||||
@export_group("Rain")
|
@export_group("Rain")
|
||||||
@export var rain_mode_color: Color = Color(0.5, 0.6, 0.7, 1.0) #Sky/light darkening color during rain
|
@export var rain_mode_color: Color = Color(0.85, 0.89, 0.93, 1.0) #Sky/light darkening color during rain
|
||||||
@export var rain_fade_time: float = 5.0 #Seconds for rain particles to fade in/out
|
@export var rain_fade_time: float = 5.0 #Seconds for rain particles to fade in/out
|
||||||
@export var rain_audio_volume_db: float = -10.0 #Target rain loop volume in decibels
|
@export var rain_audio_volume_db: float = -10.0 #Target rain loop volume in decibels
|
||||||
@export var puddle_form_time: float = 15.0 #Seconds for puddles to fully form
|
@export var puddle_form_time: float = 15.0 #Seconds for puddles to fully form
|
||||||
@@ -109,7 +109,7 @@ extends Resource
|
|||||||
#Storm settings (applied on top of rain when storm is active)
|
#Storm settings (applied on top of rain when storm is active)
|
||||||
@export_group("Storm")
|
@export_group("Storm")
|
||||||
@export var storm_rain_intensity_multiplier: float = 1.5 #Rain intensity target during storm (1.0 = normal rain)
|
@export var storm_rain_intensity_multiplier: float = 1.5 #Rain intensity target during storm (1.0 = normal rain)
|
||||||
@export var storm_mode_color: Color = Color(0.476, 0.531, 0.639, 1.0) #Additional sky darkening color during storm
|
@export var storm_mode_color: Color = Color(0.78, 0.83, 0.89, 1.0) #Additional sky darkening color during storm
|
||||||
|
|
||||||
#Lightning and thunder configuration
|
#Lightning and thunder configuration
|
||||||
@export_group("Lightning and Thunders")
|
@export_group("Lightning and Thunders")
|
||||||
|
|||||||
Reference in New Issue
Block a user