[UE4]如何使用Visual studio Graphics Debugger來為shader除錯

posted in: UnrealEngine, 未分類 | 0

基本上官方推薦的shader除錯流程是使用Renderdoc這個Plugin來進行:
https://github.com/Temaran/UE4RenderDocPlugin

這個Plugin在4.17的時候就已經整合進到Engine Plugin中了,
只要照著上面網址中的教學進行就能夠開起來。

只是,在用Visual Studio的時候會發現,裡面也有一個自帶的Graphics Debugger:

直接按下這個按鈕之後,引擎會直接噴下面的錯誤訊息:

DX11 Feature level 10.0 is required to run the engine.

那麼我們到底該怎麼使這個工具呢?

我們需要修改ConsoleVariables.ini這個檔案(請手動新增在專案的Config資料夾下),
並插入以下內容:

[Startup] r.GraphicsAdapter=0

0代表的就是使用第一個找到的Graphics Adapter,其在引擎中的詳細宣告如下:
static TAutoConsoleVariable CVarGraphicsAdapter(
TEXT("r.GraphicsAdapter"),
-1,
TEXT("User request to pick a specific graphics adapter
(e.g. when using a integrated graphics card with a discrete one)\n")
TEXT("At the moment this only works on Direct3D 11.
Unless a specific adapter is chosen we reject
Microsoft adapters because we don't want the software emulation.\n")
TEXT(" -2: Take the first one that fulfills the criteria\n")
TEXT(" -1: Favour non integrated because there are usually faster (default)\n")
TEXT(" 0: Adapter #0\n")
TEXT(" 1: Adapter #1, ..."),
ECVF_RenderThreadSafe);

預設的數字為-1。

執行後,就可以對每個frame進行capture來做分析了。

以下是一些運行時的截圖:

只是帶在ConsoleVariables.ini上其實不是很好,因為會影響到最後shipping的結果,
因此若是能夠從commandline傳入參數來決定要不要開啟該功能的話,會是個比較理想的做法。
為了實現這個功能,我稍微對引擎底層做了一些修改,並送了一個Pull Request給官方:
https://github.com/EpicGames/UnrealEngine/pull/4163

若是官方之後有接受這個PR的話,
則在UnrealVS的toolbar執行的時候多增加-DebugGraphics就可以順利開啟Visual Studio Graphics Debugger。
記得除錯時,再多加入-d3ddebug -emitdrawevents,這樣訊息才會完整。

Leave a Reply

Your email address will not be published. Required fields are marked *