7.1 KiB
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
UE相关设置
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。
使用技巧
修改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耗时问题
UE5.2之后开启Renderdoc
在DefaultEngine.ini中添加一下配置: [/Script/RenderDocPlugin.RenderDocPluginSettings] renderdoc.AutoAttach=True