「WWDC2018」-ARKit2 革新 What’s New in ARKit 2

ARKit 概述(ARKit Recap)

ARKit主要由三部分組成:

「WWDC2018」-ARKit2 革新 What’s New in ARKit 2

1. 跟蹤(Tracking)

跟蹤是ARKit的核心組件之一,其提供了設備在物理世界中的位置與方向信息,並對物體進行跟蹤,如人臉。

2. 場景理解(Scene Understanding)

場景理解通過學習更多關於環境的屬性,以對水平平面進行檢測,如地面或桌面;iOS 11.3開始還支持檢測垂直平面。這些在場景中平面可用於放置虛擬物體。此外,場景理解還會了解當前環境的光照情況,以提供光照信息用於在虛擬場景中反映真實環境,避免過亮或過暗。

3. 渲染(Rendering)

通過ARKit可以很容易地集成你所選的渲染引擎。ARKit可通過SceneKit和SpriteKit渲染。Xcode中還提供了Metal模板,方便快速地開始你的增強現實體驗(augmented reality experience)項目。此外,Unity和Unreal也已經集成ARKit完整的功能集到他們主流的遊戲引擎中,因此你可以通過這些引擎開始使用ARKit。

ARKit 2 新特性

主要新特性如下:

  1. 保存與加載地圖(Saving and Loading Maps):用於支持持久化與多用戶體驗的強大新特性。
  2. 環境紋理(Environment Texturing):用於更逼真地渲染你的增強現實場景(augmented reality scene)。
  3. 圖像跟蹤(Image Tracking):對真實場景中的2D圖像進行跟蹤。
  4. 物體檢測(Object Detection):對真實場景中的3D物體進行跟蹤。
  5. 人臉跟蹤的提升(Face Tracking Enhancements)

1. 保存與加載地圖(Saving and Loading Maps)

世界跟蹤概述(World Tracking Recap)

保存與加載地圖是世界跟蹤(World Tracking)的一部分,世界跟蹤提供了以下信息:

  • 設備在真實世界中的位置與方向:用於在場景中放置物體。
  • 精確的物理尺寸:用於使用正確的尺寸放置物體,避免物體看上去過大或過小。還可可用於實現精確的測量。
  • 3D特徵點:用於瞭解環境的物理結構,還可用於執行HitTest以在場景中放置物體。

在iOS 11.3引入了重定位(Relocalization),此功能可用於在ARSession被中斷後(如進入後臺),恢復之前的跟蹤狀態。

譯註:世界跟蹤中的位置與方向信息transform通常都是以6自由度的座標系(6 degrees of freedom paws)的方式提供。

「WWDC2018」-ARKit2 革新 What’s New in ARKit 2

映射(Mapping)

重定位工作於世界跟蹤持續構建出來的地圖上。當在環境中做越多的移動後,將能瞭解和學習到環境中越多不同的特徵,而得到越完整的地圖。然而此地圖只在你的ARSession存活時存在。

「WWDC2018」-ARKit2 革新 What’s New in ARKit 2

在ARKit中,地圖以ARWorldMap表示。ARWorldMap代表了3D物理空間中的映射狀態及此空間中的Anchor。Anchor是物理空間中重要項,它們可被放置在你想要放置虛擬物體的地方,因而ARWorldMap中默認包含了平面(PlaneAnchor)。

ARWorldMap中的Anchor列表是可變。為在場景中創建自定義的Anchor,可以向其中添加這些Anchor。

為了方便查看與調試,ARWorldMap也提供了原始的特徵點和範圍。

更重要的是,ARWorldMap是個可序列化的對象,可將其序列化為任意你所選的數據流,如本地文件系統中的文件或放在共享網絡上。由於此特性,使得可通過WorldMap對象為用戶帶來強大的新體驗。

持久化(Persistence)

若將物體放在場景中,並在離開場景前保存WorldMap,之後再回來時,可加載同一的WorldMap,此時將發現之前的物體仍在場景中,而得到與之前相同的增強現實體驗。

多用戶體驗(Multi-User Experiences)

「WWDC2018」-ARKit2 革新 What’s New in ARKit 2

ARWorldMap提升了多用戶體驗。現在你的增強現實體驗(augmented reality experience)並不侷限於單一設備或單一用戶。一個用戶可創建一個WorldMap後,分享給一個或多個其他用戶。

要注意的是,WorldMap表示真實世界中的一個單一的座標系,這意味著每個用戶共享同一空間,他們可以從不同觀察點體驗同一AR內容。因而可將此新特性用於多用戶遊戲或教學。

