UPL2-3——GPU Usage 模块
UPL2-3——GPU Usage 模块
本章内容涉及图形接口知识,相关内容可见:US1L7——必备的图形程序接口概念
本章还涉及一些 Shader 相关概念,具体可见:US——Unity Shader开发入门
GPU Usage 模块
GPU Usage(使用率)是 Unity Profiler 中最重要的性能分析模块之一,用于 分析 GPU(图形处理器)在一帧中在哪些渲染阶段上花了多少时间
游戏开发中会造成GPU开销的主要有:
- 几何处理:模型顶点相关处理
- 光照计算:阴影、反射等
- 渲染输出:Shader 处理、对象渲染、游戏画面显示
- 屏幕后处理 Shader 部分:屏幕画面特殊效果(模糊、黑白、景深等等)
- 纹理处理:采样、解压缩、贴图操作等
- 特效处理:粒子、流体、烟雾等等
等等
一般项目出现卡顿、掉帧问题、图像问题、发热、掉电快等情况可以着重排查 GPU 和 CPU 使用情况,
它们的异常表现几乎一致,根本原因通常是计算压力过大
GPU 和 CPU 计算的区别在于:
- CPU 专注于 游戏逻辑 处理相关(物理、脚本、AI、动画控制等等)
- GPU 专注于 图形渲染 处理相关(Shader、模型绘制、光照、特效、后处理等等)
注意:
- GPU Usage 的数据收集 会影响性能表现
- 会禁用 GPU Jobs(图形工作线程优化)
- 并不支持显示详细的 URP 和 HDRP 相关数据(仅支持内建渲染管线)
关于 GPU Usage 的注意事项
GPU Usage 默认是关闭的,需要去顶部页签的 Profiler Modules(模块列表) 处勾选 GPU Usage 才可启用,详见:UPL2-1——顶部页签
GPU Usage 会有一个警告,提示大致意思为:

采集 GPU Profiler 数据会禁用图形作业、增加性能开销,并降低 CPU 模块的准确性。如果你不需要这些数据,请关闭此模块。
HDRP 和 URP 渲染器当前不受支持: 如果启用了这些渲染器,Profiler 将不会显示大多数 GPU 标记。(如果你的工程是 URP 或 HDRP 的)
注意:
-
Graphics Jobs 是 Unity 用于加速渲染流程的多线程技术,开启 GPU Profiler 会关闭它,影响性能测试的真实性。
-
在使用 URP(通用渲染管线)或 HDRP(高清渲染管线) 时,GPU 模块不会显示详细的 GPU 时间采样(比如各个 pass、shader 的耗时),所以数据不完整

建议:
如果你只关心 CPU 性能或者使用 SRP(如 URP/HDRP),可以暂时关闭 GPU Profiler。除非你在测试传统内置渲染管线的 GPU 性能。
对于 SRP(URP/HDRP)我们可以使用 Rendering Debugger 进行性能检测(以后再讲解 URP 先关知识时,(#TODO#))
要开启 Rendering Debugger:工具栏 ——> Window ——> Analysis ——> Rendering Debugger


GPU Usage 中各参数功能的含义和作用

-
GPU 使用率 分析窗口 在这里通过不同模块不同颜色表达,我们可以直观的看到每一个模块对GPU的使用情况
- Opaque: 内置渲染管线渲染 不透明对象的时间
- Transparent:内置渲染管线渲染 透明对象的时间
- Shadows/Depth:内置渲染管线渲染 阴影贴图/深度贴图 的时间(比如阴影贴图生成、摄像机深度图)
- Deferred Geometry:内置延迟渲染管线处理 延迟几何通道的时间;用于延迟渲染管线,写入 GBuffer 阶段
- Deferred Lighting:内置延迟渲染管线处理 延迟光照通道的时间;从 GBuffer 读取信息并执行光照计算
- PostProcess:内置渲染管线处理 屏幕后期处理效果的时间
- Other:处理可编程渲染管线等其他事务的渲染时间(比如 URP 或者 HDRP),还有其他无法分类的 GPU 开销,如一些插件、系统调用等
使用建议: 我们主要就是根据具体的数据表现,特别是在内置渲染管线中 可以通过这些数值明确的知道是那一块渲染相关出现的性能问题,然后针对性的优化即可
注意:该模块并不是支持所有的平台调试,对于不支持的平台我们只有在特定平台上用特定工具调试 比如 IOS 使用 Xcode 的 GPU Frame Debugger
平台 图形 API 状态 Windows DirectX 11、DirectX 12、OpenGL 受支持 Vulkan 不支持 macOS OpenGL 支持。注意: Apple 已废弃对 OpenGL 的支持。 Metal 不支持。改用 XCode 的 GPU 帧调试器 UI。 Linux OpenGL Core 受支持 Vulkan 不支持 WebGL 所有 WebGL 不支持 Android OpenGL 在运行 NVIDIA 或 Intel GPU 的设备上受支持。 Vulkan 不支持 iOS、tvOS Metal 不支持。改用 XCode 的 GPU 帧调试器 UI。 Tizen OpenGL 不支持。 -
模块详细信息面板显示模式(窗口下方的显示模式)
-
Hierarchy:层级视图
最常用的分析视图,展示 GPU 所做工作的树状结构(父子关系),将 GPU 操作按 渲染流程 的逻辑顺序组织
适用于:识别哪个阶段(如阴影、后处理)消耗了 GPU 时间,分析 GPU 执行的整体结构
-
Raw Hierarchy:原始层级视图
更接近 GPU 实际命令流的视图,展示 未经整理的 GPU 操作列表 所有 GPU 调用按记录顺序直接列出(无父子结构)
没有逻辑分组,也没有折叠结构,像一张“流水账”。
适用于: 精细诊断性能问题时,确认某一个 Drawcall 或 GPU Pass 造成了卡顿,查看某条 GPU 调用命令具体花了多长时间
-
-
Hierarchy(层级视图)相关关键信息

-
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 耗时
等等
