前言
今年6月5日的苹果WWDC 2017全球开发者大会上,苹果发布了AR开发框架ARKit。苹果凭借庞大的iOS用户群,ARKit一举成为最大的AR开发平台,作为iOS开发者之一,兴趣爱好使然,自己看了 beta版Documentation ,结合一些帖子,自己写了笔记;(介绍延伸:《苹果拥抱AR/VR 全球最大AR平台诞生》)
简介
我一开始对 VR/AR/MR 傻傻分不清楚,只知道这玩意儿炒的很火,未来也很有市场,只知道有这玩意儿,不太理解他们的应用场景,👇看一下他们的定义;
VR、AR、MR定义:
1. VR ( Virtual Reality )
虚拟现实(Virtual Reality,简称VR,又译作灵境、幻真)也称灵境技术或人工环境。虚拟现实是利用电脑模拟产生一个三维空间的虚拟世界,提供使用者关于视觉、听觉、触觉等感官的模拟,让使用者如同身历其境一般,可以及时、没有限制地观察三度空间内的事物。
2. AR ( Augmented Reality )
增强现实(Augmented Reality,简称AR),也被称之为混合现实。它通过电脑技术,将虚拟的信息应用到真实世界,真实的环境和虚拟的物体实时地叠加到了同一个画面或空间同时存在。
3. MR (Mix reality)
混合现实(Mix reality,简称MR),既包括增强现实和增强虚拟,指的是合并现实和虚拟世界而产生的新的可视化环境。在新的可视化环境里物理和数字对象共存,并实时互动。系统通常采用三个主要特点:1. 它结合了虚拟和现实;2. 在虚拟的三维(3D注册); 3. 实时运行。
准备
设备:ARKit 目前仅支持 A9及以上处理器的 iOS 设备,如没有请自行购买😆 ;
软件:开发必备 iOS 11 Beta / Xcode 9 Beta (PS: 升级有风险,升完就慢,吾已试);
开始
万事俱备,创建新的项目吧,首先打开我们下载的变态版(最新Beta 4)的 Xcode 9,Create a new Xcode project—>Augmented Reality App
选择 Content Technology 默认选项选择了 “SceneKit”,点击下拉列表。
选项有 “SceneKit”、“SpriteKit”、“Metal”,SpriteKit它是用来做2D渲染引擎框架, “SceneKit”,它是3D渲染引擎框架,Meta它是一个支持GPU加速的3D绘图APIl。选择Augmented Reality App时候,默认选择就是Scenekit;
运行
题外话:Xcode 9 提供了Connent via nework 功能,目前ARKit就使用的该功能调试的,安装速度真的不敢恭维,不过毕竟新功能,体验一下也很好的!
Connent via nework.jpg
OK,下面开始,运行项目不用做任何修改,直接Command + R,先体验一把Demo的效果😆
✈️.jpg
上面也解释了AR概念,其实它就是现实场景和虚拟场景的结合,所以基本都需要摄像头,在摄像头拍摄的画面基础上,结合虚拟画面(✈️)进行展示和互动,你可以进行移动旋转全方位的看✈️的每个细节,后面会解释虚拟和现实坐标的联系;
项目结构
art.scnassets(资源包),这里就是咱们上面运行所用的素材文件夹,.scn 是3D绘图,当然想图省事儿的,可以让你的UI朋友帮忙出点好看的复杂的绘图,如果做简单的自己就可以使用SCNScene 绘制就好,👇会简单介绍该类;
ARKit && SceneKit
ARKit核心类:ARSCNView / ARSKView / ARSession / ARWorldTrackingSessionConfiguration 等等等
1. ARSCNView: 它用 SceneKit 渲染的 3D 内容来增强实时摄像头视图。它在视图中渲染设备摄像头的实时视频流,并就其设置为 3D 场景的背景,ARKit 的 3D 坐标系会匹配 SceneKit 的 3D 坐标系,所以此视图渲染的对象会自动匹配增强后的 ARKit 世界视图,自动移动虚拟 SceneKit 3D 摄像头来匹配 ARKit 追踪到的 3D 位置,所以不需要再写代码连接 ARKit 移动事件与 SceneKit 3D 渲染。
2. ARSKView: 它用 SceneKit 渲染的 2D 内容来增强实时摄像头视图,提供2D虚拟画布,在创建Xcode的时候选择SpriteKit引擎,这里就不介绍它了,想了解请点击;
3. ARSession:每个增强现实会话都都需要有一个 ARSession 实例。它负责控制摄像头、聚合所有来自设备的传感器数据等等以构建无缝体验。
4. ARWorldTrackingSessionConfiguration: 这个类会告诉 ARSession,在真实世界中追踪用户时需要使用六个自由度,roll、pitch、yaw 以及 X、Y、Z上的变换。如果不用这个类,就只能创建在同一个点旋转查看增强内容的 AR 体验。有了这个类,就可以在 3D 空间里绕着物体移动了。如果你不需要在 X轴、Y轴、Z轴上的变换,用户就会在投影增强内容时保持在固定位置,这时可以用 ARSessionConfiguration 类替代此类来初始化 ARSession 实例。
这次咱们只介绍三个类:ARSCNView / ARSession / ARWorldTrackingSessionConfiguration,打开项目,查看viewController 可以看到在 viewWillAppear 方法中初始化了 ARSession 实例,sceneView 指向一个 ARSCNView 实例; 我们可看到 使用SCNScene加载.scn场景文件进来,赋值给sceneView.scene,并通过sceneView.session运行起来;
我们可以翻一下ARKit && SceneKit frameWork, 这时候你就发现 ARSCNView继承与SCNView,而SCNView SceneKit库中的类,下面继承关系
练手
如果没有素材的话,咱们就系统提供的ship.scn进行学习,我这里在网上找了一个了素材,上面讲的是new project 选择 AR app , 我们可以也可以选择创建一个 Single View app , 来实现添加 AR场景;
因为我们是手动穿件的AR环境,系统不会给我们创建默认该有的一些文件夹和资源,那么我们就需要自己搭建,要搭建三个对象:ARSCNView(一旦创建,系统会帮我们创建一个场景Scene和相机),ARSession(开启AR和关闭AR都是靠它),ARSessionConfiguration(少了会话追踪配置,AR会话是无法独立工作的)
效果(很low - 学习阶段)
目前只做了拿到资源文件,摆放到制定位置,后期会做一些特效,比如说拖动以及场景应用