// Saving and Loading World Maps// Retrieve world map from session objectsession.getCurrentWorldMap { worldMap, error in guard let worldMap = worldMap else { showAlert(error) return }}// Load world map and run the configurationlet configuration = ARWorldTrackingConfiguration()configuration.initialWorldMap = worldMapsession.run(configuration)

獲取良好的世界地圖(Acquiring Good World Maps)

為表現穩定,重要的是要獲取良好的地圖。要點如下:

  • 從多個角度掃描物理空間,使得跟蹤系統可學習環境的物理結構。
  • 環境需要是靜止的,紋理良好的,使得可以提取到更多的特徵並學習到更多的環境情況。
  • 地圖上存在密集的特徵點,使得重定位更可靠。

然而不需要擔心以上要點,ARKit會在每一幀更新worldMappingStatus,以便於瞭解當前World Mapping的狀態。此狀態一開始是不可用的(notAvalable),一旦開始掃描物理空間後,將立即進入受限狀態(limited)。之後越是在物理世界中移動,世界跟蹤將持續擴展地圖(extending)。如果我們在當前視角已經掃描到足夠的物理世界信息,狀態將被置為mapped。若視角從一個已mapped的物理空間中移開,WorldMappingStatus將重置回limited狀態,使其開始學習更多當前新環境的信息。

open class ARFrame : NSObject, NSCopying { open var worldMappingStatus: ARFrame.WorldMappingStatus}public enum WorldMappingStatus : Int { case notAvalable case limited case extending case mapped}
「WWDC2018」-ARKit2 革新 What’s New in ARKit 2

若你有一個程序可分享WorldMap給其它用戶,程序界面上有一個分享按鈕,好的實踐是在notAvalable或limited時禁用按鈕。而當狀態變為extending時,可考慮在界面上顯示一個提示圖,以鼓勵你的用戶在物理世界中持續移動並持續掃描,通過掃描去擴展地圖。一旦完整地mapped,就可以隱藏提示圖並啟用分享按鈕,以允許你的用戶分享地圖。

世界跟蹤的提升(World Tracking Enhancements)

  • 更快的初始化及平面檢測:從ARKit2開始,初始化及平面檢測更快。
  • 更健壯的跟蹤及平面檢測:能在更復雜的環境下檢測平面。水平平面和垂直平面都有更精確的範圍和邊界,意味著可以在場景中更精準地放置對象。
  • 持續自動對焦:從iOS 11.3開始,為增強現實體驗而引入此特性。
  • 新的4:3視頻格式:從iOS 12開始,在ARKit中引入了4:3視頻格式。4:3是一種廣角的視頻格式,其大大加強了iPad上的視覺效果(Visualization),因為iPad的屏幕顯示比例就是4:3,同時4:3的視頻格式也將成為ARKit 2的默認格式。

2. 環境紋理(Environment Texturing)

為提升終端用戶的體驗上,我們引入了環境紋理,其大大增強了渲染效果。

真實感渲染(Realistic Rendering)

為保證渲染結果逼真,使它看起來真的像是被放置在真實世界中,需要做到以下幾點:

  • 物體的位置與方向正確
  • 比例正確,避免物體不會過大或過小。世界跟蹤會提供為你正確的transform。
  • 環境光。ARKit會提供給你測量的光照情況,你可用於渲染時修正虛擬物體的光照,使物體看起來不會過亮或過暗
  • 添加陰影,若將物體放置在水平平面上,為物體添加陰影也是重要的,以大大提升視覺感知,使得真正感覺物體被放置在表面上
  • 表面反光。對於會反光的物體,人們希望看到環境呈現在虛擬物體的表面上。

環境紋理(Environment Texturing)

環境紋理為收集到的場景紋理的信息,通常表示為立方體貼圖(Cube Map),但也有其它表示方式。環境紋理被渲染在此立方體貼圖中,可被用於作為渲染引擎中的反射探針(Reflection Probe)。此反射探針可應用紋理在虛擬物體上,這將大大提升了會反射的物體的視覺效果。

收集場景紋理的工作方式為:ARKit運行期間,世界跟蹤和場景理解持續學習環境的更多信息。通過計算機視覺,其可提取信息並逐漸填充立方體貼圖。只有立方體貼圖填充完成,才可作為反射探針。為得到此完成的立方體貼圖,你需要像360度全景掃描整個物理空間,但這對任何用戶不實用,因而ARKit為了簡化使用,通過高級的機器學習算法自動完成此立方體貼圖的填充。需要注意的是,所有處理都是在你的設備上實時執行的。因而一旦有了一個完整填充的立方體,就可用於配置反射探針,之後只要虛擬物體放到場景中,就會開始反射環境光。以下是通過代碼啟用此特性:

