每日最新頭條.有趣資訊

研發實戰:如何通過RenderDoc優化Quest應用

查看引用/信息源請點擊:映維網

用RenderDoc來優化Quest應用

映維網 2019年12月11日)Oculus開發者關係團隊的其中一個主要任務是幫助開發者優化遊戲,令其能夠有效地支持所有的Oculus硬體。日前,所述團隊中的開發者關係工程師克里斯蒂亞諾·費雷拉(Cristiano Ferreira)曾為數款Quest首發內容提供了幫助。日前,他撰文介紹了如何通過RenderDoc來優化你的Quest應用,包括如何輕鬆將其集成至你的工作流程,相關的基礎知識,以及允許你在未來利用這項有用工具的技巧經驗。下面是映維網的具體整理:

RenderDoc是一項用於窺視應用渲染機制幕後情況,從而確定事情是否按預期進行的優秀工具。對於商用遊戲引擎,實際的渲染代碼要麽是隱藏,要麽難以通過於各種內置子系統來解密。如果能夠看到引擎是如何確定場景在單幀中的渲染方式,何樂而不為呢?歡迎使用RenderDoc。

當你通過RenderDoc捕獲一幀時,它會按照幀的發出順序記錄所有圖形API命令和資源,然後再播放它們,這樣你就可以判斷事情是否按照預期進行。RenderDoc同時可以幫助你大致了解GPU執行繪製需要多少時間和繪製邏輯組(由調試標記表示)。由於基於圖塊的渲染的性質,數字本身並非100%精確,但彼此之間足夠準確。換句話說,你看到的不是“這個繪製調用花費了1.34毫秒”,而是能夠查看所有繪製,並發現覆蓋類似像素量的1.34毫秒繪製要久於0.2毫秒繪製,然後再確定用於生成所述繪製的asset和管道狀態是否足夠優化。

關於RenderDoc的另一個關鍵要點是,它完全免費,並且開源。你應始終使用最新的公共穩定版,從而確保工具納入了所有的新功能,錯誤修複和性能優化。具體請訪問官方的RenderDoc下載頁面,並選擇適用於你所選擇平台的副本。

注:本文將隨時間推移而動態地增刪補充。

1. 開始使用RenderDoc

我們先來快速過一遍首次打開RenderDoc後的基本窗口項目。在棋盤格主窗口的上方,你會看到一系列的標簽。以下是每個項目的簡要概述:

Timeline(時間線):能夠直觀地顯示不同階段(不透明,透明,天空盒,early-z,陰影通道等)所花費的時間。它同時會顯示渲染目標的讀/寫,所以你可以快速查看生成幀的方式是否會產生成本昂貴的解析成本。

Event Browser(實踐瀏覽器):列出幀的所有API調用,並且用調試標記標簽分開邏輯繪製組。在這裡選擇繪製會根據情景填充/更新所有其他選項卡(紋理查看器和網格查看器等).RenderDoc tabbed functionality

Texture Viewer(紋理查看器):顯示所選繪製的輸入紋理和輸出紋理(RT)。單擊單個紋理可以查看其格式/分辨率/可用的MIPS/MSAA級別等。

Pipeline State(管道狀態):選擇任何管道狀態以查看綁定資源的所有屬性和材質屬性(透明度/混合狀態和紋理/采樣器等)。

Mesh Viewer(網格查看器):在本地空間查看輸入網格,從而確定正在進行繪製的是哪個繪製。你同時可以看到頂點數目(對於驗證LOD系統非常有用),螢幕空間中的後投影視圖和頂點屬性等。

Launch Application(啟動應用):選擇要運行並附加到RenderDoc host的應用程序。如果你選擇的情景是“Local”,則可以在計算機執行應用程序。如果選擇的情景是“Remote:Oculus Quest”,你將獲得設備可用包的列表。

Resource Inspector(資源檢查器):顯示渲染目標,臨時緩衝區,紋理,著色器和網格等所有GPU相關資源的列表。

Statistics(統計數據):顯示你的繪製次數和GPU記憶體使用情況等。

2. 將RenderDoc附接到Oculus Quest

