6.Unity性能分析工具-GPUUsage
6.1 知识点
GPU Usage是什么
GPU 使用率(GPU Usage)是 Unity Profiler 里最常用的 GPU 分析模块之一,用来观察 GPU(图形处理器)在一帧里各个渲染阶段大概花了多少时间。
游戏开发里常见的 GPU 开销来源:
- 几何处理:模型顶点相关处理
- 光照计算:阴影、反射等
- 渲染输出:Shader 处理、对象渲染、画面输出
- 屏幕后处理(Shader 部分):模糊、黑白、景深等效果
- 纹理处理:采样、解压缩、贴图操作等
- 特效处理:粒子、流体、烟雾等
- ……等等
一般项目出现卡顿、掉帧、图像问题、发热、掉电快等情况,可以同时关注 GPU 和 CPU 使用情况。它们的异常表现很多时候很像,根本原因往往都是计算压力过大。
GPU 和 CPU 的侧重点大致是:
- CPU:偏 游戏逻辑(物理、脚本、AI、动画控制等)
- GPU:偏 图形渲染(Shader、模型绘制、光照、特效、后处理等)
注意:
- GPU Usage 的数据收集会影响性能表现
- 会禁用 GPU Jobs(图形工作线程优化)
- 不支持显示非常详细的 URP/HDRP 相关数据
GPU Usage中各参数功能的含义和作用
警告
采集 GPU Profiler 数据会禁用图形作业、增加性能开销,并降低 CPU 模块的准确性。
如果你不需要这些数据,请关闭此模块。
HDRP 和 URP 渲染器当前不受支持:
如果启用了这些渲染器,Profiler 将不会显示大多数 GPU 标记。


注意:
- Graphics Jobs 是 Unity 用于加速渲染流程的多线程技术,开启 GPU Profiler 会关闭它,影响性能测试的真实性。
- 在使用 URP(通用渲染管线)或 HDRP(高清渲染管线)时,GPU 模块不会显示详细的 GPU 时间采样(比如各个 pass、shader 的耗时),所以数据不完整
建议:
如果你只关心 CPU 性能或者使用 SRP(如 URP/HDRP),可以暂时关闭 GPU Profiler。除非你在测试传统内置渲染管线的 GPU 性能。
对于 SRP(URP/HDRP)我们可以使用 Rendering Debugger 进行性能检测(以后再讲 URP 相关内容时再展开)。


GPU 使用率 分析窗口

在这里通过不同模块不同颜色表达,我们可以直观地看到每一个模块对 GPU 的使用情况
Opaque:内置渲染管线渲染不透明对象的时间Transparent:内置渲染管线渲染透明对象的时间Shadows/Depth:内置渲染管线渲染阴影贴图/深度贴图的时间(如阴影贴图生成、摄像机深度图)Deferred Geometry:内置延迟渲染管线的延迟几何通道(写入 GBuffer 阶段)Deferred Lighting:内置延迟渲染管线的延迟光照通道(从 GBuffer 读取信息并做光照计算)PostProcess:内置渲染管线的屏幕后期处理耗时Other:其它 GPU 开销(例如 SRP:URP/HDRP 相关,或无法分类的插件/系统调用等)
注意:
该模块并不是支持所有的平台调试
对于不支持的平台我们只有在特定平台上用特定工具调试
比如 iOS 使用 Xcode 的 GPU Frame Debugger

使用建议:
我们主要就是根据具体的数据表现,特别是在内置渲染管线中
可以通过这些数值明确的知道是那一块渲染相关出现的性能问题,然后针对性的优化即可
层级选项

Hierarchy(层级视图)
最常用的分析视图,展示 GPU 所做工作的树状结构(父子关系)
将 GPU 操作按 渲染流程的逻辑顺序组织
适用于:
识别 哪个阶段(如阴影、后处理)消耗了 GPU 时间
分析 GPU 执行的整体结构
Raw Hierarchy(原始层级视图)
更接近 GPU 实际命令流的视图,展示 未经整理的 GPU 操作列表
所有 GPU 调用按记录顺序直接列出(无父子结构)
没有逻辑分组,也没有折叠结构,像一张“流水账”。
适用于:
精细诊断性能问题时,确认某一个 draw call 或 GPU pass 造成了卡顿
查看某条 GPU 调用命令具体花了多长时间
层级结构详细信息

Overview:调用路径/函数名的层级结构(如PlayerLoop > RenderPipelineManager.DoRenderLoop)Total:当前函数及其子函数占本帧 GPU 总耗时的百分比(%)DrawCalls:本帧触发的渲染调用次数(Draw Call 数量)GPU ms:当前函数在 GPU 上的耗时(毫秒)No Details:只显示基本数据(默认)Related Data:显示与当前函数相关的纹理、材质、Shader 等资源信息Calls:显示更底层的绘制调用(如DrawMesh、Blit)
GPU Usage对于我们的意义
- 分析掉帧来源
- 如果帧时间高于
16ms(60FPS)或其它预定帧率,看看 GPU 有没有占用太多时间
- 如果帧时间高于
- 优化瓶颈定位
- 例如发现
PostProcess(屏幕后处理)占用5ms,就可以尝试禁用或简化后处理
- 例如发现
- DrawCall 分析
- 搭配右侧 Hierarchy 面板查看哪些方法触发了多少 DrawCall,以及 GPU 耗时
- 等等等等
6.2 知识点代码
Lesson06_Unity性能分析工具_GPUUsage.cs
public class Lesson06_Unity性能分析工具_GPUUsage
{
#region 知识点一 GPU Usage是什么
/*
* GPU 使用率(GPU Usage)
* - Unity Profiler 中常用的 GPU 性能分析模块
* - 用于分析 GPU(图形处理器)在一帧中各渲染阶段花了多少时间
*
* 游戏开发中常见 GPU 开销来源:
* 1. 几何处理:模型顶点相关处理
* 2. 光照计算:阴影、反射等
* 3. 渲染输出:Shader 处理、对象渲染、画面输出
* 4. 屏幕后处理(Shader 部分):模糊、黑白、景深等
* 5. 纹理处理:采样、解压缩、贴图操作等
* 6. 特效处理:粒子、流体、烟雾等
* ……等等
*
* 一般项目出现卡顿、掉帧、图像问题、发热、掉电快等情况,可以同时排查 GPU 与 CPU。
* - CPU 更偏游戏逻辑(物理、脚本、AI、动画控制等)
* - GPU 更偏图形渲染(Shader、模型绘制、光照、特效、后处理等)
*
* 注意:
* 1. GPU Usage 的数据收集会影响性能表现
* 2. 会禁用 GPU Jobs(图形工作线程优化)
* 3. 并不支持显示非常详细的 URP/HDRP 相关数据
*/
#endregion
#region 知识点二 GPU Usage中各参数功能的含义和作用
/*
* GPU Usage 各参数含义与作用:
* - 详见笔记正文(警告说明、分析窗口各阶段、Hierarchy/Raw Hierarchy、列信息等)
*/
#endregion
#region 知识点三 GPU Usage对于我们的意义
/*
* 1. 分析掉帧来源:
* - 如果帧时间高于 16ms(60FPS)或其它预定帧率,看看 GPU 有没有占用太多时间
* 2. 优化瓶颈定位:
* - 例如发现 PostProcess(屏幕后处理)占用 5ms,就可以尝试禁用或简化后处理
* 3. DrawCall 分析:
* - 搭配右侧 Hierarchy 面板查看哪些方法触发了多少 DrawCall,以及 GPU 耗时
* 4. 等等等等
*/
#endregion
}
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com