iOS-ARKit基本概念及基本开发的流程

最近在看APPLE的ARKIT的相关文档,记录一下自己的理解,也分享给大家,希望可以帮助到一些需要帮助的开发者。

开发流程概述

你需要一个ARSession类的实例,一个APP只需要一个它的实例,它有两个实例方法run和pause,调用run的时候使用ARConfiguration的三个子类中的一个提供相关信息进行配置。实例一般不需要我们自己创建,ARSCNView的实例session已经创建好了,只需要在StoryBoard中添加ARSCNView到ViewController的View中,创建IBOutlet,就可以在代码中使用ARSession实例。ARSCNView提供debugOptions,可以在开发过程中显示一些辅助信息,比如featurePoints, worldOrigin等。还有一些类似自动灯光的辅助autoenablesDefaultLighting的设置。运行过程中可以随时调用session.pause()暂停session。还可以使用run的第二个可选参数options数组提供resetTracking,removeExistsAnchors重置session。

ARKit已经做完了相当多的工作,使得开发augmented reality(增强现实)入门很容易,你只需要一个好的创意,然后实现它。

ARKit利用很多的Anchor来连接现实和虚拟的2D和3D元素,不同的ARConfiguation会产生不同的Anchor,比如ARWorldTrackingConfiguration会产生ARPlaneAnchor等。一般做法是Anchor产生时,基于不同的使用,会从ARSessionDelegate或者ARSCNViewDelegate中去处理这些Anchor,将自己的2D或者3D元素与这些Anchor通过Parent/Child的关系绑定起来。

Anchor可以是自己手动添加的,也可以是在设置了planeDetection启用后,由ARSession产生的Anchor。具体可以参照苹果官方的每个AR样例代码研究一下。基本基于不同的配置的ARSession会有相应的Anchor。

ARSession也可以和Metal框架配置使用,这时候需要利用ARsession的currentFrame得到最新捕获到的frame和tracking信息。再根据这些信息,APP决定要如何进行下一步操作。这种模式自定义的灵活性很高。也要相应的更强的各方面技术知识实力。

ARSession

如果使用框架SceneKit或者SpriteKit,那会有相应的ARSCNView,ARSKView可以使用,这两个View中会有创建好的ARSession实例可以使用。代码中只需要在调用run方法的时候提供一个ARConfiguration的三个子类中的某一个实例就可以将AR跑起来。XCODE新建项目的时候有一个AR模板,可以看看基本构架代码。

ARConfiguration

不能直接使用这个类,这是个抽象类。提供一些基本配置参数,只能使用它的某一个子类。

ARWorldTrackingConfiguration

这个模式的AR可以实现6DOF的跟踪。也就是我们拿着手机,不旋转的情况下,我们往前后左右移动时,带动设备移动,图像跟着动的过程中,ARSession持续分析图像中的特性,得出特性,维护现实与虚拟的连接。相应转虚拟场景中的Camera,以此达到增强现实。另外一个就是手机的旋转,我们拿着手机往上看,往下看,可以看到虚拟的前后上下左右。简单来说,移动时候,虚拟场景里的Camera也跟着移动,假如我们已经放置了虚拟的对象,那这个对象会随着设备的移动,会从Camera的视角中离开,就像现实一样。

坐标以最开始ARSession初始化完成时为原点,设备往前就是Z的负轴方向。设备往右是X的正轴方向。设备往上是Y的正轴方向。参见下图:

arkit_worldtracking_coordinate

假如我们在初始化完成的时候,设备没有发生移动,那设备将在原点0,0,0的位置,此时加一个虚拟的物体,给定坐标0, 0, -1,那这个物体将会出现在正前方。我们往左移动,物体会从右边随着我们的移动脱离设备的屏幕。理解坐标系才能正确按自己的意图放置虚拟物体。只有这个模式有hitTest和planeDetection。hitTest是交互测试,API完成主要坐标转换等实现,用户实现应用层面的功能就可以。

AROrientationTrackingConfiguration

这个模式只提供旋转的跟踪,不提供移动跟踪,就是人站着不动,以这个中心将设备看向各个方向来跟踪维护现实和虚拟的连接。

ARFaceTrackingConfiguration

这个模式只提供一个人脸的跟踪,如果有多个人脸,ARSession只处理最优的那一个。人脸识别完成后,APP层面可以添加虚拟物体到人脸表面,虚拟化妆等应用就可以利用此模式实现。

 

ARAnchor

一个现实世界中位置和旋转坐标,它可以用来在AR场景放置对象。ARSession主要通过这个ARAnchor来维持现实和虚拟世界的连接。

ARAnchors可以通过代码手动添加,一般是hitTest的时候得到3D坐标,然后将Anchor加到虚拟场景中,利用ARSession的跟踪技术,维持现实与虚拟的Anchor连接。

下面是自动Anchor:

ARPlaneAnchor

一个平面的Anchor,包含有位置,大概大小等信息。可以是水平或者垂直的。

ARImageAnchor

当启用图像检测时,首先在APP中提供需要识别的图像,这样在ARSession运行过程中,如果匹配到了这个图像,将会产生一个ARImageAnchor,这个Anchor在重置Session前只会产生一次。

ARFaceAnchor

在检测到人脸时,会生一个ARFaceAnchor。APP根据这个ARFaceAnchor放置虚拟物体。

感谢您的阅读并谢谢支持!如果您能出点绵薄之力赞助一下网站的租用费用那就太好了!

Advertisements

发表评论

Fill in your details below or click an icon to log in:

WordPress.com 徽标

You are commenting using your WordPress.com account. Log Out /  更改 )

Google photo

You are commenting using your Google account. Log Out /  更改 )

Twitter picture

You are commenting using your Twitter account. Log Out /  更改 )

Facebook photo

You are commenting using your Facebook account. Log Out /  更改 )

Connecting to %s