AR Foundation 配置

什么情况下需要使用AR Foundation

Unity AR Foundation封装了一些跨平台的运动跟踪能力,请阅读 运动跟踪与EasyAR功能 来了解EasyAR功能与运动跟踪的关系,以及是否需要和什么时候需要使用AR Foundation。

多数情况下,你完全可以不使用AR Foundation,EasyAR将在所有受支持的设备上正常工作。你需要在以下两种情况下考虑使用AR Foundation:

  1. 如果你需要在所有支持ARCore的小米和红米手机上使用ARCore,请使用AR Foundation。由于小米厂商实现有bug,EasyAR的ARCore实现已经禁用部分小米手机,包括米9、米10、红米K20、红米K30、红米K40等系列(这里列出的不全,我们会根据情况随时调整)。在这些手机上,默认配置下将不会使用ARCore,在支持EasyAR运动跟踪的手机上会使用EasyAR运动跟踪。

  2. 如果你需要使用的ARCore或ARKit提供的一些功能在EasyAR中未封装,你也可以使用AR Foundation。比如AR Foundation提供了对ARKit的 ARKitFaceManager 的支持,EasyAR并没有封装这个功能。

然而使用AR Foundation对EasyAR的功能来说有时并不是最优的:

  1. 在使用EasyAR Mega时,AR Foundation默认使用的配置并不是最优的,虽然EasyAR提供了选项对其进行优化,但需要注意的是,部分手机自身(比如小米10)存在bug,在修改配置之后无法获取图像,EasyAR将无法使用。使用时需要注意。

  2. 在EasyAR禁用的部分小米手机上,输入EasyAR的数据是灰度图而非彩色图,这会影响部分算法的效果。

EasyAR 支持的 AR Foundation 版本

EasyAR Sense Unity Plugin 支持 AR Foundation 5.1.6 或更新版本。仅支持 Unity.XR.CoreUtils.XROrigin ,不支持 ARSessionOrigin。

注意

AR Foundation的支持是通过EasyAR Sense的自定义相机实现的。在自定义相机或头显上使用试用产品(个人版license、试用版XR license或试用版Mega服务等)时,EasyAR Sense每次启动后会在固定的有限时间内停止响应。使用付费版本的EasyAR Sense和付费的EasyAR Mega服务没有这个限制。

导入 EasyAR ARFoundation 支持包

通过Unity的 Package Manager window使用本地tarball文件安装 EasyAR ARFoundation 支持包( com.easyar.arfoundation )。

../_images/image_g7_1.png

EasyAR ARFoundation 支持包会自动导入 AR Foundation 以及 Google ARCore XR PluginApple ARKit XR Plugin 。虽然通常来说自动导入的文件已经可以使用,但还是建议手动检查是否有更新的版本,以便获得最新的bug修复。

../_images/image_g7_2.png

注意

确保安装的 Google ARCore XR PluginApple ARKit XR Plugin 版本与 AR Foundation 版本完全一致。版本不匹配可能会导致运行时错误。

配置 XR Plug-in Management

请遵循 AR Foundation 介绍 中的 Project Setup > Install AR Foundation 来进行配置。注意选择你所使用的AR Foundation的版本来阅读。

一般来说,使用AR Foundation之前,需要先在 Unity 中启用 XR Plug-in Management 以支持 AR Foundation:

  1. Project Settings > XR Plug-in Management 中选择当前平台,勾选 Initialize XR On Startup

../_images/image_g7_3.png

如果你需要自由控制初始化的时机,你需要保证在EasyAR ARSession的 Assemble 之前调用 AR Foundation的初始化。

  1. Project Settings > XR Plug-in Management 中选择当前平台,在 Plug-in Providers中勾选当前平台的插件。

    • 对于 Android 平台,选择 Google ARCore

    • 对于 iOS 平台,选择 Apple ARKit

../_images/image_g7_4.png ../_images/image_g7_5.png
  1. 建议在 Project Settings > XR Plug-in Management > Google ARCore `` 中将 ``Requirement 设置为 OptionalDepth 设置为 Optional ,以确保打包后应用可以在不支持ARCore的手机上运行。

