From c397615e127039c0aa16bf3b2f2063e5c46d9962 Mon Sep 17 00:00:00 2001 From: Dan Baker Date: Mon, 23 Jun 2025 20:20:54 +0100 Subject: [PATCH] Adds VFX and optimizes tile map generation Adds visual effects, including fire and rain, to the scene. The VFX are implemented using GPUParticles3D nodes. Optimizes tile map generation by reducing chunk size and tiles per frame. This improves performance. Sets the SubViewport to have a transparent background. --- stages/Test3D/Test3d.tscn | 72 +++++++++++++++++----------------- stages/Test3D/tile_map_test.gd | 4 +- 2 files changed, 38 insertions(+), 38 deletions(-) diff --git a/stages/Test3D/Test3d.tscn b/stages/Test3D/Test3d.tscn index 454ea97..73ac44b 100644 --- a/stages/Test3D/Test3d.tscn +++ b/stages/Test3D/Test3d.tscn @@ -511,6 +511,7 @@ stretch = true stretch_shrink = 2 [node name="SubViewport" type="SubViewport" parent="SubViewportContainer"] +transparent_bg = true handle_input_locally = false size = Vector2i(576, 324) render_target_update_mode = 4 @@ -793,7 +794,6 @@ transform = Transform3D(0.707107, 0, -0.707107, -0.408607, 0.816138, -0.408607, visible = false extra_cull_margin = 16384.0 mesh = SubResource("QuadMesh_tfa5t") -skeleton = NodePath("../../../..") [node name="Environment" type="Node3D" parent="SubViewportContainer/SubViewport"] visible = false @@ -837,6 +837,41 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1.18018, 1.33948e-16, 0.2696 [node name="rock-c2" parent="SubViewportContainer/SubViewport/Environment" instance=ExtResource("9_rt72s")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.899231, 0.00213623, 0.359619) +[node name="VFX" type="Node3D" parent="SubViewportContainer/SubViewport"] + +[node name="Fire" type="GPUParticles3D" parent="SubViewportContainer/SubViewport/VFX"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.08083, 0.0837402, 0.501403) +amount = 50 +lifetime = 0.4 +speed_scale = 0.4 +process_material = SubResource("ParticleProcessMaterial_xvexm") +draw_pass_1 = SubResource("QuadMesh_hvb1l") + +[node name="OmniLight3D" type="OmniLight3D" parent="SubViewportContainer/SubViewport/VFX/Fire"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.000509977, 0.121094, -0.00151992) +light_color = Color(0.89, 0.461613, 0.2136, 1) +light_energy = 0.779335 +light_indirect_energy = 1.084 +light_volumetric_fog_energy = 3.764 +light_size = 0.105 +shadow_enabled = true +distance_fade_enabled = true +distance_fade_begin = 386.01 +distance_fade_shadow = 45.9 +distance_fade_length = 28.05 +script = ExtResource("22_ukp6m") + +[node name="Rain" type="GPUParticles3D" parent="SubViewportContainer/SubViewport/VFX"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 10, 0) +visible = false +amount = 1000 +preprocess = 10.0 +visibility_aabb = AABB(-4, -20, -4, 8, 20, 8) +trail_enabled = true +trail_lifetime = 0.1 +process_material = SubResource("ParticleProcessMaterial_p5fn2") +draw_pass_1 = SubResource("RibbonTrailMesh_5r2bu") + [node name="Level" type="Node3D" parent="SubViewportContainer/SubViewport"] visible = false @@ -981,41 +1016,6 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.75134, 0, -1.84204) [node name="bedroll2" parent="SubViewportContainer/SubViewport/Level" instance=ExtResource("20_p5fn2")] transform = Transform3D(0.857948, 0, 0.513736, 0, 1, 0, -0.513736, 0, 0.857948, 0.985229, 0.05, -2.78149) -[node name="VFX" type="Node3D" parent="SubViewportContainer/SubViewport"] - -[node name="Fire" type="GPUParticles3D" parent="SubViewportContainer/SubViewport/VFX"] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.76638, 0.0837402, -1.82306) -amount = 50 -lifetime = 0.4 -speed_scale = 0.4 -process_material = SubResource("ParticleProcessMaterial_xvexm") -draw_pass_1 = SubResource("QuadMesh_hvb1l") - -[node name="OmniLight3D" type="OmniLight3D" parent="SubViewportContainer/SubViewport/VFX/Fire"] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.000509977, 0.121094, -0.00151992) -light_color = Color(0.89, 0.461613, 0.2136, 1) -light_energy = 0.737273 -light_indirect_energy = 1.084 -light_volumetric_fog_energy = 3.764 -light_size = 0.105 -shadow_enabled = true -distance_fade_enabled = true -distance_fade_begin = 386.01 -distance_fade_shadow = 45.9 -distance_fade_length = 28.05 -script = ExtResource("22_ukp6m") - -[node name="Rain" type="GPUParticles3D" parent="SubViewportContainer/SubViewport/VFX"] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 10, 0) -visible = false -amount = 1000 -preprocess = 10.0 -visibility_aabb = AABB(-4, -20, -4, 8, 20, 8) -trail_enabled = true -trail_lifetime = 0.1 -process_material = SubResource("ParticleProcessMaterial_p5fn2") -draw_pass_1 = SubResource("RibbonTrailMesh_5r2bu") - [node name="TileGround" type="Node3D" parent="SubViewportContainer/SubViewport"] unique_name_in_owner = true script = ExtResource("24_vyi1v") diff --git a/stages/Test3D/tile_map_test.gd b/stages/Test3D/tile_map_test.gd index af9df9d..5ca3899 100644 --- a/stages/Test3D/tile_map_test.gd +++ b/stages/Test3D/tile_map_test.gd @@ -3,9 +3,9 @@ extends Node3D @export var map_width: int = 500 @export var map_height: int = 500 @export var tile_size: float = 2.0 -@export var chunk_size: int = 4 +@export var chunk_size: int = 2 @export var view_distance: int = 2 -@export var tiles_per_frame: int = 4 # How many tiles to create per frame +@export var tiles_per_frame: int = 1 # How many tiles to create per frame var loaded_chunks: Dictionary = {} var player_position: Vector3 var last_chunk_pos: Vector2i = Vector2i(-999, -999)