From a07cfa19a4476d6be68fa768c585ce474f96549d Mon Sep 17 00:00:00 2001 From: Overside srl Date: Wed, 25 Mar 2026 19:36:52 +0100 Subject: [PATCH] add 'follow camera' --- core/daynight/day_night_controller.gd | 3 ++- core/daynight/edge_detection_compositor.gd | 3 +-- core/daynight/environment_management.tscn | 9 ++++--- core/daynight/environment_manager.gd | 6 ++++- core/daynight/weather_controller.gd | 29 ++++++++++++++++++---- core/ui_events.gd | 5 ++++ docs/museums/daynight/museum_daynight.tscn | 27 ++++++++++---------- 7 files changed, 56 insertions(+), 26 deletions(-) diff --git a/core/daynight/day_night_controller.gd b/core/daynight/day_night_controller.gd index 27d085c..aaa2e33 100644 --- a/core/daynight/day_night_controller.gd +++ b/core/daynight/day_night_controller.gd @@ -32,7 +32,8 @@ func _process(delta: float) -> void: func get_time_string() -> String: var total_minutes: int = int(current_time * 1440.0) # 1440 = 24*60 - var hours: int = total_minutes / 60 + @warning_ignore("integer_division") + var hours: int = int(total_minutes / 60) var minutes: int = total_minutes % 60 return "%02d:%02d" % [hours, minutes] diff --git a/core/daynight/edge_detection_compositor.gd b/core/daynight/edge_detection_compositor.gd index 938cfd6..c7607ce 100644 --- a/core/daynight/edge_detection_compositor.gd +++ b/core/daynight/edge_detection_compositor.gd @@ -62,7 +62,7 @@ func _render_callback(p_effect_callback_type: EffectCallbackType, p_render_data: var x_groups : int = (size.x - 1.0) / 8.0 + 1.0 @warning_ignore("integer_division") var y_groups : int = (size.y - 1.0) / 8.0 + 1.0 - var z_groups := 1.0 + var z_groups := 1 # Loop through views just in case we're doing stereo rendering. No extra cost if this is mono. @@ -114,7 +114,6 @@ func _render_callback(p_effect_callback_type: EffectCallbackType, p_render_data: var compute_list := rd.compute_list_begin() rd.compute_list_bind_compute_pipeline(compute_list, pipeline) rd.compute_list_bind_uniform_set(compute_list, uniform_set, 0) - #rd.compute_list_set_push_constant(compute_list, push_constant.to_byte_array(), push_constant.size() * 4) rd.compute_list_dispatch(compute_list, x_groups, y_groups, z_groups) rd.compute_list_end() rd.free_rid(texture_sampler) diff --git a/core/daynight/environment_management.tscn b/core/daynight/environment_management.tscn index 9960f3d..5ec2cb7 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.1334653, 0.106680326, 0.15061459, 0.47993344) +albedo_color = Color(0.44410604, 0.32877246, 0.26597014, 0.7541567) billboard_mode = 3 particles_anim_h_frames = 1 particles_anim_v_frames = 1 @@ -45,8 +45,8 @@ shader_parameter/scroll_speed = Vector2(0.05, 0.01) 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, 0.6716112, 0.3432224, 1) +shader_parameter/night_intensity = 0.7953524793650795 +shader_parameter/sun_color = Color(0.2841828, 0.2023238, 0.27953526, 1) [sub_resource type="Resource" id="Resource_r4tfj"] script = ExtResource("2_h6hjk") @@ -185,7 +185,7 @@ shader_parameter/clear_center_radius = 0.39200001862 shader_parameter/edge_softness = 0.30900001397898 shader_parameter/max_opacity = 0.10000000475 -[node name="EnvironmentManager" type="Node3D" unique_id=1611939731 node_paths=PackedStringArray("particles_wind", "particles_snow", "particles_fireflies", "particles_rain")] +[node name="EnvironmentManager" type="Node3D" unique_id=1611939731 node_paths=PackedStringArray("particles_wind", "particles_snow", "particles_fireflies", "particles_rain", "fog_overlay")] script = ExtResource("1_wecen") environment_config = SubResource("Resource_r4tfj") particles_wind = NodePath("Particles_Wind") @@ -193,6 +193,7 @@ particles_snow = NodePath("Particles_Snow") particles_fireflies = NodePath("Particles_Fireflies") particles_rain = NodePath("Particles_Rain") godray = ExtResource("5_411rw") +fog_overlay = NodePath("FogOverlay") [node name="Particles_Fireflies" type="GPUParticles3D" parent="." unique_id=947538133] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 10, 0) diff --git a/core/daynight/environment_manager.gd b/core/daynight/environment_manager.gd index 0efce33..68dfc2f 100644 --- a/core/daynight/environment_manager.gd +++ b/core/daynight/environment_manager.gd @@ -4,6 +4,9 @@ extends Node3D @export var environment_config: EnvironmentConfig +@export_group("Camera") +@export var camera: Camera3D + @export_group("Particles") @export var particles_wind: GPUParticles3D @export var particles_snow: GPUParticles3D @@ -39,7 +42,8 @@ func _ready() -> void: godray, sun, environment, - environment_config + environment_config, + camera ) weather_controller.name = "WeatherController" add_child(weather_controller) diff --git a/core/daynight/weather_controller.gd b/core/daynight/weather_controller.gd index f4ef4fb..db12b06 100644 --- a/core/daynight/weather_controller.gd +++ b/core/daynight/weather_controller.gd @@ -12,6 +12,7 @@ var fog_overlay: ColorRect var sun: DirectionalLight3D var environment: WorldEnvironment var environment_config: EnvironmentConfig +var camera: Camera3D var day_time: float = 0.0 @@ -36,7 +37,8 @@ var thereare_fireflies: bool = false func _init(wind: GPUParticles3D, snow: GPUParticles3D, fireflies: GPUParticles3D, rain: GPUParticles3D, ray: PackedScene, - thesun: DirectionalLight3D, theenvironment: WorldEnvironment, environmentconfig: EnvironmentConfig) -> void: + thesun: DirectionalLight3D, theenvironment: WorldEnvironment, environmentconfig: EnvironmentConfig, + thecamera: Camera3D = null) -> void: particles_wind = wind particles_snow = snow particles_fireflies = fireflies @@ -45,6 +47,7 @@ func _init(wind: GPUParticles3D, snow: GPUParticles3D, sun = thesun environment = theenvironment environment_config = environmentconfig + camera = thecamera set_rain() @@ -64,7 +67,9 @@ func _ready() -> void: UIEvents.toggle_fireflies.connect(toggle_fireflies) UIEvents.toggle_storm.connect(toggle_storm) -func _process(delta: float) -> void: +func _process(delta: float) -> void: + _follow_camera() + var base_tint: Color var base_sky_top: Color var base_sky_horizon: Color @@ -187,6 +192,19 @@ func _process(delta: float) -> void: environment_config.material_fog.set_shader_parameter("sun_color", final_tint) +func _follow_camera() -> void: + if not camera or not is_instance_valid(camera): + return + var cam_pos: Vector3 = camera.global_position + if particles_rain: + particles_rain.global_position = Vector3(cam_pos.x, particles_rain.position.y, cam_pos.z) + if particles_snow: + particles_snow.global_position = Vector3(cam_pos.x, particles_snow.position.y, cam_pos.z) + if particles_wind: + particles_wind.global_position = Vector3(cam_pos.x, particles_wind.position.y, cam_pos.z) + if particles_fireflies: + particles_fireflies.global_position = Vector3(cam_pos.x, particles_fireflies.position.y, cam_pos.z) + #region fireflies func toggle_fireflies(value: bool): @@ -210,7 +228,6 @@ func set_fireflies(): func toggle_wind(value: bool): is_windy = value - var is_storm = is_raining and is_snowing var is_night = day_time >= 2.5 if particles_wind: @@ -359,8 +376,10 @@ func spawn_single_godray() -> void: var random_x: float = randf_range(-environment_config.godray_spawn_radius, environment_config.godray_spawn_radius) var random_z: float = randf_range(-environment_config.godray_spawn_radius, environment_config.godray_spawn_radius) - #TODO: FLAVIO: fix global position using the camera position if needed - ray.global_position = Vector3(random_x, environment_config.godray_spawn_height, random_z) + var center := Vector3.ZERO + if camera and is_instance_valid(camera): + center = camera.global_position + ray.global_position = Vector3(center.x + random_x, environment_config.godray_spawn_height, center.z + random_z) ray.rotation_degrees = environment_config.godray_rotation_degrees ray.scale = environment_config.godray_scale diff --git a/core/ui_events.gd b/core/ui_events.gd index a49239a..92ab88d 100644 --- a/core/ui_events.gd +++ b/core/ui_events.gd @@ -1,8 +1,13 @@ extends Node #Weather signals +@warning_ignore("unused_signal") signal toggle_rain(value: bool) +@warning_ignore("unused_signal") signal toggle_snow(value: bool) +@warning_ignore("unused_signal") signal toggle_wind(value: bool) +@warning_ignore("unused_signal") signal toggle_fireflies(value: bool) +@warning_ignore("unused_signal") signal toggle_storm(value: bool) diff --git a/docs/museums/daynight/museum_daynight.tscn b/docs/museums/daynight/museum_daynight.tscn index 3a50c3b..dacd2fe 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.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/sky_top_color = Color(0.050000012, 0.050000012, 0.15, 1) +shader_parameter/sky_horizon_color = Color(0.15000004, 0.100000024, 0.25, 1) +shader_parameter/night_intensity = 1.0 shader_parameter/cloud_noise = SubResource("NoiseTexture2D_abyor") -shader_parameter/sun_color = Color(0.8143763, 0.49687576, 0.22062486, 1) +shader_parameter/sun_color = Color(0.100000024, 0.100000024, 0.3, 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(0.8143763, 0.49687576, 0.22062486, 1) -tonemap_exposure = 0.8365633 +ambient_light_color = Color(0.100000024, 0.100000024, 0.3, 1) +tonemap_exposure = 0.4 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.0474982 +glow_intensity = 2.0 glow_strength = 0.65 glow_bloom = 1.0 fog_enabled = true fog_mode = 1 -fog_light_color = Color(0.78500116, 0.5365633, 0.32937515, 1) -fog_density = 0.0046812315 +fog_light_color = Color(0.15000004, 0.100000024, 0.25, 1) +fog_density = 0.015 fog_sky_affect = 0.0 [sub_resource type="CompositorEffect" id="CompositorEffect_q52t1"] @@ -89,16 +89,17 @@ size = Vector3(200, 0.08, 200) [node name="Museum" type="Node3D" unique_id=1411616506] -[node name="DayNight" parent="." unique_id=1578787116 instance=ExtResource("1_daynt")] +[node name="DayNight" parent="." unique_id=1578787116 node_paths=PackedStringArray("camera") instance=ExtResource("1_daynt")] +camera = NodePath("../Camera3D") [node name="WorldEnvironment" type="WorldEnvironment" parent="." unique_id=6398994] environment = SubResource("Environment_icuhg") compositor = SubResource("Compositor_jbfcc") [node name="DirectionalLight3D" type="DirectionalLight3D" parent="." unique_id=565189502] -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 +transform = Transform3D(-0.4999999, 0.49673164, -0.70940626, 0, 0.8191519, 0.5735763, 0.86602515, 0.2867882, -0.40957597, 0, 0, 0) +light_color = Color(0.100000024, 0.100000024, 0.3, 1) +light_energy = 0.3 light_indirect_energy = 0.0 light_volumetric_fog_energy = 0.0 shadow_enabled = true