生草

,一个学长让我帮他做个树被风吹的动画,在网上找到教程基本都是树叶大致的摇晃,达不到他想要的效果,他想用blender的布料模拟来实现叶子的摆动
但是叶子需要一个一个的设置顶点组来钉固,商量了一下,我向他说明我做不到,他说可以通过编程实现这个问题,但是我又不太熟悉编程,最后也是不了了之
今天他突然告诉我他搞好了,我看了一下还真行,也不知道他怎么做的真写来了,python领域大神,太强了(话说这是python吗)
这是他写的,如果吧友有需要,应该把程序里面的树叶,树干名字改一下就好了
import bpy
import mathutils
# 获取当前选中的叶子和树干对象
leaf_obj = bpy.context.object # 叶子对象
tree_obj = bpy.context.scene.objects.get("cgaxis_models_95_01_obj") # 假设树干对象名称为 "TreeTrunk"
# 检查对象类型是否是网格
if leaf_obj.type != 'MESH' or tree_obj is None or tree_obj.type != 'MESH':
print("请选择一个网格对象,并确保树干对象存在!")
else:
# 获取网格数据
leaf_mesh = leaf_obj.data
tree_mesh = tree_obj.data
# 创建或获取顶点组
vertex_group_name = "Connected_To_Trunk11"
vertex_group = leaf_obj.vertex_groups.get(vertex_group_name)
if not vertex_group:
vertex_group = leaf_obj.vertex_groups.new(name=vertex_group_name)
# 设置筛选条件,选择与树干连接的顶点(例如,设置一个最大距离)
max_distance = 0.1 # 设定最大距离,可以根据需要调整
# 初始化一个字典,用于存储每个叶子顶点的连接距离
connected_vertices = []
# 获取树干的所有顶点位置
tree_vertices = [v.co for v in tree_mesh.vertices]
# 遍历叶子对象的所有顶点,计算与树干顶点的最小距离
for v in leaf_mesh.vertices:
leaf_vertex_pos = v.co # 叶子顶点位置
for tree_vertex_pos in tree_vertices:
distance = (leaf_vertex_pos - tree_vertex_pos).length
if distance < max_distance:
connected_vertices.append(v.index)
break # 一旦找到最近的树干顶点,就不需要继续判断其他树干顶点
# 清空顶点组,防止重复添加
vertex_group.remove([v.index for v in leaf_mesh.vertices])
# 将连接树干的叶子顶点添加到顶点组
vertex_group.add(connected_vertices, 1.0, 'REPLACE')
print(f"顶点组 '{vertex_group_name}' 创建完成,包含 {len(connected_vertices)} 个顶点。")