本文是針對 Session 602: What's New in ARKit 2 的解讀算法
ARKit 2 讓咱們用全新的方式與真實世界互動——多臺 iOS 設備能夠同時瀏覽同一個 AR 場景,或是玩多人 AR 遊戲。此外還增長了追蹤 2D 圖片和檢測已知 3D 對象(例如雕塑、玩具、傢俱等等)的能力。數組
Apple 在去年的 WWDC 上發佈了 iOS 11 與移動 AR 開發框架 ARKit,目前 ARKit 已經部署到了數億臺 iOS 設備上,讓 iOS 成爲了最大的、最早進的 AR 平臺。markdown
ARKit 的接口簡單易用,但具有不少強大的功能,開發者也在過去的一年裏開發出了不少神奇的產品:網絡
ARKit 也是一種很是有趣的教育方式:session
除了上面舉的幾個例子,App Store 裏還有不少不少神奇的 AR 做品。app
追蹤是 ARKit 的核心功能,能夠得到設備在物理世界中的方向和位置,此外還能夠追蹤物體(例如人臉)。框架
場景理解經過學習環境的一些屬性來優化追蹤,檢測水平面(例如地面和桌面)和垂直面以便在場景中放置物體。場景理解還會學習環境中的光照狀況,以便在虛擬場景中精確模擬真實的光照,以防物體看起來過亮或過暗。機器學習
渲染就是指用戶在設備上實際看到、而且在 AR 場景中交互的內容。ARKit 能夠很方便的與你喜歡的渲染引擎進行集成,還爲 SceneKit 和 SpriteKit 提供了內置視圖。此外 Xcode 還提供了能夠快速上手的 Metal 模板。ide
此外還爲 Unity 和 Unreal 的公開遊戲引擎集成了完整的 ARKit 功能。oop
因此若是要開始製做 ARKit 項目,以上游戲引擎均可供選擇。
加載和保存地圖是世界追蹤的一部分,世界追蹤能夠給出真實世界中設備的位置和角度(6自由度),以便在場景中放置物體,以下圖中的桌子椅子所示。
世界追蹤還能夠給出精確的物理尺度,以便以正確的尺寸放置物體,以防過大或太小。物理尺寸還能夠用於精確測量,例如 iOS 12 中提供的 Measure app。
世界追蹤還會給出 3D 特徵點,能夠了解環境中的一些物理結構,以便執行命中測試(hit testing),從而在場景中放置物體。
iOS 11.3 發佈了從新定位(Relocalization)功能,即便 ARSession 被打斷了(例如 app 進入後臺或使用 iPad 上的畫中畫功能),也能夠隨後恢復以前的追蹤狀態。
從新定位功能的實現依賴於一張被世界追蹤不斷繪製的地圖,隨着用戶在環境中不斷移動,這張地圖也會學習更多環境特徵並不斷延展,如今這張地圖在 ARKit API 中以 ARWorldMap 對象提供給開發者使用了。
ARWorldMap 映射了物理 3D 空間,如上圖所示。
同時,物理空間中的錨點(anchor)也很重要,以便在相應的位置放置虛擬物體,因此 ARWorldMap 中默認包含全部平面錨點,此外開發者還能夠在場景中添加自定義錨點,WorldMap 中的錨點列表也會保存這些自定義錨點。
爲了便於可視化和 debug,ARWorldMap 還會提供原始特徵點以及範圍(extent),以便理解用戶掃描的物體空間結構。
最關鍵的一點是,ARWorldMap 是一個可序列化(serialization)對象,能夠被序列化爲任意你想要的數據格式,做爲本地磁盤上一個文件或分享到雲端。
因此,ARWorldMap 爲咱們帶來了 ARKit 的兩種全新體驗:
舉個例子,一個用戶開啓了世界追蹤,而後經過 ARKit 命中測試在場景中放了一個物體。
在用戶離開以前,他在設備上保存了這張 WorldMap。
一段時間以後,這個用戶又回到了這裏,此時他能夠加載以前的那張 WorldMap,並得到與以前徹底相同的加強現實體驗。
他還能夠不斷重複這個過程,而且之後每次來到這個桌子的時候都能看到他以前擺放的這些物體。
以上就是世界追蹤中的持久化體驗。
ARWorldMap 還爲咱們帶來了多人體驗,如今 AR 體驗能夠與其餘用戶共享,而再也不只侷限於單設備或單用戶。用戶能夠生成地圖,並將其共享給其餘用戶。
WorldMap 表明了現實世界中的座標系,因此用戶會共享同一個座標系,而且從不一樣的視角體驗同一個 AR 場景,就像 WWDC 上演示的那個多人遊戲同樣,此外 WorldMap 還能夠用於建立多人共享的教育體驗。
因爲 ARWorldMap 是開放給開發者的,因此咱們能夠用任意技術手段來共享它,例如使用支持多人鏈接的隔空投送(依賴本地藍牙或 WiFi),因此即便沒有網絡也能夠實現。
獲取和加載 WorldMap 的 API 很是簡單:
在任什麼時候間點均可以從 ARSession 對象上獲取當前的 WorldMap,並在 completion handler 裏返回該 ARWorldMap 對象,若是沒法獲取 WorldMap 則會返回 error。
取得 WorldMap 以後,只要在初始化 ARWorldTrackingConfiguration 時給 initialWorldMap 屬性賦值並運行便可,或者經過配置 ARSession 的 configuration 並運行便可實現動態改變。
ARSession 攜帶 ARWorldMap 啓動以後,會執行 iOS 11.3 引入的從新定位功能。
要讓從新定位功能可靠運行,就須要獲取良好的 WorldMap。首先,要從多個視角掃描物理空間,便於追蹤系統學習環境中的物理結構。同時,環境須要是靜態的,而且具備良好的紋理,以便學習更多環境特徵。其次,地圖須要密集的特徵點,這樣才能可靠地進行從新定位。
不過不用擔憂,ARKit API 簡化了這一步,ARFrame 上新增了 worldMappingStatus 屬性:
每一個 ARFrame 都會更新 worldMappingStatus 屬性,使用方法以下:
剛啓動世界追蹤時,WorldMappingStatus 處於 Not Avaiable 狀態,開始掃描物理空間後,狀態就會變爲 Limited:
隨着在物理世界中的移動,世界追蹤會持續延展 World Map(Extending)。
若是對物理世界的掃描充足,WorldMappingStatus 會變成 Mapped:
但若是走出了 map 所對應的物理空間,WorldMappingStatus 就會再次回到 Limited,並繼續學習新看到的環境:
因此應該如何在應用裏使用 WorldMappingStatus 呢?假設咱們正在開發一個 app,用戶能夠與其餘人分享他的 World Map,界面下方有一個 「Share Map」 按鈕:
WorldMappingStatus 處於 Not Available 或 Limited 狀態時,應該禁用這個按鈕。
狀態進入 extending 後,則須要在界面上顯示一個 Activity Indicator:
這樣會鼓勵用戶在物理世界中繼續移動,持續掃描並擴展 map 以便用於進行從新定位。WorldMappingStatus 變成 mapped 以後,就能夠啓用 Share Map 按鈕並隱藏 Activity Indicator 了,以便讓用戶分享地圖:
下面是保存和加載地圖的 Demo,這個 Demo 由兩個 app 組成,一個用於獲取地圖並保存爲本地文件,另外一個則會加載以前那張地圖並恢復爲與以前徹底相同的 AR 體驗:
剛打開 app 時,能夠看到右上角的 WorldMappingStatus 爲 Not Available:
而後在環境裏來回移動,狀態就會變爲 Extending:
而後繼續在環境中移動,WorldMappingStatus 就會變成 Mapped:
也就是說目前特徵點已經足夠從新定位使用了,因此此時已經能夠獲取並保存 World Map 了,但爲了讓 AR 體驗更有趣一點,我打算經過命中測試來放置一個自定義錨點(一臺老電視):
點擊保存 World Map(固然我也能夠繼續構建地圖),World Map 保存後 app 顯示出了它包含的全部特徵點:
上面這些小藍點都是 World Map 的一部分,而且該 World Map 已經序列化爲文件了,如今能夠在另外一個 app 中恢復剛剛的 AR 體驗。我移動到了與剛剛不一樣的位置,屏幕上顯示出了我目前的世界原點:
目前世界追蹤正處於從新定位狀態,也就是 iOS 11.3 引入的從新定位功能。如今把設備指向剛剛建立 World Map 的物理位置,就在我指向剛剛那的點的瞬間,世界原點恢復到了以前那個位置,同時也恢復了個人自定義錨點,這樣我就擁有了與以前如出一轍的 AR 體驗:
後面我能夠無數次重啓這個 app,每一次都會展現與以前徹底相同的體驗。World Map 固然也能夠分享給其餘設備,這就是持久化功能。
以上就是保存和加載地圖功能的介紹,爲 ARKit 帶來了持久化和多人體驗。除了保存和加載地圖,世界追蹤還在如下方面進行了提高:
除了上面這幾項,iOS 還有不少其餘專爲 AR 體驗而進行的優化,例如:
除了 4:3 視頻格式之外的全部優化都會應用到 App Store 目前的 app 上,若是想使用 4:3 視頻格式,則須要用新的 SDK 從新構建 app。
爲了提高用戶體驗,咱們推出了用於渲染的環境紋理,能夠極大地提高用戶體驗。
假設設計師很是努力地建立了這樣一個虛擬物體,準備用在 AR 場景裏:
首先,咱們須要作下面這些事情:
這是上面那個虛擬物體在加強現實場景中的顯示效果:
能夠看到,尺寸恰當,但更重要的是,在物體表面能夠看到周圍環境的反射,右面能夠看到黃色的香蕉和橙子的反射,左面則能夠看到綠葉的反射,中間還能看到板凳表面的反射,這些就是 ARKit 2 的環境紋理的強大功能。
環境紋理功能會獲取場景的紋理信息,一般狀況下用 cube map 來表示,但有時候也會用其餘格式表示,這個 cube map 還能夠用做渲染引擎的 reflection probe,把紋理信息應用到虛擬物體上,就像上面那盆水果同樣,極大地提高了可反光的物體的視覺效果。
ARKit 在運行時經過世界追蹤和場景理解持續學習環境中的信息:
經過計算機視覺提取紋理信息並填充 cube map,並將 cube map 精確地放置在場景中。注意,上面的 cube map 只被填充了一部分,但要將其設置爲 reflection probe 的話,則須要被徹底填充。要獲得一個徹底填充的 cube map,須要完全掃描身邊的物體空間,例如 360 度轉一圈,就像作一張全景圖同樣。但這樣對於用戶來講太難了,因此 ARKit 會藉助先進的機器學習算法來自動填充 cube map,讓這一切變得至關容易:
補充一句,以上這些計算都是在本地實時進行的。
有了 cube map 後就能夠將其設置爲 reflection probe,而後把虛擬物體放進場景,它們就會開始反射環境了:
以上就是對環境紋理功能的工做原理的簡單介紹,藉助 ARKit API,使用起來也很是簡單,只要在 ARWorldTrackingConfiguration 裏將 environmentTexturing 屬性設置爲 automatic 而後運行:
就這麼簡單!
而後 ARSession 會在後臺自動處理環境紋理,並將環境紋理提供爲 environment probe anchor。
AREnvironmentProbeAnchor 是 ARAnchor 的 extension,意味着它有 6 自由度的位置與角度 transform。此外,它還有一個 MTLTexure 格式的 cube map:
ARKit 還提供了 cube map 的物理範圍,也就是 reflection probe 的影響範圍,渲染引擎會藉助它來糾正視差,好比物體在場景中移動時會自動適應新的位置,並反射環境中新的紋理。
AREnvironmentProbeAnchor 的生命週期和其它 anchor 相同,例如 ARPlaneAnchor 和 ARImageAnchor。
此外,AREnvironmentProbeAnchor 還被徹底整合進了 ARSCNView,若是你的渲染引擎是 SceneKit,那就只要在 WorldTrackingConfiguration 裏啓用這個功能就行了,其他的工做 ARSCNView 會自動搞定。
對於更復雜的使用場景,可能須要在場景裏手動放置 AREnvironmentProbeAnchor,這時須要把 environmentTexturing 屬性設置爲 manual:
而後能夠按照理想的位置和角度將 AREnvironmentProbeAnchor 添加到 ARSession 對象中,ARSession 得到更多有關環境的信息時會更新其紋理。
下面這個小 Demo 展現了環境紋理是如何真實地渲染 AR 場景的。放上以前那個模型,先來看一下未啓用環境紋理的狀況:
能夠在底部的開關上看到目前採用的是環境光估算,看起來還能夠,擺在桌上,有天然的陰影,但缺乏的就是對木頭桌子的反射。若是在旁邊再放點東西:
虛擬物體並無反射出這個水果。下面啓用環境紋理功能:
能夠看到,啓動環境紋理功能後物體馬上開始反射木頭桌子和香蕉的紋理,極大地提高了 AR 場景的效果,看起來很是理想,就像真的在桌上同樣。
以上就是 ARKit 2 強大的環境紋理功能,讓 AR 場景變得異常真實。
iOS 11.3 引入了圖像檢測功能,做爲世界追蹤的一部分。圖像檢測會搜索場景中指定的 2D 圖像,但這些圖像必須是靜止的、不能被移動,例如電影海報或博物館裏的畫做。
ARKit 會估算被檢測到的圖像的位置和角度(6自由度),能夠用來觸發渲染場景中的內容。因爲圖像追蹤是被徹底整合在世界追蹤裏的,因此只要設置一個屬性就能夠用了。
爲了加載用於圖像檢測的圖片,能夠從文件中加載,也可使用 Xcode 的 asset catalog,asset catalog 能夠提供圖像的檢測質量。
圖像檢測是一個很棒的功能,但在 iOS 12 裏會由於圖像追蹤功能的加入變得更加出色。
圖像追蹤是對圖像檢測功能的一個補充,最大的好處就是圖像再也不須要是靜止的,能夠移動:
ARKit 如今會以每秒 60 幀的速率估算每一幀的位置和方向,能夠實際加強 2D 圖像,例如雜誌、桌遊等等具備真實圖片的東西。
ARKit 還能夠同時追蹤多個圖像:
默認狀況下只追蹤一張圖像,例如雜誌封面。但若是是雜誌的內頁,則能夠設置爲同時追蹤兩張圖像。
此外,iOS 12 和 ARKit 2 還帶來了全新的 ARImageTrackingConfiguration,能夠用來單獨進行圖像追蹤,設置方法以下。
首先從文件或 asset catalog 中加載一組 Reference Image:
而後把這些 Reference Image 設置爲 ARWorldTrackingConfiguration 的 detectionImages 屬性:
或者設置爲 ARImageTrackingConfiguration 的 trackingImages 屬性:
而後用剛剛設置好的 configuration 來運行 session:
而後和以前同樣,在 ARSession 運行時,每次更新都會提供 ARFrame:
若是圖片被檢測到了,ARFrame 則會包含 ARImageAnchor 對象:
ARImageAnchor 是一個可被追蹤的對象,由於它符合 ARTrackable 協議,因此有一個布爾型的 isTracked 屬性,指出當前圖像的追蹤狀態,true 表示正在被追蹤:
還有一個屬性指向當前被檢測到的圖像,同時用一個 4x4 矩陣來表示位置和角度。
獲取 Image Anchor 的第一步就是加載圖像,那麼應該選擇怎樣的圖像呢?
這是一張來自兒童讀物的圖像:
這張圖像對於圖片追蹤來講很是理想,有清晰的特徵、良好的紋理、鮮明的對比。
下面這張圖片一樣來自於兒童讀物,但並不建議使用:
它有多個重複性結構、均勻的色域、狹窄的灰度直方圖。但咱們不須要本身辨別這些圖片是否存在問題,Xcode 會幫助咱們:
若是我把上面的圖片導入 Xcode,會發現左側那張圖片沒有警告,也就是說它是被建議使用的。然而右面那張 three kids reading 則出現了警告圖標,說明不建議使用它,若是點擊該圖標,能夠看到不建議用於圖像追蹤的詳細緣由:
能夠看到緣由和直方圖、色域以及重複結構有關。
圖片加載完以後,有兩種方式配置圖像追蹤,第一種是使用 ARWorldTrackingConfiguration。
若是使用世界追蹤中的圖像追蹤功能,image anchor 會以世界座標系進行表示,也就是說 image anchor、plane anchor 以及世界原點都會處於同一座標系中,它們之間的交互也會變得簡單、直接。
第二種則是使用全新推出的 ARImageTrackingConfiguration,用於單獨執行圖像追蹤。
也就是說 ARImageTrackingConfiguration 會從世界追蹤中獨立出來,不用依賴運動傳感器也能夠進行追蹤,識別圖像前也不須要初始化,此外還能夠用在沒法使用世界追蹤的場景下,例如電梯或火車等正在移動的場所。
在這種配置下,ARSession 會以 60 幀一秒的速度估算位置和角度,實現起來也很是簡單:
首先建立一個 ARImageTrackingConfiguration 類型的 configuration,而後指定須要追蹤的圖像數組,接下來還能夠指定但願追蹤的圖片數量。(須要注意的是,上面設置了三張須要追蹤的圖像,但將同時追蹤的圖像上限設置爲了 2,因此若是已經追蹤到了前兩張圖像,此時第三張圖像進入畫面的話,仍然可以收到 detection 的更新,但不會追蹤第三張圖像)。最後,用 configuration 運行 session。
如前文所述,還能夠經過 World Tracking 實現圖像追蹤,只要替換圖中高亮的兩行代碼便可:
圖像檢測和圖像追蹤之間的惟一區別就在於 maximumNumberOfTrackedImages,因此若是你的 app 正在使用圖像檢測功能,只要加上這一行,從新編譯,就可使用全新的追蹤功能了。
這個 demo 是一個 AR 相框 app,首先用 Xcode 生成一個 AR app 的模板:
接下來須要指定待檢測的圖像,一隻叫 daisy 的貓咪:
在屬性面板將此圖片命名爲 daisy,同時指定該圖像文件在真實世界的尺寸,也就是相框的尺寸。此外還在 Xcode 中載入了一段 daisy 的視頻:
下面,先建立一個 ARImageTrackingConfiguration 類型的 configuration:
而且使用 group name 「Photos」 從 asset catalog 中載入了圖像數組,數組中只有一張圖像 「daisy」,而後將其設置爲 configuration 的 trackingImages 屬性,接下來把 maximumNumberOfTrackingImages 屬性設置爲 1。
若是此時運行這個 app,ARSession 已經能夠在圖片被檢測到時提供 ARImageAnchor 了,但還須要再增長點內容——建立一個 AVPlayer 來加載 Resource Bundle 中視頻:
下面把它覆蓋到現實中的圖片上:
首先檢測 imageAnchor 的類型是不是 ARImageAnchor,而後使用與被檢測到的圖像相同的物理尺寸建立一個平面,而後把 videoPlayer 設置爲平面的紋理,並讓視頻開始播放。接下來用平面幾何體來建立 SCNNode,並旋轉使其與 anchor 的座標系相匹配。
就是這樣,運行!
能夠看到,就在我把貓咪相框放進屏幕的瞬間視頻就開始播放了,貓咪在裏面動來動去。因爲 ARKit 會實時估算位置,因此能夠任意移動設備,每一幀都會相應更新。
以上就是對 ARKit 中圖像追蹤功能的介紹,使用起來很是簡單。
圖像追蹤適用於 2D 圖像,但 ARKit 不僅侷限於此,物體檢測功能能夠用於檢測場景中給定的 3D 物體。
和圖像檢測同樣,物體檢測只適用於沒法移動的靜態物體,例如博物館裏的展品、某些指定的玩具或是家庭物品等等。
此外,與圖像檢測不一樣的是,物體檢測須要先用運行 ARKit 的 iOS app 掃描該物體。幸運的是,Apple 爲咱們提供了徹底開源的、功能齊全的 iOS app 用於掃描本身的 3D 物體,這些物體須要有一些特徵,例如擁有良好的紋理、硬性而且不會反光。
ARKit 能夠估算這些物體的位置和角度(6自由度)。
同時,物體追蹤功能被徹底整合進了世界追蹤功能中,因此只要設置一個屬性,就能夠開始進行物體追蹤了。設置方法以下:
從文件或 Asset Catalog 中加載 ARReferenceObject 數組,而後將其設置爲 ARWorldTrackingConfiguration 的 detectionObjects 屬性:
configuration 設置完成以後,運行 session:
和圖像檢測同樣,每次更新都會得到 ARFrame:
若是檢測到了場景中的物體,ARFrame 就會包含 ARObjectAnchor:
ARObjectAnchor 是 ARAnchor 的一個簡單子集:
transform 表示 6 自由度的位置和角度,同時還會經過 referenceObject 指出被檢測到的物體。
只要三行代碼就能夠實現:
首先建立一個 ARWorldTrackingConfiguration 類型的 configuration,而後指定想要檢測的物體數組(古代半身雕像以及陶罐),最後用它來運行 session。
上面的代碼最終構成了一個簡單的 AR 博物館 app:
這個半身雕像進入 iOS 的視圖中後,能夠獲得 6 自由度的 pose,利用它在雕像頭頂浮現一個很是簡單的信息圖形,包括這位埃及女王的姓名(Nefertiti)以及她的出生日期,固然還能夠添加任意渲染引擎支持的內容。
爲了構建這個 app,我須要先掃描這個物體。物體掃描會收集場景中的信息,和平面檢測相似,經過收集場景中的信息來估算水平面或垂直面的位置,這裏則是獲取有關 3D 對象的信息。
爲了指定物體檢測的區域,會生成 transform、extent 和 center,這樣能夠在物體周圍造成一個立體邊框,定義了它在場景中的位置。
Xcode asset catalog 完美支持提取出的對象,便於導出到其它 app 並進行復用。
Apple 還針對掃描功能推出了全新的 ARObjectScanningConfiguration,但咱們並不須要本身寫掃描 app,由於 Apple 開源了一個功能齊全的掃描 app,叫作 Scanning and detecting 3D objects。下面是這個 app 的工做方式:
如今咱們要爲上面的 Nefertiti 雕像建立立體邊框,外邊框並不須要很精確,由於真正重要的是邊框內部那些特徵點。
對外邊框感到滿意以後,就能夠點擊 Scan 按鈕開始掃描物體了,能夠看到進度在不斷增長,表示物體被掃描的程度:
須要注意的是,並不必定要把物體的每一面都掃描下來,例如博物館裏的某些靠着牆壁的雕塑,沒法從背後進行掃描,那一面就能夠不掃。
對掃描感到滿意以後,能夠調整 extent 的 center(與物體的原點相對應),惟一的要求就是 center 要留在 extent 內部。
最後,掃描 app 還能夠執行檢測測試:
上圖中的檢測測試在多個視角下都經過了,說明掃描很成功。我還建議把物體移動到其它位置進行檢測測試,看看在不一樣的材質和光照狀況下可否成功:
掃描完成後會得到一個 ARReferenceObject 類型的對象(在以前的圖表裏提到過):
這個對象能夠被序列化爲文件,後綴名通常是 .arobject,name、center 和 extent 屬性能夠在 asset catalog 裏查看。此外還能夠獲得以前掃描區域的全部原始特徵點。
以上就對物體檢測功能的介紹,記住在檢測以前要先掃描一遍物體,掃描 app 全部的源碼都是開源的,如今就能夠下載。
去年發佈 iPhone X 的同時,ARKit 也推出了健壯的面部識別和追蹤功能,每一幀都會估算面部的角度和位置(速度爲每秒60幀),獲得的 pose 能夠用於加強用戶面部,例如增長面具、帽子甚至是替換臉部材質。ARKit 還會以 ARFaceGeometry 格式提供面部三角網格:
面部追蹤的主要錨點類型是 ARFaceAnchor,包含了面部追蹤所需的全部信息。爲了更真實地渲染,ARKit 還會提供方向性光線估算,將面部用做光線探測器(light probe),估算光線強度、方向以及色溫:
光線估算對於大部分 app 來講很是夠用了,但對於有更復雜業務需求的 app,ARKit 會收集整個場景的光線狀況並提供球面諧波係數(spherical harmonics coefficient),能夠進一步提高視覺效果。
ARKit 還能夠實時追蹤表情,支持超過 50 種特定的 blendshape (面部特徵點),blenshape 會假設一個介於 0 和 1 之間的值來表示對應面部特徵點的活躍程度,1 表示極度活躍,0 表示不活躍。例如張開嘴時 jawOpen 係數會接近 1,閉嘴時則接近 0。blendshapes 對於創造虛擬角色動畫來講很是有用,例如結合使用 jawOpen、eyeBlinkLeft 和 eyeBlinkRight 係數就可讓下面這個小方盒角色動起來:
但還能夠更進一步:
建立 Animoji 的時候會使用不少其它 blendshapes,經過右邊的藍色柱狀圖得到頭部 pose,而後映射到那隻熊貓上,ARKit 爲你提供了建立虛擬卡通角色動畫所需的一切信息,和 Animoji 同樣。
ARKit 2 增長了凝視追蹤(gaze tracking)功能,會以 6 自由度追蹤左右眼球:
兩個 6 自由度的 transform 是 ARFaceAnchor 的屬性,還有一個屬性叫作 lookAtPoint,估算了兩個眼球的凝視方向在面部座標空間中的交匯點:
能夠用這些信息給虛擬角色生成動畫,或者做爲 app 信息輸入的全新交互方式。
此外 ARKit 2 還支持了舌頭檢測:
舌頭是一種全新的 blendshape,1 表示舌頭伸出,0 表示沒有伸出:
tongueOut 係數能夠用在虛擬角色的動畫中,固然,也能夠用做 app 的交互方式(笑
強大的保存和加載地圖功能可讓咱們得到持久化體驗以及多人體驗,世界追蹤功能的提高可讓平面檢測變得更快、更精確,同時還提供了全新的視頻格式。環境紋理功能能夠收集場景的材質並應用到物體上,讓物體看起來更加真實,與場景融爲一體。此外還有全新的 2D 圖像追蹤功能,以及 3D 物體檢測功能。面部追蹤功能則推出了全新的「凝視追蹤」以及「舌頭追蹤」。
兩個新增的 session configuration,ARImageTrackingConfiguration 用於獨立圖像追蹤,ARObjectScanningConfiguration 則用於物體掃描。此外還有一些用於與 ARSession 交互的補充類型:
ARAnchor 用於表示現實世界中的某個具體位置,新增了兩個全新類型:
查看更多 WWDC 18 相關文章請前往 老司機x知識小集xSwiftGG WWDC 18 專題目錄