feat(foliage): add recovering grass trails and bush contact

This commit is contained in:
Rijad Zuzo
2026-09-05 19:30:46 +02:00
parent da3bed67a0
commit 7899d36f03
21 changed files with 673 additions and 18 deletions
+26 -3
View File
@@ -29,11 +29,28 @@ const BERRY_POSITIONS := [
func _ready() -> void:
add_to_group("interactive_foliage")
_build_leaves()
_build_berries()
super()
func set_contact_field(texture: Texture2D, world_rect: Vector4, enabled: bool) -> void:
for child in [$Leaves, $Berries]:
var material := (child as MultiMeshInstance3D).multimesh.mesh.material as ShaderMaterial
material.set_shader_parameter("foliage_trail_map", texture)
material.set_shader_parameter("foliage_trail_rect", world_rect)
material.set_shader_parameter("foliage_trails_enabled", enabled)
material.set_shader_parameter("contact_root", global_position)
func set_contact_actors(positions: PackedVector3Array, count: int) -> void:
for child in [$Leaves, $Berries]:
var material := (child as MultiMeshInstance3D).multimesh.mesh.material as ShaderMaterial
material.set_shader_parameter("interactor_count", count)
material.set_shader_parameter("interactor_positions", positions)
func get_presentation_instance_count() -> int:
return LEAF_POSITIONS.size() + BERRY_POSITIONS.size()
@@ -75,6 +92,7 @@ func _build_leaves() -> void:
material.set_shader_parameter("wind_strength", 0.045)
material.set_shader_parameter("wind_speed", 0.48)
material.set_shader_parameter("wind_phase", 1.7)
material.set_shader_parameter("contact_strength", 0.55)
mesh.material = material
var transforms: Array[Transform3D] = []
for index in LEAF_POSITIONS.size():
@@ -90,9 +108,14 @@ func _build_berries() -> void:
mesh.height = 0.21
mesh.radial_segments = 8
mesh.rings = 4
var material := StandardMaterial3D.new()
material.albedo_color = Color("#8f3148")
material.roughness = 0.78
var material := ShaderMaterial.new()
material.shader = WIND_SHADER
material.set_shader_parameter("albedo", Color("#8f3148"))
material.set_shader_parameter("roughness", 0.78)
material.set_shader_parameter("wind_strength", 0.012)
material.set_shader_parameter("wind_speed", 0.48)
material.set_shader_parameter("wind_phase", 1.7)
material.set_shader_parameter("contact_strength", 0.55)
mesh.material = material
var transforms: Array[Transform3D] = []
for position in BERRY_POSITIONS: