2014年11月3日 星期一

介紹Unity 5.0中的幀除錯器(Frame Debugger)

作者:ARAS PRANCKEVIČIUS
原文:http://blogs.unity3d.com/2014/07/29/frame-debugger-in-unity-5-0/



當你看到遊戲裡面有破圖時,是否曾今疑慮:“如何能一步一步地看到畫面如何產生的呢?“

如果在Windows的話,你可以透過一些擴展工具來做。輸出一個Winows版本的遊戲,透過Visual Studio 圖像除錯器, Intel GPA, RenderDoc, NVIDIA NSight或者 AMD GPU PerfStudio執行 ,然後擷取其中一幀的著色,並逐步觀察繪製呼叫和著色事件中看看到底發生了哪些事。
上面這些方式固然很好,因為這些工具提供非常底層的詳細資訊,但是也複雜,而且你得創建一個Windows 版本的遊戲並且執行那些工具。

所以我們一直在想:"是否可以在Unity中做個簡單易用的工具來完成這個目的呢?",因此我們在Unity5.0中開發了幀除錯器來解決這個問題。

進入幀除錯器(Enter Frame Debugger)


執行Unity,在Window功能表中找到Frame Debugger,你就可以看到整個Frame裡面draw call產生的列表。可以一步一步查看哪個點上著色了什麼。檢查陰影貼圖、著色材質、延遲G暫存或類似的東西。

幀除錯器的介面相當的簡單。在右邊會有一個draw call的樹狀結構以及一些挺有趣的事件,在左邊會顯示事件的細節。在Hierarchy預覽視窗中也會提醒你那些網格使用最多的draw call。

下圖是用gif動畫顯示一步一步查閱深度貼圖建立所耗用的draw call:


然後是光源處理的陰影貼圖:


然後,圖像的後期處理效果開始。你可以從小圖看到泛光和眩光的效果,模糊然後恢復。隨後是一個紋理的閃光:



著色目標顯示選項(Render target display options)

對於某些效果,如果能夠看到著色目標單獨的通道會很方便。這裡是一個透過Unity方向性光源陰影產生的螢幕空間暫存:

或只顯示紅色通道:


顯示的顏色範圍可以用工具來調整。這對HDR著色特別有用:




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














執行注意事項(Implementation notes)

目前的幀除錯器的運作原理可說是一個玩具(我們還不確定它是否能解決開發者問題),因為沒有幀擷取(Frame capture)功能,所以通常我們是drew call到達一定程度之後停止著色。所以如果你的畫面中有100個物件,但你只想看10個物件的著色效能,那我們只是跳過其他90個物體的著色。如果在這個點上正好著色到了一個貼圖,那我們就會把它顯示在螢幕上。

這代表運作原理很簡單,我們花了幾天的工作天完成了基本雛形(然後花了幾個星期來調整介面)。這方法的缺點是只能在編輯器中執行。所以如果你在用這個工具的改變了著色設定(例如禁止物體,或者改變遊戲視圖的尺寸),那麼你會突然看到一個不同的drew call列表。

雖然有這些限制,但我們認為它是一個追蹤你遊戲中圖像效能強有力的工具。

那麼,祝使用幀除錯器愉快喔!

沒有留言:

張貼留言

著作人