Files
tgcc-artest/Scripts/Leaf_Test1.gd
Matteo Sonaglioni f7b334b21c first commit
2026-03-10 23:54:57 +01:00

48 lines
1.4 KiB
GDScript

@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