add snow management for materials
This commit is contained in:
@@ -136,6 +136,11 @@ func _process(delta: float) -> void:
|
||||
var final_sky_horizon = base_sky_horizon.lerp(base_sky_horizon * environment_config.rain_mode_color, rain_intensity)
|
||||
var final_fog_color = base_fog_color.lerp(base_fog_color * environment_config.rain_mode_color, rain_intensity)
|
||||
var final_fog_density = lerp(base_fog_density, base_fog_density * 4.0, rain_intensity)
|
||||
|
||||
final_tint = final_tint.lerp(final_tint * environment_config.snow_mode_color, actual_snow_amount)
|
||||
final_sky_top = final_sky_top.lerp(final_sky_top * environment_config.snow_mode_color, actual_snow_amount)
|
||||
final_sky_horizon = final_sky_horizon.lerp(final_sky_horizon * environment_config.snow_mode_color, actual_snow_amount)
|
||||
final_fog_color = final_fog_color.lerp(final_fog_color * environment_config.snow_mode_color, actual_snow_amount)
|
||||
|
||||
#Shader parameters for global trunk_shader
|
||||
var final_grad_top = base_grad_top.lerp(base_grad_top * environment_config.rain_mode_color, rain_intensity)
|
||||
@@ -257,6 +262,13 @@ func set_wind():
|
||||
|
||||
if environment_config:
|
||||
_apply_cloud_config()
|
||||
_apply_wind_config()
|
||||
|
||||
func _apply_wind_config() -> void:
|
||||
RenderingServer.global_shader_parameter_set("global_wind_speed", environment_config.wind_speed)
|
||||
RenderingServer.global_shader_parameter_set("global_wind_direction", environment_config.wind_direction)
|
||||
RenderingServer.global_shader_parameter_set("global_wind_scale", environment_config.wind_scale)
|
||||
RenderingServer.global_shader_parameter_set("global_wind_strength", environment_config.wind_strength)
|
||||
|
||||
func _apply_cloud_config() -> void:
|
||||
var dir = environment_config.wind_direction
|
||||
@@ -272,10 +284,16 @@ func _apply_cloud_config() -> void:
|
||||
sky_mat.set_shader_parameter("cloud_scale", cloud_scale)
|
||||
sky_mat.set_shader_parameter("cloud_speed", cloud_speed)
|
||||
|
||||
if environment_shadows and environment_shadows.material_override:
|
||||
environment_shadows.material_override.set_shader_parameter("direction", dir)
|
||||
environment_shadows.material_override.set_shader_parameter("cloud_scale", cloud_scale * envshadows_scale_rate)
|
||||
environment_shadows.material_override.set_shader_parameter("cloud_speed", cloud_speed * envshadows_speed_rate)
|
||||
var env_shadow_mat = environment_shadows.get_surface_override_material(0) if environment_shadows else null
|
||||
if env_shadow_mat:
|
||||
env_shadow_mat.set_shader_parameter("direction", dir)
|
||||
env_shadow_mat.set_shader_parameter("cloud_scale", cloud_scale * envshadows_scale_rate)
|
||||
env_shadow_mat.set_shader_parameter("cloud_speed", cloud_speed * envshadows_speed_rate)
|
||||
|
||||
if environment_config.material_clouds:
|
||||
environment_config.material_clouds.set_shader_parameter("direction", dir)
|
||||
environment_config.material_clouds.set_shader_parameter("cloud_scale", cloud_scale * envshadows_scale_rate)
|
||||
environment_config.material_clouds.set_shader_parameter("cloud_speed", cloud_speed * envshadows_speed_rate)
|
||||
|
||||
#endregion
|
||||
|
||||
@@ -444,51 +462,55 @@ func toggle_snow(value: bool):
|
||||
particles_snow.emitting = true
|
||||
snow_particles_tween = create_tween()
|
||||
snow_particles_tween.tween_property(particles_snow, "amount_ratio", 1.0, environment_config.snow_fade_time)
|
||||
|
||||
start_snow_accumulation()
|
||||
else:
|
||||
snow_particles_tween = create_tween()
|
||||
snow_particles_tween.tween_property(particles_snow, "amount_ratio", 0.0, environment_config.snow_fade_time)
|
||||
snow_particles_tween.tween_callback(func():
|
||||
particles_snow.emitting = false)
|
||||
|
||||
# Accumulo neve sulle superfici
|
||||
var target_snow: float = 1.0 if is_snowing else 0.0
|
||||
start_snow_melt()
|
||||
|
||||
var target_snow_amount: float = 1.0 if is_snowing else 0.0
|
||||
if snow_tween and snow_tween.is_valid():
|
||||
snow_tween.kill()
|
||||
snow_tween = create_tween()
|
||||
snow_tween.tween_method(set_snow_amount, actual_snow_amount, target_snow, environment_config.snow_transaction_time)
|
||||
|
||||
if fog_overlay and fog_overlay.material:
|
||||
var target_opacity: float = 0.5 if is_snowing else 0.1
|
||||
var target_radius: float = 0.350 if is_snowing else 0.465
|
||||
|
||||
if cold_tween and cold_tween.is_valid():
|
||||
cold_tween.kill()
|
||||
|
||||
cold_tween = create_tween()
|
||||
cold_tween.set_trans(Tween.TRANS_SINE).set_ease(Tween.EASE_IN_OUT)
|
||||
cold_tween.set_parallel(true)
|
||||
cold_tween.tween_property(fog_overlay.material, "shader_parameter/max_opacity", target_opacity, 4.0)
|
||||
cold_tween.tween_property(fog_overlay.material, "shader_parameter/clear_center_radius", target_radius, 4.0)
|
||||
snow_tween.tween_method(set_snow_amount, actual_snow_amount, target_snow_amount, environment_config.snow_transaction_time)
|
||||
|
||||
#disable snow and set default values and shader
|
||||
func set_snow(value: float = 0.0):
|
||||
actual_snow_amount = value
|
||||
actual_snow_amount = value
|
||||
RenderingServer.global_shader_parameter_set("global_snow_amount", value)
|
||||
|
||||
if particles_snow:
|
||||
particles_snow.emitting = false
|
||||
particles_snow.amount = environment_config.snow_amount
|
||||
|
||||
if environment_config:
|
||||
RenderingServer.global_shader_parameter_set("global_snow_threshold", environment_config.snow_threshold)
|
||||
RenderingServer.global_shader_parameter_set("global_snow_color", environment_config.snow_color)
|
||||
RenderingServer.global_shader_parameter_set("global_snow_accumulation_speed", environment_config.snow_accumulation_speed)
|
||||
RenderingServer.global_shader_parameter_set("global_snow_melt_speed", environment_config.snow_melt_speed)
|
||||
RenderingServer.global_shader_parameter_set("global_snow_start_time", -1.0)
|
||||
RenderingServer.global_shader_parameter_set("global_snow_melt_time", -1.0)
|
||||
|
||||
func set_snow_amount(value: float):
|
||||
actual_snow_amount = value
|
||||
actual_snow_amount = value
|
||||
RenderingServer.global_shader_parameter_set("global_snow_amount", value)
|
||||
|
||||
func start_snow_accumulation() -> void:
|
||||
RenderingServer.global_shader_parameter_set("global_snow_melt_time", -1.0)
|
||||
RenderingServer.global_shader_parameter_set("global_snow_start_time", Time.get_ticks_msec() / 1000.0)
|
||||
|
||||
func start_snow_melt() -> void:
|
||||
RenderingServer.global_shader_parameter_set("global_snow_melt_time", Time.get_ticks_msec() / 1000.0)
|
||||
RenderingServer.global_shader_parameter_set("global_snow_melt_speed", environment_config.snow_melt_speed)
|
||||
|
||||
#endregion
|
||||
|
||||
#region Post-Process
|
||||
|
||||
func toggle_fog_overlay(value: bool) -> void:
|
||||
if fog_overlay:
|
||||
fog_overlay.visible = value
|
||||
pass
|
||||
|
||||
func toggle_dust(value: bool) -> void:
|
||||
if environment_dust:
|
||||
|
||||
Reference in New Issue
Block a user