產品最新消息

使用 Unity 最佳化 Android XR 效能

閱讀時間:6 分鐘
查看 Luke Hopkins 的個人資料
Luke Hopkins Android 開發人員關係工程師

Samsung Galaxy XR 登場,採用 Android XR 技術! Android XR 焦點週期間,我們提供網誌文章、影片、程式碼範例等資源,協助您瞭解、建構及準備 Android XR 應用程式。這篇網誌文章是焦點週的內容之一。  

本週,Samsung 推出與 Google 和 Qualcomm 合作打造的 Galaxy XR。現在是開發人員大展身手的好時機,我們希望協助你充分發揮 XR 應用程式的效能。

在非 XR 裝置上,遊戲和應用程式效能不佳可能會讓使用者感到不悅,但在 XR 領域,效能不只是可有可無的選項,更是應用程式成功的關鍵。如果 XR 應用程式未達到目標影格率,可能會導致更嚴重的問題,例如動暈症。

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

我們的目標如下:

  • 最低要求: 72 fps (Play 品質指南規定)
  • 選用: 90 fps,每影格預算 11 毫秒

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

XR 專屬效能功能

首先,我們將介紹兩項 XR 專屬效能功能:凹形算繪和 Vulkan 向下取樣。

凹形算繪

凹窩渲染是一種最佳化技術,有兩種模式。第一種是靜態模式,會以較高解析度算繪螢幕中央,並隨著視線向外移動,逐漸降低解析度。

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

中心點渲染可大幅減少 GPU 工作負載,同時不影響使用者感受到的影像品質。中心點渲染的優點在於,使用者不會注意到周邊視覺的品質降低,但 GPU 效能會明顯提升。

假設您正在打造博物館體驗,其中包含精緻的 3D 文物。如果沒有凹形渲染,您就很難維持 90 FPS 的幀率,同時渲染「視野」中的所有內容。有了凹形渲染,您就可以在使用者觀看的位置保留高多邊形細節,但背景環境會以較低的品質渲染。使用者不會注意到差異,但您將有空間為場景加入更多細節。

Vulkan 向下取樣

Vulkan 子取樣是凹窩算繪的最佳幫手。雖然凹窩式轉譯會決定要以不同品質等級轉譯的內容,但 Vulkan 子取樣會使用片段密度圖,處理如何有效轉譯不同品質等級。

搭配使用凹形算繪和 Vulkan 子取樣,可將效能額外提升 0.5 毫秒。此外,這項技術還能消除周邊視野中的鋸齒邊緣,讓整體畫面看起來更清晰。

舉例來說,在飛行模擬模式遊戲中,使用者會專注於儀表和控制項,因此結合凹形算繪和 Vulkan 向下取樣,可讓詳細控制項清晰呈現,但周邊駕駛艙結構會使用較少資源。這額外的 0.5 毫秒看似微不足道,但卻能決定是否有空間加入額外的互動元素,或是在激烈時刻是否會掉幀。

複雜場景的 GPU 功能

除了凹窩算繪和 Vulkan 向下取樣外,還有一些 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

Performance Metrics API 可即時監控應用程式的記憶體用量、CPU 效能和 GPU 效能。這項工具提供來自合成器和執行階段層的完整資料,讓您確切瞭解應用程式的運作情形。

在進行變更前建立基準、套用最佳化、評估影響,然後反覆進行。這種做法以資料為依據,因此您知道成效確實有所提升,而非憑空猜測。

啟用凹窩渲染前,GPU 影格時間可能是 13 毫秒,超過 11 毫秒的預算。啟用凹窩渲染並再次測量,希望您會看到時間降至 9 毫秒。這樣一來,您就多了 4 毫秒的餘裕,可以為場景增添更多細節、提升其他部分的視覺品質,或確保各種內容都能更流暢地呈現。

如果沒有這些指標,就只能盲目進行最佳化。Performance Metrics API 可提供實際成效指標,協助您瞭解哪些做法對特定用途有幫助。

影格偵錯工具

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

想確認 SRP 批次處理器是否正常運作嗎?在 Frame Debugger 中尋找「RenderLoopNewBatcher」項目。如何確認 GPU 常駐繪圖器是否正確批次處理?找出「Hybrid Batch Group」項目。這些視覺確認有助於瞭解最佳化設定是否確實生效。

逐步執行場景的前 50 個繪製呼叫。如果看到類似的物件個別繪製,而不是批次繪製,表示例項化或批次處理無法正常運作。Frame Debugger 可立即顯示這些問題,方便您解決。

其他最佳化

除了上述最佳化措施外,我們的完整效能指南也涵蓋其他最佳化措施。以下是重點摘要:

  • URP 設定:停用行動 XR 的 HDR 和後製處理。與行動硬體的效能成本相比,這些功能對視覺效果的影響極小,因此您可以在幾乎察覺不到視覺差異的情況下,獲得可衡量的效能提升。
  • SRP 批次處理器:如果場景中有多個材質使用相同的著色器變體,這項功能可減少 CPU 負擔。盡量減少繪製呼叫之間的算繪狀態變更,可大幅縮短算繪所需的 CPU 作業時間。
  • 螢幕刷新率:根據場景複雜度,在 72 fps 和 90 fps 之間動態調整。在複雜場景中降低影格率,維持穩定性;在簡單場景中提高影格率,提供極致流暢的互動體驗。
  • 深度/不透明紋理:除非著色器效果特別需要,否則請停用這些紋理。這會導致不必要的 GPU 複製作業,浪費效能,且對大多數應用程式沒有好處。
  • URP 轉譯比例: 這項設定可讓您以較低解析度轉譯,提升效能,或放大轉譯,提升視覺品質。

如需上述及其他最佳化作業的逐步說明,請參閱完整的 Android XR Unity 效能指南。

結論

XR 應用程式的效能不只是技術指標,這會決定使用者是感到舒適、投入,還是感到不適或不舒服。本文介紹的最佳化做法,是您在最新 XR 裝置上達成關鍵影格速率目標的工具。

以下是您的路線圖:

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

持續評估和調整至關重要。並非每項最佳化措施都能為所有專案帶來相同效益,因此請使用 Performance Metrics API,清楚瞭解哪些措施確實有助於您的特定用途。

後續步驟:拓展技能

想深入探索更多內容嗎?歡迎參考下列資源:

  • Android XR 的 Unity 效能指南:這裡涵蓋的所有功能,都有完整的逐步導入操作說明。
  • 開始使用 Unity 和 Android XR:設定開發環境並 開始建構。
  • Android XR 開發人員說明文件:所有 Android XR 功能的完整指南
作者:
繼續閱讀