类的作用(纯翻译)
First Steps
-
ARSession
——一个管理增强现实所需的设备摄像头和动作处理的共享的对象。
ARSession对象会协调增强现实过程中的大部分处理,这些处理包括:从设备的动作感应硬件读取数据、控制设备内置摄像头和对捕捉到的摄像图像进行分析。ARSession会整合这些结果并在设备反馈的现实空间和模型化AR内容的虚拟空间之间建立一种对应关系。
任何一个用ARKit实现的AR场景都需要一个单独的ARSession对象。如果使用了ARSCNView或者ARSKView对象来创建了AR场景的话,一个ARSession实例已经包含在这个View之中了。如果通过别的渲染器来建立AR内容,就需要手动创建并维持一个ARSession对象。
运行一个session需要一个session configuration,这是一个ARSessionConfiguration或其子类ARWorldTrackingSessionConfiguration的实例。这些类决定了ARKit如何追踪一个设备的位置以及相对于现实世界的运动,因此影响了所创建的AR体验。
Configurations
ARSessionConfiguration
——一个仅用来追踪设备方向的基础设置。
所有的AR configuration都是用来建立现实世界和虚拟3D坐标空间的对应关系的。当app将这些虚拟内容和实时的摄像画面一起展示给用户,用户会产生一种这些虚拟内容是现实世界的一部分的错觉。
创建和维持各空间之间的对应关系需要追踪设备的移动。ARSessionConfiguration类用三自由度(3DOF,也就是三个旋转坐标:roll(绕x轴)、pitch(绕y轴)和yaw(绕z轴))。
这种最基础级别的运动追踪可以创建最基本的AR体验:一个虚拟物体可以出现在部分现实世界中,即使用户旋转设备从上、下或者侧面来观察这个物体。但是,无法追踪非平凡(non-trivially)的位置的变化,从而导致AR幻觉破碎,虚拟物体会相对于现实世界漂移。如用户无法看到虚拟物体的背面和其它部分。
ARSessionConfiguration类创建了有限的但是可用于所有iOS设备的AR体验,而增强的AR
体验只在某些设备上可用。ARWorldTrackingSessionConfiguration
——一个用于追踪设备方向和位置,并且监测现实世界平面的设置。
相比于ARSessionConfiguration,ARWorldTrackingSessionConfiguration可以从六自由度来追踪设备的运动,除了上述三自由度,还包括三个平移坐标(表示在x、y、z轴上的移动)。
这种级别的追踪可以创建一个沉浸式的AR体验,即无论用户旋转或者移动设备来观察,虚拟物体都会位于相对于现实世界的同一个位置。
如果设置了planeDetection,ARKit会分析场景来找到现实世界中的平面。对每一个被监测到的平面,ARKit会自动添加一个ARPlaneAnchor对象到该session。
Standard Views
-
ARSceneView
——一个用来展示增强相机视图和3D SceneKit内容的AR体验的页面。
ARSceneView类提供了最简单的方法来创建增强了现实的体验,即将虚拟的3D内容和设备相机反映的现实世界结合起来。当运行一个由ARSession对象提供的页面时:- 页面会自动的渲染有由设备相机提供的实时影像作为场景的背景。
- 页面的场景(scene,由SceneKit提供)的世界坐标系统会直接映射成由session configuration简历的AR世界的坐标系统。
- 页面会自动的移动它的SceneKit相机来匹配现实世界中设备的移动。
因为ARKit会自动将SceneKit空间匹配到现实世界,所以,放置一个虚拟物体让它能够保持现实世界的位置只需要正确地设置SceneKit的位置即可。
使用ARAnchor类来追踪添加在场景中的物体并不是必须的,但是,如果实现了ARSCNViewDelegate方法,就可以添加SceneKit内容到任一由ARKit监测到锚点上。
SRSKView
——展示2D内容
Real-World Objects And Positions
ARAnchor
——可以用于在AR场景中放置物体的一个现实世界的位置和方向
创建锚点对象并用addAnchor:
方法将锚点添加到AR会话后,可以追踪相对于相机的物体的位置和方向。
当开启来了planeDetection选项后,ARKit会自动添加这些锚点。ARPlaneAnchor
——继承自ARAnchor
,是在AR session中监测到的现实平面
的位置和方向。-
ARHitTestResult
——通过分析一个点在一个AR session中的设备相机视图而获得的现实平面的信息。
如果使用SceneKit或者SpiriteKit来展示一个AR体验,可以使用以下方法来搜索位于视图某一点的现实世界内容的相机图像:ARSCNView hitTest:types:
-
ARSKView hitTest:types:
另外,使用ARFrame hitTest:types:
方法可以搜索现实世界内容的相机图像。由于frame是独立于view的,对于这个方法来说,你所传递的点是标准化过的图像坐标,即坐标范围为(0,1)。
这些方法会返回一个ARHitTestResult对象的数组来描述找到的内容。
Camera and Scene Details
ARFrame
——AR session的一部分,被捕捉的视频图像和位置追踪信息。
一个运行的AR session会不断的通过设备相机捕捉视频帧。对于每一个frame,ARKit会结合图像和从设备运动感应硬件获得的数据来分析设备的真实位置。这些追踪信息和视图参数就是以ARFrame对象来保存和传递的。ARCamera
——表示AR session中一个被捕获的视图帧相关的相机位置和视图特征的信息。ARLightEstimate
——与被捕捉的视图帧相关的分析场景的灯光数据。
如果在AR scene上覆盖其它图形,可以使用在明暗处理算法中使用这些信息来使得这些图形可以匹配现实世界的光照情况。(ARSCNView类会自动使用这些数据来配置光照)
总体过程总结:
- ARCamera捕捉现实视图,并把其信息交由ARSession处理。ARCamera捕获的数据是一个一个的ARFrame构成。
- ARSession类会管理对现实世界的追踪和移动,并整合和建立现实世界和虚拟世界的对应关系,它追踪的内容由ARSessionConfiguration来决定。它会将ARCamera捕获到的数据转化成虚拟世界可展示的数据交给ARSceneView。
- 一个基于SceneView的ARSceneView以现实视图为背景,展示SceneView形成的3D物体,其中的展示现实视图的数据就是从ARSession获得,每一个虚拟物体的场景(Scene)都对应一个ARSession类。
- ARSceneView作为SceneView的子类,是由一个一个的节点(node)组成,当从ARSession获得现实视图的相应数据后,ARSceneView会构成相应节点并将其作为根节点(背景)。