// Environment Texturinglet configuration = ARWorldTrackingConfiguration()configuration.environmentTexturing = .automaticsession.run(configuration)
「WWDC2018」-ARKit2 革新 What’s New in ARKit 2

使用環境紋理後對比如下:

「WWDC2018」-ARKit2 革新 What’s New in ARKit 2

「WWDC2018」-ARKit2 革新 What’s New in ARKit 2

ARSession會在後臺自動執行環境紋理的收集,並以AREnvironmentProbeAnchor對象給到程序使用。AREnvironmentProbeAnchor是ARAnchor的擴展,因而其提供了位置與方向的transform,和一個使用Metal格式的紋理(MTLTexture)表示的立方體貼圖,及立方體貼圖的物理範圍。

應注意的是,其與其它Anchor的生命週期相同,如ARPlaneAnchor或ARImageAnchor。此外,其完全集成進ARSCNView,若使用此View作渲染,則只需要在跟蹤配置中啟用此特性,其它的會自動處理。

你可以手動地將一個AREnvironmentProbeAnchor放在任意想要放的位置,或以任意方向擺放,可通過以下代碼配置:

// Enable manual placementconfiguration.environmentTexturing = .manual

3. 圖像跟蹤(Image Tracking)

圖像檢測概述(Image Detection Recap)

iOS 11.3開始引入了圖像跟蹤作為世界跟蹤的一部分。檢測場景中的2D圖像時,這些圖像需要是靜止且不被移動的,如電影海報或博物館中的畫作。一旦圖像被檢測到,ARKit會估量圖像的位置與方向,之後可用於在你的渲染場景中觸發一些AR內容。

圖像跟蹤被完全集成進世界跟蹤,需要做的只是對一些屬性進行配置就可以啟用。

為了加載圖片用於圖像檢測,可從文件或Xcode的Asset Catalog中加載,後者還會提供一個圖像的檢測質量信息。

雖然這功能已經很好,但從iOS 12開始提供了相對更做優的圖像跟蹤。

圖像跟蹤(Image Tracking)

圖像跟蹤是圖像檢測的擴展,其顯著的優點是不要求圖像靜止,而是允許圖像移動。

ARKit會以每秒60幀的幀率為每一幀提供位置與方向,且可同時跟蹤多張圖像。在iOS 12的ARKit2中引入的新的配置ARImageTrackingConfiguration進行圖像跟蹤。

其配置方式為通過文件或Asset Catalog加載到ARReferenceImage中作為ARWorldTrackingConfiguration的detectionImages屬性,或ARImageTrackingConfiguration的trackingImages屬性,並將配置交給ARSession運行。ARSession運行後,可在每次update方法回調中取得ARFrame。只要圖片已被檢測到,ARFrame中將包含ARImageAnchor。具體如下圖所示:

「WWDC2018」-ARKit2 革新 What’s New in ARKit 2

open class ARImageAnchor : ARAnchor, ARTrackable { public var isTracked: Bool { get } open var transform: simd_float4x4 { get } open var referenceImage: ARReferenceImage { get }}

使用利於識別的圖像(Using Good Images)

為了得到利於識別的圖像,要求圖像

  • 利於識別的圖像:
  • 特徵明顯(Distinct features)
  • 細膩(Well textured)
  • 對比度好(Good contrast)
  • 不利於識別的圖像:
  • 結構重複(Repetitive structures)
  • 色域一致(Uniform color regions)
  • 直方圖窄(Narrow histogram)

以下是兩種圖的示例:

「WWDC2018」-ARKit2 革新 What’s New in ARKit 2

若被識別的圖片導入到Asset Catalog中,將不需要自己檢查,Xcode會自動給出警告,並提示原因,如下圖所示:

「WWDC2018」-ARKit2 革新 What’s New in ARKit 2

配置圖像跟蹤(Configuration for Image Tracking)

加載完圖像後,有兩個配置可供選擇:

  • ARWorldTrackingConfiguration
  • 在世界參照系中的圖像錨點(Image anchors in world reference frame)
  • 被檢測的圖像可被跟蹤(Detected images can be tracked)
  • ARImageTrackingConfiguration
  • 獨立於世界跟蹤(Independent from world tracking)
  • 為每一幀提供位置與方向(Position and orientation for every frame)

兩種配置的使用示例如下:

// Create an image tracking configurationlet configuration = ARImageTrackingConfiguration()configuration.trackingImages = [catPhoto, dogPhoto, birdPhoto]configuration.maximumNumberOfTrackedImages = 2session.run(configuration)// Create a world tracking configurationlet configuration = ARWorldTrackingConfiguration()configuration.detectionImages = [catPhoto, dogPhoto, birdPhoto]configuration.maximumNumberOfTrackedImages = 2session.run(configuration)

