目录
P3-SAM
PartPacker 效果怎么样
测试结果:
环境安装;
Materialize magics
HoloPart
依赖项安装
P3_SAM
nomad调整
PartCrafter
SnapSplit 自动连接件
SnapSplitAuto
P3-SAM
tencent/Hunyuan3D-Omni和tencent/Hunyuan3D-Part。
PartPacker 效果怎么样
图片生成3d部件
https://github.com/NVlabs/PartPacker测试结果:
环境安装;
Materialize magics
HoloPart
达不到工业量产效果
https://www.bilibili.com/video/BV1dFdoYvESz/?spm_id_from=333.337.search-card.all.click&vd_source=d4dc8f82f62c00f6ff1db7a1047e538f依赖项安装
pip install diso --no-build-isolationP3_SAM
Hunyuan3D-Part/P3-SAM at main · Tencent-Hunyuan/Hunyuan3D-Part
nomad调整
tripostudio.com
PartCrafter
可以拆分,但是不能生成自动连接件
PartCrafter是一个开创性的 AI 算法,能够将一张普通的 2D 图片,在几十秒内自动“拆解”成一个由多个独立、可编辑的 3D 部件组成的完整模型
https://github.com/wgsxm/PartCrafterPartCrafter 的显存比较亲民,推荐配置为 8GB 显存
wgsxm/PartCrafter briaai/RMBG-1.4pip install torch-cluster -f https://data.pyg.org/whl/torch-2.5.0+cu124.htmlpython scripts/inference_partcrafter.py \ --image_path assets/images/np3_2f6ab901c5a84ed6bbdf85a67b22a2ee.png \ --num_parts 3 --tag robot --renderSnapSplit 自动连接件
import bpy def add_connectors_to_pairs(pairs, connector_type='CYLINDRICAL_PIN'): """ 批量为多对部件添加连接件 pairs: 部件名称对列表,如 [('part1', 'part2'), ('part2', 'part3')] connector_type: 'CYLINDRICAL_PIN', 'SNAP_PIN', 'SNAP_PEG', 'PIN' """ bpy.ops.object.select_all(action='DESELECT') for part_a, part_b in pairs: obj_a = bpy.data.objects.get(part_a) obj_b = bpy.data.objects.get(part_b) if obj_a and obj_b: # 选中两个部件 obj_a.select_set(True) obj_b.select_set(True) bpy.context.view_layer.objects.active = obj_b # 设置连接件参数(需根据实际情况调整) bpy.context.scene.snapsplit_connector_type = connector_type bpy.context.scene.snapsplit_material_tolerance = 'PLA' # 材料预设 # 执行生成(具体算子名可能略有差异) bpy.ops.object.snapsplit_add_connectors() print(f"✅ 已添加连接件: {part_a} <-> {part_b}") else: print(f"❌ 找不到部件: {part_a} 或 {part_b}") # 使用示例 - 为你的5个部件配对 pairs_to_connect = [ ('torso', 'left_arm'), ('torso', 'right_arm'), ('torso', 'head'), ('torso', 'left_leg'), ('torso', 'right_leg') ] add_connectors_to_pairs(pairs_to_connect, 'SNAP_PIN')SnapSplitAuto
import bpy import os class SnapSplitAuto: """SnapSplit自动化操作类""" @staticmethod def split_model(obj_name, axis='X', position=0.0): """沿指定轴分割模型""" obj = bpy.data.objects.get(obj_name) if not obj: return False bpy.ops.object.select_all(action='DESELECT') obj.select_set(True) bpy.context.view_layer.objects.active = obj # 设置分割参数(具体属性名请参考插件源码) bpy.context.scene.snapsplit_split_axis = axis bpy.context.scene.snapsplit_split_position = position bpy.ops.object.snapsplit_planar_split() return True @staticmethod def add_connectors(obj_a_name, obj_b_name, conn_type='SNAP_PIN', material='PLA', grid_size=(2, 1)): """为两个部件添加连接件""" obj_a = bpy.data.objects.get(obj_a_name) obj_b = bpy.data.objects.get(obj_b_name) if not obj_a or not obj_b: return False bpy.ops.object.select_all(action='DESELECT') obj_a.select_set(True) obj_b.select_set(True) bpy.context.view_layer.objects.active = obj_b # 设置参数 scene = bpy.context.scene scene.snapsplit_connector_type = conn_type scene.snapsplit_material_tolerance = material scene.snapsplit_connector_grid = True scene.snapsplit_connector_grid_rows = grid_size[0] scene.snapsplit_connector_grid_cols = grid_size[1] bpy.ops.object.snapsplit_add_connectors() return True @staticmethod def batch_process(parts_config, output_dir): """批量处理:分割多个部件并添加连接件""" # parts_config: [{'name': 'torso', 'split_axis': 'X'}, ...] for config in parts_config: SnapSplitAuto.split_model(config['name'], config.get('axis', 'X'), config.get('pos', 0.0)) # 添加连接件配对 for pair in parts_config.get('pairs', []): SnapSplitAuto.add_connectors(pair[0], pair[1]) # 执行自动化流程 if __name__ == "__main__": # 假设场景中已有5个独立部件 pairs = [ ('base', 'arm_left'), ('base', 'arm_right'), ('base', 'leg_left'), ('base', 'leg_right'), ('base', 'head') ] for a, b in pairs: SnapSplitAuto.add_connectors(a, b, 'SNAP_PIN', 'PLA', (2, 1)) print("✅ 所有连接件生成完成!")