Unity展示ARKit 2插件的最新技術細節及示例

蘋果在WWDC上宣佈了令AR開發者感到興奮的消息,這其中就包括ARKit 2。Unity正在與蘋果進行密切的合作,幫助開發者通過Unity ARKit Plugin的新版本訪問所有的新功能。在這篇博文中,Unity的Jimmy Alamparambil介紹了ARKit 2新功能的技術細節,以及如何通過Unity ARKit Plugin訪問它們。下面是映維網的具體整理:

Unity展示ARKit 2插件的最新技术细节及示例

1. ARWorldMap

ARWorldMap是ARKit 2一個非常有用的新功能,可支持AR體驗的持續性和多人AR體驗。

隨著你移動並檢測到更多的特徵點,每次會話都將建立一個ARWorldMap。你可以從C#的會話中獲取當前的ARWorldMap,並將其保存到Application.persistence DataPath上的某個位置。

你同時可以從保存的地方加載保存的ARWorldMap。這允許虛擬對象維持在相同的座標空間中。

ARWorldMap可以序列化為一個字節數組,並通過WiFi,藍牙或其他共享方式發送至另一臺設備。它同時可以反序列化,並用於將其他設備重新定位到與第一個設備相同的世界映射,這樣你就可以擁有一種共享的多人遊戲體驗。

無論通過加載,還是說從另一個設備接收,一旦擁有了ARWorldMap,設備就可以利用這個ARWorldMap共享座標系,方法是將其設置為配置中的參數,並使用這個配置來重置ARSession。

這將重設會話,而隨著你的移動,它將嘗試匹配ARWorldMap中的特徵點與其在環境中檢測到的特徵點。當彼此匹配時,它將重新定位你的設備座標,從而匹配保存在ARWorldMap中的座標。

下面這個視頻提供了更為完整的示例。這個名為SharedSpheres的示例利用了Unity的Multiplayer Networking feature UNet來將ARWorldMap傳輸至另一臺設備,從而同步它們的座標系。

2. ARReferenceObject and ARObjectAnchor

與ARKit 1.5中用於圖像識別的ARReferenceImage和ARImageAnchor類似,我們現在有了ARReferenceObject和ARObjectAnchor來進行對象識別。這是樂高在WWDC主題演講中突出演示的功能,它們可以識別真實的玩具組,並通過疊加的虛擬玩具來增強體驗。

3. UnityARObjectAnchor示例

這個示例假設你已經擁有了.arobject文件來描述希望識別的對象。你可以通過下面介紹的UnityObjectScanner示例,或者是蘋果的ARKit Object Scanner應用程序來創建.arobject文件,這兩者都可以生成相同格式的文件。

與ARReferenceImage非常相似,我們將設置一個ARReferenceObjectsSetAsset,它包含對ARReferenceObjectAssets的引用。接下來,我們將為ARSession的配置添加對ARReferenceObjectsSetAsset的引用,從而在會話中嘗試檢測集合中的ARReferenceObjects。

所有這一切都可以通過Unity Editor來完成。

每當識別出一個對象時,系統將創建一個ARObjectAnchor,而就像是其他錨定一樣,你可以訂閱一個告訴你什麼時候添加,更新或刪除了錨定的活動。

當活動觸發時,你可以自行決定要執行的操作(比如在這個位置創建一個預製件)。

4. UnityObjectScanner示例

Examples/ARKit2.0/UnityARObjectScanner/UnityARObjectScanner.unity是一個更為完整的示例,它既可使用可選邊界框來創建對象,也使用進行對象檢測。

你可以保存使用該示例掃描的.arobjects,然後使用iTunes FileSharing將它們傳輸至Mac。當文件出現在Mac時,你就可以重命名它們,然後再放入Unity項目之中。

這個示例有不同的模式:掃描模式和檢測模式。對於掃描模式,我們菜餚能夠ARKitObjectScanningSessionConfiguration,這將能對場景進行更為詳細的探索,但會使用更多的CPU和功率。

利用這個配置,對於你希望掃描的對象,你可以輕觸其附近的平面以生成一個紅色的邊界框。你可以操作方框來覆蓋目標對象。接下來,掃描方框的周圍,儘可能多地獲取對象上的特徵點。然後通過輕觸按鈕來創建一個ARReferenceObject。創建的對象將保存到一個列表中。

按下Detect按鈕將進入檢測模式,而這個模式的工作原理與上面的對象錨定示例類似,但採用一種將arreferenceobject動態添加到被檢測對象列表中的函數。

按下Save按鈕,將至今掃描到的所有對象都保存至設備上的文件夾。這會把它們保存為.arobjects,並可以使用iTunes FileSharing將它們傳輸到Mac上。當文件出現在Mac後,你就可以重命名它們,然後再放到Unity項目中。

5. AREnvironmentProbeAnchor

AREnvironmentProbeAnchor是一種新的錨定,它可以自動生成,而你也可以指定在哪裡創建它。這個錨定將根據ARKit視頻幀和世界追蹤數據來創建,並更新區域的反射環境映射。它同時採用了機器學習算法,對尚未看到的場景部分近似算出環境紋理。

會話配置中有一個新的參數來控制這個功能,而它將有以下三個值中的一個:UnityAREnvironmentTexturingNone、UnityAREnvironmentTexturingManual或UnityAREnvironmentTexturingAutomatic。

對於UnityAREnvironmentTexturingManual模式,你必須自行創建一個AREnvironmentProbeAnchor,但ARKit將更新從環境中捕獲的紋理。

如果你使用的是UnityAREnvironmentTexturingAutomatic模式,ARKit將根據它從會話中輸入的數據和你在空間中的運動,以空間間隔地生成AREnvironmentProbeAnchor。

這兩個示例都生成一個包含Unity ReflectionProbe組件的預製件,並使用來自AREnvironmentProbeAnchor的環境紋理更新它。這個ReflectionProbe現在加入至標準的Unity渲染管道,並將增強使用它的任何GameObject。

6. 圖像追蹤

參考圖像與ARKit 1.5中的工作原理相同,但現在ARKit不僅只是識別圖像,它同時允許你追蹤它們:當你移動參考圖像時,與它們相關的ARImageAnchor將與圖像一起移動,這樣你就可以移動與這些移動圖像錨定的內容。

會話配置中有一個額外的參數,它可以通過說明你希望在會話期間同時追蹤多少圖像來實現這一點。現有的示例已經進行了更新以支持使用這個新功能。

7.面部追蹤優化

ARKit 2同時優化了iPhone X的人臉追蹤功能。首先,有一個名為TongueOut的額外混合變形係數。取決於ARKit 2人臉追蹤所能感知的舌頭伸出程度,這將返回0.0到1.0之間的值。蘋果在WWDC上展示了他們的Animojis,而這看起來很受觀眾的歡迎。

另一項改進是,它現在可以追蹤眼睛注視點。你會接收到一個描述每隻眼睛指向的變換,以及注視對象的位置。

8. 開始創建更多優秀的AR應用吧

有關上述功能的更多技術細節,以及如何在Unity中使用它們。請從Bitbucket下載最新版本的插件,並嘗試為iOS設備構建示例。如果你有任何問題,你可以在Unity論壇中自由提問。然後,利用Unity提供的工具來創建優秀的AR體驗。但最重要的是,要享受其中的樂趣。

(本文轉自映維網)


分享到:


相關文章: