共用方式為


Mesh 的效能指導方針

效能

本文是瞭解在 Mesh 中撰寫內容時效能重要性的簡介。 幀速率是將效能合理化最簡單的單位。 通常幀速率是以「每秒畫面格數」(fps)測量,或您的應用程式每秒可以轉譯影像的次數。 如果您的內容未以最佳幀速率執行,則用戶體驗可能會大幅降低。 為了協助您追蹤並達到品質框架速率,Mesh 提供各種工具和建議。

下表列出每個平臺Mesh支援的目標幀速率。

電腦 Android (Quest)
監視重新整理率 (最低 30fps) 72fps

簡單與複雜的場景

如同所有 3D 開發,在 Mesh 中,視覺逼真度與效能之間有取捨。 視執行 Mesh 的電腦而定,您的使用者可能會遇到效能降低,尤其是在場景很複雜時。

想想像財務預算一樣的表現。 如果您有 $100 美元的花費,你不能花 $60 美元來轉譯複雜的環境、40 美元的模擬進階物理,以及 20 美元的視覺腳本 - 您最終會花在預算上。 身為開發人員,您必須在視覺逼真度、互動複雜度、用戶數目和其他系統之間進行取捨。 Mesh 小組已產生效能閾值清單,而非規則,而是開發指南。

程式代碼剖析方法

Mesh 中的撰寫環境通常涉及三個步驟。

  1. 在 Unity 中撰寫內容
  2. 上傳至 Microsoft Mesh
  3. 在 Mesh 應用程式中執行內容

在步驟一中,我們建議您使用 Mesh 工具組套件中找到的內容 效能分析器 (CPA)效能分析工具,這是任何用來產生 Mesh 環境之 Unity 專案的必要專案。 在步驟 2 期間,CPA 工具會自動執行。 最後,在第三個步驟最後,分析應該透過Mesh的內建效能分析工具進行。

用於分析效能的工具

內容 效能分析器(CPA)

建議您使用 Content 效能分析器 (CPA) 將 Mesh 體驗的效能最大化。 CPA 工具可以在撰寫時以靜態方式分析您的內容。 您可以使用 CPA 來稽核三角形計數、批次、紋理記憶體使用率等等。 這可讓您在內容上傳至 Mesh 之前捕捉內容優化問題和機會。

若要執行 CPA 工具,請從功能表項選取 [網格工具組>內容] 效能分析器。

透過 Unity 功能表存取內容 效能分析器

問題和建議會透過 Unity 中的編輯器視窗回報。

[內容 效能分析器] 視窗的螢幕快照

重要

將內容上傳至 Mesh 時,CPA 分析器的一部分會自動執行。 因為並非所有測試都可以自動執行,因此在開發程式中手動執行 CPA 是很好的選擇。

效能分析工具

效能分析工具提供簡單的視窗,可檢視所有平臺的Mesh專案的幀速率、場景複雜度和記憶體使用量。 效能分析工具可在 Mesh 應用程式和 Mesh 工具組中存取。

隔離效能分析工具的螢幕快照

若要在 Mesh 應用程式中檢視效能分析工具,請開啟 [設定] 面板,然後選取 [適用於開發人員>效能分析工具]。 效能分析工具會出現在視窗的頂端中心。

Mesh 中效能分析工具的螢幕快照

使用效能分析工具時,尋找 遺漏的畫面格,其顯示為紅色方塊,標示為 『x』。 遺漏的畫面格表示您的內容未達到 Mesh 的目標幀速率,而且可能需要優化工作。 場景複雜度和記憶體使用量會顯示在遺漏的畫面指標下。 這些數位可能表示為何您的內容不符合 Mesh 的目標幀速率。

效能分析工具計量的圖表

當計量不符合 Mesh 的建議效能閾值時,效能分析工具上的文字會變成紅色。 效能臨界值的詳細數據列在後續章節中。

重要

批次無法在 Mesh 應用程式中顯示。 它們只能在 Unity 編輯器中使用。

您也應該留意底部記憶體列,以確保記憶體使用量不會快速變更或接近應用程式的記憶體限制。

若要在 Unity 編輯器中檢視效能分析工具,請確定您的場景中有 Mesh 模擬器設定元件 。 請確定 [ 初始畫面計數] 設定為零。 如果是一或更新版本,則播放時將無法在效能分析工具上切換。

Mesh 模擬器設定對話框的螢幕快照

按兩下 Unity 的 [播放 ] 按鈕以進入播放模式,透過 [v] 鍵切換 [效能分析工具]。 效能分析工具會出現在遊戲視窗的頂端中心。

Unity 編輯器中效能分析工具的螢幕快照

重要

在 Unity 編輯器中檢視效能分析工具時,您會看到更多資訊,例如批次計數和特定子系統執行所花費的毫秒時間。 請注意,這些計量是效能的相對近似值,而且最終分析應該發生在 Mesh 應用程式中。

如果您好奇效能分析工具底部的毫秒時間測量,您可以在 [效能閾值] 區段中找到該資訊

其他工具

CPA 和效能分析工具都是針對 Mesh 自定義建置,但 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