Metapipe/correctiveBlendshape.py

45 lines
1.4 KiB
Python
Raw Normal View History

2025-01-15 04:31:58 +08:00
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import maya.cmds as cmds
import sys
2025-01-15 23:17:52 +08:00
import os
2025-01-15 04:31:58 +08:00
import importlib
def run():
# 获取选中的对象
selected = cmds.ls(selection=True, transforms=True)
# 检查是否选择了两个对象
if len(selected) != 2:
raise RuntimeError(f"请选择两个多边形对象!")
# 检查每个选中对象的类型
for obj in selected:
shapes = cmds.listRelatives(obj, shapes=True)
for shape in shapes:
if cmds.nodeType(shape) != "mesh":
raise RuntimeError(f"选中的几何体不是多边形对象!")
# 检查第一个对象是否绑定了蒙皮
shapes = cmds.listRelatives(selected[0], shapes=True)
2025-01-15 23:17:52 +08:00
# 获取蒙皮
2025-01-15 04:31:58 +08:00
skin = cmds.listConnections(shapes[0], type="skinCluster")
if not skin:
raise RuntimeError(f"第一个选中的对象没有绑定蒙皮簇!")
2025-01-15 23:17:52 +08:00
# 执行 extractDeltas 命令 从变形网格中提取建模的修正形状
2025-01-15 04:31:58 +08:00
cmds.extractDeltas(s=selected[0], c=selected[1])
# 选择第二个对象
cmds.select(selected[1], replace=True)
2025-01-15 23:17:52 +08:00
# 导入并运行 bsIndex 计算修正形状的索引, 指定 bsIndex 的路径为当前路径
BSINDEX_PATH = os.path.dirname(os.path.abspath(__file__))
sys.path.append(BSINDEX_PATH)
2025-01-15 04:31:58 +08:00
import bsIndex
importlib.reload(bsIndex)
bsIndex.calc()
if __name__ == "__main__":
run()