extends Node3D ## Shared opaque boughs; decorative presentation without simulation state. const WIND_SHADER := preload("res://world/jajce/materials/wind.gdshader") func _ready() -> void: var canopy := $Geometry/ConiferCanopy as MeshInstance3D var material := ShaderMaterial.new() material.shader = WIND_SHADER material.set_shader_parameter("albedo", Color(0.28, 0.47, 0.33)) material.set_shader_parameter("painted_vertex_weight", 1.0) material.set_shader_parameter("wind_strength", 0.055) material.set_shader_parameter("wind_speed", 0.55) material.set_shader_parameter("wind_phase", float(posmod(hash(global_position), 6283)) / 1000.0) material.set_shader_parameter("wind_base_height", 0.45) material.set_shader_parameter("wind_full_height", 3.1) canopy.material_override = material var trunk := $Geometry/ConiferTrunk as MeshInstance3D var bark := StandardMaterial3D.new() bark.vertex_color_use_as_albedo = true bark.roughness = 0.95 bark.specular_mode = BaseMaterial3D.SPECULAR_DISABLED trunk.material_override = bark