title: VRChat 网格与骨骼优化 created: 2026-05-01 updated: 2026-05-01 type: reference tags: [vrchat, mesh, bone, optimization, lod, smr]
🔷 VRChat 网格与骨骼优化
三角面优化、LOD 方案、SMR/MR 选择、骨骼精简的完整指南。
1. 网格优化
三角面/顶点预算
| 评级 | 三角面阈值 | 实际优化建议 |
|---|---|---|
| 🟢 Excellent (PC) | ≤ 32,000 | 控制在 15k~25k |
| 🟡 Good (PC) | ≤ 70,000 | 控制在 30k~50k |
| 🟢 Excellent (Quest) | ≤ 8,000 | 控制在 5k~7k |
💡 顶点数应 ≤ 三角面数 × 0.5(合理布线)
优化技巧
| 技巧 | 说明 | 收益 |
|---|---|---|
| 删除隐藏面 | 背部、脚底、被衣物覆盖的内部网格 | 减少 10~20% 三角面 |
| 法线贴图替代 | 硬表面细节用法线贴图而非几何体 | 大幅降低三角面 |
| 减少细分 | 平面区域降低细分等级(圆柱 16 段 → 12 段) | 减少 20~30% 顶点 |
| 移除不可见部分 | 衣服内部的皮肤网格 | 减少 5~15% 三角面 |
Mesh Renderer vs Skinned Mesh Renderer
| 类型 | 特点 | 适用场景 |
|---|---|---|
| MeshRenderer (MR) | 无骨骼绑定,支持 Static Batching,DrawCall 极低 | 静态配饰、不可动物件 |
| SkinnedMeshRenderer (SMR) | 绑定骨骼,支持动画与变形,无法静态合并 | 身体、衣物等需要变形的部分 |
SMR 优化策略
- 非动画部件转为 MR: 帽子配饰、背包扣等不随骨骼变形的部件
- 关闭 Update When Offscreen: 未在视锥内时不更新(仅限不需要远处动画的部件)
- 限制骨骼权重: ≤ 4 bones/vertex(减少顶点着色器计算)
2. LOD (Level of Detail)
VRCSDK 不原生支持 LODGroup
VRCSDK 不原生支持 Unity 的 LODGroup 组件。替代方案:
| 方案 | 实现方式 | 适用场景 |
|---|---|---|
| Modular Avatar | MA_RemoteObject 动态切换网格 |
远距离降级 |
| 自定义 Shader | 距离裁剪(Distance Fade) | 视觉无缝过渡 |
| 自动剔除 | VRChat 客户端视锥剔除 + 遮挡剔除 | 大部分场景足够 |
💡 实际建议: VRChat 的自动剔除已经非常高效,除非 Avatar 极其复杂,否则不需要手动配置 LOD。
3. 骨骼系统
端视锥剔除 + 遮挡剔除 | 大部分场景足够 |
💡 实际建议: VRChat 的自动剔除已经非常高效,除非 Avatar 极其复杂,否则不需要手动配置 LOD。
3. 骨骼系统### 标准 VRChat 骨骼链
Root
└── Hips
├── Spine → Chest → Neck → Head → Left/Right Eye
├── Left Shoulder → Upper Arm → Lower Arm → Hand
│ ├── Thumb (3节) → Index (3节) → Middle (3节) → Ring (3节) → Little (3节)
└── Right Shoulder → Upper Arm → Lower Arm → Hand
└── (同上手指)
├── Left Upper Leg → Lower Leg → Foot → Toes
└── Right Upper Leg → Lower Leg → Foot → Toes
骨骼数限制
- 硬性限制: ≤ 260 个 Transform(含 PhysBones、碰撞体、空节点)
- Excellent (PC): ≤ 75 骨骼
- Excellent (Quest): ≤ 30 骨骼
骨骼精简策略
| 策略 | 说明 | 节省骨骼数 |
|---|---|---|
| 删除装饰骨骼 | 废弃控制器节点、冗余装饰 | 5~20 |
| 减少物理链骨骼 | 头发/裙子用 3~4 节代替 10+ 节 | 10~30 |
| 合并同区域骨骼 | 用单骨骼替代多骨骼链(尾巴、长发) | 5~15 |
| 删除手指骨骼 | 戴手套或无需指节动画时合并至 Hand | 30(双手各 15) |
| Dummy Bones | 用空节点代替部分 PhysBone | 视情况而定 |
手指骨骼处理
| 方案 | 适用场景 | 说明 |
|---|---|---|
| 保留标准五指 | 需要手势动画 | 标准 Unity Humanoid 支持 |
| 删除合并至 Hand | 戴手套/无指节动画需求 | 权重合并至 Hand 骨骼 |
| BlendShape 替代 | 需要握拳等姿态 | 用表情替代骨骼弯曲 |
| 保留 Hand 锚点 | 需要手势但无需指节 | Hand 作为锚点,Gesture Layer 驱动 |
VRM → VRChat 骨骼映射
| VRM 骨骼名 | VRChat/Unity 骨骼名 |
|---|---|
hips |
Hips |
spine |
Spine |
chest |
Chest |
neck |
Neck |
head |
Head |
leftEye / rightEye |
LeftEye / RightEye |
leftUpperArm |
LeftUpperArm |
leftLowerArm |
LeftLowerArm |
leftHand |
LeftHand |
leftUpperLeg |
LeftUpperLeg |
leftLowerLeg |
LeftLowerLeg |
leftFoot |
LeftFoot |
| Hand | |
leftUpperLeg |
LeftUpperLeg |
leftLowerLeg |
LeftLowerLeg |
leftFoot |
LeftFoot |
1. 使用 UniVRM 导入时选择 Humanoid 自动映射 |
|
2. T-Pose vs A-Pose 差异需手动调整 Avatar Configuration |
|
3. VRChat 对 Hips 高度敏感,确保 Root 与 Hips 坐标分离 |