7.Unity性能分析工具-Rendering
7.1 知识点
Rendering是什么
Rendering(渲染)模块用于显示一帧渲染时的数据量(批次数、顶点数等)。它更像一个“渲染统计面板”,能帮助我们快速判断:当前帧是不是因为 DrawCall / 材质切换 / 几何量 等渲染因素导致性能压力变大。
在游戏中如果出现以下问题时,可以着重观察这里的内容:
- 怀疑是因为 DrawCall 过高导致 CPU 性能问题(卡顿、掉帧)
- 在中低端手机上发热严重、掉电快
- 开启大量实时光照、粒子、动态对象后出现掉帧
- 画面复杂卡顿、简单不卡顿时
- 等等等等
Rendering中各参数功能的含义和作用
渲染(Rendering)分析窗口

在这里显示有关 CPU、GPU 和渲染相关的统计信息。常用指标:
- Batches Count(批处理数):该帧内批处理数量(Draw Call 次数)
- 值越高,CPU 压力越大。推荐合批优化
- SetPass Calls Count(SetPass 调用次数):该帧内着色器渲染通道(Pass)调用次数
- 也就是每帧需要切换 Shader/材质状态的次数
- 值越高,状态切换越频繁,容易阻碍批处理。尽量减少材质数量与 Pass 数量
- Triangles Count(三角形数量):该帧渲染了多少个三角形(网格面数量)
- 影响 GPU 处理负荷,移动端尤其要控制
- Vertices Count(顶点数量):该帧渲染了多少个顶点
- 影响 GPU 顶点处理性能
详细参数

- SetPass Calls:渲染通道(Pass)调用次数,即该帧向 GPU 提交的材质状态切换次数
- Draw Calls:该帧从 CPU 发起的绘制命令总次数(包含非批处理和动态/静态批处理绘制调用)
- Batches:该帧实际合并成的渲染批次数
- Triangles / Vertices:该帧渲染的三角形/顶点数量
- Dynamic Batching / Static Batching / Instancing:动态批处理 / 静态批处理 / GPU Instancing(同一网格多个实例共享)
- Batched Draw Calls / Batches / Triangles / Vertices / Time:合批相关统计与处理时间
- Used Textures:该帧使用的 Unity 纹理数量与纹理占用内存量
- Render Textures:该帧使用的渲染纹理数量与内存量
- Render Textures Changes:该帧设置渲染纹理为渲染目标的次数
- Used Buffers:GPU 缓冲区和内存总数(包括顶点/索引/计算缓冲区以及渲染所需内部缓冲)
- Vertex Buffer Upload In Frame:CPU 在该帧上传到 GPU 的几何数据量(顶点、法线、纹理数据)
- Index Buffer Upload In Frame:CPU 在该帧上传到 GPU 的三角形索引数据
- Shadow Casters:该帧中投射阴影的游戏对象数量(一个物体受多个光源影响时会重复计入)
使用建议(着重关注)
- Draw Calls 数量:CPU 发给 GPU 的绘制命令数量
- 高了 CPU 开销大、容易成为瓶颈
- 优化方向:合批(静态、动态合批、GPU Instancing),材质合并等
- SetPass Calls 数量:提交材质/着色器状态的次数
- 高了状态切换频繁,会阻碍批处理
- 优化方向:减少材质和 Shader 变体数量、合并材质等
- Batches 数量:合批后的实际批次数,理论上越低越好
- 可用于评估合批优化是否生效
- Triangles / Vertices 数量:实际渲染的面数和顶点数
- 移动设备建议控制在适当范围(例如低端机每帧不超过 50w 三角形,具体看设备)
- Render Textures:当前帧中创建/使用的渲染纹理数量与内存
- 如果高了,意味着内存开销大,频繁切换也会影响性能
- 尽量复用 RenderTexture,减少临时对象创建
- 等等等等
Rendering对于我们的意义
Rendering 可以帮助我们:
- 定位 CPU 渲染压力的关键依据
- 批处理次数多 → DrawCall 高 → CPU 消耗高
- 材质切换次数多 → CPU 频繁设置材质 → 可能带来批处理失败
- 判断 GPU 处理压力是否过大
- 三角形面数、顶点数都会直接影响 GPU 渲染耗时
- 数据量过大往往是因为模型太复杂、粒子特效过多、动态对象过多
- 判断画面复杂度对性能的影响
- 进入不同场景、摄像机角度变化、特效显示/隐藏都可能带来数据变化
- 这些数据能让性能下降“有据可查”
- 分析批处理的策略是否生效
- 看看使用了静态/动态批处理后,相关参数是否仍然很高
- 等等等等
7.2 知识点代码
Lesson07_Unity性能分析工具_Rendering.cs
public class Lesson07_Unity性能分析工具_Rendering
{
#region 知识点一 Rendering是什么
/*
* Rendering(渲染)模块
* - 用于显示一帧渲染时的数据量(批次数、顶点数等)
*
* 在游戏中如果出现以下问题时,可以着重观察这里的内容:
* 1. 怀疑是因为 DrawCall 过高导致 CPU 性能问题(卡顿、掉帧)
* 2. 在中低端手机上发热严重、掉电快
* 3. 开启大量实时光照、粒子、动态对象后出现掉帧
* 4. 画面复杂卡顿、简单不卡顿时
* ……等等
*/
#endregion
#region 知识点二 Rendering中各参数功能的含义和作用
/*
* Rendering 中各参数功能的含义和作用:
* - 详见笔记正文(Rendering 分析窗口、详细参数与使用建议)
*/
#endregion
#region 知识点三 Rendering对于我们的意义
/*
* Rendering 可以帮助我们:
* 1. 定位 CPU 渲染压力的关键依据(DrawCall/SetPass 等)
* 2. 判断 GPU 处理压力是否过大(三角形/顶点等)
* 3. 判断画面复杂度对性能的影响(不同场景/角度/特效开关)
* 4. 分析批处理策略是否生效(静态/动态批处理、Instancing)
* ……等等
*/
#endregion
}
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com