跳转至

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+

建议调整策略

  1. 先调 Shoulder(覆盖胸部最直接)
  2. 再调 Skirt(腰部适配)
  3. 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 需要先检查名称确认(不同版本可能顺序不同)