ARFoundation入门(官方文档翻译) 您所在的位置:网站首页 马自达车机怎么重启 ARFoundation入门(官方文档翻译)

ARFoundation入门(官方文档翻译)

2022-12-26 01:25| 来源: 网络整理| 查看: 265

关于ARFoundation

AR Foundation允许您在Unity中以多平台方式使用增强现实平台。

AR Foundation是MonoBehaviour用于处理支持以下概念的设备的一组APIs:

世界跟踪:跟踪设备在物理空间中的位置和方向。平面检测:检测水平和垂直表面。点云,也称为特征点。参考点:设备跟踪的任意位置和方向。光线估算:估算物理空间中的平均色温和亮度。环境探针:一种用于生成表示物理环境特定区域的立方体贴图的方法。人脸跟踪:检测和跟踪人脸。图像跟踪:检测和跟踪2D图像。

如果要从AR Foundation 1.0进行迁移,请参阅《迁移指南》。

Subsystems(子系统)

AR Foundation是建立在子系统上的,“子系统”用于显示不同类型的信息,是与平台无关的界面,与AR相关的子系统在AR Subsystems包中定义,并使用命名空间UnityEngine.XR.ARSubsystems。有时您需要与AR子系统包中的类型进行交互。每一个子系统都有实现一些特别的功能,例如,例如平台检测功能接口是由XRPlaneSubsystem提供的。

Providers

“提供者”是子系统的具体实现。例如,ARCore XR插件包包含了许多AR子系统的ARCore实现。因为不同的提供程序对特定的特性有不同的支持,所以每个子系统也有一个描述符来指示它支持哪些特定的子系统特性。例如,XRPlaneSubsystemDescriptor包含指示是否支持水平或垂直平面检测的属性。

当供应商决定他们将如何实现每个子系统时,通常他们正在包装该平台的原生SDK(例如,iOS上的ARKit和Android上的ARCore)。

安装AR Foundation

要安装此软件包,请按照“ 软件包管理器”文档中的说明进行操作。

子系统是在其他软件包中实现的,因此要使用AR Foundation,您还需要安装至少一个特定于平台的AR软件包(“ 窗口”>“软件包管理器”):

ARKit XR插件ARCore XR插件

如果需要使用商汤的SenseAR XR plugin,好像只有Unity2018.4.11以上版本才行。

术语

追踪:AR设备确定其在世界上的相对位置和方向的能力。例如,如果环境太暗,则设备可能会“丢失跟踪”,这意味着它不再能够准确报告其位置。

可追踪的:由AR设备检测和/或跟踪的真实世界特征,例如平面。

特征点:点云中的特定点。AR设备使用摄像头和图像分析来跟踪世界上的特定点,这些点用于构建其环境地图。这些通常是高频元素,例如木纹表面的结。

Session:引用AR实例。

(Session Space)会话空间:相对于AR会话开始的坐标系。例如,会话空间(0,0,0)是指创建AR会话的位置。AR设备通常报告关于其会话起源的可追踪对象和追踪信息。

使用AR Foundation

有关示例,请参见ARFoundation Samples GitHub存储库。

基本设定

基本的AR场景层次如下所示:

您可以通过右键单击场景层次结构并选择XR> AR Session和XR> AR Session Origin来自动创建这些文件。

下面对所需的组件进行更加更详细地说明。

ARSession(AR会话)

AR场景应包含一个ARSession组件。AR Session控制着AR体验的生命周期,在目标平台上启用或禁用AR。将ARSession可以在任何GameObject。

ARSession脚本

如果ARSession禁用,则系统将不再跟踪其环境中的功能,但是如果稍后启用了该功能,则系统将尝试恢复并维护以前检测到的功能。如果选中“Attempt Update”,则设备将尽可能尝试安装AR软件。对此功能的支持取决于平台。

注意: AR会话是全局构造。一个ARSession组件管理该全局会话,因此多个ARSession组件都将尝试管理同一全局会话。

检查设备支持

一些平台可能支持有限的设备子集。您需要能够检测到对AR Foundation的支持,以便在不支持AR时可以提供替代的体验。该ARSession组件具有一个静态线程,可用于确定运行时是否支持AR:

