(轉)Unreal Shader模塊(四): 着色器編譯


本文為()Unreal 調試着色器編譯過程

   

調試着色器編譯過程

Rolando Caloca 在 April 19, 2016 | 學習編程

   

啟用 CVAR 以允許轉儲中間着色器

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

   

在調試時構建 SHADERCOMPILEWORKER

默認情況下,UnrealBuildTool (UBT) 將為工具生成項目,以便始終在開發時進行編譯。要在調試時構建項目,請將 ShaderCompileWorker 的解決方案屬性(Visual Studio:生成 -> 配置管理器)更改為 Debug_Program:

   

生成中間文件

此刻,您想要生成可調試的文件;啟用 Cvar 將允許后續編譯轉儲所生成的文件;要強制重建所有着色器,請在Engine/Shaders/Common.usf 中添加一個空格或進行更改,然后重新運行編輯器。這將重新編譯着色器並轉儲Project/Saved/ShaderDebugInfo 文件夾中的所有中間文件。

   

轉儲的着色器的文件夾結構

讓我們分析轉儲的文件的完整路徑:

D:\UE4\Samples\Games\TappyChicken\Saved\ShaderDebugInfo\PCD3D_SM5\M_Egg\LocalVF\BPPSFNoLMPolicy\BasePassPixelShader.usf

項目的根路徑:

D:\UE4\Samples\Games\TappyChicken\Saved\ShaderDebugInfo\PCD3D_SM5\M_Egg\LocalVF\BPPSFNoLMPolicy\BasePassPixelShader.usf

轉儲着色器的根路徑:

D:\UE4\Samples\Games\TappyChicken\Saved\ShaderDebugInfo\PCD3D_SM5\M_Egg\LocalVF\BPPSFNoLMPolicy\BasePassPixelShader.usf

現在,對於每種着色器格式/平台,您可找到一個子文件夾,在本例中,這是 PC D3D Shader Model 5:

D:\UE4\Samples\Games\TappyChicken\Saved\ShaderDebugInfo\PCD3D_SM5\M_Egg\LocalVF\BPPSFNoLMPolicy\BasePassPixelShader.usf

現在,對於每個材質名稱都有一個對應的文件夾,並且有一個名為 Global 的特殊文件夾。在本例中,我們在 M_Egg 材質內:

D:\UE4\Samples\Games\TappyChicken\Saved\ShaderDebugInfo\PCD3D_SM5\M_Egg\LocalVF\BPPSFNoLMPolicy\BasePassPixelShader.usf

着色器分組在貼圖內並按頂點工廠排序,而這些頂點工廠通常最終對應於網格/元件類型;在本例中,有一個"本地頂點工廠":

D:\UE4\Samples\Games\TappyChicken\Saved\ShaderDebugInfo\PCD3D_SM5\M_Egg\LocalVF\BPPSFNoLMPolicy\BasePassPixelShader.usf

最后,下一路徑是特性的排列;因為我們早先已啟用 r.DumpShaderDebugShortNames=1,所以名稱已壓縮(以減小路徑長度)。如果將其設置為 0,那么完整路徑將是:

D:\UE4\Samples\Games\TappyChicken\Saved\ShaderDebugInfo\PCD3D_SM5\M_Egg\FLocalVertexFactory\TBasePassPSFNoLightMapPolicy\BasePassPixelShader.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:\UE4\Samples\Games\TappyChicken\Saved\ShaderDebugInfo\PCD3D_SM5\M_Egg\LocalVF\BPPSFNoLMPolicy\BasePassPixelShader.usf-format=PCD3D_SM5 -ps -entry=Main

現在,您可以對 D3D11ShaderCompiler.cpp 中的 CompileD3D11Shader() 函數設置斷點,通過命令行運行 SCW,並且應該能夠開始了解如何調用平台編譯器。

有關此主題的更多信息,請參閱虛幻引擎文檔的以下兩個頁面:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM