前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >到底有多强?苹果的增强现实框架:ARKit

到底有多强?苹果的增强现实框架:ARKit

原创
作者头像
郭艺帆
修改于 2017-09-05 01:48:18
修改于 2017-09-05 01:48:18
3.6K0
举报
文章被收录于专栏:郭艺帆的专栏郭艺帆的专栏

写在前面

其实准备ARKit已经很久了,确切地说当WWDC开始介绍时就开始了。其后参加了苹果的ARKit workShop,加上自己有点事,所以文章一直没发出来,现在再发一篇上手文章,也没什么意义。所以本篇文章重在workShop上苹果工程师的解惑和我对ARKit的理解, 最后会简单介绍一下相关技术。

ARKit

AR(Argument Reality)大家都知道,就是将3D模型渲染在摄像头图像之上,混合渲染达到虚拟物品就好像是现实的一部分。ARKit解决了模型定位难的问题,结合CoreMotion运动数据与图像处理数据,来建立一个非常准确的SLAM系统,构建虚拟世界和现实世界之间的映射。同时能够分析环境自动给模型添加光源,实际效果还是比较惊艳的。

从结构上看,ARKit提供了一套简单易用的AR框架,但框架之外,需要很多的三维空间、游戏编程、3D模型、GPU渲染的知识来理解AR技术。ARKit最重要的两个类是ARSession与ARSCNView

类似与AVFoudation,ARKit中由ARSesseion类来配置SLAM系统的建立。设置RSession的配置选项为ARWorldTrackingSessionConfiguration来追踪设备的方向与位置,并且能够检测平面。这个选项只有A9处理器之上才支持。其他型号处理器(6S以下)只能追踪设备的方向。

ARKit的提供了自带的两个渲染类:ARSCNView和ARSKView,后者用来渲染2D模型。之前鲜有问津的SceneKit算是有了用武之地。这两个类会自动开启摄像头并建立虚拟空间与现实空间之间的映射。同时ARKit也支持自定义用OpenGL或Metal实现渲染类,但要自己管理与ARSession之间的通信,同时要遵循iOS GPU命令不能在后台调用的规则。

其他比较重要的类有ARAnchor、ARHitTestResult、ARFrame、ARCamera。

  • ARAnchor世界中点,可以用来放置虚拟物品,也可以代指现实物品的放置位置。ARAnchor在世界中是唯一的,并包含仿射变换的信息。
  • ARHitTestResult

HitTest的返回,世界中的ARAnchor。

与UIKit中的hitTest不同,ARKit的HitTest以设备方向配合视图坐标,建立一条世界中的射线,所有在射 线上的ARAnchor, 会以由近到远的方式返回。此外SCeneKit的HitTest返回虚拟物品。

  • ARFrame摄像头视频帧的包装类,包含位置追踪信息、环境参数、视频帧。重点是它包含了苹果检测的特征点,通过rawFeaturePoints可以获取,不过只是特征的位置,具体的特征向量并没有开放。
  • ARCamera

场景中的摄像机,用来控制模型视图变换和投影变换。同时提供6DOF(自由度信息,方向+位置)与追踪信息。

对ARKit的思考

从框架接口来看,ARKit 暴露出来的能力并不多且小心翼翼。

AR的能力,由三部分组成:

  1. 3D渲染
  2. 空间定位与方向追踪
  3. 场景理解(检测与识别)

目前看 ARKit 只提供了3D渲染的入口,其他两个都被封装起来了,所以目前来看渲染是差异化的主要途径,但不唯一。ARKit workShop 上,面对大家提出的苛刻问题,苹果工程师大量提到特征点。其实计算机视觉是可以在场景理解这一层面做一些自定义的。如果苹果开放更多的能力,那AR的能力完全可以作为任何一个APP的特性。

此外,ARKit还存在一些问题:

  • ARKit 是基于惯性-视觉来做空间定位的,需要平稳缓慢的移动+转向手机,才能构建更加准确的世界,这对用户来说是一种考验,需要积极提示。
  • 理论上 ARKit 在双目摄像头上的表现应该优于单目,这里需要具体测试,如何来平衡用户体验。
  • .scn文件还是知识一个简单的3维模型编辑器,支持的文件格式少,对模型、光照的编辑方式不太友好。对骨骼动画的支持还有只在能用的阶段。
  • 一旦刚开始检测平面失败,出现时间久,飘逸的现象,后期很难再正确检测,要强制重启。

