6.Profiler窗口 GPU Usage

6.Unity性能分析工具-GPUUsage


6.1 知识点

GPU Usage是什么

GPU 使用率(GPU Usage)是 Unity Profiler 里最常用的 GPU 分析模块之一,用来观察 GPU(图形处理器)在一帧里各个渲染阶段大概花了多少时间。

游戏开发里常见的 GPU 开销来源:

  1. 几何处理:模型顶点相关处理
  2. 光照计算:阴影、反射等
  3. 渲染输出:Shader 处理、对象渲染、画面输出
  4. 屏幕后处理(Shader 部分):模糊、黑白、景深等效果
  5. 纹理处理:采样、解压缩、贴图操作等
  6. 特效处理:粒子、流体、烟雾等
  7. ……等等

一般项目出现卡顿、掉帧、图像问题、发热、掉电快等情况,可以同时关注 GPU 和 CPU 使用情况。它们的异常表现很多时候很像,根本原因往往都是计算压力过大。

GPU 和 CPU 的侧重点大致是:

  • CPU:偏 游戏逻辑(物理、脚本、AI、动画控制等)
  • GPU:偏 图形渲染(Shader、模型绘制、光照、特效、后处理等)

注意:

  1. GPU Usage 的数据收集会影响性能表现
  2. 会禁用 GPU Jobs(图形工作线程优化)
  3. 不支持显示非常详细的 URP/HDRP 相关数据

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

警告

采集 GPU Profiler 数据会禁用图形作业、增加性能开销,并降低 CPU 模块的准确性。
如果你不需要这些数据,请关闭此模块。
HDRP 和 URP 渲染器当前不受支持:
如果启用了这些渲染器,Profiler 将不会显示大多数 GPU 标记。


  • 注意:

    1. Graphics Jobs 是 Unity 用于加速渲染流程的多线程技术,开启 GPU Profiler 会关闭它,影响性能测试的真实性。
    2. 在使用 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:显示更底层的绘制调用(如 DrawMeshBlit

GPU Usage对于我们的意义

  1. 分析掉帧来源
    • 如果帧时间高于 16ms(60FPS) 或其它预定帧率,看看 GPU 有没有占用太多时间
  2. 优化瓶颈定位
    • 例如发现 PostProcess(屏幕后处理)占用 5ms,就可以尝试禁用或简化后处理
  3. DrawCall 分析
    • 搭配右侧 Hierarchy 面板查看哪些方法触发了多少 DrawCall,以及 GPU 耗时
  4. 等等等等

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

×

喜欢就点赞,疼爱就打赏