Skip to content

05 · 性能优化与常见坑点

本章是专业动效师"踩坑清单"。遇到问题先来这里查。


一、性能瓶颈诊断

性能自检顺序

卡顿症状 → 检查项 → 解决
─────────────────────────────────────────────────
视口卡     → Cloner 数量     → 用 Matrix / 减少显示
视口卡     → Shader 每帧重算 → 烘焙 MoGraph Cache
渲染慢     → 实例化未启用     → 启用 Instance
渲染慢     → 阴影设置过高     → 降低阴影采样
渲染慢     → 物理模拟占帧     → Bake Simulation
文件大     → Alembic 精度高   → 降低 Alembic 精度
启动慢     → 加载所有缓存     → 用 `On Demand` 加载

性能黄金指标

指标警告值严重卡顿值
克隆数量> 5000> 50000
效果器数量> 8> 15
烘焙前 Subframes0
Render 实例化关闭开启
GPU 加速未启用

二、克隆数量优化

决策表

数量推荐方案
< 1000Cloner
1000 - 10000Cloner + 简单效果器
> 10000Matrix + 简单效果器
> 100000Instancer(非 MoGraph)+ Alembic

实例化模式对比

模式性能灵活性用途
Cloner (Instance)✓✓✓✓默认推荐
Cloner (Render Instance)✓✓✓大量克隆
Matrix + Display Off✓✓✓数据可视化
Instance Object✓✓✓✓极致性能
Thinking Particles✓✓✓✓粒子系统

三、Shader 性能优化

Shader 重计算检查清单

  • [ ] 是否有 Animated Noise(每帧重算)?
  • [ ] 是否有贴图读取(每帧采样)?
  • [ ] 是否有 Reflection/Refraction?
  • [ ] 是否有 Sub-Surface Scattering?

Shader 优化配方

问题: 复杂 Shader 拖慢视口
方案 1: 烘焙 MoGraph Cache(最推荐)
方案 2: 降低 Shader 采样率(Noise Octave 6 → 3)
方案 3: 用 Bake Texture 把 Shader 输出烘焙为贴图
方案 4: 用 Loop Region 只播放部分帧

Loop Region(循环区域)

强烈推荐:调试时只播放 [0, 30] 帧,速度提升 5-10x。

设置方法:

  1. 顶部菜单 Animate > Set Loop Range
  2. 起始/结束帧设为项目范围

四、克隆渲染优化

启用 Render Instance(必做)

Cloner 属性:
  Transform > Mode = Iterative (推荐)
  Object > Clone > Multi-Instance ✓

启用后 1000 个球只用 1 次 Draw Call。

Alembic 缓存导出

File > Export > Alembic
  格式: HDF5
  Geometry: ✓
  Animation: ✓
  Use Animation Range: ✓
  每 N 帧导出: 1

关键 Alembic 优化参数

参数默认优化建议
CompressionGZip(文件小 50%+)
Step Size11(保持精度)
SubdivisionDetailedPolygon Cache
Precision自动半精度(大量点时)

五、动力学性能

物理模拟卡顿

症状原因方案
Cache 烘焙后还卡子步太多降低 Steps per Frame
模拟不稳定约束弱Soft Constraint
模拟太慢碰撞体太精细用简单代理碰撞体
模拟飞出初始速度过大加 Gravity 平衡

动力学缓存策略

Simulation > Cache Tags
  Mode = Manual
  Cache Range = 0 ~ 200
  Disk Cache ✓

必须用 Disk Cache,否则 32GB 内存都不够。


六、材质与克隆结合

MultiShader + MoGraph 通道

MultiShader:
  Mode = By Index
  Shader 1: 金属
  Shader 2: 玻璃
  Shader 3: 塑料

每个克隆根据 Index 自动分配不同材质。

颜色覆盖(最常用)

材质颜色通道:
  Enable Colorizer ✓
  Source = MoGraph > Color
  → Shader 效果器 输出颜色到这里

避免每克隆独立材质

⚠️ 千万不要给每个克隆手动挂材质 → 完全破坏 Instance 优化。

