AR开发向来不是简单的事,需要掌握很多知识,如上图所示的知识,你都要懂。 2017年WWDC大会发布了ARKit库,可以很方便的开发AR应用,并且演示效果非常好。前段时间奉老大之命研究iOS的AR技术,并做了技术分享,现在将分享的内容写一下,也好好整理一番。
1. ARKit软硬件条件
我们先看一下开发AR的软硬件条件:
Processor:A9orlater
iOSsystem:iOS11.0+
Xcode:9.0+
Set arkitkey in Info.plist
Set Camera Usage Description in Info.plist(ARAPP)
Devicesupportsessionconfiguration:isSupported
处理器要求A9以上,所以iPhone6 是不支持的,至少iPhone6s以上;iOS系统需要升级到iOS11.0以上; 开发工具Xcode需要更新到9.0以上;并且需要在Info.plist中设置arkitkey;可以使用session的configure属性isSupported判断是否iPhone是否支持AR。
2. ARKit处理过程
上图展示了ARKit从捕获真实世界的信息到展示的过程,摄像机首先捕获真实世界的图片,图片是一帧一帧的过来的,每帧图片都有一个相对应的时间戳,用来标识图片的先后顺序。同时利用世界追踪(world tracking,原谅直译)技术,先通过追踪手机的平移旋转获取摄像机的粗糙位置,再通过捕获真实世界图像的特征点得到摄像机的精确位置,从而可以实时获取摄像机的位置。将捕获真实世界的图像和摄像机位置合成得到场景解析,将场景解析和我们制作的虚拟场景合成并渲染就可以得到虚拟现实了,再将其显示出来即可。
3. ARKit架构
上图展示了ARKit的基本架构,ARKit可以支持2D、3D的场景,2D场景需要加载ARSKView,3D场景需要加载ARSCNView。两者除了虚拟场景制作不同之外,其他都是相同的。2D场景使用SpriteKit制作,3D使用SceneKit制作,我们以3D场景为例做介绍。
开发3D ARKit需要使用ARSCNView,ARSCNView已经将开发AR的所有API封装了,可以方便的使用。在ARSCNView中,session是管理类,捕获真实世界、世界追踪、渲染都由session完成,session在初始化时必须为其提供configuration才行。scene是负责做虚拟化的类,每个虚拟物体都是一个节点(SCNNode),所有节点都有一个公共父节点(rootNode),每个节点也可以添加自己的子节点。可以为每个节点添加动画效果,可以使用core animation添加,也可以使用其自带的runAction添加。可以在ARSCNView中添加Anchor,可以通过session手动添加,也可以打开平面检测自动添加。
除了session、scene之外,ARSCNView还