Refit 作業
「世界鎖定工具」中的 Refit 作業是當系統判斷場景中某些物件的重新定位會更好地向實體世界錨點註冊這些物件時。
本節將嘗試進一步深入了解導致重新整理作業的情況,以及作業本身的機制。
請務必在此強調,不常發生重新參考作業。 觸發重新凍結作業的預設容錯是由應用程式自定義,但通常混合實境環境只會在特殊情況下觸發重新凍結作業。 可能導致重新凍結需求的條件包括:
- 由於環境不佳而遺失追蹤。
- 頭部快速移動,影響環境掃描。
- 動態環境。
- 迴圈關閉(也就是說,在繞道路徑上累積追蹤錯誤,導致回到先前造訪的地點)。
這些問題的根本原因是追蹤不佳,換句話說,追蹤錯誤。 由於合理的環境產生相當良好的追蹤,特別是在對空間進行初始掃描之後,重新整理作業將變得極其罕見。
片段合併
許多條件可能會導致多個片段存在,最常見的原因是暫時遺失追蹤。 片段會定義為共用通用座標空間的物件集合,但一個片段的座標空間不定位於相對於另一個片段的位置。
收到並處理足夠的新感測器數據時,可以正確定位兩個先前無關片段的內容,彼此位於相同的空間中,可以執行片段合併。
將合併兩個(或更多)片段內容的新座標空間是任意的。 我們在這裡提到,最終座標空間將是其中一個空間的座標空間,這隻會相關,因為它表示除其中一個片段之外,所有片段都會需要調整其座標。 選擇為合併最終目標的片段內容將不會受到影響。
調整轉換是由系統針對要合併的每個來源片段所計算。 這些片段中每個附件點的 AdjustLocationDelegate 將會使用調整轉換來呼叫。 同樣地,目的地片段中的附件點將不會受到影響,也不會呼叫其 AdjustLocationDelegates。
在片段描述中,由深色走廊案例連接的兩個房間是這類情況的範例。 在初始階段,已掃描這兩個片段(會議室),但沒有關於兩個片段相對位置的資訊。 因此,每個片段的內容都放置於座標系統是任意的,只要它是在該房間內所有物件的常數。 例如,每個房間的內容可能位於座標系統中,其原點位於該房間西南角。 相同片段中兩個物件的座標會指出兩個物件彼此相對的位置,但兩個不同片段中兩個物件的座標不會告知其相對位置。
取得詳細資訊時,就有機會調整第二個片段內容的座標,使其內容座標相對於第一個片段中的物件有意義。 例如,可能會開啟走廊燈,並周遊走廊,以橋接兩個片段之間的間距。 如果兩個會議室中所有物件的座標都調整為位於相同的一致座標空間中,則兩個片段之間不再有任何真正的區別,因此其內容可能全部都屬於單一通用片段。
這個將多個片段折疊成單一 片段的作業是合併作業。
請務必在此注意,對於放置在世界鎖定空間中場景的一般 Unity 對象,合併作業不會有任何作用。 從 refit 作業行動物件只會透過附件點進行。
重新凍結作業
另一個發生的情況是錨點的位置經過一段時間的調整。 很明顯,旋轉/位移轉換已不再足以彌補初始粗略錨點位置與最近改善的實體世界位置之間的差異。 請記住,錨點本身在海綿空間中不斷互相移動。 但是,衍生自這些錨點的附件點會固定在世界鎖定的空間中。
當系統辨識它所管理的附件點可能會因為錨點位置的更新而向實體世界進行更好的註冊時,則會有另一個更正事件的機會。 這個調整附件點位置以反映新的感測器數據,稱為 重新凍結作業。 而在合併作業中,片段的內容都是透過單一轉換來調整,以將兩個片段的座標空間合併成單一統一空間,重新凍結會根據影響片段的錨點更新位置個別調整每個附件點。
如同合併作業,每個附件點都會透過其 AdjustLocationDelegate 通知其計算調整轉換。
如果條件正確,重新凍結可能也會執行合併作業。 該合併會被視為重新凍結的隱含部分:合併不會產生個別事件,而重新凍結時所傳遞的調整轉換會同時包含因錨點移動和因合併而調整片段調整的個別調整。
回應 refit 事件
在合併或重新凍結中,refit 事件的反應會由應用程式決定。 更精確地說,它由每個附件點處理程式決定,因為不同的物件類型可能會有不同的反應。 一般而言,受附件點影響的物件會透過其 GameObject.transform 來移動調整轉換。 動作可能會由一些其他機制實作,例如手動移動頂點。 某些應用程式甚至可能有利於捨棄受合併影響的物件,並開始新的建立週期。
重點是,世界鎖定工具不依賴應用程式對 refit 作業的反應。 完全由應用程式開發人員的需求決定。
通知和重新參考作業回應的慣用機制是 附件點。 本文將討論更多詳細數據和選項。