RenderDoc 是一款基于帧捕捉的开源图形调试器,可以方便我们分析渲染流程,定位渲染问题。以下记录了自己学到的一些使用知识,主要是在 UE4 项目中使用,希望对大家能有所帮助,也希望大伙能指出问题和使用建议~
前置准备
编辑器下调试
- 开启插件:Plugins/RenderDoc 下启用 RenderDoc,然后重启工程;(如果机器没有 RenderDoc,需要自行下载,官网renderdoc.org/builds)
- 截帧:
- Play 情况下:可以通过快捷键 Alt+F12 开启,或者命令 Renderdoc.CaptureFrame 开启,
- 未 Play 情况下:还可以通过屏幕右上角标志开启
截帧之后会自动启动 Renderdoc,并展示如下界面,双击打开要分析的截取的帧,即可进行分析
调试打包后的程序
- 打开 RenderDoc 程序;
- LaunchApplication 里填写 exe 的路径;
- 注意:启动的参数(如分辨率之类的)可以在下面的 Arguments 里填写;
- 点击 Launch 即可,然后有个 CaptureImmediatelly,就能截图分析了;
可能用到的设置
- 如果需要调试 Slate 代码,需要启用命令
renderdoc.CaptureAllActivity 1; - 如果需要调试 Shader,找到 Engine\Config\ConsoleVariables.ini 文件,取消注释
r.Shaders.Optimize = 0和r.Shaders.KeepDebugInfo = 1;重启引擎; - 据说有童鞋因为项目名是中文所以截不了帧;
- 一些其他在 UE4 中的设置:RenderDoc
分析帧
启用后,就可以分析 UE 的绘制了。我是通过 《UE4 是如何渲染一帧的》来学习 UE4 渲染的
TextureViewer
- 可以在 TextureViewer 中看到 DrawCall 对应的 Texture 和 Render Target,如 UE4 的每个 Buffer,其中
Input是输入纹理,OutPut是输出纹理;
- 注意: 在看深度(
SceneDepthZ)或者其他的 Texture 时,有时可能什么也看不到,可以通过调节 黑白范围 查看
调整前后对比
- 还可以在 TextureViewer 下方查看更详细的信息,如像素坐标,颜色信息等
Timeline
- 时间轴,相当于一个横向的展示,绿色的小旗子代表当前所属的位置;
- 对我来说,比较有用的是那几个三角形,各个颜色的含义上面写的很清楚了,下方还列了选择的 Texture 所被使用的各个阶段。
如上图,可以看到 深度 Buffer 在一开始被 Clear,后续有一些地方在 Write,然后有些地方在 Read 或者再次 Clear。
Event Browaser
我用这个功能主要是看每个 DrawCall 花费的时间
可以看到,截的图里,相对来说,BasePass 中 Grass 花费的时间较多。
如果没有看到时间,可以在如下选项中调出
(后面还有一些,我暂时基本没怎么用过了~)
Pipeline State
可以用来查看渲染管线过程
默认管线将不包含空或未使用的条目,可以通过工具栏上的Show Unused Items和Show Empty Items来显示。
可以在每个过程下查看 Shader 详细信息,点击 View 可以看到,点击 Edit 可以编辑
(如果没开 ConsoleVariables.ini 里的两个变量,看到的是编译后的代码,开了之后,可以看到原始代码)
- 编译后
- 原始
还可以看到其他信息,如用到的纹理,可以看到 纹理类型、大小、格式,采样纹理的环绕方式(Addressing),过滤方式(filter)等等。
Mesh Viewer
可以看到一些顶点输入输出数据,如下图,武器的信息
API Inspector
可以用来查看一些切换渲染状态的 API 调用。