Mesh 的效能指導方針
效能
本文是瞭解在 Mesh 中撰寫內容時效能重要性的簡介。 幀速率是將效能合理化最簡單的單位。 通常幀速率是以「每秒畫面格數」(fps)測量,或您的應用程式每秒可以轉譯影像的次數。 如果您的內容未以最佳幀速率執行,則用戶體驗可能會大幅降低。 為了協助您追蹤並達到品質框架速率,Mesh 提供各種工具和建議。
下表列出每個平臺Mesh支援的目標幀速率。
電腦 | Android (Quest) |
---|---|
監視重新整理率 (最低 30fps) | 72fps |
簡單與複雜的場景
如同所有 3D 開發,在 Mesh 中,視覺逼真度與效能之間有取捨。 視執行 Mesh 的電腦而定,您的使用者可能會遇到效能降低,尤其是在場景很複雜時。
想想像財務預算一樣的表現。 如果您有 $100 美元的花費,你不能花 $60 美元來轉譯複雜的環境、40 美元的模擬進階物理,以及 20 美元的視覺腳本 - 您最終會花在預算上。 身為開發人員,您必須在視覺逼真度、互動複雜度、用戶數目和其他系統之間進行取捨。 Mesh 小組已產生效能閾值清單,而非規則,而是開發指南。
程式代碼剖析方法
Mesh 中的撰寫環境通常涉及三個步驟。
- 在 Unity 中撰寫內容
- 上傳至 Microsoft Mesh
- 在 Mesh 應用程式中執行內容
在步驟一中,我們建議您使用 Mesh 工具組套件中找到的內容 效能分析器 (CPA) 和效能分析工具,這是任何用來產生 Mesh 環境之 Unity 專案的必要專案。 在步驟 2 期間,CPA 工具會自動執行。 最後,在第三個步驟最後,分析應該透過Mesh的內建效能分析工具進行。
用於分析效能的工具
內容 效能分析器(CPA)
建議您使用 Content 效能分析器 (CPA) 將 Mesh 體驗的效能最大化。 CPA 工具可以在撰寫時以靜態方式分析您的內容。 您可以使用 CPA 來稽核三角形計數、批次、紋理記憶體使用率等等。 這可讓您在內容上傳至 Mesh 之前捕捉內容優化問題和機會。
若要執行 CPA 工具,請從功能表項選取 [網格工具組>內容] 效能分析器。
問題和建議會透過 Unity 中的編輯器視窗回報。
重要
將內容上傳至 Mesh 時,CPA 分析器的一部分會自動執行。 因為並非所有測試都可以自動執行,因此在開發程式中手動執行 CPA 是很好的選擇。
效能分析工具
效能分析工具提供簡單的視窗,可檢視所有平臺的Mesh專案的幀速率、場景複雜度和記憶體使用量。 效能分析工具可在 Mesh 應用程式和 Mesh 工具組中存取。
若要在 Mesh 應用程式中檢視效能分析工具,請開啟 [設定] 面板,然後選取 [適用於開發人員>效能分析工具]。 效能分析工具會出現在視窗的頂端中心。
使用效能分析工具時,尋找 遺漏的畫面格,其顯示為紅色方塊,標示為 『x』。 遺漏的畫面格表示您的內容未達到 Mesh 的目標幀速率,而且可能需要優化工作。 場景複雜度和記憶體使用量會顯示在遺漏的畫面指標下。 這些數位可能表示為何您的內容不符合 Mesh 的目標幀速率。
當計量不符合 Mesh 的建議效能閾值時,效能分析工具上的文字會變成紅色。 效能臨界值的詳細數據列在後續章節中。
重要
批次無法在 Mesh 應用程式中顯示。 它們只能在 Unity 編輯器中使用。
您也應該留意底部記憶體列,以確保記憶體使用量不會快速變更或接近應用程式的記憶體限制。
若要在 Unity 編輯器中檢視效能分析工具,請確定您的場景中有 Mesh 模擬器設定元件 。 請確定 [ 初始畫面計數] 設定為零。 如果是一或更新版本,則播放時將無法在效能分析工具上切換。
按兩下 Unity 的 [播放 ] 按鈕以進入播放模式,透過 [v] 鍵切換 [效能分析工具]。 效能分析工具會出現在遊戲視窗的頂端中心。
重要
在 Unity 編輯器中檢視效能分析工具時,您會看到更多資訊,例如批次計數和特定子系統執行所花費的毫秒時間。 請注意,這些計量是效能的相對近似值,而且最終分析應該發生在 Mesh 應用程式中。
如果您好奇效能分析工具底部的毫秒時間測量,您可以在 [效能閾值] 區段中找到該資訊。
其他工具
CPA 和效能分析工具都是針對 Mesh 自定義建置,但 Unity 中也有一些用於分析內容的絕佳工具:
- Unity 的分析工具
- Unity 的框架調試程式
- RenderDoc (重要:RenderDoc 只能從 Unity 編輯器執行擷取。網格應用程式組建將無法運作)。
效能閾值
優化效能可能是一種平衡動作,視您正在開發的案例和您想要達成的體驗而定。 在 Mesh 中轉譯場景是環境內容的撰寫方式的直接後果。 以下是我們目前平台的轉譯建議。
計算機轉譯閾值
Polycount | 批次 | 後處理 |
---|---|---|
<~500k 三角形 | ~200 個批次 | 已停用 |
紋理 | Lightmaps | Skybox 解析度 |
< ~160 MB | < ~80 MB | 2048x4096 |
Android (Quest) 轉譯閾值
Polycount | 批次 | 後處理 |
---|---|---|
<~80k 三角形 | ~50 個批次 | 已停用 |
紋理 | Lightmaps | Skybox 解析度 |
< ~16 MB | < ~20 MB | 1024x2048 |
您可能會注意到上述資料表中未指定著色器限制。 因為 Mesh 使用 Unity 的通用轉譯管線 (URP),我們建議您使用更便宜的現成 URP 著色器(例如通用轉譯管線/烤 Lit 或通用轉譯管線/簡單 Lit)。 我們也瞭解自定義著色器的值。 一般而言,我們會嘗試讓大部分環境的自定義著色器保持在低於閾值:
頂點數學 | 片段數學 | 紋理 |
---|---|---|
< 30 個作業 | < 120 個作業 | < 2 個查閱 |
重要
計算著色器作業是計算著色器效能的不完善計量,著色器開發人員也應該分析其在 Mesh 中執行的著色器,以確認其執行效能。
如果您好奇 URP 的轉譯管線如何針對 Mesh 應用程式設定,您可以在專案的 \Library\PackageCache\com.microsoft.mesh.toolkit\mesh.toolkit.uploader\Assets\URP 目錄中檢查平臺特定轉譯器。
腳本臨界值
Mesh 可讓您透過可視化腳本、雲端腳本、Mesh 物理和/或 WebSlate 來建立互動式內容。 在 Unity 編輯器中檢視效能分析工具時,特定子系統執行所花費的毫秒 (ms) 時間會顯示在分析工具底部。 當文字從綠色變更為紅色時,表示子系統可能超過預算。 下表提供有關這些預算的詳細資訊。
子系統名稱 | 最大框架預算 | 描述 |
---|---|---|
行為 | N/A | 更新所有本機 MonoBehaviour 腳本所花費的毫秒時間 (C# 和 Visual) |
轉譯 | 25% | 場景 CPU 轉譯的毫秒時間 |
WebSlate | N/A | 更新和轉譯場景中任何 WebSlate 的毫秒時間 |
Phys Sim | 15% | 逐步執行 PhysX 仿真的毫秒時間 |
Phys 同步處理 | 15% | 同步處理所有物理主體的毫秒時間 |
Phys Effx | 10% | 更新定製物理行為的毫秒時間 |
VS 使用者 | 15% | 放置於場景中的Visual Script 圖形所花費的毫秒時間 |
VS Env | 10% | 更新 Visual Script 基礎結構所花費的毫秒時間 |
VS Net | 10% | 同步處理 Visual Script 網路狀態所花費的毫秒時間 |
以上所列的「最大框架百分比」值是根據一般內容的建議。 身為開發人員,您必須平衡這些系統,以確保您的框架可在分配的時間更新。
效能和優化資源
圖形效能基本概念 https://docs.unity3d.com/Manual/OptimizingGraphicsPerformance.html
通用轉譯管線 (URP) https://docs.unity3d.com/Packages/com.unity.render-pipelines.universal@14.0/manual/index.html
SRP Batcher https://docs.unity3d.com/Manual/SRPBatcher.html
單一傳遞實例轉譯和自定義著色器 https://docs.unity3d.com/Manual/SinglePassInstancing.html