我是靠谱客的博主 背后睫毛,最近开发中收集的这篇文章主要介绍UE4 调试着色器编译过程调试着色器编译过程内容,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

debugging shaders

调试着色器编译过程

  April 19, 2016 | 

启用 CVAR 以允许转储中间着色器

在 ConsoleVariables.ini 文件(通常位于 Engine/Config/ConsoleVariables.ini)中,启用下列 Cvar:

cvar

在调试时构建 SHADERCOMPILEWORKER

默认情况下,UnrealBuildTool (UBT) 将为工具生成项目,以便始终在开发时进行编译。要在调试时构建项目,请将 ShaderCompileWorker 的解决方案属性(Visual Studio:生成 -> 配置管理器)更改为 Debug_Program:

解决方案配置

生成中间文件

此刻,您想要生成可调试的文件;启用 Cvar 将允许后续编译转储所生成的文件;要强制重建所有着色器,请在Engine/Shaders/Common.usf 中添加一个空格或进行更改,然后重新运行编辑器。这将重新编译着色器并转储Project/Saved/ShaderDebugInfo 文件夹中的所有中间文件。

转储的着色器的文件夹结构

让我们分析转储的文件的完整路径:

D:UE4SamplesGamesTappyChickenSavedShaderDebugInfoPCD3D_SM5M_EggLocalVFBPPSFNoLMPolicyBasePassPixelShader.usf

项目的根路径:

D:UE4SamplesGamesTappyChickenSavedShaderDebugInfoPCD3D_SM5M_EggLocalVFBPPSFNoLMPolicyBasePassPixelShader.usf

转储着色器的根路径:

D:UE4SamplesGamesTappyChickenSavedShaderDebugInfoPCD3D_SM5M_EggLocalVFBPPSFNoLMPolicyBasePassPixelShader.usf

现在,对于每种着色器格式/平台,您可找到一个子文件夹,在本例中,这是 PC D3D Shader Model 5:

D:UE4SamplesGamesTappyChickenSavedShaderDebugInfoPCD3D_SM5M_EggLocalVFBPPSFNoLMPolicyBasePassPixelShader.usf

现在,对于每个材质名称都有一个对应的文件夹,并且有一个名为 Global 的特殊文件夹。在本例中,我们在 M_Egg 材质内:

D:UE4SamplesGamesTappyChickenSavedShaderDebugInfoPCD3D_SM5M_EggLocalVFBPPSFNoLMPolicyBasePassPixelShader.usf

着色器分组在贴图内并按顶点工厂排序,而这些顶点工厂通常最终对应于网格/元件类型;在本例中,有一个“本地顶点工厂”:

D:UE4SamplesGamesTappyChickenSavedShaderDebugInfoPCD3D_SM5M_EggLocalVFBPPSFNoLMPolicyBasePassPixelShader.usf

最后,下一路径是特性的排列;因为我们早先已启用 r.DumpShaderDebugShortNames=1,所以名称已压缩(以减小路径长度)。如果将其设置为 0,那么完整路径将是:

D:UE4SamplesGamesTappyChickenSavedShaderDebugInfoPCD3D_SM5M_EggFLocalVertexFactoryTBasePassPSFNoLightMapPolicyBasePassPixelShader.usf

在该文件夹中,有一个批处理文件和一个 usf 文件。这个 usf 文件就是要提供给平台编译器的最终着色器代码。您可通过这个批处理文件来调用平台编译器,以查看中间代码。

使用 SHADERCOMPILEWORKER 进行调试

从 4.11 版开始,我们为 ShaderCompileWorker (SCW) 添加了一项功能,使其能够调试平台编译器调用;命令行如下所示:

PathToGeneratedUsfFile -directcompile -format=ShaderFormat -ShaderType -entry=EntryPoint

  • PathToGeneratedUsfFile 是 ShaderDebugInfo 文件夹中的最终 usf 文件
  • ShaderFormat 是您想要调试的着色器平台格式(在本例中,这是 PCD3D_SM5)
  • ShaderType 是 vs/ps/gs/hs/ds/cs 中的一项,分别对应于“顶点”、“像素”、“几何体”、“物体外壳”、“域”和“计算”着色器类型
  • EntryPoint 是 usf 文件中此着色器的入口点的函数名称

例如,D:UE4SamplesGamesTappyChickenSavedShaderDebugInfoPCD3D_SM5M_EggLocalVFBPPSFNoLMPolicyBasePassPixelShader.usf-format=PCD3D_SM5 -ps -entry=Main

现在,您可以对 D3D11ShaderCompiler.cpp 中的 CompileD3D11Shader() 函数设置断点,通过命令行运行 SCW,并且应该能够开始了解如何调用平台编译器。

有关此主题的更多信息,请参阅虚幻引擎文档的以下两个页面:

  • 着色器开发
  • HLSL 交叉编译器

内容

最后

以上就是背后睫毛为你收集整理的UE4 调试着色器编译过程调试着色器编译过程内容的全部内容,希望文章能够帮你解决UE4 调试着色器编译过程调试着色器编译过程内容所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(58)

评论列表共有 0 条评论

立即
投稿
返回
顶部