2014年8月2日 星期六

Frame Debugger in Unity 5.0


作者:Aras Pranckevičius

你是否曾經思考過到底Unity中的圖形效果到底是如何一步一步的渲染出來的呢?

想要了解流程,可以通過一些擴展工具來實現這個目的,如果你使用的系統是Windows。你可以用一個Standalone版本的遊戲,通過Visual Studio 圖像除錯工具, Intel GPA, RenderDoc, NVIDIA NSight或 AMD GPU PerfStudio這些工具 ,然後擷取其中一張Frame,並從Draw call或是其他圖形事件來看出發生哪些事情。

上面這種方式很有用,因為這些工具可以提供非常底層的詳細資訊,但流程也比較復雜,你得需要建立一個Windows 專案並執行這些工具。所以我們一直在想:是否可以做一個簡單易用的工具呢?

因此,Unity5.0裡我們開發了Frame除錯工具。

進入Frame除錯工具

   執行Unity,在介面功能表中選擇Frame Debugger,你就可以看到在這個Frame中繪制呼叫的列表。透過幾個步驟可以查看點上渲染了什麽。或是檢查陰影紋理、材質、deferred g-buffer以及類似的東西。

    Frame除錯工具的介面相當簡單。在右邊有一個Draw Call的樹狀結構以及其它有趣的事件,左邊則顯示細節。多數的Draw Call顯示為一個網格預覽,繪制的對象會高亮顯示。

   下圖用gif動畫表示深度貼圖的Draw Call事件

   然後,在這Frame中一個光源渲染它的陰影

   再然後,圖型開始處理後製。您可以看到光暈和光斑的效果影響,做了模糊處理放回去,接著是光暈的閃爍效果

渲染目標顯示選項

對於某些效果,你可以很方便的看到目標每個獨立的繪製通道。下圖是一個通過Unity的方向性光源陰影產生的螢幕空間緩存

或只顯示紅色通道:

顯示的顏色範圍可以從工具欄上的滑桿來調整。這個對於HDR渲染特別有用

當一次渲染到多個目標時,你可以選擇在遊戲視圖中顯示哪一個。下面分別展示的是在5.0中延遲陰影模式中漫反射,鏡面反射,常規以及輻射/光源緩存。


實施注意事項
Frame除錯工具的執行流程就好像是一個可愛的駭客行為,實際上並沒有“Frame擷取”這個行為,我們就是在特定的Draw Call呼叫後停止渲染。所以如果你查看一個渲染了100個物體的Frame,並且你正在看第10號物體,那其實我們只是跳過其餘90個物體的渲染。如果在這個點上正好渲染到了一個紋理,那麽我們就會把它顯示在畫面上。

   這就代表把這功能做出來並不難,只需要幾天的工作量,基本功能就能完成(然後花了幾個星期循環來製作UI)。這種方式的缺點是只能在編輯模式中使用。如果你在除錯的時候渲染發生了變化(例如禁止一些物體,或者改變遊戲視圖的尺寸),那麽你會突然看到一個不同的繪制呼叫列表。

不過即使有這些限制,我們認為它還是一個檢查你遊戲中圖像效果強有力的工具。

在Unity5.0版本中,開發者就能夠使用到這工具,如果有任何使用問題和建議,歡迎反饋給我們。

祝 除錯愉快!

沒有留言:

張貼留言

著作人