@tool extends MultiMeshInstance3D # Trascina qui la MeshInstance3D che rappresenta il volume della tua chioma @export var mesh_volume: MeshInstance3D # Clicca su questa casella nell'Inspector per generare le foglie @export var genera_foglie: bool = false: set(val): if val: popola_chioma() genera_foglie = false # Resetta il pulsante # Scala delle singole foglie @export var scala_foglie: Vector3 = Vector3(1, 1, 1) func popola_chioma(): if not mesh_volume or not mesh_volume.mesh: print("Errore: Assegna una MeshInstance3D valida a 'Mesh Volume'.") return if not multimesh: print("Errore: Il nodo MultiMeshInstance3D non ha una risorsa MultiMesh assegnata.") return # Assicurati che il formato sia 3D per posizioni, rotazioni e scale multimesh.transform_format = MultiMesh.TRANSFORM_3D var mdt = MeshDataTool.new() # Crea i dati dalla prima superficie della mesh (indice 0) mdt.create_from_surface(mesh_volume.mesh, 0) var numero_facce = mdt.get_face_count() multimesh.instance_count = numero_facce print("Generazione di ", numero_facce, " foglie...") for i in range(numero_facce): # Ottieni i tre vertici che formano la 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)) # Calcola il centro della faccia var centro_faccia = (v1 + v2 + v3) / 3.0 # Crea una trasformazione con posizione, rotazione casuale e scala var transform = Transform3D() transform.origin = centro_faccia # Rotazione casuale per un look naturale transform = transform.rotated(Vector3.UP, randf() * TAU) # Rotazione attorno all'asse Y transform = transform.rotated(Vector3.RIGHT, randf() * TAU) # Rotazione attorno all'asse X transform = transform.rotated(Vector3.FORWARD, randf() * TAU) # Rotazione attorno all'asse Z # Applica la scala transform = transform.scaled(scala_foglie) # Imposta la trasformazione per questa istanza nel MultiMesh multimesh.set_instance_transform(i, transform) print("Foglie generate con successo!")