换装,听起来简单——把一件衣服从A模型上"拿下来"穿到B模型上。
但实际操作过的人都知道,坑在哪里:
- 骨骼没对齐,衣服跟着身体乱飘
- 换上的衣服材质颜色完全不对
- 表情动的时候,衣服莫名其妙穿透
- VRChat上传后性能评分变成Poor
这些问题的根源,是换装本身涉及多个技术系统的协同:骨骼映射不对、权重分配有问题、材质设置不当、物理碰撞缺失……每个环节都可能出错。
本文系统性地讲解VRM换装的核心原理,帮你理解"为什么出错"和"如何不出错",而不只是列举操作步骤。
一、VRM换装的五层架构
VRM换装系统自下而上分为五个层次。理解这个架构,是掌握换装技术的第一步:
┌──────────────────────────────────────┐
│ 应用层 VRChat / VRoid Hub / 直播平台 │
├──────────────────────────────────────┤
│ 工具层 VRoid Studio / Modular Avatar │
├──────────────────────────────────────┤
│ 运行时层 UniVRM / VRChat SDK / 物理引擎 │
├──────────────────────────────────────┤
│ 格式层 VRM 1.0 / XAvatar / XWear │
├──────────────────────────────────────┤
│ 基础层 骨骼 · 蒙皮网格 · 材质 · 物理 │
└──────────────────────────────────────┘
格式层是核心——VRM 1.0基于glTF 2.0扩展,定义了Avatar的标准化描述,让不同工具之间可以互相操作资产文件。理解了这个,你就能理解为什么有些操作在不同工具之间表现不一致。
二、骨骼系统:换装的基石
2.1 标准骨骼层级
所有VRM兼容模型必须遵循标准化的人形骨骼结构。VRM 1.0定义了52个标准骨骼(26个核心骨骼+26个手指骨骼):
Hips(腰骨,根骨骼)
└── Spine(脊柱)
└── Chest(胸部)
├── UpperChest(上胸腔)
│ ├── Neck(颈部)→ Head(头部)
│ ├── LeftShoulder → LeftUpperArm → LeftLowerArm → LeftHand
│ └── RightShoulder → RightUpperArm → RightLowerArm → RightHand
├── LeftUpperLeg → LeftLowerLeg → LeftFoot → LeftToes
└── RightUpperLeg → RightLowerLeg → RightFoot → RightToes
骨骼映射是换装的核心——把服装模型上的骨骼,重新指向Avatar的标准化骨骼,让服装跟随身体一起运动。
映射分三级优先级:
| 优先级 | 方法 | 适用场景 |
|---|---|---|
| 第一级 | 骨骼名称精确匹配 | 同工作室导出的模型 |
| 第二级 | 前缀/正则匹配 | Mixamo等标准骨骼命名 |
| 第三级 | 空间最近邻匹配 | 未知来源模型的兜底方案 |
2.2 蒙皮与权重
骨骼影响网格的方式,是通过蒙皮权重。每个顶点可以被多个骨骼影响,权重之和为1.0。
换装时如果出现"衣服跟着身体乱飘",通常原因是:
- 服装模型的蒙皮权重设置不完整(有些该受影响的顶点没分配权重)
- 服装模型用了和Avatar不同的骨骼作为绑定根节点
解决方案:使用Blender的权重绘制模式(Weight Painting)手动修正,或使用MA的自动权重工具。
三、BlendShape:表情与服装联动
3.1 BlendShape是什么
BlendShape(形态键)是VRM表情系统的核心。每个BlendShape存储顶点从原始位置到目标形态的偏移量,运行时通过设置权重(0-1)驱动形态变化。
比如"微笑"BlendShape,记录了从无表情到微笑时每个相关顶点的偏移方向。设置blendShapeProxy.setValue('happy', 1.0)就能让角色呈现微笑表情。
3.2 换装时为何会穿模
最常见的穿模原因:服装覆盖了身体部位,但身体部位 BlendShape 还在动。
例如:角色穿着高领毛衣,但颈部BlendShape还在驱动颈部网格——领子就会被颈部动作挤穿。
解决方案是使用收缩遮罩(Shrink Wrap)——当某个身体部位被服装覆盖时,收缩遮罩让被覆盖部位的BlendShape驱动"收缩"而非"变形",避免穿模。
MA(Modular Avatar)提供了自动处理收缩遮罩的功能,非MA环境下需要手动在Blender中配置。
3.3 VRM 0.x与1.0的表情命名差异
| 表情 | VRM 0.x | VRM 1.0 |
|---|---|---|
| 开心 | Happy | happy |
| 悲伤 | Sad | sad |
| 愤怒 | Angry | angry |
| 惊讶 | Surprised | surprised |
| 左眼眨眼 | Blink_L | blinkLeft |
| 向上看 | LookUp | lookUp |
换装时如果Avatar和服装分别用了不同版本的命名,需要做名称映射。VRoid Studio和MA都支持自动映射。
四、SpringBone:让头发和服装动起来
4.1 工作原理
SpringBone是VRM的弹簧物理系统,用简化的弹簧算法模拟头发、裙子、披风等部位的动态效果——不需要完整物理引擎,计算开销极低。
核心参数:
| 参数 | 含义 | 头发参考值 | 长裙参考值 |
|---|---|---|---|
| StiffnessForce | 刚性(弹簧硬度) | 1.0-2.0 | 0.5-1.0 |
| DragForce | 阻力(运动衰减) | 0.3-0.5 | 0.1-0.3 |
| GravityPower | 重力强度 | 0.0-1.0 | 1.0-2.0 |
| CollisionRadius | 碰撞半径 | >0 | >0 |
4.2 Center空间系统
Center空间是VRM 1.0的重要特性——设置一个Center节点,让物理模拟跟随特定骨骼运动。
- 头发跟随头部运动:Center = Head骨骼
- 披风跟随上半身运动:Center = Chest骨骼
如果头发物理效果看起来"不跟头动",通常是Center设置错了。
4.3 换装时的SpringBone处理
换装时,服装的SpringBone配置需要"重新指向"Avatar的根骨骼。如果服装和Avatar的骨骼空间不一致,物理模拟会表现异常。
MA提供了自动处理机制;非MA环境下,需要手动在VRM SpringBone配置中重新指定Center骨骼。
五、四大工具生态对比
5.1 总览
| 工具 | 类型 | 主要用途 | 技术门槛 | 生态成熟度 |
|---|---|---|---|---|
| VRoid Studio | 建模工具 | 角色创建+换装 | ⭐ 低 | 成熟 |
| Modular Avatar | Unity插件 | VRChat换装 | ⭐⭐ 中 | 最成熟 |
| UniVRM | 运行时库 | VRM导入导出 | ⭐⭐⭐ 高 | 成熟 |
| Blender VRM插件 | 建模插件 | VRM编辑 | ⭐⭐⭐ 高 | 一般 |
5.2 VRoid Studio XWear系统
XRay Studio的XRay Studio换装系统,是官方提供的换装方案。核心流程:
Avatar(.vrm) → XAvatar → VRoid Studio → XWear → 目标平台
**自动拟合(Auto Fit)**是XRay Studio的核心能力——系统自动分析Avatar和服装的体型差异,通过关键点匹配算法计算最优变换参数。自动拟合不满意时,可以手动调整骨骼或使用网格删除工具。
适合谁:完全不想写代码,只要图形界面操作的用户。
5.3 Modular Avatar(MA)
MA是VRChat社区最流行的换装工具,核心理念是非破坏性编辑——保持Prefab完整性,修改在运行/上传时才应用。
核心组件:
- Merge Armature:将服装骨骼融合到Avatar骨架
- Bone Proxy:在Avatar骨骼层级中定位Prefab对象
- Outfit Installer:一键自动处理骨骼映射和合并
- Object Toggle:控制服装/配件的显示隐藏
- Shape Changer:BlendShape修改(如戴帽子时隐藏呆毛)
推荐上手路径:
- 将服装Prefab拖到Avatar上
- 右键 →
[ModularAvatar] → Setup Outfit - 等待自动处理完成
- 进入Play模式测试
- 上传VRChat
适合谁:主要做VRChat内容的用户,是目前最省事的方案。
5.4 UniVRM程序化换装
对于需要程序化控制的场景,UniVRM提供了完整的C# API:
public void InstallClothing(GameObject clothingPrefab)
{
var clothing = Instantiate(clothingPrefab, transform);
MapBones(clothing); // 骨骼映射
SyncBlendShapes(clothing); // BlendShape同步
ConfigureSpringBones(clothing); // 物理配置
ProcessMaterials(clothing); // 材质处理
}
适合谁:有Unity开发能力、需要深度定制化、有程序化工作流需求的开发者。
六、入门实操:VRoid Studio 5步换装
步骤一:打开Avatar
打开VRoid Studio,点击「着せ替え」(换装)标签,选择目标Avatar文件(.vrm)。
步骤二:导入服装
点击「衣装を読み込む」,导入XRay Studio服装文件(.xwear或.vrm格式)。
步骤三:自动拟合
系统自动分析Avatar和服装的体型差异。点击「自動フィット」应用拟合结果。
如果自动拟合不理想,使用「ボーン編集」手动调整骨骼映射,或「メッシュ削除」删除被服装遮挡的身体部位网格。
步骤四:调整渲染顺序
当多件服装叠加时(如内衣+外套+披风),需要设置正确的渲染顺序(RenderQueue),确保显示层级正确。可以通过VRoid Studio的图层管理功能调整。
步骤五:导出
选择目标平台,点击「エクスポート」。
七、VRChat性能限制(必读)
VRChat对Avatar有严格的性能限制,超出会被强制降级:
| 性能等级 | 材质数量限制 | 适用平台 |
|---|---|---|
| Excellent | ≤2个材质 | Quest |
| Good | ≤4个材质 | PC |
| Medium | ≤4个材质 | PC |
| Poor | 超出限制 | 所有平台 |
优化策略:
渲染优化:
- 合并相同材质(减少Draw Call)
- 生成LOD(视锥剔除优化)
- 压缩纹理(内存优化)
骨骼优化:
- 骨骼数量控制在75-256根以内
- 启用视锥剔除
- 减少不必要的骨骼更新
物理优化:
- SpringBone批次处理
- 使用固定时间步长(避免抖动)
下篇预告
本篇聚焦核心原理和工具入门。下篇(VRM换装技术从入门到精通·下)将深入讲解:
- Modular Avatar高级用法:多服装层叠管理与穿模解决
- VRM 0.x与1.0的版本兼容问题处理
- 插槽化架构设计:换装系统的工程化实践
- 常见问题与解决方案完整对照表
参考资源
Xmohe Techie:VRMA动画工具入门指南——从BVH到VRMA,三平台实操流程
- VRM官方规格书——最权威的VRM规范文档
- Modular Avatar文档——MA官方教程与API参考
- VRoid Studio帮助——XRay Studio官方文档