This commit is contained in:
2023-06-29 11:55:02 +08:00
commit 36e95249b1
1236 changed files with 464197 additions and 0 deletions

View File

@@ -0,0 +1,163 @@
---
title: RenderDoc使用技巧
date: 2022-09-30 11:17:29
excerpt:
tags: RenderDoc
rating: ⭐⭐
---
## 前言
参考https://zhuanlan.zhihu.com/p/568990608
## UE相关设置
![](https://cdn.jsdelivr.net/gh/blueroseslol/ImageBag@latest/ImageBag/Images/20220930121129.png)
### 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显示耗时
![](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)

View File

@@ -0,0 +1,134 @@
---
title: UE5RayTracing篇-1-——NSight-Graphics
date: 2022-11-11 17:51:43
excerpt:
tags:
rating: ⭐
---
最近打算开始研究UE的RayTracing但欲先利其事必先利器必要的Debug手段还是需要会用。在发现RenderDoc不支持RayTracing后花了些时间学习了一下NSight Graphics。一般的流程就是使用NSight启动要调试的游戏项目进程之后按F11截帧并使用所需工具查看。下面的章节将会简单介绍一下它的功能。
<!--more-->
## UE RayTracing与Shader开发相关
UE的RayTracing Debug界面需要输入命令后才会显示
```
show raytracingdebug 1
r.RayTracing.DebugVisualizationMode Performance
r.RayTracing.DebugVisualizationMode Traversal Node
```
UE5.0.1这些命令无效5.02虽然可以显示Debug界面了但里面不会渲染任何东西。
为了能够截取到Shader的源码并使用RenderDoc的断点调试需要开启Shader开发变量。位于Engine/Config/ConsoleVariables.ini中
```
//删除前面的//即可开启
r.ShaderDevelopmentMode=1
r.Shaders.Optimize=0
```
## NSight
介绍视频:
- https://youtu.be/yBIKsjd2dJk
- https://youtu.be/LKR5XIW1lgs
文档:
- https://docs.nvidia.com/nsight-tools/nsight-graphics/UserGuide/index.html
- https://docs.nvidia.com/nsight-graphics/AdvancedLearning/index.html
个人觉得相比RenderDocNSight的优势在于
- 更加注重性能统计与优化,适合图形程序使用。
- 拥有Rtx、VR相关工具可以让你debug Rtx、VR程序。
- 2个截帧文件比较功能。
PS.2020.6.1 附加进程到UE5会直接崩溃UE4.27虽然可以启动但依然会有问题。2021.2~2022.3的Shader Profiler的Soucre功能会因为SM不是SM6而只能查看Shader的汇编指令。
![](https://cdn.jsdelivr.net/gh/blueroseslol/ImageBag@latest/ImageBag/Images/NSight_SM6.png)
只能等UE5完全支持SM6后才能使用该功能。测试版本5.02开启项目设置里的DirectX12 (SM6,Experimental)功能也不行)
### 连接到进程
NSight有3种
1. 启动进程并附加设置ApplicationExcutable后点击Launch即可。调试UE4的话还需要设置CommandLineArguments为项目路径比如D:/UnrealEngine/Project/RtxRendering/RtxRendering.uproject
![](https://docs.nvidia.com/nsight-tools/nsight-graphics/UserGuide/graphics/frame_debugger_connect.01.png)
2. 手动连接已启动的进程是由通过NSight Graphics启动的进程才能连接选择启动的进程之后点Attach即可。
![](https://docs.nvidia.com/nsight-tools/nsight-graphics/UserGuide/graphics/frame_debugger_attach.02.png)
3. 远程启动在远程机器上运行Nsight Remote Monitor程序之后再本机上输入远程机器的IP即可。
进入界面后点击Capture for Live Analysis即可截取帧信息默认的截取按键为F11
### NSight工具
NSight有5种工具需要在Connect to process界面中的左下角选择
- Frame Debugger基本用这个 ![](https://docs.nvidia.com/nsight-tools/nsight-graphics/UserGuide/graphics/range_profiler.01.png)
- Frame Profiler ![](https://docs.nvidia.com/nsight-tools/nsight-graphics/UserGuide/graphics/shaderprofiler_summarypage.png)
- Generate C++ Capture
- GPU Trace Profiler
- System Trace
在选择完工具连接进程之后就会显示对应的界面。部分功能需要开启设备访问权限,没开启会显示:
![](https://cdn.jsdelivr.net/gh/blueroseslol/ImageBag@latest/ImageBag/Images/NSight_Error.png)
需要在Nvidia控制面板里进行开启步骤如下
![](https://developer.nvidia.com/sites/default/files/akamai/tools/Common/SupportSolutions/ERR_NVGPUCTRPERM_NvCtrlPanel-EnableDeveloperSettings.PNG)
![](https://developer.nvidia.com/sites/default/files/akamai/tools/Common/SupportSolutions/ERR_NVGPUCTRPERM_NvCtrlPanel-AllowAccessToPerfCtrs.PNG)
其他平台的步骤可以参考https://developer.nvidia.com/nvidia-development-tools-solutions-err_nvgpuctrperm-permission-issue-performance-counters
#### Frame Debugger与Frame Profiler
Frame Debugger工具包含了Frame Profiler这些工具里Shader Profiler工具最为重要。
- Shader Profiler
- Summary![](https://docs.nvidia.com/nsight-tools/nsight-graphics/UserGuide/graphics/shaderprofiler_summarypage.png)
- Function Summary显示Shader函数的GPU性能占用分布。
- Hot Spots显示Shader代码的GPU性能占用分布。
- Source 可以打开特定Shader文件并且显示每行代码的GPU性能占用分布。NSight2022.3版本无法显示UE5的Shader源码![](https://docs.nvidia.com/nsight-tools/nsight-graphics/UserGuide/graphics/shaderprofiler_sourcecorrelation.png)
- All Resource可以查看渲染说用到的贴图、Buffer以及场景模型的BLAS![](https://cdn.jsdelivr.net/gh/blueroseslol/ImageBag@latest/ImageBag/Images/NSight_AllResource.png)![](https://cdn.jsdelivr.net/gh/blueroseslol/ImageBag@latest/ImageBag/Images/NSight_BLAS.png)
- Geometry该功能需要选中绘制命令才能显示对应的多边形。具体操作是Scrubber中选中Event右键选择Open Event List再从Event窗口选择绘制事件即可Filter中输入Draw就可以找到绘制事件
- PixelHistory查看一个像素绘制过程的工具。可以通过在Resource中选择绘制的RT之后使用该工具点击想要查看的像素。 ![](https://cdn.jsdelivr.net/gh/blueroseslol/ImageBag@latest/ImageBag/Images/NSight_PixelHistory.png) ![](https://cdn.jsdelivr.net/gh/blueroseslol/ImageBag@latest/ImageBag/Images/NSight_PixelHistory2.png)
- Shader Timeing HeatingRtx相关工具可以查看Rtx Shader在屏幕上的资源占用分布图。但有bug。分析UE5的某个分发Ray事件必然会崩。![](https://cdn.jsdelivr.net/gh/blueroseslol/ImageBag@latest/ImageBag/Images/NSight_ShaderTimingHeatmap.png)
PS.Ctrl+滚轮放大与缩小Event时间轴在左上角Frame Debugger里可以打开其他工具所有的UI介绍可以参考https://docs.nvidia.com/nsight-tools/nsight-graphics/UserGuide/index.html#frame_debugging_profiling_ui
#### Generate C++ Capture
进入工具,点击**Generate C++ Capture**后会捕获并且生成一个VS工程。并且显示以下界面
![](https://docs.nvidia.com/nsight-tools/nsight-graphics/UserGuide/graphics/generated_capture_numbered.01.png)
该功能与RenderDoc保存截帧文件类似但NSight是截取当前帧的渲染情况并且生成一个不断渲染当前帧的程序以便后续复现与Debug。之后依次点击Build=>Execute=>Connect即可进入Frame Debugger界面。该工具还支持嵌入式Linux、桌面Linux。
#### GPU Trace
NSight的截帧功能在连接界面可以设置截帧范围截取的帧数另一个相比RenderDoc的优势就是比较2个帧文件。启动进程后点击**Generate GPU Trace Capture**就可以截取帧文件。并进入类似Frame Debugger的界面。
![](https://docs.nvidia.com/nsight-tools/nsight-graphics/UserGuide/graphics/gpu_trace_launch.01.png)
![](https://docs.nvidia.com/nsight-tools/nsight-graphics/UserGuide/graphics/gpu_trace_capture.01.png)
同时可以设置为高级模式,以截取更多的信息:
![](https://docs.nvidia.com/nsight-tools/nsight-graphics/UserGuide/graphics/gpu_trace_options_advanced_mode_config.png)
![](https://docs.nvidia.com/nsight-tools/nsight-graphics/UserGuide/graphics/gpu_trace_capture_advanced_mode_warning.png)
#### System Trace
需要额外下载Nsight Systems工具才能使用。该工具主要分析CPU与GPU直接交互情况。
#### 其他Rt Shader相关的功能
APIInspector的Rt Shader会显示额外所需的HitTable等数据
![](https://cdn.jsdelivr.net/gh/blueroseslol/ImageBag@latest/ImageBag/Images/NSight_APIInspector_RtxShader.png)
##### Acceleration Structure View
首先可以看一下UE中的相关文档https://docs.unrealengine.com/5.0/en-US/ray-tracing-performance-guide-in-unreal-engine/
- BLASBottom Level Acceleration Structure Updates。静态模型的BLAS会在模型载入时构建。动态物体与骨骼物体会每帧构建。
- TLASTop Level Acceleration Structure。TLAS会每帧构建。
在NSigh中可以从API Inspector或All Resource只能显示BLAS中打开并查看。
![](https://cdn.jsdelivr.net/gh/blueroseslol/ImageBag@latest/ImageBag/Images/NSight_ShowTLAS.png)
视角控制:
- WASD — 向前、向后、向左或向右移动相机
- 箭头键- 向前、向后、向左或向右移动相机
- E/Q - 向上/向下移动相机
- Shift/Ctrl - 更快/更慢地移动相机
- 鼠标滚轮——放大/缩小
- 鼠标左键 + 拖动- 向前或向后移动相机并向左或向右旋转
- 鼠标右键 + 拖动- 旋转相机
- 鼠标中间 + 拖动- 跟踪相机(向上、向下、向左、向右移动)
- 鼠标左键 + 鼠标右键 + Drag — 跟踪相机(上、下、左、右)
- ALT + 鼠标左键 + 拖动- 围绕选定几何体旋转相机
- ALT + 鼠标右键 + 拖动- 放大/缩小
- 双击或 F - 将相机聚焦在选定的几何体上

View File

@@ -0,0 +1,57 @@
---
title: UE5RayTracing篇-2-——Pix与NSight-Graphics补充
date: 2022-11-11 17:53:44
excerpt:
tags:
rating: ⭐
---
## 前言
最近继续学习Rtx所以就总结一下相关debug工具的使用方法。当然如果你是A卡用户大概就需要[【新鲜资讯】Radeon™光线追踪分析器RRA1.0正式上线](https://zhuanlan.zhihu.com/p/549772737)。
## Pix
下载地址位于https://devblogs.microsoft.com/pix/download/
1. 首先启用`Pix for UnrealEngine`插件。
2.`ConsoleVariables.ini`中添加`r.D3D12.AutoAttachPIX=1`,或者在启动命令也就是`CommandLineArguments`最后添加`-attachPIX`
3. 在Pix中设置启动参数点击启动就可以截帧了。
>注意Pix与RenderDoc插件冲突需要关闭RenderDoc插件才能正常运行。
可以通过点击GUI中的照相机图标或者按下键盘上的PrintScreen截图键键来截帧。直接点击摄像机图标是没办法截到场景信息的所以只能用鼠标点击场景窗口让窗口获得焦点之后再按截图键才能截到。
![](https://cdn.jsdelivr.net/gh/blueroseslol/ImageBag@latest/ImageBag/Images/20221114134346.png)
查看渲染过程只需要GPUCapture如果要调试性能就需要使用TimingCapture。具体操作可以参考PIX的操作视频教程位于https://www.youtube.com/watch?v=rLClOkrE47w&list=PLeHvwXyqearWuPPxh6T03iwX-McPG5LkB&index=2
PS.Collect Timing Data需要在win10上开启`开发人员模式`,具体操作为
1. 打开开始菜单,输入`开发者`
2. 进入`开发者选项`,勾选开发人员模式。
### 4个功能Tab
Pix的主要功能集中在这4个Tab中。
Overview主要是展示一下EventList在点击`CollectTimingData`下方会显示时间轴。
![](https://cdn.jsdelivr.net/gh/blueroseslol/ImageBag@latest/ImageBag/Images/20221114155739.png)
Pipeline显示当前Event的Shader、管线状态以及其他相关数据。
![](https://cdn.jsdelivr.net/gh/blueroseslol/ImageBag@latest/ImageBag/Images/20221114152359.png)
![](https://cdn.jsdelivr.net/gh/blueroseslol/ImageBag@latest/ImageBag/Images/20221114151354.png)
想要DebugShader可以在Pipeline找到对应Shader并在Shader文件上右键点击`Open In Debugger`后进行调试。
![](https://cdn.jsdelivr.net/gh/blueroseslol/ImageBag@latest/ImageBag/Images/20221114154405.png)
当然也可以在输入的RT上双击鼠标左键之后点击`DebugPixel`进行debug。
![](https://cdn.jsdelivr.net/gh/blueroseslol/ImageBag@latest/ImageBag/Images/20221114154555.png)
Debugdebug时需要点击左上方Overview下面的运行按钮这里我已经点了。这里我很好奇为啥没有类似Renderdoc的断点功能。
![](https://cdn.jsdelivr.net/gh/blueroseslol/ImageBag@latest/ImageBag/Images/20221114155712.png)
Tools大概是一个测试性能的工具可以测试Basic Information、Depth/Stencil、Primitives and Rasterization、Bandwidth、TDR Analysis、ExecuteIndirect。
![](https://cdn.jsdelivr.net/gh/blueroseslol/ImageBag@latest/ImageBag/Images/20221114155948.png)
## NSight For VisualStudio
之后测试了一下NSight的VS插件虽然本质上就是一个帮你填写启动参数的工具但的确方便。
![](https://cdn.jsdelivr.net/gh/blueroseslol/ImageBag@latest/ImageBag/Images/20221111175647.png)
![](https://cdn.jsdelivr.net/gh/blueroseslol/ImageBag@latest/ImageBag/Images/20221111175715.png)
![](https://cdn.jsdelivr.net/gh/blueroseslol/ImageBag@latest/ImageBag/Images/20221111182344.png)
测试完之后就能查看光追的一些参数。
![](https://cdn.jsdelivr.net/gh/blueroseslol/ImageBag@latest/ImageBag/Images/20221111183638.png)