Unity展示ARKit 2插件的(de)***新技術細節及示例

simaoshid1 2018-06-22

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

Unity展示ARKit 2插件的(de)***新技術細節及示例

1. ARWorldMap

ARWorldMap是ARKit 2一個(gè)非常有用(yòng)的(de)新功能,可(kě)支持AR體驗的(de)持續性和(hé)多(duō)人(rén)AR體驗。

随著(zhe)你移動并檢測到更多(duō)的(de)特征點,每次會話(huà)都将建立一個(gè)ARWorldMap。你可(kě)以從C#的(de)會話(huà)中獲取當前的(de)ARWorldMap,并将其保存到Application.persistence DataPath上的(de)某個(gè)位置。

你同時(shí)可(kě)以從保存的(de)地方加載保存的(de)ARWorldMap。這(zhè)允許虛拟對(duì)象維持在相同的(de)坐(zuò)标空間中。

ARWorldMap可(kě)以序列化(huà)爲一個(gè)字節數組,并通(tōng)過WiFi,藍牙或其他(tā)共享方式發送***另一台設備。它同時(shí)可(kě)以反序列化(huà),并用(yòng)于将其他(tā)設備重新定位到與***個(gè)設備相同的(de)世界映射,這(zhè)樣你就可(kě)以擁有一種共享的(de)多(duō)人(rén)遊戲體驗。

無論通(tōng)過加載,還(hái)是說從另一個(gè)設備接收,一旦擁有了(le)ARWorldMap,設備就可(kě)以利用(yòng)這(zhè)個(gè)ARWorldMap共享坐(zuò)标系,方法是将其設置爲配置中的(de)參數,并使用(yòng)這(zhè)個(gè)配置來(lái)重置ARSession。

這(zhè)将重設會話(huà),而随著(zhe)你的(de)移動,它将嘗試匹配ARWorldMap中的(de)特征點與其在環境中檢測到的(de)特征點。當彼此匹配時(shí),它将重新定位你的(de)設備坐(zuò)标,從而匹配保存在ARWorldMap中的(de)坐(zuò)标。

下(xià)面這(zhè)個(gè)視頻(pín)提供了(le)更爲完整的(de)示例。這(zhè)個(gè)名爲SharedSpheres的(de)示例利用(yòng)了(le)Unity的(de)Multiplayer Networking feature UNet來(lái)将ARWorldMap傳輸***另一台設備,從而同步它們的(de)坐(zuò)标系。

2. ARReferenceObject and ARObjectAnchor

與ARKit 1.5中用(yòng)于圖像識别的(de)ARReferenceImage和(hé)ARImageAnchor類似,我們現在有了(le)ARReferenceObject和(hé)ARObjectAnchor來(lái)進行對(duì)象識别。這(zhè)是樂(yuè)高(gāo)在WWDC主題演講中突出演示的(de)功能,它們可(kě)以識别真實的(de)玩具組,并通(tōng)過疊加的(de)虛拟玩具來(lái)增強體驗。

3. UnityARObjectAnchor示例

這(zhè)個(gè)示例假設你已經擁有了(le).arobject文件來(lái)描述希望識别的(de)對(duì)象。你可(kě)以通(tōng)過下(xià)面介紹的(de)UnityObjectScanner示例,或者是蘋果的(de)ARKit Object Scanner應用(yòng)程序來(lái)創建.arobject文件,這(zhè)兩者都可(kě)以生成相同格式的(de)文件。

與ARReferenceImage非常相似,我們将設置一個(gè)ARReferenceObjectsSetAsset,它包含對(duì)ARReferenceObjectAssets的(de)引用(yòng)。接下(xià)來(lái),我們将爲ARSession的(de)配置添加對(duì)ARReferenceObjectsSetAsset的(de)引用(yòng),從而在會話(huà)中嘗試檢測集合中的(de)ARReferenceObjects。

所有這(zhè)一切都可(kě)以通(tōng)過Unity Editor來(lái)完成。

每當識别出一個(gè)對(duì)象時(shí),系統将創建一個(gè)ARObjectAnchor,而就像是其他(tā)錨定一樣,你可(kě)以訂閱一個(gè)告訴你什(shén)麽時(shí)候添加,更新或删除了(le)錨定的(de)活動。

當活動觸發時(shí),你可(kě)以自行決定要執行的(de)操作(比如在這(zhè)個(gè)位置創建一個(gè)預制件)。

4. UnityObjectScanner示例

Examples/ARKit2.0/UnityARObjectScanner/UnityARObjectScanner.unity是一個(gè)更爲完整的(de)示例,它既可(kě)使用(yòng)可(kě)選邊界框來(lái)創建對(duì)象,也(yě)使用(yòng)進行對(duì)象檢測。

你可(kě)以保存使用(yòng)該示例掃描的(de).arobjects,然後使用(yòng)iTunes FileSharing将它們傳輸***Mac。當文件出現在Mac時(shí),你就可(kě)以重命名它們,然後再放入Unity項目之中。

