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 使用或被手動刪除。

後續步驟

相關主題