Adds bushes and flowers to ground tiles
Implements bush and flower spawning on ground tiles based on vegetation density. Adds new assets for bushes and flowers, and introduces multi-mesh rendering for optimized performance. Introduces seasonal color variations for vegetation using a shader for bushes and materials for flowers and grass. Refactors material application into a MaterialManager to handle material assignments over multiple frames. Moves ground tile scripts into a subfolder. Adds floating particles to test scene.
This commit is contained in:
parent
ea5006e8a2
commit
3959333534
46 changed files with 559 additions and 77 deletions
79
stages/Test3D/particles.gd
Normal file
79
stages/Test3D/particles.gd
Normal file
|
|
@ -0,0 +1,79 @@
|
|||
extends GPUParticles3D
|
||||
|
||||
@onready var player: Node3D = get_node("%Player")
|
||||
var last_player_position: Vector3
|
||||
var update_distance: float = 1
|
||||
|
||||
func _ready():
|
||||
setup_floating_particles()
|
||||
|
||||
func _process(delta):
|
||||
if player:
|
||||
var current_player_pos = player.global_position
|
||||
|
||||
var target_pos = Vector3(
|
||||
current_player_pos.x,
|
||||
1.0,
|
||||
current_player_pos.z
|
||||
)
|
||||
|
||||
global_position = global_position.lerp(target_pos, delta * 3.0)
|
||||
|
||||
func setup_floating_particles():
|
||||
# Basic particle setup
|
||||
emitting = true
|
||||
amount = 100
|
||||
lifetime = 8.0
|
||||
visibility_aabb = AABB(Vector3(-20, 0, -20), Vector3(40, 10, 40))
|
||||
|
||||
# Create material
|
||||
var material = ParticleProcessMaterial.new()
|
||||
|
||||
# Emission
|
||||
material.emission_shape = ParticleProcessMaterial.EMISSION_SHAPE_BOX
|
||||
material.emission_box_extents = Vector3(5, 2, 5)
|
||||
|
||||
# Movement
|
||||
material.direction = Vector3(0.1, 0.8, 0.1)
|
||||
material.initial_velocity_min = 0.2
|
||||
material.initial_velocity_max = 0.8
|
||||
material.gravity = Vector3(0, -0.3, 0)
|
||||
|
||||
# Floating motion
|
||||
material.orbit_velocity_min = 0.1
|
||||
material.orbit_velocity_max = 0.3
|
||||
material.radial_velocity_min = -0.2
|
||||
material.radial_velocity_max = 0.2
|
||||
|
||||
# Size and fade
|
||||
material.scale_min = 0.01
|
||||
material.scale_max = 0.03
|
||||
material.scale_over_velocity_min = 0.0
|
||||
material.scale_over_velocity_max = 2.0
|
||||
|
||||
# Color (golden dust particles)
|
||||
var gradient = Gradient.new()
|
||||
gradient.add_point(0.0, Color(1.0, 0.9, 0.6, 0.0)) # Fade in
|
||||
gradient.add_point(0.2, Color(1.0, 0.9, 0.6, 0.5)) # Full opacity
|
||||
gradient.add_point(0.8, Color(1.0, 0.8, 0.4, 0.3)) # Slight color shift
|
||||
gradient.add_point(1.0, Color(1.0, 0.7, 0.3, 0.0)) # Fade out
|
||||
|
||||
var gradient_texture = GradientTexture1D.new()
|
||||
gradient_texture.gradient = gradient
|
||||
material.color_ramp = gradient_texture
|
||||
|
||||
# Assign the material to the particle system
|
||||
process_material = material
|
||||
|
||||
# Create and assign visual mesh (small billboard)
|
||||
var quad_mesh = QuadMesh.new()
|
||||
quad_mesh.size = Vector2(0.01, 0.01)
|
||||
draw_pass_1 = quad_mesh
|
||||
|
||||
# Create a basic material for the particles to be visible
|
||||
var particle_material = StandardMaterial3D.new()
|
||||
particle_material.albedo_color = ColorData.grass_materials[Season.current]['top']
|
||||
particle_material.flags_transparent = true
|
||||
particle_material.flags_unshaded = true
|
||||
particle_material.billboard_mode = BaseMaterial3D.BILLBOARD_ENABLED
|
||||
material_override = particle_material
|
||||
Loading…
Add table
Add a link
Reference in a new issue