真的很强?今天只说苹果的增强现实框架:ARKit

每天早上,一位程序猿给你说早安

欢迎在下方评论区给出您的建议。

ARKIT是苹果公司发布的一个AR开发包,用于现有的iOS设备,是的,就是用在手机或者平板上,类似于pokemon go的效果。看了下演示视屏,嗯,看起来很厉害。

数据分析公司Sensor Tower的调查显示,ARKit到目前为止在全球的下载量已经达到300万,而AR游戏是最受欢迎的,游戏占 ARKit 专用应用下载量的 53%,而游戏占收入的 62%。

关于ARKit平台

ARKit定义:创建和跟踪用户所在的现实世界空间与可以建模可视化内容的虚拟空间之间对应关系的能力,简单来说,就是利用APP跟摄像头,将虚拟的画面与现实合成在一起,呈现出来。

ARKit基本信息

ARKit使用的是视觉惯性测距(visual-inertial odometry)的技术,将来自 iOS 设备运动传感器的信息和设备相机可见场景的计算机视觉分析相结合。

ARKit的无缝链接:ARKit在识别场景图像过程中,都将从视频的每一帧中跟踪这些特征位置的差异,并将该信息与运动感测数据进行比较,所以在设备的位置和运动是高精度模型。

ARKit怎么工作的?

ARKit利用摄像头拍摄现实世界实景画面而SceneKit建立虚拟世界。

两者完成后,ARKit将现实世界的画面和虚拟世界的信息进行叠加,渲染出一个AR世界。

渲染时,ARKit同时也在进行着其他的工作:

当移动摄像头时,维持世界的追踪,获取新的现实世界的信息。

对现实世界进行现场解析:有无特征点、有无平面信息。

维持与虚拟世界之间的链接。

ARKit的限制和注意事项

在对现实世界进行追踪的过程中,它必须依赖设备的物理环境的细节,然而这些细节并不总是一致的,也有可能没办法做到实时测量而发生一定的错误。

为了体验更高品质的AR效果,我们应该注意些什么呢?

在创建AR体验时,先预知其照明条件来设计。现实世界的追踪跟图像分析,需要清晰的图像,如果无法拍摄到细节处,追踪出来的质量会很低。

在平面检测时给予充足的时间。首次检测平面时,其位置和范围很大的可能是不准确的,当平面依然保持在同个场景时,ARKit会自动进行进一步对位置和范围的估计,在得到适合的结果后禁用平面检测。

使用追踪质量信息来提供用户的反馈。当设备在移动时,ARKit可以更好的理解场景,根据提供追踪状态的信息,可以利用它开发一个用户界面,帮助解决用户低质量的追踪状况。

ARKit的使用

ARKit作为全球最主要的AR应用平台,各类的游戏和APP可超越屏幕,带来超乎想象的沉浸式体验。

在ARKit的使用上,只要苹果A9以上芯片的iOS设备用户都可以使用ARKit应用,其中包括iPhone 6s以上的型号,所有的iPad Pro和2017年发布的iPad,这意味着能运行ARKit应用的iOS设备数量将以亿计,所以300万的下载量只是开端。

相信“全民AR“也只是时间的问题。

ARKit最佳实践

模型与骨骼动画

如果是使用.dae转.scn文件,资源中包含骨骼动画时,加载.scn文件到scene中会丢失动画,需要在加载时手动恢复一下(方法)。

设计骨骼动画是,要求设计师把动画放在根节点上,不要分散地放在每个bone上,这样可以方便地读取出动画到CAAnimation。

最好不要将太远的光照加载模型文件中,这样会导致加载文件到SCNNdoe时,你的node真实尺寸特别大,而你期望的尺寸可能只是模型对象的大小。

模型的SCNMaterial是用physically based lighting model会有更好的表现,设置比较好的环境光也比较重要。

光照

合理的阴影会大大提高AR的效果,贴一张纹理当然可以,但动态阴影更让人沉浸,我们还是要有追求的。

使用Bake ambient occlusion(ABO)效果,模型会更逼真。

光照node加载到SCNScene的rootNode上,这对做碰撞检测尤其重要

ARKit 你们所感兴趣的问题

汇总了一下网上,比较感兴趣的问题和苹果工程师的回答。

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

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

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

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

答:利用Cube背景。

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

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

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

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

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

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

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

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

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

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

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

7 . ARKit如何做marker?

答:ARKit不会提供这样的能力,如果想实现的,可以用ARKit提供的特征点来跑自己的计算机视觉。熟悉计算机视觉的同学应该都明白,其实marker就是一种简单的图像识别,如果ARKit提供的特征点可靠的话,完全可以自己做特征匹配。

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

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

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

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

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

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

欢迎在下方评论给出您的建议。

  • 发表于:
  • 原文链接:http://kuaibao.qq.com/s/20171209G03MBJ00?refer=cp_1026

扫码关注云+社区