type
status
date
slug
summary
tags
category
icon
password
在 UE5.6 之前,我通常直接在我想要调试的 Shader 对应的 C++ 类里直接添加下面四个 Compiler Flags:
之后重新编译 Shaders 即可,最重要的是 CFLAG_GenerateSymbols,这一项,它会生成 Shader 符号并将其嵌入到 Shader 二进制里,这样 RenderDoc 或 PIX 之类的工具就能直接调试对应 Shader。
升级到 5.6 之后发现不能这么做,罪魁祸首是这笔提交 [D3D symbols improvements](https://github.com/EpicGames/UnrealEngine/commit/2b8334930fdb8b4db2ce75b4837504eb307fa737),简单来说就是 CFLAG_GenerateSymbols 生成的符号不会再内嵌到二进制内,从而导致 RenderDoc 和 PIX 无法直接识别符号,而需要手动加载。
解决方法是在 BaseEngine.ini 中修改 [ShaderCompiler] 一段,确保启用下面三个控制台变量:
前面的 ModifyCompilationEnvironment 里不再需要加 CFLAG_GenerateSymbols,只保留另外三个即可,重启编辑器并重新编译 Shaders,可以看到 Project/Saved/ShaderSymbols/PCD3D_SM6 路径下生成了 pdb 符号。
之后,我们需要在 RenderDoc 和 PIX 里面分别设置 Shader 符号搜索路径:


这样在抓帧之后就能成功调试了。
- 作者:Kindem
- 链接:https://www.flyandnotdown.com/post/2578fb78-2f78-8059-9454-f82cc4bf6e7d
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。