> 技术文档 > 使用 RenderDoc 分析 Unity 后处理(Bloom & AO)的 GPU 帧性能_renderdoc unity

使用 RenderDoc 分析 Unity 后处理(Bloom & AO)的 GPU 帧性能_renderdoc unity


使用 RenderDoc 分析 Unity 后处理(Bloom & AO)的 GPU 帧性能

RenderDoc 是一个强大的 GPU 调试工具,可用于分析 Unity 渲染管线的性能瓶颈,帮助开发者优化 Bloom(泛光)AO(环境光遮蔽) 等后处理效果。
本指南将介绍 如何使用 RenderDoc 定位 GPU 性能消耗点,并提供优化策略


1. 为什么使用 RenderDoc?

RenderDoc 允许开发者:
捕获 GPU 帧,检查渲染流水线中的每个 Pass
分析 Shader 计算量,查看像素着色器(PS)和顶点着色器(VS)消耗
检查 Overdraw(过度绘制),评估 Bloom & AO 对 GPU 的影响
查看 GPU 纹理带宽,定位高分辨率 Buffers 的性能瓶颈
分析 Render Target 变化,检查 Bloom & AO 生成的中间缓冲区


2. RenderDoc 安装 & 设置

步骤 1:安装 RenderDoc

  1. 下载 RenderDoc(官方地址)
  2. 安装 RenderDoc,确保 Unity Editor 关闭
  3. 重新启动 Unity,并准备运行测试场景

步骤 2:启动 Unity 并附加 RenderDoc

  1. 打开 RenderDoc
  2. 在 RenderDoc 中,点击 File > Launch Application
  3. 选择 Unity.exe(或 Unity Hub)
  4. 点击 \"Launch\",Unity 将以 RenderDoc 模式启动
  5. 在 Unity 中运行场景,准备捕获 GPU 帧

3. 使用 RenderDoc 捕获 GPU 帧

步骤 3:捕获一帧(Capture Frame)

  1. RenderDoc 主界面,点击 \"Attach to Running Process\"
  2. 选择 Unity Editor
  3. 运行 Unity 场景,确保 Bloom & AO 处于激活状态
  4. F12(默认快捷键)捕获当前帧
  5. 在 RenderDoc 界面,选择捕获的帧并 双击打开

成功后,你将看到 GPU 渲染流水线的详细信息


4. 检查 GPU Pass(Bloom & AO)

步骤 4:分析渲染 Pass

  1. 在 RenderDoc 界面,点击 \"Event Browser\"
  2. 展开 \"RenderPasses\",找到 后处理 Pass
    • BloomPass
    • AOPass
    • TonemapPass
  3. 选择某个 Pass,点击 \"Texture Viewer\"
    • 观察 输入 & 输出 Render Target
    • 查看 Shader 计算复杂度
    • 检查 Bloom & AO 影响的像素区域

5. 分析 Shader 计算量

步骤 5:检查 Shader 计算复杂度

  1. RenderDoc 界面,点击 \"Pipeline State\"
  2. Pixel Shader(PS)部分,检查 Bloom & AO 的计算量:
    • Bloom: 过多的高斯模糊(Gaussian Blur)Pass
    • AO: 过高的采样数(Sample Count)
  3. 分析 Shader 指令(Instruction Count)
    • 如果 Bloom 计算量过高(例如 > 50 指令),则可能存在性能问题:
    float3 bloomColor = tex2D(_MainTex, uv) * bloomIntensity;bloomColor = blur(bloomColor, 5); // 5x5 高斯模糊

    优化策略:

    • 降低模糊半径(减少 blur() 计算)
    • 调整 Shader 采样数(减少 SampleCount

6. 检查 Bloom & AO Overdraw

步骤 6:分析 Overdraw(过度绘制)

  1. 在 RenderDoc 界面,点击 \"Texture Viewer\"
  2. 启用 Overdraw 视图
    • 颜色越红,表示 Overdraw 越严重
  3. 检查哪些对象导致 Overdraw
    • 透明物体 + Bloom 可能导致 GPU 负载过高
    • AO 计算量过大,可能导致 Overdraw

优化策略

  • 减少透明物体影响 Bloom
  • 降低 AO 计算区域
  • 使用 Occlusion Culling 避免不必要的像素计算

7. 查看 GPU 纹理带宽

步骤 7:分析 GPU 纹理使用

  1. 在 RenderDoc 界面,点击 \"Resource Inspector\"
  2. 查找高分辨率 Render Target
    • Bloom 可能使用 4K 纹理,导致 GPU 负担
    • AO 可能使用高精度浮点纹理(FP16/FP32)
  3. 优化策略
    • 降低 Bloom 纹理分辨率
    • 使用纹理压缩(ASTC, ETC2)
    • 减少 AO 计算精度

8. 终极优化策略

Bloom(泛光)优化

问题 优化策略 Bloom 计算过重 降低模糊半径,减少 Pass 数量 Bloom 影响透明物体 使用 Bloom Mask 限制影响范围 Bloom 纹理带宽过高 降低分辨率(2x Downsample) 移动端性能瓶颈 使用 URP Bloom,降低 Shader 计算

AO(环境光遮蔽)优化

问题 优化策略 AO 计算量大 降低 SSAO 采样数(Sample Count < 4) AO 影响全屏 限制 AO 影响范围(仅地面 & 近物体) AO 纹理带宽过高 使用低分辨率 AO 纹理 移动端性能瓶颈 使用 HBAO 替代 SSAO

9. 总结

优化点 Bloom(泛光) AO(环境光遮蔽) 降低分辨率 Downsample 降至 2x 启用 AO Downsample 减少 Pass 数量 限制到 2~3 层模糊 降低 AO 采样数 减少 Overdraw 透明物体不影响 Bloom 限制 AO 影响范围 优化 Shader 使用 Mask 限制 Bloom 启用 Temporal AO 移动端优化 使用 URP Bloom 使用 HBAO 替代 SSAO

使用 RenderDoc 定位消耗点,优化 Shader 计算,减少 Overdraw,可以显著提升 Unity 后处理性能!