在命令提示符中運行adb devices命令時,請確保其枚舉。第一次通過USB數據線連接Oculus Quest時,頭顯內會提示你允許從主機訪問。為了確保穩定性,我建議使用USB 2.0 A到USB-C或專用的Oculus Link數據線。如果你看到設備,則設備應該在RenderDoc窗口左下角的情景菜單中可用。從列表中選擇Oculus Quest,等待幾秒鐘,系統將會RenderDoc捕獲層APK傳輸到設備,並讓客戶端連接到遠程情景的伺服器。

3. 啟動並將RenderDoc附接到你的遊戲/應用

要啟動應用程序,請轉到正確的選項卡“Launch Application”,然後單擊“Executable Path”旁邊的小圖標。這將打開一個文件瀏覽器,而你在其中可以看到可執行文件,或者如果是Oculus Quest,它將顯示設備所有可用的APK。如果你在本地(PC),你同時可以設置工作目錄(如果它與默認目錄不同)。

單擊右側的“Launch”按鈕以啟動附接RenderDoc的應用程序。(注意:需要是項目的Development Build才能進行附加)。

4. 捕獲一幀

要進行幀捕獲,只需點擊“Capture Frame(s) Immediately”按鈕。然後,RenderDoc將攔截針對圖形情景的所有調用和asset等,並將它們保存在.rdc文件中。提示,如果出現問題,請遮住面罩附近的接近傳感器。有時,我會貼上一條膠帶,這樣我在進行分析和優化時可以繼續使用設備。如果在接近傳感器檢測到頭顯處於關閉狀態時進行幀捕獲,這將會導致生成空幀。你生成的文件將顯示在“Captures collecte”部分。如果退出RenderDoc,我總是習慣將捕獲的內容保存到桌面,這樣可以方便以後重新加載。如果是使用Oculus Quest時捕獲,則.rdc文件需要傳輸到主機PC,這可能需要更長的時間。

注意:如果你正在為Oculus Quest開發內容,並且在捕獲時應用程序崩潰,這通常意味著系統記憶體已用完(可以查看RenderDoc日誌,從而確保問題所在)。當在設備上進行RenderDoc捕獲,必須保證足夠的可用記憶體來支持應用的記憶體需求,renderdoc捕獲層的記憶體需求,以及保存生成的.rdc文件所需的記憶體。下面是減少遊戲記憶體佔用量以進行捕獲的技巧:

將版本設置成最低的紋理分辨率:Unity提供一個全局選項,可使八分之一紋理大小並啟用紋理流式傳輸

在優化階段,移除場景的額外加載以代替完全卸載和完全加載。

盡可能移除所有音頻。

5. 調查你的捕獲

獲取概述:我通常會首先打開“Statistics”選項卡以查看我發出了多少繪製調用。這同時會告訴我正在使用的GPU記憶體量,並且提供一個直觀的細分。

可視化繪製/時間:接下來,打開“Texture Viewer”選項卡,打開“Overlay”菜單中的“Highlight Draw Call”選項,單擊“Gather Timings (clock)”按鈕,最後在“Output”紋理部分中選擇“Render Target”。這樣做會為我提供每個繪製調用的相對定時,並幫助我找出花費時間最長的繪製調用。我可以在“Event Browser”中單擊任何調用,並在“Render Target”查看器中突出顯示。

優化:這時,我將尋找具有最高定時的繪製,並嘗試確定原因。著色器過於複雜嗎?輸入資源屬性設置不正確嗎?我的渲染順序異常嗎?

6. 總結

我們已經介紹了將RenderDoc附加到Oculus Quest遊戲或應用程序的基本知識,後面我們就以繼續深入探索。我們很快將發布後續的博文,從而幫助你進一步了解硬體和軟體堆棧,並為應用程序提供最佳的渲染方法和設置。如果你想挖掘更多的RenderDoc資源,請務必查看官方的RenderDoc網站和文檔。你可能同時會發現其他方便的入門資源,包括簡介,快速入門指南和Android使用指南。

獲得更多的PTT最新消息
按讚加入粉絲團