ARKit最佳实践

模型与骨骼动画

  • 如果是使用.dae 转 .scn 文件,资源中包含骨骼动画时,加载.scn文件到 scene 中会丢失动画,需要在加载时手动恢复一下(方法)。
  • 设计骨骼动画是,要求设计师把动画放在根节点上,不要分散地放在每个bone上,这样可以方便地读取出动画到CAAnimation。
  • 最好不要将太远的光照加载模型文件中,这样会导致加载文件到SCNNdoe时,你的 node 真实尺寸特别大,而你期望的尺寸可能只是模型对象的大小。
  • 模型的SCNMaterial 是用 physically based lighting model 会有更好的表现,设置比较好的环境光也比较重要。

光照

  • 合理的阴影会大大提高AR的效果,贴一张纹理当然可以,但动态阴影更让人沉浸,我们还是要有追求的。
  • 使用Bake ambient occlusion(ABO)效果,模型会更逼真。
  • 光照node加载到 SCNScene的rootNode上,这对做碰撞检测尤其重要

ARKit workShop

汇总了一下workShop上,比较感兴趣的问题和苹果工程师的回答,掺杂自己的理解。

1 . ARFrame提供的YUV特征,如何获取RGB特征?

答:使用Metal去获取特征点的RGB值。

(这个我一般是用OpenGL的shader去做,我想苹果工程师是说将图像用Metal转成位图后,根据坐标去获取RGB值。但特征点不多的话,直接在CPU中利用公式计算一下不就行了吗?不过也许Metal有更强大的方法。)

2 . ARKit中怎么做虚拟环境?

答:利用Cube背景。

(这个在VR中用的比较多,就是用一个贴满背景的立方体包裹住摄像机所在的空间,网上的资料较多。)

3 . ARKit的如何模拟光源的?为什么不产生阴影。

答:ARKit通过图像的环境来设置模型的环境光强度,而环境光是不产生阴影的。

(我猜苹果应该是通过像素值来确定环境光的,如果用高级一点的方法完全可以添加直射光。光照有许多模型,只有带方向的光才会产生阴影,如果想用ARKit做出阴影,可以看我的回答。)

4 . AVFoudation与ARSession之间的切换会有问题吗?

答: ARSession底层也是用AVFoudation的,如果重新打开ARKit,只需要重新 run 一下 ARSession 可以了,但切换时会有卡顿。

(我自己试了一下,切换时确实有轻微的卡顿,切换后ARSession就停止摄像头采集了,但3D渲染会继续,只是丧失了空间定位与检测识别的能力。)

5 . ARKit是否支持前置摄像头?

答:不支持。ARKit并不是一个用于前置摄像头环境的技术,因为空间有限,能提供的信息也非常有限。

(这个问题是很多参会者关心的问题,但 ARKit 团队似乎不是很 care ,说到底还是因为前置摄像头的场景中,用户很少会移动,画面中一般大部分都是人脸,这样 ARKit 的定位与检测能力无法很好使用。建议由类似需求的同学好好梳理,是不是想要的是3D渲染而不是AR。)

6 . ARKit的最大应用范围是多少?

答:100米是 ARKit 在保持较好用户体验的最大测量距离。

(这个其实我有点没太听清,实际数字应该是100米以上)

7 . ARKit如何做marker?

答:ARKit不会提供这样的能力,如果想实现的,可以用 ARKit 提供的特征点来跑自己的计算机视觉。

(熟悉计算机视觉的同学应该都明白,其实marker就是一种简单的图像识别,如果 ARKit 提供的特征点可靠的话,完全可以自己做特征匹配。现场问了苹果工程师,他们的特征点是什么特征,他们不愿回答,不过看使用场景的话,应该是一种边缘敏感的低维特征,应该类似 PCA + SURF)。

8 . ARKit合适支持A8?性能如何?

答:支持A8处理器并不在计划中(这里指的是空间定位能力,A8只支持空间方向追踪),ARKit 的大部分计算都是在CPU上处理的,在A8处理器上的性能损耗在 15% ~ 25%, 在A9处理器上的性能损耗在 10% ~ 15%。

