(轉)Unreal Shader模組(四): 著色器編譯

來源:互聯網
上載者:User

標籤:develop   函數   tco   產生   如何   交叉編譯器   斷點   微軟   policy   

本文為(轉):Unreal 調試著色器編譯過程

  

調試著色器編譯過程

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

  • Share on Facebook 
  • Share on Twitter 
  • Share on Google+ 
  • Share on LinkedIn

  

啟用 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,並且應該能夠開始瞭解如何調用平台編譯器。

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

  • 著色器開發
  • HLSL 交叉編譯器

(轉)Unreal Shader模組(四): 著色器編譯

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.