【转载】在 UE4 中使用 GPU 分析工具 RenderDoc

2,111 阅读3分钟

原文链接:在 UE4 中使用 GPU 分析工具 RenderDoc

RenderDoc 是一款基于帧捕捉的开源图形调试器,可以方便我们分析渲染流程,定位渲染问题。以下记录了自己学到的一些使用知识,主要是在 UE4 项目中使用,希望对大家能有所帮助,也希望大伙能指出问题和使用建议~

前置准备

编辑器下调试

  1. 开启插件:Plugins/RenderDoc 下启用 RenderDoc,然后重启工程;(如果机器没有 RenderDoc,需要自行下载,官网renderdoc.org/builds
  2. 截帧:
  • Play 情况下:可以通过快捷键 Alt+F12 开启,或者命令 Renderdoc.CaptureFrame 开启,
  • 未 Play 情况下:还可以通过屏幕右上角标志开启

image.png

截帧之后会自动启动 Renderdoc,并展示如下界面,双击打开要分析的截取的帧,即可进行分析

image.png

调试打包后的程序

  1. 打开 RenderDoc 程序;
  2. LaunchApplication 里填写 exe 的路径;
  3. 注意:启动的参数(如分辨率之类的)可以在下面的 Arguments 里填写;
  4. 点击 Launch 即可,然后有个 CaptureImmediatelly,就能截图分析了;

可能用到的设置

  1. 如果需要调试 Slate 代码,需要启用命令 renderdoc.CaptureAllActivity 1
  2. 如果需要调试 Shader,找到 Engine\Config\ConsoleVariables.ini 文件,取消注释 r.Shaders.Optimize = 0r.Shaders.KeepDebugInfo = 1;重启引擎;
  3. 据说有童鞋因为项目名是中文所以截不了帧;
  4. 一些其他在 UE4 中的设置:RenderDoc

分析帧

启用后,就可以分析 UE 的绘制了。我是通过 《UE4 是如何渲染一帧的》来学习 UE4 渲染的

TextureViewer

  • 可以在 TextureViewer 中看到 DrawCall 对应的 TextureRender Target,如 UE4 的每个 Buffer,其中 Input 是输入纹理,OutPut 是输出纹理;

  • 注意: 在看深度(SceneDepthZ)或者其他的 Texture 时,有时可能什么也看不到,可以通过调节 黑白范围 查看

调整前后对比

  • 还可以在 TextureViewer 下方查看更详细的信息,如像素坐标,颜色信息等

Timeline

  • 时间轴,相当于一个横向的展示,绿色的小旗子代表当前所属的位置;
  • 对我来说,比较有用的是那几个三角形,各个颜色的含义上面写的很清楚了,下方还列了选择的 Texture 所被使用的各个阶段。

image.png

如上图,可以看到 深度 Buffer 在一开始被 Clear,后续有一些地方在 Write,然后有些地方在 Read 或者再次 Clear

Event Browaser

我用这个功能主要是看每个 DrawCall 花费的时间

可以看到,截的图里,相对来说,BasePass 中 Grass 花费的时间较多。

如果没有看到时间,可以在如下选项中调出

(后面还有一些,我暂时基本没怎么用过了~)

Pipeline State

可以用来查看渲染管线过程

默认管线将不包含空或未使用的条目,可以通过工具栏上的Show Unused ItemsShow Empty Items来显示。

image.png

可以在每个过程下查看 Shader 详细信息,点击 View 可以看到,点击 Edit 可以编辑

image.png

(如果没开 ConsoleVariables.ini 里的两个变量,看到的是编译后的代码,开了之后,可以看到原始代码)

  • 编译后

  • 原始

还可以看到其他信息,如用到的纹理,可以看到 纹理类型、大小、格式,采样纹理的环绕方式(Addressing),过滤方式(filter)等等。

image.png

Mesh Viewer

可以看到一些顶点输入输出数据,如下图,武器的信息

image.png

API Inspector

可以用来查看一些切换渲染状态的 API 调用。

参考