(看他们的意思,大量的计算,在A8上应该是比较低效的,解释了为什么A8上的追踪能力是阉割版的。性能应该说还不错,与游戏类似)

9 . 如何追踪实际的物体?

答:可以在已识别的物体位置上,添加一个node, 这样就能在之后的处理中一直保持这个物体的追踪。

(这次的wrokShop,苹果大量提到他们的特征点,如果他们真的足够重视的话,应该开放特征检测的过程与特征向量,希望后期能够开放吧)

10 . 如何连接两个不同 ARKit 世界?

答:ARKit没有计划支持这些,比较 tricky 的做法是将两个手机紧挨着启动ARKit。

(这个也是很多参会者关注的问题,相信不少人已经有了自己的解决方案,这里我后期会出一篇文章讲解。)

AR相关

渲染

AR说到底还是一种游戏技术,AR提供了定位、检测平面的功能,这些功能并没有暴露出来供我们自定义,那么只能在渲染方面做出差异。

目前ARKit支持的3D渲染引擎,有sceneKit,Unity3D,UE。后两者都是成熟的游戏引擎,能够提供完整的游戏功能,但没有我们没有使用,主要因为:

  1. 上手较慢,iOS11 9月中旬就要发布了,时间紧促。
  2. 接入Unity3D会给安装包造成很大压力,成本大约10M。

最终决定还是用sceneKit,主要出于一下考虑:

  1. ARKit目前对Unity3D,UE的支持没有sceneKit好。
  2. sceneKit用OC写,可以OCS。
  3. sceneKit是系统动态库,对安装包压力不大。
  4. sceneKit虽然能力弱,但是对于AR来说足够了,AR毕竟打造不了复杂的游戏。

坐标系

ARKit和OpenGL一样,使用右手坐标系

定位

将模型加载到空间中,需要6个自由度(6DOF)的信息来指定模型的表现:

分别是沿三个坐标轴的平移与旋转。

可以使用旋转矩阵、欧拉角、四元数来定义空间旋转,ARKit的这三种方式均有运用。

  • 旋转矩阵 这个好理解,使用旋转的变换矩阵即可,维度4*4,定义一次旋转需要16个数。
  • 欧拉角

把空间旋转分解成绕三个局部坐标轴的平面旋转,分别是pitch(俯仰角,绕x轴),yaw(偏航角,绕y轴),roll(翻滚角,绕z轴),然后以一定顺序做旋转(sceneKit中是 roll -> yew -> pitch),欧拉角是使用三个 3*3 矩阵连乘实现,而且存在万向锁的问题。

当pitch为90°时,pitch与yew的旋转轴重合了,这时飞机丧失了一个旋转的维度。

  • 四元数

将三维空间的旋转表示成四维空间的超球面上位移, 概念有点复杂。简单来说,我们只需要旋转轴 u→=(x,y,z) ,和角度 emoji 来构造一个单位四元数 q:

那么旋转可以定位为:

对任何需要旋转的点

,将它扩展成一个纯四元数
,代入上面的公式,就可以得到旋转后的点。

追踪

