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 系統中會對內容行為(比如物理系統)產生一些影響。
在 FirstTarget 或 SpecificTarget 中心模式下,如果 target 正好是被選作中心的物體,那它是可以隨意移動的。
一般 FirstTarget 模式是比較常用的,它能保證第一個被追蹤的物體在場景中是不會被 session 控制的,如果沒有移動 target 的需求,那它就是固定不動的,無論現實場景中對應的物體是否在運動。
在 FirstTarget 或 SpecificTarget 中心模式下,如果 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 使用或被手動刪除。
後續步驟
- 嘗試 獲取 target 狀態
- 嘗試在各種 AR 功能中使用對應的 target