BlueRoseNote/03-UnrealEngine/Rendering/Debug/RenderDoc使用技巧.md

8.1 KiB
Raw Blame History

title, date, excerpt, tags, rating
title date excerpt tags rating
RenderDoc使用技巧 2022-09-30 11:17:29 RenderDoc

前言

参考:https://zhuanlan.zhihu.com/p/568990608

UE5.3需要关闭异步计算让Renderdoc抓帧正常。输入命令即可r.rdg.asynccompute 0

UE5.2之后自动开启Renderdoc 在DefaultEngine.ini中添加一下配置

[/Script/RenderDocPlugin.RenderDocPluginSettings]
renderdoc.AutoAttach=True

PS. 开启DX12后无法通过Renderdoc进行单步调试此时可以考虑使用Pix或者切换成DX11。因为DX12的DXIL 着色器不支持着色器调试 https://renderdoc.org/docs/behind_scenes/d3d12_support.html

具体参考

pix的单步调试需要开启开发者模式具体是在window的设置 - 开发者选项 - 开发人员设置

抓帧技巧

UE相关设置

开启Renderdoc的PixelDebug功能

UE5.3 开启调试的需要开启:

  • r.Shaders.Symbols=1
  • r.Shaders.Optimize=0
  • r.DisableEngineAndAppRegistration=1

UE5中的改动

UE5中这些名称有了一定的变化

旧名称 新名称 注解
r.Shaders.KeepDebugInfo r.Shaders.Symbols 通过生成符号并将其写入主机的磁盘来启用着色器调试PC符号仍以内联方式存储。
r.Shaders.KeepDebugInfo(被划分为两部分) r.Shaders.ExtraData 生成着色器名称和其他"额外"着色器数据。
r.Shaders.PrepareExportedDebugInfo r.Shaders.GenerateSymbol 生成符号,但不将其写入磁盘(备注符号存储在DDC中)
r.Shaders.ExportDebugInfo r.Shaders.WriteSymbols 如果符号已生成,则将其写入磁盘。

其他设置

renderdoc.BinaryPath  // 查看RenderDoc的安装路径
renderdoc.BinaryPath "C:\Program Files\RenderDoc"  // 设置RenderDoc的安装路径为C:\Program Files\RenderDoc
renderdoc.CaptureAllActivity 1   // 勾选CaptureAllActivity获取编辑器所有viewport和窗口的渲染数据而不仅仅是当前viewport  注获取UI的Draw需要开启该开关
renderdoc.CaptureCallstacks // 查看CaptureCallstacks获取图形API的调用堆栈是否勾选
renderdoc.EnableCrashHandler 0 // 取消勾选EnableCrashHandler截帧崩溃时是否使用RenderDoc的crash handler
renderdoc.ReferenceAllResources  // 查看ReferenceAllResources获取所有mesh、材质纹理等渲染资源开启该选项会导致帧文件很大是否勾选
renderdoc.SaveAllInitials 1 // 勾选SaveAllInitials获取所有mesh、材质纹理等渲染资源的初始状态开启该选项会导致帧文件很大
renderdoc.ShowHelpOnStartup  // 查看ShowHelpOnStartup启动编辑器时是否弹出RenderDoc的帮助对话框是否勾选

调试Slate所需命令renderdoc.CaptureAllActivity 1

截帧命令

  • renderdoc.CaptureFrameCount  10  // 连续截10帧并保存到一个rdc文件中
  • renderdoc.CapturePIE 12 // 在编辑器中将当前地图Play然后连续截取12帧
  • renderdoc.CaptureDelayInSeconds 0   // 设置Delay的单位为帧
  • renderdoc.CaptureDelayInSeconds 1   // 设置Delay的单位为秒
  • renderdoc.CaptureDelay 15  // 当Delay的单位为帧时表示设置延迟15帧当Delay的单位为秒时表示设置延迟15秒 //  注这个只是设置仍然需要调用renderdoc.CaptureFrame等来发起截帧动作

重新编译Shader

  • r.RecompileRenderer重新编译所有RenderModule。
  • recompileshaders位于bool RecompileShaders(const TCHAR* Cmd, FOutputDevice& Ar);可以编译指定的Material。命令默认编译所有Shader快捷键是Ctrl+Shift+.。recompileshaders material <material name>
    • Changed编译修改过文件
    • Global编译GlobalShader
    • Material MaterialName:附带一个参数材质名称
    • All所有文件
    • ShaderFileName编译指定的Shader

有人说recompileshaders <USF FileName>可以只编译指定的USF文件但实际测试会报错。或许可以试试Material版本比如recompileshaders material M_SGSSS

截取非管线Shader的方法

在你EnqueueRenderCommand前加一个FScopedCapture 跑到你的Cmd的时候就可以自动Renderdoc截帧 ,类为FcopedCapture。

Renderdoc本身相关

使用技巧

修改ms显示耗时

过滤高耗时DrawCall

使用$action(duration > 0.8ms) 进行过滤

调试VS

Mesh Viewer中vs input选中或在preview窗口中鼠标右键选中顶点在选中顶点行上右键debug thie vertices

调试PS

Texture Viewer中右键选择像素在Pixel Context中心就是选中的像素选择需要调试的历史时间点击“Debug”调试

修改VS

选中dc高亮绘制

Pipeline state进入VS

修改坐标

Texture View中预览位置变化

修改PS

进入pipeline state 编辑ps

修改前颜色

修改base color为红色

修改后效果预览

查看深度模板测试结果

红色测试不同多,绿色测试通过

查看纹理在那些事件引用

PS 资源种点击链接

Resource Inspector中右侧查看那些事件使用了此资源

纹理太暗

查看DrawCall耗时

查看纹理输入输出

重名名纹理

如何对比数据

将过滤后的数据导出为文本使用对比工具进行对比。用于发现dc耗时问题

命令行启动Renderdoc截帧

相关命令可以使用renderdoccmd.exe -h来查看:

  • -d工作目录
  • -w运行到最后再启动。
  • --opt-hook-children捕获子进程。
  • 最后填写运行exe程序路径。
renderdoccmd.exe capture -d "C:\Game\ScarletNexus" -w --opt-hook-children C:\Game\ScarletNexus\ScarletNexus.exe