分享

WWDC 上苹果发布的 ARKit 是什么?

 alayavijnana 2017-06-16

题图:by 国家地理 from Instagram

互联网的浪潮总是一波未平,一波又起。从 PC 互联网到移动互联网,从云计算到大数据,从机器学习到人工智能,现在是 AI 的天下。整个朋友圈的人要么絮絮叨叨琢磨怎么学习机器学习,要么聚一堆探讨如何使用人工智能。还有程序员说咱们写了程序替代自己写程序然后就失业了,也算得偿所愿。总之,这是个言必称 AI 的时代。

一代新人换旧人,大家不要忘了,就在2016年以前,VR 和 AR (虚拟现实和增强现实)技术的火热程度不亚于现在的人工智能。神秘的 Magic Leap 通过一款 AR 视频迎来了巨头的投资又被质疑为骗局,Pokémon Go 让大家抓腻了精灵和妖怪之后也归于沉寂。雷声之后,并没有下几滴雨。VR 和 AR 就这样如过眼云烟了吗?显然不是这样。

一个技术浪潮未能汹涌澎湃的原因无外乎这么几个原因:

1、没有形成多点开花、齐头并进的应用突破,场景狭窄,应用寥寥,很容易形成审美疲劳。
2、没有统一的技术标准和应用设备,开发成本像一道高墙,把产品和研发的创意挡到了墙外。
3、设备不够便携,如果每个应用都需要配合一个沉重的头盔,注定是个玩具而无法普及。

苹果在 2017 WWDC 发布的 ARKit 配合上亿部的 iOS 设备,差不多把这些问题全部解决了。苹果这家手握巨量现金储备的科技巨头特别有意思,在一个技术浪潮到来初期从不发声,也不会发布 beta 类型的产品,而是认准一个方向,关起门来砸人砸资源冷冷的研发,然后「冷不丁」捧出一个成形的产品,说用吧客官,这才是真正的产品。

ARKit 就是这样一款技术产品,甚至,在苹果没怎么提及 AI 的情况下,这次大会还发布了 Core ML 深度学习框架,基于 Metal 技术,Core ML 可以充分利用 iOS 设备的 GPU 性能进行机器学习,而不是把数据发回到服务器端。

什么是 ARKit?这是一个全新的增强现实框架,它允许开发者轻松地为 iOS 设备 创建无与伦比的增强现实体验。通过将虚拟对象和虚拟信息同用户周围的环境相互融合,ARKit 使得 App 跳出了屏幕的限制,他们开始以全新的方式与现实世界进行交互。ARKit(包括 Core ML)将把 iOS 开发者带到一个更为广阔的天地,我预测这个职业会重新焕发出勃勃生机。

AR 系统可以创建并追踪现实空间和虚拟空间之间的关系,现实空间是用户所处的世界,虚拟空间是针对可视化内容进行建模的世界。当 AR 应用将这些虚拟内容与实时视频结合一起显示的时候,用户就可以体验到所谓的「增强现实」:虚拟内容成为了真实世界的一部分,尽管这只是「错觉」而已。总结一下,AR 系统一般具备以下三个特点:

1、真实世界和虚拟世界的信息集成;
2、具有实时交互性;
3、在三维尺度空间中增添定位虚拟物体。

关于 ARKit 的实现原理,可以阅读 https://developer.apple.com/arkit/

ARKit 能帮我们做什么呢?肯定不仅仅是玩游戏抓精灵,普及的 AR 能够改变我们的工作学习和生活方式,比如天猫就基于 AR 技术进行了非常具体的应用,从互动营销扩展到日常的购物体验,全部有 AR 的影子(参考「不会做动画的前端不是好开发」)。以前我们做读书笔记可能是这样的:

有了 AR 技术,我们的学习可能是这样的:

随着 AR 技术的普及和人们生活习惯的改变,越来越多未来电影中的场景会变成现实,科技与创意会为人类打造一个全新的世界,梦想照进现实时,桃花源、蓬莱仙境、古罗马战场、角斗士,这些只存在于小说和课本中的场景,我们都可以一探究竟。现在这个?门已经敞开了一个口,你是准备继续观望还是去挑战这个增强现实?

如何基于 ARKit 构建一个最简单的 AR App 呢?下载最新的 XCode 9 beta,有一台具备 A9 芯片的 iOS 设备(iPhoneSE iPhone6S iPhone6SP iPhone7 iPhone7P)就可以了。

我们来创建一个项目,创建项目的时候选择 Augmented Reality App:

用 SeneKit 来做一个3D 效果,语言选择 Objective-C:

项目创建好之后,你会发现 XCode 已经为我们写好了很多代码,还有自带的 3D 模型:

#import 'ViewController.h'

@interface ViewController ()

//ARKit 框架中?于 3D 显示的预览视图
@property (nonatomic, strong) IBOutlet ARSCNView *sceneView;

@end


在 ViewController 中,系统基于代理 ARSCNViewDelegate 创建了一个用来展示 3D 效果的视图。

- (void)viewDidLoad { [super viewDidLoad];

   // Set the view's delegate
   //设置代理
   self.sceneView.delegate = self;

   // Show statistics such as fps and timing information
   //ARKit 统计信息
   self.sceneView.showsStatistics = YES;

   // Create a new scene
   //使?模型创建节点(scn 是?个基于3D建模的文件,使用 3DMax 软件可以创建,这里系统有?个默认的 3D 飞机)
   SCNScene *scene = [SCNScene sceneNamed:@'art.scnassets/ship.scn'];

   // Set the scene to the view
   //设置 ARKit 的场景(SCNScene 是 Scenekit 中的场景,类似于 UIView)
   self.sceneView.scene = scene;

}

    

在函数 viewDidLoad 中,进行代理设置,并将统计信息设置为 YES,然后导入模型,把模型场景设置为 SceneKit。

- (void)viewWillAppear:(BOOL)animated {
   [super viewWillAppear:animated];

   // Create a session configuration
   //创建?一个追踪设备配置(ARWorldTrackingSessionConfiguration 主要负责传感器追踪手机的移动和旋转)
   ARWorldTrackingSessionConfiguration *configuration = [ARWorldTrackingSessionConfiguration new];

   // Run the view's session
   // 开始启动 ARSession 会话(启动 AR)
   [self.sceneView.session runWithConfiguration:configuration];

}

在 viewWillAppear 方法中 ,创建了一个追踪设备的配置,监测手机的移动与旋转,启动 AR。

- (void)viewWillDisappear:(BOOL)animated {
   [super viewWillDisappear:animated];

   // Pause the view's session
   // 暂停 ARSession 会话
   [self.sceneView.session pause];

}

在 viewWillDisappear 方法中增加 AR 效果暂停的代码,也就是画面消失,停止 VR 功能。

好了,不用写什么代码,连接上你的手机(iOS11),看看效果吧。


如果你想更多更快的掌握 AR 技术在现实生活中的应用,想成为 AR 技术开发的受益者,文章不白写,再推荐一个 ARKit 技术实战峰会。

 AR 的。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多