Table of Contents

選擇合適的中心模式

選擇合適的中心模式對於內容製作來說至關重要。透過以下內容,您將了解如何取得和修改中心模式,以及選擇合適中心模式的建議。

開始之前

取得可用中心模式

在 session 運行時,只有當前 session 可用的中心模式會顯示在 Inspector 面板的 Center 下拉選單中。如果 session 未啟動,則所有中心模式均會顯示。

alt text

這張圖中顯示了在編輯器中使用 CameraDeviceFrameSource 時的 session 可用的中心模式。

在腳本中,可以在 session 成功組裝後透過 ARSession.AvailableCenterMode 屬性來取得當前 session 中可用的中心模式列表。

比如,下面的程式碼展示了如何判斷某個中心模式是否在當前 session 中可用:

if (Session.AvailableCenterMode.Contains(mode))
{
    // mode 在當前 session 中可用
}

修改中心模式

開啟 Inspector 面板,在 Center 下拉選單中選擇需要的中心模式。

alt text

在腳本中,可以透過 ARSession.CenterMode 屬性來修改中心模式。

比如,下面的程式碼展示了如何在可用的中心模式之間循環切換:

while (true)
{
    Session.CenterMode = (ARSession.ARCenterMode)(((int)Session.CenterMode + 1) % Enum.GetValues(typeof(ARSession.ARCenterMode)).Length);
    if (Session.AvailableCenterMode.Contains(Session.CenterMode)) { break; }
}

session 每幀更新時會判斷當前中心模式是否有效,如果有效,session 會立即嘗試使用新的中心模式。

在上面這個影片中,session 一開始使用 FirstTarget 模式,中心物體是聖誕樹(亮藍色點雲)。隨後我們手動將中心模式修改為 Camera 模式,中心物體變為攝影機(藍色錐體)。影片內容的詳細描述請參考 AR session 的中心模式

session 更新時,如果修改後的中心模式在當前 session 中無效,CenterMode 屬性會被自動修改為第一個可用的中心模式(通常是 FirstTargetSessionOrigin),並在日誌中輸出一行警告資訊:

Center mode {Value} is unavailable in this session, reset to {NewValue}.

如何選擇中心模式

與現實世界中的物體進行對齊是 AR 內容製作的核心需求,而中心模式決定了 session 以哪個物體作為參考點來計算場景中其它物體的位置和朝向。因此,選擇合適的中心模式對於內容製作來說至關重要。

通用建議

很多時候使用 FirstTargetSpecificTarget 模式,以 target 作為中心對內容製作是更友好的,這樣放在 target 下的內容參考點可以保持靜止不動,不會因為 XR Origincamera 的移動而產生不必要的影響(比如影響物理系統計算)。不過這並不絕對,具體來說:

  • 在不知道怎麼選擇時,使用預設值,即 FirstTarget 中心
    由於絕大部分 AR 功能都是有誤差的,而且運行中會不斷修正這個誤差,這就會導致看似在現實世界中相對不動的物體(比如稀疏空間地圖的 target 和 運動追蹤的 XR Origin)實際在虛擬空間中是會有相對運動的,這時採用 target 作為中心就要比採用 XR Origin 要更符合內容製作的需要。

  • 多個 target 同時被追蹤的情況
    對於多個 target 同時被追蹤的情況,同樣由於及計算誤差,即使現實世界中的物體相對是靜止的,這些 target 之間也可能存在相對運動。如何選擇中心的物體則需要根據實際需要進行判斷,通常 FirstTarget 模式是更合適的選擇。

  • 什麼時候使用 SessionOrigin 模式
    SessionOrigin 適用於只有運動追蹤在運行的場景,這時 XR Origin 是唯一的參考點。它還適用於一些特殊情況,如果頭顯廠商沒有正確實現運動追蹤的參考點,這時就必須使用 Unity 的世界中心從而強制使用 SessionOrigin 模式。

  • Camera 模式的使用場景
    Camera 模式則更適用於物理攝影機不動的場景(比如使用固定攝影鏡頭的卡片對戰類 AR),這時採用 Camera 模式會更便於內容創作。

不同 AR 功能的常用中心模式

在單獨使用部分 AR 功能時,某些中心模式會更常用一些。下面的表格列出了這些 AR 功能對應的常用中心模式:

功能 常用中心模式
Mega FirstTarget 或 SpecificTarget
運動追蹤 SessionOrigin
平面檢測 SessionOrigin
稀疏空間地圖 FirstTarget 或 SpecificTarget
稠密空間地圖 SessionOrigin
表面追蹤 FirstTarget 或 SpecificTarget
影像追蹤 FirstTarget、SpecificTarget 或 Camera
影像雲識別 FirstTarget、SpecificTarget 或 Camera
物體追蹤 FirstTarget、SpecificTarget 或 Camera

跨裝置需要考慮的問題

在開發跨裝置的 AR 應用時,需要考慮不同裝置對中心模式的支持情況。

  • 如果僅涉及手機和平板,通常不會有太大問題,如果需要使用 SessionOrigin,要確保運動追蹤可以運行。
  • 如果需要使用頭顯,則需要格外注意
    • 查閱 有效中心模式 確定將要使用的裝置都支援哪些中心模式。如果在使用第三方擴展,注意查看這些擴展使用的 OriginType
    • 使用 Rokid 裝置時,盡量不要使用 UXR。使用 XRI 可以確保大多數中心模式可用。
    • 在不支援 FirstTargetSpecificTarget 模式的頭顯上,需要注意使用 Mega 或影像追蹤等絕大部分功能內容都是做不到相對 Unity 世界座標系靜止的。

每個中心模式都能正確顯示的內容

警告

在 Unity AR 中,任何存在於 Unity 世界座標系下且未根據 session 組件調整 transform 的物體都可能無法正確顯示。

如果世界座標系下放置了一些模型,那這些模型的位置和朝向可能與現實世界中任何物體都沒有對應關係,實際運行效果可能碰巧正常,也可能看上去像是浮在空中或者到處亂動。

要保證內容在任何中心模式下都能正確顯示,正確的做法是:

  • 始終把要顯示的內容放在對應的 target 節點下,或者放在 XR Origin 節點下(如果內容需要跟隨 XR Origin 運動)
  • 或者透過手動方式對齊內容和 targetXR Origin 的位置和朝向,但需要在 ARSession.PostSessionUpdate 事件後操作
附註

這麼做並不能保證所有內容元素都工作正常,因為 Unity 的某些功能只能在世界座標系下工作(比如物理系統),選擇合適的中心模式仍然是重要的。

相關主題