Table of Contents

Unity AR 的跟蹤目標 —— target

target 在 Unity 中表達了各種可追蹤的物體。通過以下內容,您將瞭解 Unity AR 中的追蹤物件 target 的基本概念、狀態和生命週期。

開始之前

  • 通過 ARSession 簡介瞭解 session 的基本概念、組成和工作流程。

target 是什麼

target 是指那些被 AR 功能識別和追蹤的物體在 Unity 中的代表。真實世界中這些物體可以是圖像、3D 物體、空間地圖等。通過識別和追蹤這些物體,AR 應用可以在現實世界中疊加虛擬內容,實現豐富的互動體驗。

有些 target 在現實世界中是靜止的(比如牆上的海報)。

這段影片展示了一個簡單的運行了圖像追蹤的 AR 場景。影片左邊是 Hierarchy 檢視,中間是 Scene 檢視,右邊是 Game 檢視。影片是使用模擬運行數據,在 Unity 編輯器的 Play 模式錄製的。Game 檢視的內容與使用者在現實世界中手機看到的內容是一樣的。在這段影片裡,target(ImageTarget)代表了現實世界中的名片。我們在其上方放置一個黃色球體標識便於觀察它的運動。

可以看到,target 在現實世界和場景中的位置都是固定的,而代表使用者的攝影機(藍色錐體)會根據使用者在現實世界中的移動而移動。白色錐體截取了過去一段時間內攝影機的位置和朝向軌跡。可以看到黃色球體是在 target (ImageTarget)節點下的,這也是這類場景中物體的典型組織結構。

有些 target 在現實世界中是可以移動的(比如公車上的海報)。

這段影片展示了同樣的場景,不過這次我們在現實世界中移動了 target(名片)。可以看到,target 移動後,黃色球體會跟隨名片進行運動,而 Game 檢視中該球體標識仍然貼合在名片之上。

為了便於理解,上面兩個影片中關閉了 ImageTarget 的 gizmo 的顯示,並且都採用了 SessionOrigin 中心模式,這兩段影片中 Scene 檢視中物體的運動與真實世界中相同。在實際的 AR 場景中,這種運動關係要更加複雜一些。

target 在不同中心模式下的行為

在 Unity 中,所有 AR 追蹤的中心參考點被稱為 session 中心,而 session 運行過程中決定這個中心的規則被稱為中心模式。在不同的中心模式下,target 的行為有所不同:

  • SessionOrigin 中心模式下,target 是不能隨意移動的。

    SessionOrigin 模式只能存在於有運動追蹤的場景中。

    雖然這個模式在前面的簡單場景中可以很好地展示 target 和攝影機在現實中的運動,但在實際的 AR 場景中並不常用,因為在這個模式下,session 會控制 target 的運動,且由於運動追蹤或是 AR 功能本身的計算誤差,很難保證 target 是完全固定不動的。這時內容根節點就要跟隨 target 進行運動,在 Unity 系統中會對內容行為(比如物理系統)產生一些影響。

  • FirstTargetSpecificTarget 中心模式下,如果 target 正好是被選作中心的物體,那它是可以隨意移動的。

    一般 FirstTarget 模式是比較常用的,它能保證第一個被追蹤的物體在場景中是不會被 session 控制的,如果沒有移動 target 的需求,那它就是固定不動的,無論現實場景中對應的物體是否在運動。

  • FirstTargetSpecificTarget 中心模式下,如果 target 不是被選作中心的物體,以及在 Camera 中心模式下,target 是不能隨意移動的。

    一般在同時追蹤多個物體時,即使在現實環境中這些物體是相對固定的,但是由於計算誤差的存在,同一時間也只能有一個 target 是不受 session 控制的。這時根據配置不同,其它 target 的運動與否是不受保證的,即使現實中沒有運動,場景中也可能會有微小的運動。應該充分考慮到多個物體同時追蹤時的這個行為,並合理調整內容策略。

關於中心模式以及場景內物體的運動方式可以詳細參考: 中心模式

target 的狀態

target 的狀態反映了 target 在當前 session 中的識別和追蹤情況。常見的狀態包括:

  • 被追蹤(Tracked):target 已被成功識別和追蹤,AR 應用可以在其上疊加虛擬內容,內容會貼合真實世界中的物體。
  • 未被追蹤(Not Tracked):target 當前未被識別或追蹤,如果 AR 應用仍然在其上疊加虛擬內容,則內容不會貼合真實世界中的物體。

同時,在狀態變化時,可以通過這些事件進行響應:

  • TargetFound:當 target 被成功識別和追蹤時觸發。
  • TargetLost:當 target 失去追蹤狀態時觸發。

target 的生命週期

在 Unity AR 場景中,target 通常由對應的 frame filter 元件進行管理。frame filter 會處理來自 frame source 的圖像數據,並識別和追蹤其中的 target。而 frame filter 的生命週期則依託於 session。雖然不同 AR 功能實現上可能會有差異,但大部分情況下,在 session 啟動時,target 會被載入,並在載入後受控於 session。在 session 停止時,target 會被卸載並留在原地直至被下一個 session 使用或被手動刪除。

後續步驟

相關主題