產品新訊

使用 Unity 最佳化 Android XR 效能

閱讀時間:6 分鐘
Luke Hopkins
Android 開發人員關係工程師

Samsung Galaxy XR 登場,搭載 Android XR!這篇網誌文章是 Android XR Spotlight Week 的一部分,我們將提供網誌文章、影片和範例程式碼等資源,協助您學習、建構及準備 Android XR 應用程式。  

本週,Samsung 推出 Galaxy XR,這款裝置是與 Google 和 Qualcomm 合作打造而成。開發人員即將迎來令人振奮的時刻,我們希望協助您充分發揮 XR 應用程式的效能。

在非 XR 裝置上,遊戲和應用程式效能不佳可能會讓使用者感到沮喪,但在 XR 世界中,效能不僅是選擇,更是應用程式成功的基礎。如果 XR 應用程式未達到目標影格率,可能會導致更嚴重的問題,例如動暈症。

本指南將逐步說明 Android XR 開發作業中,您必須瞭解的重要效能最佳化做法。您將瞭解哪些功能可大幅提升效能、使用時機,以及這些功能如何相互搭配,協助您達到目標影格率。

我們的目標如下:

  • 最低要求: 72 fps (播放品質指南的一部分)
  • 選用: 每影格 11 毫秒預算,90 FPS

如要進一步瞭解維持高影格率的重要性,請參閱效能指南。   

延展實境專屬效能功能

首先,我們將介紹兩項 XR 專屬的效能功能:凹凸透鏡成像和 Vulkan 子取樣。

凹凸透鏡算繪

凹凸透鏡式算繪是一種最佳化技術,提供兩種模式。第一種是靜態模式,會以較高解析度算繪螢幕中央,並隨著視線越往外移,逐步降低解析度。

第二種是眼球追蹤模式,可完整呈現你注視的區域,同時降低周邊區域的顯示品質。這項技術基本上是模擬人類的視覺運作方式,也就是只會看到我們專注區域的精細細節。

凹凸透鏡轉譯技術可大幅減少 GPU 工作負載,同時不犧牲使用者感受到的影像品質。凹陷區域算繪的優點在於,使用者不會注意到周邊視野的畫質降低,但 GPU 肯定會注意到效能提升。

假設您要打造博物館體驗,展示精緻的 3D 文物。如果沒有凹凸感應技術,您會難以維持 90 FPS,因為必須在「視野」中算繪所有內容。有了凹凸感應技術,您就能在使用者注視的位置保留高多邊形細節,但背景環境會以較低的品質算繪。使用者不會察覺差異,但您將有空間在場景中加入更多細節。

Vulkan 向下取樣

Vulkan 子取樣是凹凸面算繪的最佳搭檔。凹凸成像決定要以不同品質等級算繪的內容,而 Vulkan 子取樣則會使用片段密度地圖,處理如何有效率地算繪不同品質等級的內容

搭配凹凸透鏡算繪功能使用時,Vulkan 子取樣功能可額外提升 0.5 毫秒的效能。還能修飾周邊視野中的鋸齒狀邊緣,讓整體影像看起來更乾淨。

舉例來說,在飛行模擬模式遊戲中,使用者會專注於儀表和控制項,因此結合凹凸透鏡算繪和 Vulkan 向下取樣功能,可讓詳細的控制項清楚呈現,但周邊駕駛艙結構使用的資源較少。額外 0.5 毫秒聽起來不多,但這足以容納額外的互動元素,或避免在激烈時刻掉格。

複雜場景的 GPU 功能

除了 Foveated Rendering 和 Vulkan Subsampling,還有一些 GPU 功能可透過智慧例項化和剔除,減少不必要的負擔。對於幾何圖形重複或遮蔽嚴重的情況,特別有效。

GPU 常駐繪圖器

GPU Resident Drawer 會自動使用 GPU 執行個體化,減少繪製呼叫並釋放 CPU 處理時間。因此,GPU 會將類似的物件分批處理,而不是由 CPU 個別告知 GPU 每個物件。

這項功能最適合用於有重複網格的大型場景,例如森林中的樹木、辦公大樓中的家具,或散布在環境中的道具。

想像一下,您要使用相同的基礎網格,在森林場景中繪製 200 棵樹。如果沒有 GPU Resident Drawer,您會有 200 個繪製呼叫佔用 GPU,因此 CPU 會釋出。啟用這項功能後,GPU 會智慧地例項化這些樹狀結構,將繪圖呼叫次數減少至 5 到 10 次。這可大幅節省 GPU 資源,讓您將資源投入遊戲邏輯或物理計算。

GPU 遮蔽剔除

GPU 遮蔽剔除會使用 GPU (而非 CPU) 識別並略過算繪隱藏物件。系統會自動偵測其他物件後方遮蔽 (隱藏) 的內容,因此不會將 GPU 資源浪費在使用者看不到的內容上。