正确做法

  • ✅ MultiShader 配合 MoGraph 通道
  • ✅ Shader 效果器直接输出到颜色
  • ✅ 使用 Vertex Map(顶点贴图)做差异

七、视图显示优化

视口显示模式

模式用途性能
Wireframe调试几何最快
Bounding Box查看范围最快
Isoparm建模
Gouraud Shading快速预览
Gouraud Shading (Lines)带线框的着色
Quick Shading草图预览
High Quality接近最终渲染最慢

Display Tag 优化

Display Tag:
  Display Mode = Off (渲染时才显示)
  On/Off = 距离相机 1000m 以外隐藏

视口过滤

  • 菜单:View > Filter > Objects/Generators/Effectors 选择性显示
  • HUD 实时查看 FPS

八、20 大常见坑点清单

渲染问题

#现象原因解决
1克隆不显示克隆子对象在 Group 里被隐藏检查 Group Tag
2克隆不在表面分布模式选错用 Object 模式 + 表面对象
3克隆穿透Effectors Scale = -1避免负数缩放
4渲染时克隆位置不同Matrix 没挂 Cache加 MoGraph Cache
5克隆材质不随机MultiShader 没启用检查 By Index

动画问题

#现象原因解决
6动画不播帧范围设错检查 Project > Frame Range
7动画变卡实时 Shader 复杂烘焙 Cache
8错位动画失败Effectors 顺序错Mixer 重组
9弹性动画抖动Delay 强度过高降低到 30-50%
10循环不接缝起始/结束帧不同用 Ping Pong 模式

性能问题

#现象原因解决
11文件超大Alembic 精度高GZip + 半精度
12启动极慢缓存全加载On Demand 模式
13内存爆掉物理 Cache 在内存切到 Disk Cache
14烘焙失败缓存写权限改用户文件夹
15Team Render 卡缓存未共享Asset Inspector 同步

协作问题

#现象原因解决
16贴图丢失路径用绝对路径用相对路径 + tex 文件夹
17字体不显示系统未装字体嵌入字体或转 OBJ
18版本不兼容高版本特性Save Version 命令
19表达式报错变量重命名检查 id 拼写
20Python 脚本失败模块路径错文档中加 sys.path

九、调试技巧

5 个调试必杀技

1. 启用 FPS 显示

  • 菜单:Window > FPS → 实时看帧率

2. 单独显示克隆

  • 选中 Cloner 按 O → 只显示克隆,隐藏其他对象

3. Step 效果器离散化

  • 给任意效果器加 Step (Dots) → 调试时更容易看清状态

4. Override 显示

  • 在 Effectors 列表上右键 Override → 临时禁用某个效果器

5. Graph 视图查动画

  • 菜单:Window > Time Track → 检查关键帧曲线

十、性能优化 Checklist(提交前必查)

视口

  • [ ] 克隆器数量 < 50,000
  • [ ] 效果器数量 < 10
  • [ ] 复杂 Shader 已烘焙
  • [ ] Loop Region 启用

渲染

  • [ ] 启用 Render Instance
  • [ ] 阴影采样 < 16
  • [ ] 反射/折射深度 < 4
  • [ ] Multi-Pass 关闭(如不需要)
  • [ ] 物理模拟已 Bake

文件

  • [ ] Alembic 已 GZip
  • [ ] 贴图相对路径
  • [ ] 缓存单独文件夹
  • [ ] 命名规范统一
  • [ ] 备份 v001 / v002 / final

附录:性能数字速查

操作时间备注
创建 1000 克隆< 1s标准操作
创建 100,000 克隆5-15sMatrix 模式
烘焙 1000 克隆 × 250 帧30-60s简单效果器
烘焙 100,000 克隆 × 250 帧10-30 min复杂 Shader 慎用
单帧渲染 (1k 实例)5-30s看材质复杂度
单帧渲染 (100k 实例)5-15 min必须用 Instance

本手册完。如果发现需要补充的内容,欢迎提交 PR 到 GitHub 仓库

Released under the MIT License.