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

203 lines
8.1 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
title: RenderDoc使用技巧
date: 2022-09-30 11:17:29
excerpt:
tags: RenderDoc
rating: ⭐⭐
---
# 前言
参考https://zhuanlan.zhihu.com/p/568990608
>UE5.3需要关闭异步计算让Renderdoc抓帧正常。输入命令即可***r.rdg.asynccompute 0***
**UE5.2之后自动开启Renderdoc**
在DefaultEngine.ini中添加一下配置
```ini
[/Script/RenderDocPlugin.RenderDocPluginSettings]
renderdoc.AutoAttach=True
```
PS. **开启DX12后无法通过Renderdoc进行单步调试**此时可以考虑使用Pix或者切换成DX11。因为DX12的DXIL 着色器不支持着色器调试 https://renderdoc.org/docs/behind_scenes/d3d12_support.html
具体参考
- UE5RayTracing篇-2-——Pix与NSight-Graphics补充 https://zhuanlan.zhihu.com/p/586030650
- UE5使用PIX单步调试DX12环境下的Shader https://zhuanlan.zhihu.com/p/654935138
pix的单步调试需要开启**开发者模式**具体是在window的设置 - 开发者选项 - **开发人员设置**
## 抓帧技巧
- [RenderDoc抓帧steam平台](https://zhuanlan.zhihu.com/p/721764908)
# UE相关设置
开启Renderdoc的PixelDebug功能
![](https://cdn.jsdelivr.net/gh/blueroseslol/ImageBag@latest/ImageBag/Images/20220930121129.png)
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 | 如果符号已生成,则将其写入磁盘。 |
## 其他设置
```ini
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显示耗时
![](https://pic1.zhimg.com/80/v2-804879d0e02dbd0622f6480b9dd5040c_720w.webp)
### 过滤高耗时DrawCall
使用$action(duration > 0.8ms) 进行过滤
![](https://pic4.zhimg.com/80/v2-6598ae8de61ecf7256aa2b2860fa622b_720w.webp)
### **调试VS**
Mesh Viewer中vs input选中或在preview窗口中鼠标右键选中顶点在选中顶点行上右键debug thie vertices
![](https://pic3.zhimg.com/80/v2-3001ac53f0fa085e47df236c0430d2ea_720w.webp)
### **调试PS**
Texture Viewer中右键选择像素在Pixel Context中心就是选中的像素选择需要调试的历史时间点击“Debug”调试
![](https://pic1.zhimg.com/80/v2-c7ab8ffce562b57fe12234a1a39952c4_720w.webp)
### 修改VS
![](https://pic4.zhimg.com/80/v2-b7acd2f64495b688274e6bb5ca6ea06b_720w.webp)
选中dc高亮绘制
![](https://pic1.zhimg.com/80/v2-246cc1577f0a61d68926299a30e488d8_720w.webp)
Pipeline state进入VS
![](https://pic2.zhimg.com/80/v2-37211dff3c6e57067255d6e91d08c6a1_720w.webp)
修改坐标
![](https://pic1.zhimg.com/80/v2-16f647910f37dc54ba7e09c199813a60_720w.webp)
Texture View中预览位置变化
### 修改PS
![](https://pic1.zhimg.com/80/v2-ba7d6b23e94fcf541c5815beacfbf674_720w.webp)
进入pipeline state 编辑ps
![](https://pic3.zhimg.com/80/v2-7442e83ed016b30a3bdd1745912c9c6e_720w.webp)
修改前颜色
![](https://pic2.zhimg.com/80/v2-4878401ef7cae939c76912135106500d_720w.webp)
修改base color为红色
![](https://pic3.zhimg.com/80/v2-cb6a39670c6d94c8703314239f00ebd2_720w.webp)
修改后效果预览
### 查看深度模板测试结果
![](https://pic1.zhimg.com/80/v2-10b497754fb1ed7ba0e12ced038e6fd4_720w.webp)
红色测试不同多,绿色测试通过
### 查看纹理在那些事件引用
![](https://pic4.zhimg.com/80/v2-ee8e0720527ca27045b8cefdeb483433_720w.webp)
![](https://pic2.zhimg.com/80/v2-8c3ed3a794c7b2fca04d8fda4ade6195_720w.webp)
PS 资源种点击链接
![](https://pic1.zhimg.com/80/v2-c70907dd5c33daf560f1be6405bc2a34_720w.webp)
Resource Inspector中右侧查看那些事件使用了此资源
### 纹理太暗
![](https://pic3.zhimg.com/80/v2-d7bdb13af09c789d374523b5df1e6b7e_720w.webp)
![](https://pic2.zhimg.com/80/v2-07d9e1d97230e47a22d641aae5cbbaa1_720w.webp)
### **查看DrawCall耗时**
![](https://pic2.zhimg.com/80/v2-9fc83fdaadf6a453e9dbccefb83ff65d_720w.webp)
### 查看纹理输入输出
![](https://pic2.zhimg.com/80/v2-f464f36300516d1c4c613820d2779fbd_720w.webp)
![](https://pic4.zhimg.com/80/v2-3e224c777f579d5bdcc8752a06231217_720w.webp)
### 重名名纹理
![](https://pic4.zhimg.com/80/v2-a08a7d270a4c8de3c952298ba209bcfb_720w.webp)
### 如何对比数据
将过滤后的数据导出为文本使用对比工具进行对比。用于发现dc耗时问题
![](https://pic3.zhimg.com/80/v2-358566c0e1500019840fc914d7394fc2_720w.webp)
![](https://pic4.zhimg.com/80/v2-84f8f79ac5d241946aeabaa59576a947_720w.webp)
![](https://pic4.zhimg.com/80/v2-6dca8e57407f84970125b9114b9bde2f_720w.webp)
# 命令行启动Renderdoc截帧
相关命令可以使用`renderdoccmd.exe -h`来查看:
- -d工作目录
- -w运行到最后再启动。
- --opt-hook-children捕获子进程。
- 最后填写运行exe程序路径。
```bash
renderdoccmd.exe capture -d "C:\Game\ScarletNexus" -w --opt-hook-children C:\Game\ScarletNexus\ScarletNexus.exe
```