4. 物體檢測(Object Detection)

物體檢測(Object Detection)

物體檢測可用於檢測場景中已知的3D對象,並提供檢測到的物體的位置與方向。當檢測到特定物體時,可根據需要觸發AR內容。

與圖像檢測相同的是,物體檢測只適用於無法移動的靜止物體,如博物館的展品或特定玩具等;而與圖像檢測不同的是,物體檢測需要先運行ARKit的iOS應用掃描此物體。Apple提供了開源且功能齊全的應用Scanning and detecting 3D objects用於物體的掃描。這些被掃描的物體需要有點特徵,如紋理良好,硬且不反光。

物體跟蹤已被完全集成到世界跟蹤中,因而使用此特性時,只要設置ARWorldTrackingConfiguration的detectionObjects屬性,即:

// Object Detectionlet configuration = ARWorldTrackingConfiguration()configuration.detectionObjects = [ancientBust, clayPot]session.run(configuration)

物體掃描的具體使用方法如圖所示:

「WWDC2018」-ARKit2 革新 What’s New in ARKit 2

啟用物體檢測後,若檢測到場景中的物體,則每次更新的ARFrame中將包含ARObjectAnchor表示此物體。

open class ARObjectAnchor : ARAnchor { open var transform: simd_float4x4 { get } open var referenceObject: ARReferenceObject { get }}

物體掃描(Object Scanning)

已知的物體可通過Xcode的Asset catelog導入,而未知的物體在進行物體檢測前,需要先對物體進行掃描,才可檢測到。物體掃描時會收集場景中的信息。與平面檢測類似的是,通過收集場景中的信息估算水平平面或垂直平面的位置,但這裡獲取的是3D對象的信息。為確定物體檢測的區域,會生成transform, extent和center,以在物體周圍形成立體邊框,定義在其在場景中的位置。需要注意的是,掃描時,並不需要將掃描物體的每個面,如博物館內部分靠牆的雕塑,可以不掃描無法掃描的背面。對掃描結果滿意後,可通過extent的center調整物體的原點,但需要確保center始終在extent內部。掃描完成後將得到一個ARReferenceObject對象,此對象可序列化為文件(通常後綴名為.arobject),可在Asset Catelog中查看name,center和extent屬性。

open class ARReferenceObject : NSObject, NSCopying, NSSecureCoding { open var name: String? open var center: simd_float3 { get } open var extent: simd_float3 { get } open var rawFeaturePoints: ARPointCloud { get }}

5. 人臉跟蹤的提升(Face Tracking Enhancements)

人臉跟蹤概述(Face Tracking Recap)

去年發佈iPhone X的同時,ARKit也推出了健壯的人臉檢測與跟蹤,並以每秒60幀的幀速為每一幀提供面部的位置與方向。人臉跟蹤的結果使用ARFaceAnchor表示。得到的pose可用於增強人臉效果,如增加面具,帽子或替換臉部素材。ARKit還以ARFaceGeometry的格式提供面部的三角形網格。

方向光的估測(Directional Light Estimation)

ARKit會提供方向光的估測,會將臉部作為光線探測(light probe),估算光線強度,方向及色溫。對於對光線要求複雜的應用,ARKit還會收集整個場景中的光線情況,並提供球面諧波係數(Spherical harmonics coefficients),以進一步提升視覺效果。

融合變形概述(Blendshapes Recap)

ARKit可實時跟蹤表情,支持識別超過50種以上特定的面部特徵點(Blendshapes),Blendshapes使用0與1間的值表示對應面部特徵點的活躍程度,其中1表示極度活躍,0表示不活躍,如張嘴時jawOpen係數接近1,閉嘴時則接近0。此特性對創建虛擬角色的動畫非常有用(Animation of virtual character),可用於實現類似Animoji的效果。

人臉跟蹤的提升(Face Tracking Enhancements)

視線跟蹤(Gaze tracking)

「WWDC2018」-ARKit2 革新 What’s New in ARKit 2

open class ARFaceAnchor : ARTrackable { open var leftEyeTransform: simd_float4x4 { get } open var rightEyeTransform: simd_float4x4 { get } open var lookAtPoint: simd_float3 { get }}

支持舌頭(Tongue support)

「WWDC2018」-ARKit2 革新 What’s New in ARKit 2

extension ARFaceAnchor.BlendShapeLocation { public static let tongueOut: ARFaceAnchor.BlendShapeLocation}


分享到:


相關文章: