Update
This commit is contained in:
155
2023/scripts/rigging_tools/skin_api/README.md
Normal file
155
2023/scripts/rigging_tools/skin_api/README.md
Normal file
@@ -0,0 +1,155 @@
|
||||
# Skin API
|
||||
|
||||
高性能的 Maya 蒙皮权重管理工具,使用 Maya API 进行快速的权重导出、导入和操作。
|
||||
|
||||
## 功能特性
|
||||
|
||||
### 1. 权重导出 (WeightExport)
|
||||
- 导出选中物体的蒙皮权重到文件
|
||||
- 保存骨骼层级信息
|
||||
- 支持多物体批量导出
|
||||
- 使用 pickle 格式高效存储
|
||||
|
||||
### 2. 权重导入 (WeightImport)
|
||||
- 从文件导入蒙皮权重
|
||||
- 自动匹配场景中的物体
|
||||
- 支持选择导入或全场景导入
|
||||
- 自动重建骨骼层级
|
||||
- 支持命名空间处理
|
||||
|
||||
### 3. 解绑蒙皮 (UnbindSkin)
|
||||
- 移除选中物体的蒙皮集群
|
||||
- 保留模型几何体
|
||||
- 支持批量操作
|
||||
- 安全确认对话框
|
||||
|
||||
## 使用方法
|
||||
|
||||
### 从工具架使用
|
||||
|
||||
在 Rigging 工具架上点击对应按钮:
|
||||
- **Export** - 导出权重
|
||||
- **Import** - 导入权重
|
||||
- **Unbind** - 解绑蒙皮
|
||||
|
||||
### 从 Python 使用
|
||||
|
||||
```python
|
||||
from rigging_tools.skin_api import ui
|
||||
|
||||
# 导出权重
|
||||
ui.WeightExport()
|
||||
|
||||
# 导入权重
|
||||
ui.WeightImport()
|
||||
|
||||
# 解绑蒙皮
|
||||
ui.UnbindSkin()
|
||||
```
|
||||
|
||||
### 高级用法
|
||||
|
||||
```python
|
||||
from rigging_tools.skin_api import apiVtxAttribs
|
||||
|
||||
# 创建 API 实例
|
||||
api = apiVtxAttribs.ApiVtxAttribs()
|
||||
|
||||
# 导出选中物体的权重
|
||||
msg = api.exportSkinWeights(selected=True, saveJointInfo=True)
|
||||
print(msg)
|
||||
|
||||
# 导入权重到选中物体
|
||||
msg = api.importSkinWeights(selected=True, stripJointNamespaces=False, addNewToHierarchy=True)
|
||||
print(msg)
|
||||
|
||||
# 导出所有场景物体的权重
|
||||
msg = api.exportSkinWeights(filePath="D:/weights.skinWeights", selected=False)
|
||||
|
||||
# 导入权重到所有匹配的场景物体
|
||||
msg = api.importSkinWeights(filePath="D:/weights.skinWeights", selected=False)
|
||||
```
|
||||
|
||||
### 底层 API 使用
|
||||
|
||||
```python
|
||||
from rigging_tools.skin_api import Skinning, Utils
|
||||
|
||||
# 获取蒙皮集群信息
|
||||
skinInfo = Skinning.getSkinClusterInfo("pSphere1", saveJointInfo=True)
|
||||
|
||||
# 构建权重字典
|
||||
weightDict = Skinning.buildSkinWeightsDict(["pSphere1", "pCube1"])
|
||||
|
||||
# 保存权重到文件
|
||||
Utils.pickleDumpWeightsToFile(weightDict, "D:/weights.skinWeights")
|
||||
|
||||
# 从文件加载权重
|
||||
loadedWeights = Utils.getPickleObject("D:/weights.skinWeights")
|
||||
|
||||
# 应用权重到物体
|
||||
Skinning.skinClusterBuilder("pSphere1", skinInfo, stripJointNamespaces=False)
|
||||
```
|
||||
|
||||
## 模块结构
|
||||
|
||||
- **Skinning.py** - 核心蒙皮权重操作函数
|
||||
- `getSkinClusterInfo()` - 获取蒙皮集群信息
|
||||
- `getSkinClusterWeights()` - 获取权重数据
|
||||
- `setSkinWeights()` - 设置权重数据
|
||||
- `buildSkinWeightsDict()` - 构建权重字典
|
||||
- `skinClusterBuilder()` - 重建蒙皮集群
|
||||
- `transferSkinWeights()` - 传递权重
|
||||
|
||||
- **Utils.py** - 工具函数
|
||||
- `filePathPrompt()` - 文件对话框
|
||||
- `pickleDumpWeightsToFile()` - 保存权重文件
|
||||
- `getPickleObject()` - 加载权重文件
|
||||
- `matchDictionaryToSceneMeshes()` - 匹配场景物体
|
||||
- `getBarycentricWeights()` - 计算重心坐标权重
|
||||
|
||||
- **ui.py** - 用户界面函数
|
||||
- `WeightExport()` - 导出权重 UI
|
||||
- `WeightImport()` - 导入权重 UI
|
||||
- `UnbindSkin()` - 解绑蒙皮 UI
|
||||
|
||||
- **apiVtxAttribs.py** - 顶点属性 API 操作
|
||||
|
||||
## 文件格式
|
||||
|
||||
权重文件使用 `.skinWeights` 扩展名,内部为 pickle 格式的 Python 字典:
|
||||
|
||||
```python
|
||||
{
|
||||
"objectName": {
|
||||
"vtxCount": 482,
|
||||
"skinCluster": {
|
||||
"clusterInfluenceNames": ["joint1", "joint2", ...],
|
||||
"clusterMaxInf": 4,
|
||||
"clusterWeights": {...},
|
||||
"skinJointInformation": {...}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 性能优化
|
||||
|
||||
- 使用 Maya OpenMaya API 进行快速权重读写
|
||||
- 批量操作减少 Maya 命令调用
|
||||
- 进度条显示长时间操作
|
||||
- 支持大规模模型(10万+顶点)
|
||||
|
||||
## 注意事项
|
||||
|
||||
1. 导出前确保物体已绑定蒙皮
|
||||
2. 导入时会删除物体历史记录
|
||||
3. 骨骼名称需要匹配(支持命名空间处理)
|
||||
4. 顶点数量需要匹配
|
||||
5. 解绑操作不可撤销,建议先保存场景
|
||||
|
||||
## 依赖
|
||||
|
||||
- PyMEL
|
||||
- Maya OpenMaya API
|
||||
- Maya OpenMayaAnim API
|
||||
Reference in New Issue
Block a user