public class MyComponent [SerializeField] ARSession m_Session; IEnumerator Start() { if ((ARSession.state == ARSessionState.None ||) (ARSession.state == ARSessionState.CheckingAvailability)) { yield return ARSession.CheckAvailability(); } if (ARSession.state == ARSessionState.Unsupported) { // Start some fallback experience for unsupported devices } else { // Start the AR session m_Session.enabled = true; } } }Session State

要确定Session的当前状态(例如,是否支持该设备,是否安装了AR软件以及该Session是否正常工作),请使用ARSession.state。当会话状态更改时,您还可以订阅事件:ARSession.stateChanged。

ARSessionState 含义None:AR系统尚未初始化,可用性未知。Unsupported:当前设备不支持AR。CheckingAvailability:系统正在检查当前设备上AR的可用性。NeedsInstall:当前设备支持AR,但需要额外安装。Installing:正在安装AR软件Ready:支持AR并准备就绪SessionInitialized:AR会话正在初始化(即正在启动)。这通常意味着AR正在运行,但尚未收集到足够的有关环境的信息SessionTracking:AR会话正在运行并且正在跟踪(即设备能够确定其在世界上的位置和方向)。ARSessionOrigin(一个对象)

ARSessionOrigin的目的是将可跟踪特征(例如平面和特征点)转换为它们在Unity场景中的最终位置、方向和比例。为AR设备在“Session Space”(相对于ARSession开始的未缩放空间)中提供其数据,因此将ARSessionOrigin提供适当的转换到Unity空间。

这个概念类似于在Unity中使用其他资源时,“model”或“local”空间与world Space之间的区别。例如,如果您从DCC工具(数字内容创建工具,像Maya)导入房屋资源时,则门将在相对于建模者原点的位置。这通常称为“模型空间”或“局部空间”。在Unity中实例化它时,相对于Unity的原点,它还将具有一个世界空间。

同样,由AR设备产生的可跟踪对象(例如飞机)相对于设备的坐标系位于“Session Space”中。在Unity中对GameObjects 实例化时,它们还具有一个世界空间。为了在正确的位置实例化它们,AR Foundation需要知道会话源应在Unity场景中的位置。

该ARSessionOrigin还允许您扩展虚拟内容和应用偏移到相机。如果要缩放或偏移ARSessionOrigin,则它Camera应该是子级ARSessionOrigin。由于Camera是由Session驱动的,因此Camera和所检测的可跟踪对象将在此设置中一起移动。

Scale

要将比例尺应用到ARSessionOrigin,只需设置其transform比例尺即可。这具有缩放来自设备的所有数据的效果,包括AR Camera的位置和任何检测到的可跟踪对象。较大的值会使AR内容显得更小,例如,缩放10会使您的内容显得小10倍,而0.1会使您的内容看起来大10倍。

Tracked Pose Driver(脚本)

ARSessionOrigin的子对象GameObject应该(至少)是一台照相机,它将用于呈现您希望可视化的任何可跟踪对象。摄像机上还应该有一个TrackedPoseDriver组件,该组件将根据设备的跟踪信息来驱动摄像机的本地位置和旋转。此设置允许摄像机与本地空间匹配AR“Sessiong Space ”。

AR Camera Manager

在ARCameraManager控制相机部分功能,例如作为表示视频来源的纹理和控制光照估计模式。

选项 含义

对焦模式: 可以是“自动”或“固定”。“自动”启用硬件相机的自动对焦模式,而“固定”禁用它(焦点为“固定”且不会自动更改)。

光线估算:可以是“禁用”或“环境强度”。如果未禁用,它将指示平台生成光估计信息,以估计物理环境中的平均光强度和颜色。这可能会影响性能,因此如果不使用它,请禁用它。

AR Camera Background

如果要将设备的彩色摄像机纹理渲染到背景,则需要向ARCameraBackground摄像机添加组件。这将订阅AR摄像机事件,并将摄像机纹理显示在屏幕上。这不是必需的,但在AR应用程序中很常见。

该Custom Material属性是可选的,通常不需要设置它。Unity提供的特定于平台的软件包(例如ARCore和ARKit)提供了自己的着色器用于背景渲染。

如果Use Custom Material为true,则ARCameraBackground将会使用Material您指定的进行背景渲染。

如果您只有一个ARSessionOrigin,则只需将其添加ARCameraBackground到该摄像机。如果您有多个ARSessionOrigins(例如,有选择地以不同的比例渲染不同的内容),则应为每个使用单独的摄像机,ARSessionOrigin并为分别使用单独的摄像机ARCameraBackground。

将相机纹理复制到渲染纹理

相机纹理很可能是“ 外部纹理”,并且可能不会持续超出帧边界。将相机图像复制到“ 渲染纹理”以进行持久性或进一步处理可能很有用。此代码将相机图像变成您选择的渲染纹理:

Graphics.Blit(null, m_MyRenderTexture, m_ARBackgroundCamera.material);访问CPU上的摄像机图像

请参阅相机图像手册文档。

AR Input Manager

此组件对于启用世界跟踪来说是必需的。没有它,上述的“跟踪姿势驱动程序”将无法获取设备的姿势。此组件在场景中的位置无关紧要,并且不应超过一个。

Trackable Managers(一个脚本)

请参阅TrackableManagerse。

Visualizing Trackables(一个脚本)

可跟踪的组件不会自行执行任何操作;它们只包含与每个可跟踪对象相关的数据。有很多可视化可跟踪对象的方法,因此AR Foundation包含一些可视化工具,这些可视化工具可用于调试或作为创建适合您的应用程序的可视化工具的起点。

Raycasting(一个脚本)

射线投射也称为命中测试,它使您可以确定射线(由原点和方向定义)与可跟踪射线相交的位置。当前的raycast接口仅针对点云中的平面和点进行测试。光线投射界面类似于Unity Physics模块中的光线投射界面,但是由于AR可跟踪对象不一定在物理世界中存在,因此AR Foundation提供了单独的界面。

要执行光线投射,一种添加ARRaycastManager到同一GameObject的ARSessionOrigin。

有两种射线投射方法ARRaycastManager:

public bool Raycast(Vector2 screenPoint, List hitResults, TrackableType trackableTypeMask = TrackableType.All); public bool Raycast(Ray ray, List hitResults, TrackableType trackableTypeMask = TrackableType.All, float pointCloudRaycastAngleInDegrees = 5f);

第一种方法在屏幕上占据二维位置。例如,您可以直接传递触摸位置:

var raycastManager = GetComponent(); raycastManager.Raycast(Input.GetTouch(0).position, ...);

第二种方法采用任意方法Ray(位置和方向)。

下表总结了其他参数:

参数 描述

hitResults:两种方法的结果都存储在this中List,该结果不能存储在其中null(这使您可以重用同一List对象以避免垃圾回收的分配)。

trackableTypeMask:进行测试的可跟踪对象的类型。这是一个标志,因此可以将多个类型按位进行“或”运算,例如TrackableType.PlaneWithinPolygon| |。FeaturePoint

技术细节要求

建议使用Unity2018.4.11以上,Unity2018中国增强版还有一个ARStandModeSet脚本,用来控制增加了Cloud开关、Plane开关、人脸识别的开关、图像跟踪开关、使用前置还是后置摄像头的开关。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有