../_images/image_g7_6.png
  1. 建议在 Project Settings > XR Plug-in Management > Apple ARKit `` 中将 ``Requirement 设置为 Optional ,以确保打包后应用可以在不支持ARKit的手机上运行。

../_images/image_g7_7.png

配置 URP

如果你在使用URP,你需要进行针对性的配置。使用其他渲染管线的用户可以跳过这一步。

请遵循 AR Foundation 介绍 中的 Project Setup > Universal Render Pipeline 来进行配置。注意选择你所使用的AR Foundation的版本来阅读。

请参考Unity官方文档正确配置URP并添加 ARBackgroundRendererFeature ,这里不详细描述。

../_images/image_g7_8.png

另外,你仍需按照类似方法,参考 配置 Universal Render Pipeline (URP) 来配置EasyAR的 EasyARCameraImageRendererFeature ,以确保EasyAR的渲染和AR Foundation的渲染都能正常工作。

添加Unity AR Session和XR Origin

请遵循 AR Foundation 介绍 中的 Project Setup > Scene Setup 来添加AR Foundation的组件。注意选择你所使用的AR Foundation的版本来阅读。

你需要在场景中添加 AR Session 和 XR Origin。

  1. 在此之前,如果你的场景里已经存在 Camera ,需要将其删除

../_images/image_g7_17.png
  1. 如果你的场景里已经存在 XR Origin (EasyAR) ,需要将其删除

../_images/image_g7_11.png

该节点下的所有子物体应该移动到下面新创建的XR Origin节点下,如果不移动则这些子节点不会按预期工作。

  1. 使用右键菜单 XR > AR Session 添加 Unity的ARSession到场景中(这与EasyAR的ARSession不是一个东西,不冲突),

../_images/image_g7_9.png
  1. 使用右键菜单 XR > XR Origin (Mobile AR) 添加 Unity的XR Origin到场景中(这与EasyAR的XR Origin用途类似,你需要删除EasyAR的XR Origin),

../_images/image_g7_10.png
  1. 根据需要调整Camera参数。

../_images/image_g7_12.png

AR Foundation 通常会设置其剪裁平面为 (0.1, 20) ,这可能会导致离 Camera (真实世界中的设备)超过20米的物体会无法显示出来。请在使用前根据具体需求来修改。

配置EasyAR ARSession

  1. 保证EasyAR的ARSession中包含你所需要的FrameSource。

通常通过菜单(比如 EasyAR Sense > Mega > AR Session (Mega Block + MotionTracking Preset) )创建的ARSession会自动添加 ARCore ARFoundation 以及 ARKit ARFoundation (部分图像跟踪等不需要SLAM功能的除外)。

../_images/image_g7_13.png

如果它们不在你的ARSession中,你也可以通过菜单手动添加。

../_images/image_g7_14.png

添加之后通常需要使用菜单对FrameSource进行排序。

../_images/image_g7_15.png

通常建议应用所有以下排序(与EasyAR默认创建的ARSession相同):

  • Sort Frame Source : ARCore > ARCore ARFoundation

  • Sort Frame Source : ARKit > ARKit ARFoundation

  • Sort Frame Source : System SLAM > Motion Tracker

你也可以完全自由的调整FrameSource优先级,只需要将最优先需要使用的移动到次优的前面即可,运行时会根据树上的顺序来选择使用可用的FrameSource。

  1. 正确处理AR Foundation所有相关脚本,以确保仅在需要的设备上启用AR Foundation,而在其他设备上使用EasyAR的对应功能。

你可以直接启用ARSession的 Auto Unity XR Switch 选项来自动处理这些脚本的开关。

../_images/image_g7_16.png

如果你有自定义的需求,或是 Auto Unity XR Switch 无法正常工作,你需要手动处理。你需要,

  • 在编辑器中禁用AR Foundation的ARSession

  • 在AR Foundation开始工作前禁用所有Unity XR Core组件及AR Foundation的组件以及你需要控制的相关组件或功能

  • 如果EasyAR的ARsession的Assemble过程中选择使用 ARCoreARFoundationFrameSource 或 ARKitARFoundationFrameSource 之后,启用之前禁用的所有组件或功能

  • 如果EasyAR的ARsession的Assemble过程中选择使用了其它FrameSource,则保持不变