WWDC 2017 - ARKit 简介

作者: DannyLau | 来源:发表于2017-07-06 09:30 被阅读248次

    构建了新的本地 MarkDown 工具
    MWeb + 七牛图床
    拿这篇文章测试一下

    这篇文章是 ARKit \ Session 602 的一些整理。【基于OC】
    转自我的 Blog: Danny's Dream

    这应该是这届 WWDC 发布的最酷的几个功能之一了。也是最吸引我的几个功能之一,所以在看完预览介绍之后,就直接看了这个视频。

    上来展示了两个应用场景,一个是幼儿教育的视频,能把童话故事展示到床上。还有一个是宜家的家具展示,可以把宜家的家具放到你家中,并且尺寸还是真实的大小。

    支持的设备

    • A9及及以上的处理器 【6s 及 以上设备,估计是需要较高的运算,我用的测试设备是 se ,跑起来手机热量及耗电感人】
    • iOS 11

    AR技术的主要技术点

    追踪

    追踪手机本身的变化,包括角度,空间位置等。

    场景理解

    • 平面探测 【AR物体,需要展示的界面】
    • Hit-testing 【当没有规则平面的时候,进行的操作,类似于点击直接的hit-test,判断图像中的模块是否为平面】
    • 光影推测 【相当酷的一个功能,为了能让 AR 渲染出来的更加逼真,ARKit 会先去判断当前的光影结构,并渲染在物体画面上】

    渲染

    顾名思义,就是怎么把 3D 的物体以一种立体的模式渲染到平面图像上,提供了 SceneKit,SpriteKit,Metal 等三种渲染方式,当然你也可以通过 Unity ,Unreal 等引擎做渲染。这一步的开放,意味着开发的成本更低。
    主要的结构如下:

    screenshot

    代码介绍

    画面捕捉

    画面通过摄像头来获取,通过 AVFoundation 和 CoreMotion,所以 AR 应用要获取摄像头的权限。

    ARSession

    ARKit 中最主要的类,它的用法和 NSUrlSession 的模式很像,应该是相似的设计思想。

    首先构造 ARSessionConfiguration ,它和 NSURLSessionTask 一样是抽象的接口
    实现分为以下:

    • ARWorldTrackingSessionConfiguration 提供 6 个维度空间的设备追踪参数,一旦 Session pause 了,不能恢复追踪。
      ARWorldTrackingSessionConfiguration 提供 isSupported 来判断当前设备是否支持 AR。
    开始
      // Create a session configuration
        ARWorldTrackingSessionConfiguration *configuration = [ARWorldTrackingSessionConfiguration new];
        
        // Run the view's session
        [self.session runWithConfiguration:configuration];
    
    

    通过 ARSession 的 run 方法来开始追踪。

    停止

    当不再使用的时候,如 viewWillDisappear 的时候,执行 pause 方法停止追踪。

      // Pause the view's session
        [self.session pause];
    
    恢复

    需要恢复的时候调用要重新 run 一个 Configuration 。

    重置

    在需要重置的时候,调用如下方法

    [self.session runWithConfiguration:configuration options:ARSessionRunOptionResetTracking]
    

    ARSessionDelegate

    ARSession 提供的代理方法

    @protocol ARSessionDelegate <ARSessionObserver>
    
    
    @optional
    
    
    /**
     当一个新的 frame 绘制的时触发
     */
    - (void)session:(ARSession *)session didUpdateFrame:(ARFrame *)frame;
    
    
    /**
    当一个新的 ARAnchor 加到 Session 的时触发
     */
    - (void)session:(ARSession *)session didAddAnchors:(NSArray<ARAnchor*>*)anchors;
    
    
    /**
    当 ARAnchor 刷新的时候触发
     */
    - (void)session:(ARSession *)session didUpdateAnchors:(NSArray<ARAnchor*>*)anchors;
    
    
    /**
     当 ARAnchor 被移除的时候触发
     */
    - (void)session:(ARSession *)session didRemoveAnchors:(NSArray<ARAnchor*>*)anchors;
    
    
    @end
    

    关键参数介绍

    ARFrame

    Scense understanding 场景的理解

    Plane detection

    Hit-testing

    Light estimate 渲染

    相关文章

      网友评论

      • Xml_Sw:上面那个是Demo吗?
        DannyLau:@Xml_Sw https://developer.apple.com/arkit/
        DannyLau:@Xml_Sw Demo 官网就可以下啊

      本文标题:WWDC 2017 - ARKit 简介

      本文链接:https://www.haomeiwen.com/subject/vwachxtx.html