世界鎖定工具概念
問題
在日常的實體世界中,空間被靜止座標系統很好地描述。 靜止座標系統中的無動物件會永遠擁有相同的座標。 在特定組態中配置的物件群組會維護該組態。 使用相同速度移動的兩個物件會保持彼此的固定位移。
這些和類似的法律是存在的一個基本部分,當他們不再持有時,對世界的直覺變得不可靠。
先前的解決方案
Unity 的 全域座標空間 和 空間錨點 都解決了感測器不準確和漂移所造成的問題的不同層面。
Unity 的全域座標空間提供穩定的參考框架,其中全像攝影物件會彼此相對固定。 雖然這個空間中的物件會一致地彼此相對,但與實體世界的一致性並不保證也不會一般提供。 不一致會在使用者四處移動時發生。
Unity 的空間錨點可以在用戶移動時維護全像投影在實體世界中的位置,但在虛擬世界中犧牲自我一致性。 不同的錨點會不斷彼此移動。 它們也會通過全域座標空間移動,使得配置困難等簡單工作,以及物理模擬有問題。
問題的來源
這裡的討論將圍繞 HoloLens 技術,但這些概念通常適用於內側的無標記追蹤技術,特別是隨著慣性系統的增強。
HoloLens 對於判斷它相對於周圍可見特徵的位置非常出色。 藉由延伸,根據這些相同的可見特徵,定位其他虛擬物件也非常出色。 當使用者坐在或站在大致固定的位置時,裝置非常適合讓虛擬物件保持以可見的實體參考點註冊。 放在實體桌子上的虛擬杯大多會留在桌子表面的相同位置。
當 HoloLens 受限於相同的小型磁碟區時,在檢視中具有一組常數可見功能以供參考時。 但還有其他有趣的案例。
當用戶啟動並移動房間,或甚至介於房間之間時,HoloLens 必須在離開檢視的舊功能與即將進入檢視的新功能之間切換。 如果沒有進入實作詳細數據,很明顯地發現,雖然在傳輸中,追蹤精確度將會非常降低。
以下是內容簡化的案例。
範例說明
用戶位於 A 點。環顧四周,有許多良好的可見參考功能,因此頭部追蹤品質很好,放置的任何全像投影都會保持放置。
然後,使用者會在實體空間中行走 10 公尺,指向 B。但是,在傳輸中追蹤的精確度較低,因此,在使用者到達B點之後,裝置註冊它只行駛了9米。 這是大量的圖例,但它與裝置規格一致,這允許在這種情況下發生 +-10% 的距離錯誤。
當裝置在 B 點四處查看時,會記錄良好的可見功能。 在 B 點的全像投影追蹤和穩定性也非常出色。
當用戶處於特定點時,該點周圍的專案看起來很棒。 但有一個不一致的情況。 實體空間中 A 和 B 點之間的 10 公尺只有 9 米的虛擬空間。 這通常稱為「縮放問題」,雖然「距離問題」可能更準確。 我們很快就會調查這個問題。
回到我們的案例:針對下一個動作,使用者會回到指向 A。這次追蹤錯誤會使從 B 到 A 的 10 公尺距離在虛擬空間中增加最多 10.5 公尺。 這表示,從 A 到 B 到 A 的完整步行加總距離為 1.5 公尺,當它應該是 0.0 公尺時。 這是一個明顯的問題。 在步行前放置於 A 點的全像投影現在會顯示距離 A 點 1.5 公尺遠。
這是空間錨點可協助的地方。 走到B和返回后,系統認識到它回到A點,但頭部的 Unity 座標已經改變了1.5米。 但是,如果點 A 點的全像投影有一個空間錨點連接,空間錨點可以想像「我在 A 點,頭部在 A 點,但我的座標與頭部的座標不同,以 1.5 公尺為單位。 我只會將座標變更為 1.5 米,以便我們再次達成一致。而位於 C 點的空間錨點,使用者左邊的計量,正經歷相同的程式。 基本上,空間錨點會不斷重新定義 A 點在 Unity 空間中的位置,讓頭部的座標一律正確。 每個空間錨點都會針對其在物理世界中的位置獨立進行這項調整。
適用於 Unity 的世界鎖定工具
世界鎖定工具會保留空間錨點的內部供應,當使用者四處移動時,它就會散佈。 它會分析相機的座標,以及每個畫面的空間錨點。 它偵測到所有這些空間錨點移動超過 1.5 公尺,以符合頭部的座標,並說“Hmm,而不是改變世界上一切的座標,以補償頭部的座標與上次這裡不同的座標,我會改為修復頭部的座標。
這表示,不需要讓空間錨點透過 Unity 空間拖曳全像投影,讓它在實體空間中保持固定,整個 Unity 世界空間都會鎖定在實體空間中。 如果 Unity 空間中的全像投影是無動的,它將會相對於其周圍的實體世界特徵保持無動。 同樣重要的是,相對於其周圍的虛擬功能,它仍會保持固定。
顯然,在頭罩下,它比這更複雜。 例如,請記住,空間錨點的問題在於它們會獨立移動,因此它們不一定會彼此同意。 基礎的 FrozenWorld 引擎會仲裁這些分歧,以提出最感知正確的相機校正,並執行每個畫面。
再次發生縮放問題
如果使用者從 A 點逐步執行到 B 點,然後回到 A 點,系統就有足夠的資訊來修正傳輸中發生的漂移。 它可能不知道 B 點在哪裡 (通常不知道 B 與點 A 相對的任何點在哪裡),但它知道它是否在 A 點。 當它回到A點時,它期望事情幾乎就像它離開他們一樣。 如果不是,系統就可以這麼做。
但是,在B點呢? 它以為10米的步行只有9米。 它沒有辦法知道這9米是否正確,如果不是,它有多少關閉。 空間錨點在這裡沒有説明。 空間錨點與頭部追蹤器有相同的問題:每個都知道它位於實體世界中的位置(相對於可見特徵),但一個空間錨點對另一個空間錨點一無所知。 具體來說,空間錨點並不知道它們相隔多遠。
這在許多形式中可能不方便,但當物件或對象的系統大小大於計量左右時,它就會成為封鎖問題。 請考慮一個房間的模型,或建築物,或一套桌子,甚至汽車。 雖然空間錨點可以保留向實體世界特徵註冊的模型一端,但到達模型的另一端時,可能會累積重大錯誤。 另一端不會正確排列。 錯誤會與裝置到裝置不同,甚至可能在同一部裝置上執行。
到目前為止,在討論中,尚未引入修正問題所需的最低資訊。
世界鎖定工具可解決空間釘選 API 的問題,這可讓應用程式提供與實體世界和全像攝影世界相關的足夠資訊,以更正距離移動的錯誤。 這可讓大型全像投影與整個實體世界保持一致。
查看基本系統
既然我們已概觀世界鎖定工具概念,讓我們回過頭來看看基本系統。 瞭解基準作業的功能,且未提供哪些服務可協助您判斷稍後適當使用進階概念,以及特定應用程式是否需要這些進階技術。