iOS-ARKit_beta: ARSession与configuration

ARKit Beta Document 部分翻译复述. 2017.06.07.

ARSession

ARSession 是一个通过管理设备摄像头与运动处理从而提供AR功能的共享对象。
ARSession协调AR众多的处理过程,其中包括从设备运动传感器中获取数据,控制內建camera,canmera获取图像的处理分析。

Session通过综合所有的结果来建立现实空间和虚拟坐标系空间之间的联系,从而实现AR效果(具体论述后文有)。
每个AR体验都需要ARSession对象。如果我们使用ARSCNView or ARSKView,则不用自己管理Session,因为它们自带并自己管理着,如果我们要创建自定义的渲染结果,我们需要自己手动维护ARSession对象。

运行ARSession需要相关的配置对象,也就是下面的ARSessionConfiguration与ARWorldTrackingSessionConfiguration。这些配置对象的作用见下文,主要实现ARSession处理策略选择。

属性与方法见SDK。

Configurations-0-ARSessionConfiguration

ARSessionConfiguration 是设置session需要使用的配置对象,父类是NSObject。作用是决定运动和场景追踪方案。

ARSessionConfiguration是ARWorldTrackingSessionConfiguration的父类。
ARSessionConfiguration是一个基本配置,仅探测设备的姿态,不追踪设备的空间位置。仅提供三个自由度,即空间坐标系三个轴旋转,不可平动。

这种局限性导致与ARWorldTrackingSessionConfiguration相比,我们无法通过移动来观察物体的背部。
效果如下图:


14968161005292.png

虽然这样会有局限性,但是可以适配更多支持ARKit的iOS设备。

属性:

/**
 Determines whether this device supports the ARSessionConfiguration.
 确定当前设备是否支持。
 */
@property(class, nonatomic, readonly) BOOL isSupported;

/**
 Determines how the session's coordinate system should be aligned with the world.
 确定虚拟坐标系如何与现实世界对齐
 对齐方式见下一段代码
 @discussion The default is ARWorldAlignmentGravity.
 */
 
@property (nonatomic, readwrite) ARWorldAlignment worldAlignment;

/**
 Enable or disable light estimation.
 @discussion Enabled by default.
 */
 现实中光线预估融合进计算的开关
@property (nonatomic, readwrite, getter=isLightEstimationEnabled) BOOL lightEstimationEnabled;

对齐方式

/** Aligns the world with gravity that is defined by vector (0, -1, 0). */
    ARWorldAlignmentGravity,

/** Aligns the world with gravity that is defined by the vector (0, -1, 0)
     and heading (w.r.t. True North) that is given by the vector (0, 0, -1). */
    ARWorldAlignmentGravityAndHeading,

/** Aligns the world with the camera's orientation. */
    ARWorldAlignmentCamera

Configurations-1-ARWorldTrackingSessionConfiguration

ARWorldTrackingSessionConfiguration可以追踪设备姿态和位置,通过设备的摄像头可以探测到真实世界的表面。

所有的 AR 配置项的最终目为在设备所在的真实世界空间和供我们放置内容的虚拟3D坐标空间之间建立联系(当然是依赖ARSession实现)。当你将要展示的内容和设备的摄像头捕捉的内容相结合并展示给用户的时候,可以给用户制造一个虚拟内容存在于现实中的幻觉。

虚拟和现实内容之间联系的创建和维护需要我们追踪设备的运动状。ARWorldTrackingSessionConfiguration可以帮我们实现。它可以实现六自由度追踪:Six degrees of freedom。https://en.wikipedia.org/wiki/Six_degrees_of_freedom
简单来说就是可以追踪空间坐标系三个轴的平动和绕轴的转动。

六自由度追踪可以实现沉浸式AR体验。
虚拟物体可以出现在现实中的固定位置,我们甚至可以倾斜、移动设备来全方位观看虚拟物体。效果如下图

14968152787304.png

此外,如果我们打开 planeDetection 设置,ARKit就会分析寻找现实中的平面。每当检测到一个平面,Kit会自动添加 ARPlaneAnchor 对象到场景中。

属性部分,除了父类的属性,再加:

/**
 Type of planes to detect in the scene.
 @discussion If set, new planes will continue to be detected and updated over time. Detected planes will be added to the session as
 ARPlaneAnchor objects. In the event that two planes are merged, the newer plane will be removed. Defaults to ARPlaneDetectionNone.
 */
 探测平面的类型。类型见下段代码
@property (nonatomic, readwrite) ARPlaneDetection planeDetection;

/**
 Option set indicating the type of planes to detect.
 */
API_AVAILABLE(ios(11.0)) API_UNAVAILABLE(macos, watchos, tvos)
typedef NS_OPTIONS(NSUInteger, ARPlaneDetection) {
    /** No plane detection is run. */
    ARPlaneDetectionNone        = 0,
    
    /** Plane detection determines horizontal planes in the scene. */
    ARPlaneDetectionHorizontal  = (1 << 0),

} NS_SWIFT_NAME(ARWorldTrackingSessionConfiguration.PlaneDetection);

Building a Basic AR Experience

上文已经明确表达过如下内容:
尽管 ARSCNView 和 ARSKView 已经内建了ATSession对象并自行管理,在run之前,我们还是需要提供配置对象来决定AR体验的质量的。

14968201023756.png

设置规则如下:
· A9处理器及以后的设备,我们直接使用更强大的ARWorldTrackingSessionConfiguration配置;
· A9以前的设备就歇歇吧,ARWorldTrackingSessionConfiguration的父类才是合适的选择。

使用方法如下

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    
    // Create a session configuration
    let configuration = ARWorldTrackingSessionConfiguration()
    configuration.planeDetection = .horizontal
    
    // Run the view's session
    sceneView.session.run(configuration)
}

需要注意的是,run的步骤一定要在will display步骤执行。
截止目前,我们已经设置好了ARSession,下面我们需要放置内容。

分支--Building a Basic AR Experience-Providing 3D Virtual Content with SceneKit

3D部分的教程
https://developer.apple.com/documentation/arkit/arscnview/providing_3d_virtual_content_with_scenekit?language=objc

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,839评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,543评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,116评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,371评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,384评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,111评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,416评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,053评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,558评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,007评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,117评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,756评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,324评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,315评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,539评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,578评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,877评论 2 345

推荐阅读更多精彩内容

  • ARkit Introducing ARKit iOS 11引入ARKit,这是 个全新的框架,允许开发者轻松地为...
    坤哥爱卿阅读 1,325评论 0 1
  • ARKit ARKit框架通过集成iOS设备摄像头和运动功能,在您的应用程序或游戏中产生增强现实体验。 概述 增强...
    暗夜夜夜行路阅读 5,786评论 0 17
  • 笔者在上篇文章中对ARKit进行了简单介绍,在本篇文章中主要介绍ARKit中经常用到的API及使用方法。了解这些A...
    未明一二阅读 1,182评论 1 7
  • 11月份,是一个充满挑战的时期。 每次心痛的时候,我知道是过去某个时刻在向我召唤。 这个月我所感受到的所有的情绪都...
    和时间做朋友阅读 215评论 0 0
  • 照本书的观点,我得找个理性的正A,实在不行就负A,然后如果生个女的就要对她狠,如果生个儿子就要爱他,使劲爱。因...
    思筱阅读 490评论 0 0