name: vrchat-blendshape-body-adjustment description: 通过 Unity MCP 远程调整衣服 prefab 的 Blendshape 来适配 Cazalis zigai 等修改过体型的模型
VRChat 衣服 Blendshape 体型适配
场景
用户购买的 Cazalis 专用衣服 prefab(choco/Seraphic Bloom Dress 等)已经带有胸部 blendshape(Breasts_Small/Big/Big+/Near/Flat),但数值不一定匹配 zigai 修改过的体型。需要通过 Unity MCP 远程调整 blendshape 权重。
前置检查
1. 检查 zigai 的体型参数
对比 Cazalis zigai 和原版 Cazalis 的差异:
// 根Transform对比
zigai.transform.localScale // 通常 1.04
orig.transform.localScale // 通常 1.00
// Body_Base的blendshape
var smr = bodyBase.GetComponent<SkinnedMeshRenderer>();
int bc = smr.sharedMesh.blendShapeCount;
for (int i = 0; i < bc; i++) {
float w = smr.GetBlendShapeWeight(i);
string name = smr.sharedMesh.GetBlendShapeName(i);
// 记录非0的blendshape
}
2. 检查衣服 prefab 的 blendshape
找出衣服的各部件(Shoulder/Skirt/Outer/Niso等)哪些有胸部 blendshape:
foreach (var smr in go.GetComponentsInChildren<SkinnedMeshRenderer>()) {
if (smr.sharedMesh == null) continue;
int bc = smr.sharedMesh.blendShapeCount;
for (int i = 0; i < bc; i++) {
string name = smr.sharedMesh.GetBlendShapeName(i);
if (name.Contains("Breast") || name.Contains("Chest") || name.Contains("Bust")) {
// 记录该部件的胸部blendshape
}
}
}
关键发现
Chest") || name.Contains("Bust")) { // 记录该部件的胸部blendshape } } }
## 关键发现### Cazalis zigai 的胸部 Blendshape(Body_Base)
| Blendshape | zigai | 原版 |
|-----------|-------|------|
| Breasts_Small | 93.7 | 100 |
| Breasts_Big | 16.5 | 0 |
| Breasts_Near | 110.3 | 100 |
→ zigai 的胸部比原版**更大更集中**(Small略小但Big拉了16.5、Near拉到110)
### Seraphic Bloom Dress 的 Blendshape 分布
| 部件 | 胸部BS | 说明 |
|------|--------|------|
| **Shoulder** | ✅ 有 Breasts_Flat/Small/Big/Big+(4个) | 主要胸部适配部件 |
| **Skirt** | ✅ 有 Breasts_Flat/Small/Big/Big+/Near(5个) | 裙摆腰部适配 |
| **Outer** | ❌ 无(0个BS) | 外裙不跟随胸部变形 → 需要加大其他部件补偿 |
| **Niso** | ❌ 无(只有Futomomo/Foot) | 腿袜,与胸部无关 |
## 调整 Blendshape 方法
通过 MCP C# execute_code:
```csharp
var smr = shoulder.GetComponent<SkinnedMeshRenderer>();
// 读取当前值
float oldBig = smr.GetBlendShapeWeight(2);
// 加大
smr.SetBlendShapeWeight(2, 70f); // Breasts_Big
smr.SetBlendShapeWeight(3, 60f); // Breasts_Big+
建议调整策略
- 先调 Shoulder(覆盖胸部最直接)
- 再调 Skirt(腰部适配)
- Outer 没有 BS,只能依靠 Shoulder 撑开或接受轻微穿模
经验数值(Cazalis4 Variant)
| Blendshape | 第一次 | 第二次 | 最终 |
|---|---|---|---|
| Breasts_Big (Shoulder) | 40 | 70 | 70 |
| Breasts_Big+ (Shoulder) | 30 | 60 | 60 |
| Breasts_Big (Skirt) | 40→55 | 75 | 75 |
| Breasts_Big+ (Skirt) | 30→45 | 65 | 65 |
衣服 Scale 调整
独立骨骼的 prefab 应该放在场景根节点(不要父子绑定在模型下),Scale 设为与 zigai 根 Scale 一致(通常 1.04)。
Prefab 自带 Scale 0.96 是给原版 Cazalis(Scale 1.0)用的,子节点 Scale 0.96 × 根 Scale 1.0 ≈ 原版尺寸。
ale 一致(通常 1.04)。
Prefab 自带 Scale 0.96 是给原版 Cazalis(Scale 1.0)用的,子节点 Scale 0.96 × 根 Scale 1.0 ≈ 原版尺寸。## C# execute_code 注意事项
- 字符串必须是一行(不能用多行,否则编译器报错 Newline in constant)
- 使用 go.name.Contains("Variant") 来模糊匹配 GameObject 名称
- blendshape 的 index 需要先检查名称确认(不同版本可能顺序不同)