From ce6d9673ca143fa87a317094de48c988d229eda9 Mon Sep 17 00:00:00 2001 From: Overside srl Date: Wed, 25 Mar 2026 18:32:18 +0100 Subject: [PATCH] fix fog and weather controller --- core/daynight/environment_management.tscn | 4 +- core/daynight/fogoverlay.gdshader | 14 ----- core/daynight/weather_controller.gd | 41 ++++++++------- core/environment_config.gd | 2 +- core/ui_events.gd | 1 + docs/museums/daynight/control.gd | 3 ++ docs/museums/daynight/museum_daynight.tscn | 60 ++++++++++++++-------- 7 files changed, 67 insertions(+), 58 deletions(-) diff --git a/core/daynight/environment_management.tscn b/core/daynight/environment_management.tscn index 15dc5b1..9960f3d 100644 --- a/core/daynight/environment_management.tscn +++ b/core/daynight/environment_management.tscn @@ -30,7 +30,7 @@ transparency = 2 alpha_scissor_threshold = 0.0 alpha_antialiasing_mode = 0 disable_ambient_light = true -albedo_color = Color(0.07500001, 0.06400001, 0.12100001, 0.39999998) +albedo_color = Color(0.1334653, 0.106680326, 0.15061459, 0.47993344) billboard_mode = 3 particles_anim_h_frames = 1 particles_anim_v_frames = 1 @@ -46,7 +46,7 @@ shader_parameter/texture_scale = Vector2(1, 1) shader_parameter/edge_softness_y = 0.2 shader_parameter/edge_softness_x = 0.1 shader_parameter/night_intensity = 0.0 -shader_parameter/sun_color = Color(1, 1, 1, 1) +shader_parameter/sun_color = Color(1, 0.6716112, 0.3432224, 1) [sub_resource type="Resource" id="Resource_r4tfj"] script = ExtResource("2_h6hjk") diff --git a/core/daynight/fogoverlay.gdshader b/core/daynight/fogoverlay.gdshader index bcac8a5..9ce23e6 100644 --- a/core/daynight/fogoverlay.gdshader +++ b/core/daynight/fogoverlay.gdshader @@ -1,29 +1,15 @@ shader_type canvas_item; -// Colore della tua nebbia (scegli un colore che stia bene col tuo Skybox) uniform vec4 fog_color : source_color = vec4(0.85, 0.9, 0.95, 1.0); - -// Quanto è grande lo spazio pulito al centro per il treno uniform float clear_center_radius : hint_range(0.0, 1.0) = 0.4; - -// Quanto è morbida la sfumatura della nebbia verso i bordi uniform float edge_softness : hint_range(0.01, 1.0) = 0.5; - -// Opacità massima ai bordi estremi dello schermo uniform float max_opacity : hint_range(0.0, 1.0) = 0.8; void fragment() { - // Calcola la distanza del pixel dal centro dello schermo (0.5, 0.5) float dist_from_center = distance(SCREEN_UV, vec2(0.5)); - - // Crea una maschera morbida circolare - // Al centro (distanza < clear_center) sarà 0.0 (trasparente) - // Verso i bordi salirà dolcemente fino a 1.0 (opaco) float fog_amount = smoothstep(clear_center_radius, clear_center_radius + edge_softness, dist_from_center); - // Moltiplica per l'opacità massima desiderata fog_amount *= max_opacity; - // Applica il colore della nebbia solo dove serve COLOR = vec4(fog_color.rgb, fog_color.a * fog_amount); } \ No newline at end of file diff --git a/core/daynight/weather_controller.gd b/core/daynight/weather_controller.gd index 10d8b74..f4ef4fb 100644 --- a/core/daynight/weather_controller.gd +++ b/core/daynight/weather_controller.gd @@ -29,6 +29,7 @@ var is_snowing: bool = false var is_snow_accumulated: bool = false var actual_snow_amount: float = 0.0 +var is_storm: bool = false var cold_tween: Tween var is_windy: bool = false var thereare_fireflies: bool = false @@ -61,6 +62,7 @@ func _ready() -> void: UIEvents.toggle_snow.connect(toggle_snow) UIEvents.toggle_wind.connect(toggle_wind) UIEvents.toggle_fireflies.connect(toggle_fireflies) + UIEvents.toggle_storm.connect(toggle_storm) func _process(delta: float) -> void: var base_tint: Color @@ -74,9 +76,6 @@ func _process(delta: float) -> void: var base_grad_bot: Color var base_grad_intensity: float var base_rotation_sun: Vector3 - - var is_storm = is_raining and is_snowing - var is_night = day_time >= 2.5 if is_storm: rain_intensity = move_toward(rain_intensity, 1.0, delta * 0.5) @@ -87,13 +86,7 @@ func _process(delta: float) -> void: set_lightning_timer() else: rain_intensity = move_toward(rain_intensity, 0.0, delta * 0.5) - - if environment_config.material_clouds: - var current_density = lerp(0.4, 1.0, rain_intensity) - environment_config.material_clouds.set_shader_parameter("cloud_density", current_density) - var current_sharpness = lerp(0.14, 0.0, rain_intensity) - environment_config.material_clouds.set_shader_parameter("center_sharpness", current_sharpness) - + if day_time <= 2.0: var t = day_time - 1.0 base_tint = environment_config.morning_color.lerp(environment_config.afternoon_color, t) @@ -183,6 +176,12 @@ func _process(delta: float) -> void: sky_mat.set_shader_parameter("sun_color", final_tint) sky_mat.set_shader_parameter("night_intensity", night_val) + if environment_config.material_clouds: + var current_density = lerp(0.4, 1.0, rain_intensity) + environment_config.material_clouds.set_shader_parameter("cloud_density", current_density) + var current_sharpness = lerp(0.14, 0.0, rain_intensity) + environment_config.material_clouds.set_shader_parameter("center_sharpness", current_sharpness) + if environment_config.material_fog: environment_config.material_fog.set_shader_parameter("night_intensity", night_val) environment_config.material_fog.set_shader_parameter("sun_color", final_tint) @@ -230,6 +229,10 @@ func set_wind(): #endregion #region Lightning + +func toggle_storm(value: bool): + is_storm = value + #set lightning func set_lightning(): lightning_light.name = "Lightning Light" @@ -276,23 +279,23 @@ func set_lightning_timer(): func start_lightning(): if lightning_light: - var tween_luce = create_tween() + var tween_lighting = create_tween() lightning_light.light_energy = 5.0 - tween_luce.tween_interval(0.05) - tween_luce.tween_callback(func(): lightning_light.light_energy = 0.0) - tween_luce.tween_interval(0.05) - tween_luce.tween_callback(func(): lightning_light.light_energy = 2.0) - tween_luce.tween_method(func(val): lightning_light.light_energy = val, 2.0, 0.0, 0.2) + tween_lighting.tween_interval(0.05) + tween_lighting.tween_callback(func(): lightning_light.light_energy = 0.0) + tween_lighting.tween_interval(0.05) + tween_lighting.tween_callback(func(): lightning_light.light_energy = 2.0) + tween_lighting.tween_method(func(val): lightning_light.light_energy = val, 2.0, 0.0, 0.2) var lightning_number = randi_range(environment_config.lightning_min, environment_config.lightning_max) for i in lightning_number: if lightning_sprite: - var angolo_casuale = randf() * TAU - var distanza = randf_range(10.0, 40.0) + var random_angle = randf() * TAU + var distance = randf_range(10.0, 40.0) - lightning_sprite.position = Vector3(cos(angolo_casuale) * distanza, 10.0, sin(angolo_casuale) * distanza) + lightning_sprite.position = Vector3(cos(random_angle) * distance, 10.0, sin(random_angle) * distance) lightning_sprite.modulate = environment_config.lightning_color lightning_sprite.modulate.a = 1.0 diff --git a/core/environment_config.gd b/core/environment_config.gd index 3cd1dd0..72f95a4 100644 --- a/core/environment_config.gd +++ b/core/environment_config.gd @@ -11,7 +11,7 @@ extends Resource @export var sun_rotation_morning: Vector3 = Vector3(-15.0, 45.0, 0.0) @export var sun_rotation_afternoon: Vector3 = Vector3(-75.0, 10.0, 0.0) @export var sun_rotation_night: Vector3 = Vector3(-35.0, -120.0, 0.0) -@export_range(0.0, 1.0) var night_light_energy: float = 0.3 +@export var night_light_energy: float = 0.3 @export_group("General Exposition") @export var exposure_morning: float = 1.0 diff --git a/core/ui_events.gd b/core/ui_events.gd index 1b24a02..a49239a 100644 --- a/core/ui_events.gd +++ b/core/ui_events.gd @@ -5,3 +5,4 @@ signal toggle_rain(value: bool) signal toggle_snow(value: bool) signal toggle_wind(value: bool) signal toggle_fireflies(value: bool) +signal toggle_storm(value: bool) diff --git a/docs/museums/daynight/control.gd b/docs/museums/daynight/control.gd index 0d251a1..8d2df7e 100644 --- a/docs/museums/daynight/control.gd +++ b/docs/museums/daynight/control.gd @@ -11,3 +11,6 @@ func _on_wind_toggled(toggled_on: bool) -> void: func _on_fireflies_toggled(toggled_on: bool) -> void: UIEvents.toggle_fireflies.emit(toggled_on) + +func _on_storm_toggled(toggled_on: bool) -> void: + UIEvents.toggle_storm.emit(toggled_on) diff --git a/docs/museums/daynight/museum_daynight.tscn b/docs/museums/daynight/museum_daynight.tscn index 07ad532..3a50c3b 100644 --- a/docs/museums/daynight/museum_daynight.tscn +++ b/docs/museums/daynight/museum_daynight.tscn @@ -18,11 +18,11 @@ seamless = true [sub_resource type="ShaderMaterial" id="ShaderMaterial_abyor"] shader = ExtResource("3_jiovi") -shader_parameter/sky_top_color = Color(0, 0.84999996, 1.5999999, 1) -shader_parameter/sky_horizon_color = Color(0.55, 1.0500001, 1.55, 1) -shader_parameter/night_intensity = 0.0 +shader_parameter/sky_top_color = Color(0.5659384, 0.36750057, 0.18968758, 1) +shader_parameter/sky_horizon_color = Color(0.78500116, 0.5365633, 0.32937515, 1) +shader_parameter/night_intensity = 0.206248555555554 shader_parameter/cloud_noise = SubResource("NoiseTexture2D_abyor") -shader_parameter/sun_color = Color(1, 1.1999999, 1.4000001, 1) +shader_parameter/sun_color = Color(0.8143763, 0.49687576, 0.22062486, 1) shader_parameter/cloud_center_color = Color(1, 1, 1, 1) shader_parameter/cloud_edge_color = Color(0.8, 0.85, 0.9, 1) shader_parameter/cloud_direction = Vector2(0.5, 0.2) @@ -48,8 +48,8 @@ sky_material = SubResource("ShaderMaterial_abyor") [sub_resource type="Environment" id="Environment_icuhg"] background_mode = 2 sky = SubResource("Sky_50i22") -ambient_light_color = Color(1, 1.1999999, 1.4000001, 1) -tonemap_exposure = 1.05 +ambient_light_color = Color(0.8143763, 0.49687576, 0.22062486, 1) +tonemap_exposure = 0.8365633 ssao_enabled = true ssao_radius = 0.5 ssao_intensity = 14.0 @@ -57,13 +57,13 @@ ssao_detail = 0.0 ssil_enabled = true glow_enabled = true glow_levels/4 = 1.0 -glow_intensity = 1.6 +glow_intensity = 1.0474982 glow_strength = 0.65 glow_bloom = 1.0 fog_enabled = true fog_mode = 1 -fog_light_color = Color(0.55, 1.0500001, 1.55, 1) -fog_density = 0.008 +fog_light_color = Color(0.78500116, 0.5365633, 0.32937515, 1) +fog_density = 0.0046812315 fog_sky_affect = 0.0 [sub_resource type="CompositorEffect" id="CompositorEffect_q52t1"] @@ -96,8 +96,9 @@ environment = SubResource("Environment_icuhg") compositor = SubResource("Compositor_jbfcc") [node name="DirectionalLight3D" type="DirectionalLight3D" parent="." unique_id=565189502] -transform = Transform3D(0.17364818, 0.69636416, 0.69636416, 0, 0.7071067, -0.7071067, -0.9848075, 0.12278782, 0.12278782, 0, 0, 0) -light_color = Color(1, 1.1999999, 1.4000001, 1) +transform = Transform3D(0.9572571, 0.26574892, -0.114174426, 0, 0.39474285, 0.9187914, 0.2892374, -0.8795199, 0.3778705, 0, 0, 0) +light_color = Color(0.8143763, 0.49687576, 0.22062486, 1) +light_energy = 0.855626 light_indirect_energy = 0.0 light_volumetric_fog_energy = 0.0 shadow_enabled = true @@ -108,6 +109,14 @@ shadow_blur = 0.4 directional_shadow_mode = 0 directional_shadow_fade_start = 0.9 +[node name="Camera3D" type="Camera3D" parent="." unique_id=1893906598] +transform = Transform3D(1, 0, 0, 0, 0.99452555, -0.10449375, 0, 0.10449375, 0.99452555, 0.48949432, 25.39013, 0) +script = ExtResource("7_p2t1d") + +[node name="MeshInstance3D" type="MeshInstance3D" parent="." unique_id=1335123628] +material_override = SubResource("StandardMaterial3D_p2t1d") +mesh = SubResource("BoxMesh_p2t1d") + [node name="Control" type="Control" parent="." unique_id=1032167802] layout_mode = 3 anchors_preset = 0 @@ -144,9 +153,9 @@ text = "Rain" [node name="Wind" type="CheckButton" parent="Control" unique_id=1160113828] layout_mode = 0 offset_left = 21.0 -offset_top = 71.0 +offset_top = 91.0 offset_right = 109.0 -offset_bottom = 102.0 +offset_bottom = 122.0 theme_override_colors/font_color = Color(0, 0, 0, 1) theme_override_colors/font_focus_color = Color(0, 0, 0, 1) theme_override_colors/font_pressed_color = Color(0, 0, 0, 1) @@ -157,9 +166,9 @@ text = "Wind" [node name="Fireflies" type="CheckButton" parent="Control" unique_id=1177089839] layout_mode = 0 offset_left = 21.0 -offset_top = 100.0 +offset_top = 115.0 offset_right = 130.0 -offset_bottom = 131.0 +offset_bottom = 146.0 theme_override_colors/font_color = Color(0, 0, 0, 1) theme_override_colors/font_focus_color = Color(0, 0, 0, 1) theme_override_colors/font_pressed_color = Color(0, 0, 0, 1) @@ -167,14 +176,21 @@ theme_override_colors/font_hover_color = Color(0, 0, 0, 1) theme_override_colors/font_hover_pressed_color = Color(0, 0, 0, 1) text = "Fireflies" -[node name="Camera3D" type="Camera3D" parent="." unique_id=1893906598] -transform = Transform3D(1, 0, 0, 0, 0.99452555, -0.10449375, 0, 0.10449375, 0.99452555, 0.48949432, 25.39013, 0) -script = ExtResource("7_p2t1d") - -[node name="MeshInstance3D" type="MeshInstance3D" parent="." unique_id=1335123628] -material_override = SubResource("StandardMaterial3D_p2t1d") -mesh = SubResource("BoxMesh_p2t1d") +[node name="Storm" type="CheckButton" parent="Control" unique_id=936960924] +layout_mode = 0 +offset_left = 21.0 +offset_top = 66.0 +offset_right = 117.0 +offset_bottom = 97.0 +theme_override_colors/font_color = Color(0, 0, 0, 1) +theme_override_colors/font_focus_color = Color(0, 0, 0, 1) +theme_override_colors/font_pressed_color = Color(0, 0, 0, 1) +theme_override_colors/font_hover_color = Color(0, 0, 0, 1) +theme_override_colors/font_hover_pressed_color = Color(0, 0, 0, 1) +text = "Storm" [connection signal="toggled" from="Control/Snow" to="Control" method="_on_snow_toggled"] [connection signal="toggled" from="Control/Rain" to="Control" method="_on_rain_toggled"] [connection signal="toggled" from="Control/Wind" to="Control" method="_on_wind_toggled"] +[connection signal="toggled" from="Control/Fireflies" to="Control" method="_on_fireflies_toggled"] +[connection signal="toggled" from="Control/Storm" to="Control" method="_on_storm_toggled"]