在多個房間的室內空間、密集環境或建築場景中,牆壁、地板和物體自然會阻擋視線,這項功能特別實用。

舉例來說,假設您要打造多室住家體驗,當使用者在客廳時,為何要浪費 GPU 週期,算繪完全隱藏在牆壁後方的廚房?GPU 遮蔽剔除功能會自動略過算繪隱藏物件,讓您有更多效能預算可運用在實際可見的物件上。

監控成效

光是使用這些功能還不夠,您也需要評估最佳化作業,才能量化其影響並確認變更確實有效。

Performance Metrics API

效能指標 API 可即時監控應用程式的記憶體用量、CPU 效能和 GPU 效能。這項工具提供來自合成器和執行階段層的完整資料,方便您確切掌握應用程式的狀況。

先建立基準,再進行變更、套用最佳化措施、評估影響,然後重複執行。這種做法以資料為依據,因此您知道自己確實提升了成效,而不是在猜測。

啟用凹凸透鏡成像技術前,GPU 影格時間可能為 13 毫秒,超過 11 毫秒的預算。啟用凹凸透鏡成像技術,再次測量,希望您會看到延遲時間降至 9 毫秒。這表示您多了 4 毫秒的空間,可為場景新增更多細節、提升其他地方的影像品質,或確保更多內容都能順暢播放。

如果沒有這些指標,您就只能盲目進行最佳化。Performance Metrics API 會提供實際資料,讓您瞭解哪些因素確實有助於特定用途。

Frame Debugger

影格偵錯工具是 Unity 的內建工具,可協助您逐一瞭解場景的算繪方式。這項工具會顯示繪製呼叫的順序,並讓您逐步檢查,確認最佳化作業是否正常運作。

想確認 SRP Batcher 是否正常運作嗎?在 Frame Debugger 中尋找「RenderLoopNewBatcher」項目。檢查 GPU Resident Drawer 是否正確批次處理?尋找「Hybrid Batch Group」項目。這些視覺化確認資訊有助於瞭解最佳化設定是否實際生效。

逐步執行場景的前 50 個繪圖呼叫。如果看到類似物件個別繪製,而非成批繪製,表示例項化或批次處理功能無法正常運作。影格偵錯工具會立即顯示這些問題,方便您解決。

其他最佳化

除了上述最佳化做法,完整版效能指南也涵蓋其他最佳化做法。以下為您簡單說明這項功能:

  • URP 設定:停用行動 XR 的 HDR 和後製處理。與行動裝置硬體上的效能成本相比,這些功能對視覺效果的影響極小,因此您可獲得可觀的效能提升,視覺差異卻幾乎難以察覺。
  • SRP Batcher:減少使用相同著色器變體的場景中,許多材質造成的 CPU 負擔。盡量減少繪圖呼叫之間的算繪狀態變化,即可大幅減少 CPU 算繪時間。
  • 螢幕更新率:根據場景複雜度,在 72 fps 和 90 fps 之間動態調整。在複雜的序列期間降低影格率,以維持穩定性,然後在較簡單的時刻提高影格率,實現極為流暢的互動。
  • 深度/不透明紋理:除非需要用於著色器效果,否則請停用這些紋理。這些作業會造成不必要的 GPU 複製作業,浪費效能,但對大多數應用程式沒有好處。
  • URP 算繪比例: 這項設定可讓您以較低解析度算繪,藉此提升效能,或以較高解析度算繪,藉此提升影像品質。

如需這些最佳化做法的逐步操作說明,請參閱完整的 Android XR Unity 效能指南。

結論

XR 應用程式的效能不僅僅是技術上的勾選方塊,這項功能決定了使用者體驗是否舒適有趣,還是會讓使用者感到不適。我們介紹的最佳化做法,可做為您在最新 XR 裝置上達到重要影格率目標的工具。

您的專屬藍圖如下:

  1. 首先,請使用凹凸透鏡算繪和 Vulkan 向下取樣。這些 XR 專屬功能可立即節省大量 GPU 資源。
  2. 如果場景複雜,且幾何圖形或內部空間重複出現,請新增 GPU Resident Drawer 和遮蔽剔除。
  3. 使用成效指標 API 監控所有項目,確保變更確實有助於提升成效
  4. 探索其他 URP 最佳化做法,進一步提升效能

請務必持續評估並反覆測試。並非所有最佳化功能都能為每個專案帶來同等效益,因此請使用 Performance Metrics API 清楚瞭解哪些功能確實有助於特定用途。

後續步驟:拓展技能

想深入瞭解嗎?請查看以下實用資源:

  • Android XR Unity 效能指南 - 針對這裡涵蓋的所有功能,提供完整的逐步導入操作說明。
  • 開始使用 Unity 和 Android XR - 設定開發環境並 開始建構
  • Android XR 開發人員說明文件 - 針對所有 Android XR 功能提供的完整指南
撰寫者:

繼續閱讀