@tool extends MultiMeshInstance3D @export var mesh_volume: MeshInstance3D : # Trascina qui il tuo volume low poly set(val): mesh_volume = val generate_leaves() @export var scale_multiplier: float = 1.5 # Per rendere i piani grandi come in foto func generate_leaves(): if not mesh_volume or not mesh_volume.mesh: return var mdt = MeshDataTool.new() mdt.create_from_surface(mesh_volume.mesh, 0) var face_count = mdt.get_face_count() # Inizializza il MultiMesh multimesh.instance_count = face_count for i in range(face_count): # 1. Trova il centro della faccia var v1 = mdt.get_vertex(mdt.get_face_vertex(i, 0)) var v2 = mdt.get_vertex(mdt.get_face_vertex(i, 1)) var v3 = mdt.get_vertex(mdt.get_face_vertex(i, 2)) var center = (v1 + v2 + v3) / 3.0 # 2. Ottieni la normale della faccia per orientare il piano var normal = mdt.get_face_normal(i) # 3. Crea la trasformazione # Usiamo 'look_at' per far sì che il piano sia parallelo alla faccia var pos = center var target = pos + normal var xform = Transform3D().looking_at(normal, Vector3.UP) # Applichiamo posizione e scala xform.origin = pos xform = xform.scaled(Vector3.ONE * scale_multiplier) # 4. Applica al MultiMesh multimesh.set_instance_transform(i, xform) # Opzionale: nascondi il volume originale se vuoi vedere solo i piani # mesh_volume.visible = false