Understanding Augmented Reality
Overview
任何AR的經驗和arkit定義特征的基本要求是能夠創建和跟蹤對應的真實空間之間的用戶在和一個虛擬的空間里你可以模型視覺內容。當你的應用程序顯示的內容與現場攝像頭圖像,用戶體驗增強現實:幻想,你的虛擬內容是真實世界的一部分
How World Tracking Works
創建一個現實和虛擬空間之間的對應關系,arkit使用的技術稱為視覺慣性測距。這個過程結合了從iOS設備的運動傳感硬件與設備的攝像頭可見的場景的計算機視覺分析的信息。arkit識別顯著特征的場景圖像,跟蹤在視頻幀之間的特征差異的位置,該信息與運動傳感數據比較。其結果是一個高精度的設備的位置和運動模型。
世界跟蹤還分析和理解場景的內容。使用命中測試方法(參見
類)找到對應于相機圖像中某個點的真實世界的表面。如果啟用
planeDetection
在您的會話配置設置,ARKit檢測平面在相機的圖像和報告他們的位置和尺寸。您可以使用命中測試結果或檢測到的飛機放置或與您的場景中的虛擬內容交互
Best Practices and Limitations
世界跟蹤是一門不精確的科學。這個過程往往會產生令人印象深刻的準確性,導致現實的AR經驗。然而,它依賴于設備的物理環境的細節并不總是一致的或難以實時測量沒有一定程度的錯誤。要建立高質量的AR體驗,請注意這些警告和提示。
設計可預見照明條件的AR經驗。世界跟蹤涉及圖像分析,需要清晰的圖像。當相機看不到細節時,跟蹤質量降低,例如當相機指向空白的墻壁或場景太暗時。
使用跟蹤質量信息提供用戶反饋。世界跟蹤相關的圖像分析與設備的議案。arkit開發更好的了解現場,如果設備是移動的,即使設備只能移動微妙。過大的運動過快、過快或晃動過猛會導致模糊圖像或太多的距離用于跟蹤視頻幀之間的特征,降低跟蹤質量。這個
arcamera
類提供跟蹤狀態原因信息,您可以使用它來開發用戶界面,該用戶界面告訴用戶如何解決低質量的跟蹤情況。
允許平面檢測的時間產生明確的結果,并禁用平面檢測時,你有你需要的結果。平面檢測結果隨時間變化時,首先檢測到的平面,其位置和程度可能是不準確的。當飛機仍在現場,隨著時間的推移,arkit提煉其位置和程度的估計。當一個大的平面是在現場,arkit可能繼續變平面錨的位置、程度,當你已經用飛機把內容變換。
ARSession
一個arsession物體坐標的主要過程,arkit執行代表您創建一個增強現實體驗。這些過程包括讀取數據從設備的運動傳感硬件,控制設備的內置攝像頭,并對捕獲的相機圖像進行圖像分析。該會話綜合所有這些結果,以建立真實世界的空間,設備棲息和虛擬空間,你模型AR內容之間的對應關系。
每一個AR體驗了arkit需要一個單一的arsession對象。如果你使用
arscnview
或
arskview
對象容易建立你的AR的視覺體驗的一部分,視圖對象包括arsession實例。如果你的AR內容建立你自己的渲染器,你就需要實例化并保持arsession對象自己。
運行會話需要會話配置:
arsessionconfiguration
類或其子類
arworldtrackingsessionconfiguration
。這類決定如何arkit跟蹤設備的位置和運動的相對真實的世界,從而影響你可以創建AR體驗的種類。
Topics
Configuring and Running a Session
-runWithConfiguration:options:
使用指定的配置和選項啟動會話的AR處理。
Parameters
configuration:定義會話的運動和場景跟蹤行為的對象。
options:如何影響現有會話狀態(如果有的話)轉換到新配置的選項。
如果會話第一次運行,此參數沒有影響。
Discussion:該會話跟蹤設備的運動,捕捉和處理場景從設備攝像頭圖像,并與您的坐標delegateobject orARSCNVieworARSKView僅在運行時查看。
在已開始立即轉換到新會話配置的會話上調用此方法。選項參數決定如何將現有會話狀態轉換到新配置。默認情況下,會話將從上次已知狀態恢復設備位置跟蹤,并保留添加會話的任何錨點。調用此方法后,會話將異步運行。
當更改其配置時,影響如何轉換AR會話當前狀態的選項
Topics
ARSessionRunOptionResetTracking
該會話不繼續從先前配置的設備位置/運動跟蹤。
Declaration
ARSessionRunOptionResetTracking= (1 << 0)
Discussion
默認情況下,當您調用runwithconfiguration:選項:方法在已運行或正在運行的會話上,會話將從其最后一個已知狀態恢復設備位置跟蹤。(例如,一個aranchor對象保持其相對于攝像機的明顯位置。
runwithconfiguration:選項:方法具有與會話當前配置相同類型的配置,可以使用此選項強制設備位置跟蹤返回初始狀態。
當你呼喚runwithconfiguration:選項:方法與會話當前配置的不同類型的配置,會話總是重置跟蹤(也就是說,這個選項是隱式啟用)
ARSessionRunOptionRemoveExistingAnchors
任何與前一配置中的會話相關的錨點對象將被移除
Declaration
ARSessionRunOptionRemoveExistingAnchors= (1 << 1)
默認情況下,當您調用runwithconfiguration:選項:在已運行或正在運行的會話的方法上,會話將保留任何aranchor以前添加的對象。也就是說,AR場景中的對象保持相對于設備的真實真實位置(除非啟用arsessionrunoptionresettracking選項)。
如果更改會話配置應該無效在AR場景明顯的物體的真實位置使arsessionrunoptionremoveexistinganchors選項。例如,如果您向AR場景添加了虛擬內容,其位置與真實世界的對象相關,請移除這些錨,以便重新評估適當的真實位置。另一方面,如果在場景中的虛擬內容需要跟蹤真實世界的位置,只有當該內容第一次出現,并可以自由移動后,您可以禁用此選項,以保持錨。
定義會話的運動和場景跟蹤行為的對象。
Declaration
@property(nonatomic, copy, readonly)ARSessionConfiguration*configuration;
會話中的暫停處理
Declaration
- (void)pause;
Discussion
暫停時,該會話不跟蹤設備的運動或捕捉場景圖像,也不配合其delegate object或更新任何關聯arscnview或arskview對象。
Responding to AR Updates
您提供的對象,用于接收捕獲的視頻圖像和跟蹤信息,或響應會話狀態的更改。
如果你使用arscnview或arskview類來顯示AR體驗,不需要會話委派。這些觀點自動顯示捕獲的視頻圖像和坐標SceneKit或SpriteKit內容跟蹤裝置和攝像機運動。
如果使用金屬或其他渲染技術創建AR可視化,請設置會話委托。您的委托對象定期接收arframe會話捕獲的對象。這些對象包含視頻幀圖像供您顯示和AR場景信息,您可以使用坐標顯示您渲染的場景元素。
通過會話調用委托方法的調度隊列。
Discussion
如果此值為nil(默認值),則會話將在主隊列上調用委托方法。
方法可以實現從AR會話接收捕獲的視頻幀圖像和跟蹤狀態。
...
方法可以實現響應于AR會話狀態的更改。
Displaying and Interacting with AR Content
視頻幀圖像,與相關的AR場景信息,最近捕獲的會話。
添加由會話跟蹤的指定錨點。
移除由會話跟蹤的指定錨點。
Instance Methods