visual-inertial odometry :基于视觉和惯性的测量方法,惯性数据是指角速度和加速度,这些都由Core Motion提供,加上图像特征,能够更准确地建立SLAM系统。ARKit会将提取到的特征点映射的空间中,也就是说特征点是由三维坐标的,我们可以利用特征点来确定图像中物体的远近。实测效果不错,误差在分米级别。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
《 iPhone X ARKit Face Tracking 》
该文章讲述了作者从一名普通iOS开发者到Apple开发者的历程,包括开发经历、学习Apple官方文档、开发者社区、开发工具、代码仓库、团队协作、总结与收获。\n在开发过程中,作者通过学习Apple的官方文档,了解了Objective-C以及Swift编程语言,并逐渐掌握了iOS开发的核心概念。通过参加技术社区,了解到了ARKit、SceneKit、Core ML等框架,并深入学习了Objective-C与Swift编程语言的基础知识和最佳实践。在开发工具方面,作者使用了Xcode、Instruments、Sketch、Adobe XD、Figma等工具。在团队协作方面,作者通过使用GitHub进行版本控制,与团队成员进行代码共享、沟通、协作。\n通过开发iOS应用,作者深入了解了ARKit、SceneKit、Core ML等框架的原理和最佳实践,并逐渐掌握了基于这些框架的开发流程。同时,作者通过总结与收获,逐渐形成了一套适用于自己的iOS开发学习体系。\n
腾讯Bugly
2017/11/20
3.8K0
《 iPhone X ARKit Face Tracking 》
ARKit:增强现实技术在美团到餐业务的实践
增强现实(Augmented Reality)是一种在视觉上呈现虚拟物体与现实场景结合的技术。Apple 公司在 2017 年 6 月正式推出了 ARKit,iOS 开发者可以在这个平台上使用简单便捷的 API 来开发 AR 应用程序。
美团技术团队
2019/03/22
2.2K0
ARKit:增强现实技术在美团到餐业务的实践
ARKit 初探
今年7月Apple推出了AR工具ARKit,着实闪着了大家的眼睛。从目前的评测可以知道 ARKit已经非常成熟,完全可以进行商用了。
音视频_李超
2020/04/01
2.6K0
ARKit 初探
ARKit by Example - 第1部分:AR立方体
这篇第一篇文章将使用ARKit创建一个非常简单的hello world AR应用程序。最后,我们将能够在增强的世界中定位3D立方体,并使用我们的iOS设备移动它。
iOSDevLog
2018/09/20
1.4K0
ARKit by Example - 第1部分:AR立方体
ARKit浅析V1.0
本文主要介绍了ARKit框架,包括其开发环境、实现原理、API以及使用场景。ARKit框架是苹果在WWDC2017上推出的,可以用于构建增强现实应用。本文从ARKit的介绍、工作原理、API介绍、使用场景以及一个3D虚拟物体的例子等方面进行了详细阐述。
MelonTeam
2018/01/04
1.9K0
ARKit浅析V1.0
iOS ARKit教程:用裸露的手指在空中画画
最近,Apple公布了名为ARKit的新增强现实(AR)库。对于许多人来说,它看起来只是另一个优秀的AR库,而不是一个值得关注的技术破坏者。但是,如果你看一下过去几年的AR进展,就不应该太快得出这样的结论。
iOSDevLog
2018/08/22
2.4K0
iOS ARKit教程:用裸露的手指在空中画画
ARKit
一个增强现实(AR)描述了用户体验,从设备的摄像头的方式,使这些元素似乎居住在现实世界中添加2D或3D元素到实时取景。ARKit结合了设备运动跟踪,摄像机场景捕捉,高级场景处理和显示便利性,简化了构建AR体验的任务。您可以使用这些技术使用iOS设备的后置摄像头或前置摄像头创建多种AR体验。
iOSDevLog
2018/08/22
2.4K0
ARKit介绍
Apple在WWDC17上宣布了一个名为ARKit的新iOS框架。它是一个“允许您轻松为iPhone和iPad创建无与伦比的增强现实体验”的框架。该框架随iOS 11一起发布(目前处于测试阶段),并且仅由Apple的A9或A10芯片驱动的iOS设备支持。这意味着它不适用于iPhone 5S或iPad Mini等旧设备。此外,您无法在模拟器中使用它,因此您必须使用最新的测试版更新您的iPhone / iPad(iOS 11 SDK仅适用于Xcode 9)。
iOSDevLog
2018/08/22
2.6K0
ARKit介绍
为何苹果、Google、Facebook力推3D AR,看完这个你就知道了
苹果大中华区董事总经理葛越在乌镇世界互联网大会上发表演讲,再次推介了苹果努力打造的 AR 体验,并以天天 P 图为例介绍了 AR 的好玩之处。“腾讯打造的这款天天P图的 APP 正是结合了这一系列的软硬技术让大家都能体验到川剧变脸的乐趣。”她说。 今年 9 月,iPhone X 惊艳登场,除了震撼的全面屏,同样引人注目还有 FaceID 和 AR 功能,苹果在现场演示了人脸解锁,还有好玩的 Animoji。 3D AR 自拍到底有什么不同? 要说 P 图美颜,早在 iPhone X 之前就有众多 App
BestSDK
2018/03/02
1.2K0
为何苹果、Google、Facebook力推3D AR,看完这个你就知道了
ARKit 到底怎么实现的
Integrate iOS device camera and motion features to produce augmented reality experiences in your app or game
酷走天涯
2018/09/14
1.2K0
ARKit 到底怎么实现的
ARKit示例 - 第4部分:现实主义 - 照明和PBR
在本文中,我们将在场景中插入更逼真的虚拟内容。我们可以通过使用称为基于物理的渲染(PBR)的技术使用更详细的模型来实现这一点,并且还可以更准确地表示场景中的光照。
iOSDevLog
2018/09/20
1.3K0
ARKit示例 - 第4部分:现实主义 - 照明和PBR
ARKit示例 - 第2部分:平面检测+可视化
在我们的第一个hello world ARKit应用程序中,我们设置了我们的项目并渲染了一个虚拟3D立方体,可以在现实世界中渲染并在您移动时进行跟踪。
iOSDevLog
2018/09/20
3K1
ARKit示例 - 第2部分:平面检测+可视化
ARKit 进阶:物理世界
ARKit的渲染能力是由其他框架实现的,除了苹果的SceneKit, Unity3D、UE, 或者其他自定义的OpenGL、Metal渲染引擎都可以与ARKit相结合。本文所介绍的技术都是基于SceneKit。
郭艺帆
2018/01/15
2.9K2
ARKit 进阶:物理世界
谷歌增强现实技术ARCore
简介 随着,今年苹果在6月的WWDC 2017上发布的ARKit,谷歌也在前不久(8月29日),发布了用于Android平台的AR SDK——ARCore。这弥补了AR在Android市场上的空缺,让无数Android用户激动不已,要知道Android拥有超过20亿活跃设备,如果说ARKit是苹果AR的起点,那么说ARCore掀起了移动AR市场的狂潮,ARCore的横空出世意味着AR进入手机大群体用户的生活成为可能。 大约3年前,Google曾发布一个Tango AR,而ARCore也可以看做是Tango的
xiangzhihong
2018/01/26
1.7K0
iOS ARKit教程:赤手在空中绘画
这次推荐的是ios上的文章,无奈ios上的东西没接触过,权且当做开拓视野了。老规矩,原文如下:
WindCoder
2018/09/19
1.9K0
iOS ARKit教程:赤手在空中绘画
SwiftShot:为增强现实创建游戏
了解Apple如何为WWDC18构建精选演示,并获得使用ARKit,SceneKit和Swift制作自己的多人游戏的技巧。
iOSDevLog
2018/08/22
1.9K0
SwiftShot:为增强现实创建游戏
ARKit上手 添加3D物体
之后,填写完项目信息后,选择Content Technology为SceneKit,当然也可以选择SpriteKit,不过在3D空间中就不是那么立体了。 开发语言选择Swift,Swift天然亲和ARKit,很多网上的Demo都是用Swift写的,这样也方便移植和借鉴。
Charlie_W
2018/10/19
2.3K0
ARKit上手  添加3D物体
ARKit 简介
ARKit 简介 苹果在AR一直布局VR,最近的苹果开发者大会上,果家终于放出大招:iOS移动端ARKit平台以及VR兼容新桌面操作系统macOS High Sierra。 增强现实(AugmentedReality,简称 AR),是一种实时地计算摄影机影像的位置及角度并加上相应图像的技术,这种技术的目标是在屏幕上把虚拟世界套在现实世界并进行互动。说起AR,其实它并不是第一次出现,不管在国内还是国外,好多大小公司都对AR有所涉猎,去年流行的Pokémon Go,阿里的AR红包,百度的AR地图…都是AR领
xiangzhihong
2018/02/06
2.7K0
ARKit 简介
ARCore 初探
前言 Google近几年在VR/AR领域动作频频,先是推出Cardboard作为VR体验的敲门砖,随后发布Project Tango作为AR体验的基石,紧接着移动端的VR平台Daydream应运而生,
QQ音乐技术团队
2017/09/26
6.6K3
ARCore 初探
使用ARKit开发AR游戏-基础篇:ARKit入门篇
11月到12月,使用新出的ARkit开发了一个AR游戏,梳理下开发过程的经验,整理成文。 计划是一个系列,入门篇主要是收集的资料整合。
flavorfan
2018/05/29
4.6K7
使用ARKit开发AR游戏-基础篇:ARKit入门篇
相关推荐
《 iPhone X ARKit Face Tracking 》
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档