Files
Nexus/2023/scripts/rigging_tools/skin_api/README.md
2025-11-24 21:05:22 +08:00

140 lines
4.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Skin API Module
强大的 Maya 蒙皮权重管理工具,支持权重的导出、导入和蒙皮解绑功能。
## 📁 文件结构
```
skin_api/
├── __init__.py # 模块初始化
├── ui.py # UI 函数(导出、导入、解绑)
├── apiVtxAttribs.py # 核心 API 类
├── Skinning.py # 蒙皮操作函数
├── Utils.py # 工具函数
└── README.md # 本文档
```
## 🚀 使用方法
### 从工具架启动
1. 打开 Maya
2. 切换到 **Nexus_Rigging** 工具架
3. 使用对应的按钮:
- **Export Weights** - 导出蒙皮权重
- **Import Weights** - 导入蒙皮权重
- **Unbind Skin** - 解绑蒙皮
### 从 Python 调用
#### 导出权重
```python
from rigging_tools.skin_api import WeightExport
WeightExport()
```
#### 导入权重
```python
from rigging_tools.skin_api import WeightImport
WeightImport()
```
#### 解绑蒙皮
```python
from rigging_tools.skin_api import UnbindSkin
UnbindSkin()
```
#### 使用核心 API
```python
from rigging_tools.skin_api import ApiVtxAttribs
# 创建 API 实例
api = ApiVtxAttribs()
# 导出权重
api.exportSkinWeights(selected=True, saveJointInfo=True)
# 导入权重
api.importSkinWeights(selected=False, stripJointNamespaces=False, addNewToHierarchy=True)
```
## ✨ 主要功能
- **权重导出** - 导出选中或所有蒙皮物体的权重数据
- **权重导入** - 导入权重到选中或匹配的物体
- **蒙皮解绑** - 快速解绑选中物体的蒙皮
- **关节信息保存** - 可选保存关节方向、世界变换和父级信息
- **智能匹配** - 基于名称和顶点数量自动匹配物体
- **命名空间处理** - 支持剥离关节命名空间
## 🔧 版本兼容性
### 支持的 Maya 版本
- **所有 Maya 版本** - 从 Maya 2016 到最新版本
### API 兼容性
模块采用双重 API 支持策略:
- **PyMEL** - 优先使用 PyMEL如果可用
- **Maya Commands** - 自动降级到 `maya.cmds`(如果 PyMEL 不可用)
- **Maya API** - 使用 `maya.OpenMaya``maya.OpenMayaAnim` 进行高性能操作
### 兼容性特性
1. **自动 API 检测** - 运行时检测可用的 API
2. **优雅降级** - PyMEL 不可用时自动使用 cmds
3. **相对导入** - 支持作为包导入或独立模块使用
4. **异常处理** - 完善的错误处理和用户提示
## 📝 文件格式
权重文件使用 `.skinWeights` 格式(基于 Python pickle
- 包含顶点权重数据
- 包含影响对象(关节)信息
- 可选包含关节变换信息
- 支持多物体批量导出
## 💡 使用技巧
### 导出权重
1. 选择需要导出的蒙皮物体
2. 运行 `WeightExport()`
3. 选择保存位置和文件名
4. 建议启用 `saveJointInfo` 以保存完整的关节信息
### 导入权重
1. **选中物体导入** - 选择目标物体后导入(仅导入到选中物体)
2. **自动匹配导入** - 不选择物体导入(自动匹配场景中的所有物体)
3. 确保物体名称和顶点数量匹配
4. 如果关节缺失,可启用 `addNewToHierarchy` 自动创建
### 解绑蒙皮
1. 选择需要解绑的物体
2. 运行 `UnbindSkin()`
3. 确认对话框后执行解绑
4. 支持批量解绑多个物体
## ⚠️ 注意事项
- 导入权重时,目标物体的顶点数量必须与导出时一致
- 物体名称需要匹配(支持短名称匹配)
- 建议在导入前备份场景
- 大量物体操作时会显示进度条
- 权重文件使用 pickle 格式,不同 Python 版本间可能存在兼容性问题
## 🐛 故障排除
### 导入失败
- 检查物体名称是否匹配
- 检查顶点数量是否一致
- 确认权重文件路径正确
- 查看 Maya 脚本编辑器的详细错误信息
### 关节缺失
- 启用 `addNewToHierarchy` 参数
- 确保导出时使用了 `saveJointInfo=True`
- 手动创建缺失的关节
### PyMEL 相关问题
- 模块会自动降级到 cmds无需担心
- 如果需要强制使用 cmds可以在导入前设置环境变量