這(zhè)個(gè)示例有不同的(de)模式:掃描模式和(hé)檢測模式。對(duì)于掃描模式,我們菜肴能夠ARKitObjectScanningSessionConfiguration,這(zhè)将能對(duì)場(chǎng)景進行更爲詳細的(de)探索,但會使用(yòng)更多(duō)的(de)CPU和(hé)功率。

利用(yòng)這(zhè)個(gè)配置,對(duì)于你希望掃描的(de)對(duì)象,你可(kě)以輕觸其附近的(de)平面以生成一個(gè)紅色的(de)邊界框。你可(kě)以操作方框來(lái)覆蓋目标對(duì)象。接下(xià)來(lái),掃描方框的(de)周圍,盡可(kě)能多(duō)地獲取對(duì)象上的(de)特征點。然後通(tōng)過輕觸按鈕來(lái)創建一個(gè)ARReferenceObject。創建的(de)對(duì)象将保存到一個(gè)列表中。

按下(xià)Detect按鈕将進入檢測模式,而這(zhè)個(gè)模式的(de)工作原理(lǐ)與上面的(de)對(duì)象錨定示例類似,但采用(yòng)一種将arreferenceobject動态添加到被檢測對(duì)象列表中的(de)函數。

按下(xià)Save按鈕,将***今掃描到的(de)所有對(duì)象都保存***設備上的(de)文件夾。這(zhè)會把它們保存爲.arobjects,并可(kě)以使用(yòng)iTunes FileSharing将它們傳輸到Mac上。當文件出現在Mac後,你就可(kě)以重命名它們,然後再放到Unity項目中。

5. AREnvironmentProbeAnchor

AREnvironmentProbeAnchor是一種新的(de)錨定,它可(kě)以自動生成,而你也(yě)可(kě)以指定在哪裏創建它。這(zhè)個(gè)錨定将根據ARKit視頻(pín)幀和(hé)世界追蹤數據來(lái)創建,并更新區(qū)域的(de)反射環境映射。它同時(shí)采用(yòng)了(le)機器學習(xí)算(suàn)法,對(duì)尚未看到的(de)場(chǎng)景部分(fēn)近似算(suàn)出環境紋理(lǐ)。

會話(huà)配置中有一個(gè)新的(de)參數來(lái)控制這(zhè)個(gè)功能,而它将有以下(xià)三個(gè)值中的(de)一個(gè):UnityAREnvironmentTexturingNone、UnityAREnvironmentTexturingManual或UnityAREnvironmentTexturingAutomatic。

對(duì)于UnityAREnvironmentTexturingManual模式,你必須自行創建一個(gè)AREnvironmentProbeAnchor,但ARKit将更新從環境中捕獲的(de)紋理(lǐ)。

如果你使用(yòng)的(de)是UnityAREnvironmentTexturingAutomatic模式,ARKit将根據它從會話(huà)中輸入的(de)數據和(hé)你在空間中的(de)運動,以空間間隔地生成AREnvironmentProbeAnchor。

這(zhè)兩個(gè)示例都生成一個(gè)包含Unity ReflectionProbe組件的(de)預制件,并使用(yòng)來(lái)自AREnvironmentProbeAnchor的(de)環境紋理(lǐ)更新它。這(zhè)個(gè)ReflectionProbe現在加入***标準的(de)Unity渲染管道,并将增強使用(yòng)它的(de)任何GameObject。

6. 圖像追蹤

參考圖像與ARKit 1.5中的(de)工作原理(lǐ)相同,但現在ARKit不僅隻是識别圖像,它同時(shí)允許你追蹤它們:當你移動參考圖像時(shí),與它們相關的(de)ARImageAnchor将與圖像一起移動,這(zhè)樣你就可(kě)以移動與這(zhè)些移動圖像錨定的(de)内容。

會話(huà)配置中有一個(gè)額外的(de)參數,它可(kě)以通(tōng)過說明(míng)你希望在會話(huà)期間同時(shí)追蹤多(duō)少圖像來(lái)實現這(zhè)一點。現有的(de)示例已經進行了(le)更新以支持使用(yòng)這(zhè)個(gè)新功能。

7.面部追蹤優化(huà)

ARKit 2同時(shí)優化(huà)了(le)iPhone X的(de)人(rén)臉追蹤功能。首先,有一個(gè)名爲TongueOut的(de)額外混合變形系數。取決于ARKit 2人(rén)臉追蹤所能感知的(de)舌頭伸出程度,這(zhè)将返回0.0到1.0之間的(de)值。蘋果在WWDC上展示了(le)他(tā)們的(de)Animojis,而這(zhè)看起來(lái)很受觀衆的(de)歡迎。

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

8. 開始創建更多(duō)***的(de)AR應用(yòng)吧

有關上述功能的(de)更多(duō)技術細節,以及如何在Unity中使用(yòng)它們。請從Bitbucket下(xià)載***新版本的(de)插件,并嘗試爲iOS設備構建示例。如果你有任何問題,你可(kě)以在Unity論壇中自由提問。然後,利用(yòng)Unity提供的(de)工具來(lái)創建***的(de)AR體驗。但***重要的(de)是,要享受其中的(de)樂(yuè)趣。

發表評論

發表評論:

17601037727 1280857492