Quiet
  • 封面
  • 作品集
  • 分栏
  • 标记
  • 时间线
  • 外链
  • 关于我

可能是水桶吧

  • 封面
  • 作品集
  • 分栏
  • 标记
  • 时间线
  • 外链
  • 关于我
Quiet主题 Quiet主题 Quiet主题 Quiet主题 Quiet主题
  • CG相关
  • TA
  • 脚本
  • Blender

Blender顶点组传递(脚本)

可能是水桶吧
Blender相关

2025-04-12 17:47:50

问题

当同一个模型交给另外的上下游调整之后,由于模型新增了顶点组,需要做顶点组的数据传递

脚本

import bpy
import bmesh

def transfer_vertex_groups(source_obj, target_obj):
"""
将源物体的顶点组信息传递给目标物体
:param source_obj: 源物体(包含顶点组)
:param target_obj: 目标物体(将接收顶点组)
"""
# 检查对象有效性
if not (source_obj and target_obj) or source_obj.type != 'MESH' or target_obj.type != 'MESH':
print("错误:需要两个有效的网格物体")
return

# 确保在物体模式
bpy.ops.object.mode_set(mode='OBJECT')

# 获取BMesh数据
bm_source = bmesh.new()
bm_source.from_mesh(source_obj.data)
bm_source.verts.ensure_lookup_table()

bm_target = bmesh.new()
bm_target.from_mesh(target_obj.data)
bm_target.verts.ensure_lookup_table()

# 检查顶点数量是否匹配
if len(bm_source.verts) != len(bm_target.verts):
print("警告:顶点数量不匹配,可能无法精确传递")
# 这里可以改为使用最近邻搜索,但保持简单起见我们先要求顶点数一致

# 清除目标物体原有顶点组(可选)
# target_obj.vertex_groups.clear()

# 遍历源物体的顶点组
for vg_src in source_obj.vertex_groups:
# 在目标物体创建同名顶点组
vg_dst = target_obj.vertex_groups.get(vg_src.name)
if not vg_dst:
vg_dst = target_obj.vertex_groups.new(name=vg_src.name)

# 传递权重数据
for i, vert_src in enumerate(bm_source.verts):
if i >= len(bm_target.verts):
break # 防止索引越界

try:
# 获取源顶点权重
weight = vg_src.weight(vert_src.index)
# 应用到目标顶点
vg_dst.add([bm_target.verts[i].index], weight, 'REPLACE')
except:
pass # 跳过无法获取权重的顶点

# 释放BMesh
bm_source.free()
bm_target.free()

print(f"顶点组数据已从 {source_obj.name} 传递到 {target_obj.name}")

# 使用示例(假设已选中两个物体,第一个是源物体,第二个是目标物体)
if len(bpy.context.selected_objects) == 2:
source = bpy.context.selected_objects[0]
target = bpy.context.selected_objects[1]
transfer_vertex_groups(source, target)
else:
print("请先选择两个网格物体(先选源物体,再选目标物体)")

需要选中源物体(from),然后选择目标物体(To)

脚本中包含了一个

# 清除目标物体原有顶点组(可选)
# target_obj.vertex_groups.clear()

可以选择是否清除原本的顶点组,或是直接同步/追加当前的顶点组

上一篇

Blender边缘溢色光的处理方法

下一篇

使用Blender剪辑直出子弹时间

©2025 By 可能是水桶吧
备案信息:粤ICP备2025400795号
Quiet主题 Quiet主题 Quiet主题 Quiet主题 Quiet主题