15.DrawCall和Batches及SetPassCalls
15.1 题目

Unity中DrawCall、Batches、SetPass Calls的意思是什么?
15.2 深入解析
Draw Call:
Draw Call(绘制调用)表示渲染请求的数量。每个 Draw Call 都会引起一次从 CPU 到 GPU 的数据传输。它直接影响渲染性能,因为它决定了 CPU 和 GPU 之间的通信次数。减少 Draw Call 的数量通常是优化渲染性能的关键之一。可以通过使用批处理技术(Batching)来合并多个物体为一个 Draw Call 来实现。
Batches:
Batches 表示合批后的绘制批次数量(与 Profiler 中「批次」统计一致);通过静态/动态批处理、GPU Instancing 等减少批次,即减少绘制提交与状态切换。
SetPass Calls:
SetPass Calls 表示渲染 Pass(Shader 中的渲染通道)的数量。在移动平台中,尽量减少 Shader 中 Pass 的数量可以提升性能。
在优化 Unity 渲染性能时,需要注意 Draw Call、Batches 和 SetPass Calls 的数量,以及采用相应的优化技术来减少渲染开销,从而提高游戏的性能和流畅度。
细化说明(Profiler 视角)
在 Unity 中,渲染性能常由以下三个指标衡量:
Draw Call
- 含义:一次 CPU 向 GPU 发起的绘制命令。
- 影响:每个 Draw Call 都要提交顶点/材质/矩阵等状态,调用越多,CPU–GPU 通信开销越大。
Batches(批次)含义:Profiler/Stats 中的 Batches 表示合批后实际提交的绘制批次数量,常与「绘制提交次数」在同一量级;静态/动态批处理、Instancing 会把原本多路物体合并为更少批次。
技术:
- 静态批处理(Static Batching):对标记为静态的 Mesh 合并到一个大 Mesh;
- 动态批处理(Dynamic Batching):在运行时将小网格自动合并;
- GPU Instancing:同一 Mesh+材质,多实例一次绘制提交。
关系:优化目标是降低 Batches/绘制提交次数;具体指标以当前 Unity 版本 Stats/Profiler 说明为准,不要死记错误不等式。
SetPass Calls
含义:切换 Shader Pass 的次数。每次切换 Pass 都会重设 GPU 渲染状态,因此开销也极大。
优化:
- 减少材质种类/Pass 数量;
- 合并材质图集;
- 使用单 Pass Shader 或多通道一次完成;
15.3 答题示例
“在 Unity Profiler 中:
- Draw Calls 代表 CPU 向 GPU 发起的绘制命令次数;
- Batches 是把多个对象合并到同一次 Draw Call 的批次数(静态批、动态批、Instancing);
- SetPass Calls 是切换 Shader Pass 的次数。
优化时,通过静态/动态批处理、GPU Instancing 合并 Draw Calls,并减少材质与 Pass 数量,才能最大化降低 CPU–GPU 交互开销。”
15.4 关键词联想
- Draw Call:CPU→GPU 渲染提交
- Batches:静态批/动态批/Instancing
- SetPass Call:Shader Pass 切换
- Static Batching
- Dynamic Batching
- GPU Instancing
- 图集合并
- Shader 优化
- 批处理合并
- CPU–GPU 通信
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com