在 Nreal 设备上使用

EasyAR和Nreal SDK的关系

EasyAR的功能与Nreal的功能大部分是不重叠的。所以大部分情况下,EasyAR不会代理Nreal的功能,当你需要使用Nreal的一些功能,比如手势等的时候,你需要按照Nreal官方的做法来使用,并从Nreal官方了解这些功能的具体使用方法和适用范围。

对EasyAR来说,Nreal SDK提供了在其设备上的运动跟踪能力,EasyAR也只利用了Nreal的这部分功能。请阅读 运动跟踪与EasyAR功能 来了解EasyAR功能与运动跟踪的关系,以及EasyAR的什么功能可以在有运动跟踪时使用。

对Nreal来说,Nreal自身设备运行不会使用EasyAR,EasyAR补足了Nreal在一些场景下的能力。

EasyAR 支持的 Nreal SDK 版本

EasyAR Sense Unity Plugin 支持 Nreal SDK 1.6.0 或更新版本。

如遇Nreal SDK更新,大部分情况下在没有相关接口改动的情况下都是可以支持的;如果EasyAR使用的部分接口存在变化,在EasyAR更新前可以自行修改NrealFrameSource脚本。

Nreal的支持是通过EasyAR Sense的自定义相机实现的。在使用个人版时,如果运行时选择了自定义相机,EasyAR每次启动将只能使用100秒。使用付费版本的EasyAR Sense没有这个限制。

导入 Nreal SDK

Nreal官方 获取Nreal SDK的 unitypackage 文件,通过菜单 Assets > Import Package> Custom Package... 来导入Nreal SDK。

../_images/image_g5_7.png

确保 Nreal demo 可以使用

如果在当前工程中第一次使用Nreal SDK,请务必先在没有EasyAR的情况下使用Nreal SDK的demo,Nreal的demo需要一些特殊的工程配置,请参考其官方文档来使用。

在使用EasyAR之前,需确保Nreal的RGBCamera 及相关几个demo可以正常运行。由于EasyAR需要RGBCamera的输入,而很多其它demo并没有使用到RGB相机,所以其它一些sample或Nreal本身可以显示内容并不说明已经准备好了。

提示:EasyAR的sample在相机前放了一个canvas,如果Nreal SDK配置正确,它必然会显示出来。很多时候,使用EasyAR的sample看不到任何显示都是因为Nreal SDK配置不正确,而其本身的Demo也无法合理运行。在一些版本中,你需要先解决Nreal菜单 NRSDK > Project Tips 所显示的所有错误。

导入 EasyAR Sense Unity Plugin

通过Unity的 Package Manager window使用本地tarball文件安装插件

../_images/image_s0_1.png

在弹出的对话框中选择 com.easyar.sense-*.tgz 文件。

导入 EasyAR Sense Unity Plugin Nreal Extension

通过Unity的 Package Manager window使用本地tarball文件安装插件

../_images/image_g5_6.png

在弹出的对话框中选择 com.easyar.sense.ext.nreal-*.tgz 文件。

导入和使用sample

使用Mega时,你需要请阅读 Mega Unity开发样例使用说明 。以下sample使用说明仅针对不使用Mega的情况。

样例随插件包一起分发。可以使用 Unity的 Package Manager window 将样例导入工程中。

../_images/image_g5_8.png

需要注意的是,这些sample不在 EasyAR Sense Unity Plugin 包里面,而在 EasyAR Sense Unity Plugin Nreal Extension 包内。

在使用sample之前建议先参考Nreal官方说明来确保Nreal可以正常工作。

除了上述差异外,使用方法与其它sample一致,可参考 样例使用说明

Sample简介

使用Mega时,你需要请阅读 Mega Unity开发样例说明

SpatialMap_Building 样例展示了一个非常简单的使用场景,来使SpatialMap功能在Nreal环境下工作。

ImageTracking_InWorld 样例展示了在使用Nreal时通过 EasyAR 运动融合 来加强图像跟踪功能。

在Nreal场景中添加EasyAR支持

准备可运行Nreal的场景

接下来这一部分假设你有一个已经可以使用Nreal的场景。根据Nreal官方文档或demo,创建一个可以在Nreal设备上运行的场景,也可以使用现有demo。

在场景中添加 EasyAR 组件

在场景中添加EasyAR的AR Session。可以使用GameObject菜单中的 EasyAR Sense > Ext: Nreal > * 来添加预设好的AR Session。

../_images/image_g5_1.png

如有必要你也可以自己组装AR Session,需要注意在AR Session中包含 NrealFrameSource

对于在Nreal设备上的使用,需要注意在AR Session启动后 NrealFrameSource 可以被选择为Session的frame source。

通常可以设置 ARComponentPicker.FrameSourceFirstAvailableActiveChild 并确保 NrealFrameSource 的transform顺序是所有frame source的第一个,

../_images/image_g5_2.png

或者也可以设置 ARComponentPicker.FrameSourceSpecify 并手动指定为 NrealFrameSource

../_images/image_g5_3.png

然后需要在场景中创建 Target 或 Map,比如,如果你需要使用 稀疏空间地图 建图功能,你需要使用 EasyAR Sense > SpatialMap > Map : Sparse SpatialMap 创建 SparseSpatialMapController

../_images/image_g5_9.png

最后,一个简单的可以在使用Nreal运行稀疏空间地图建图功能的场景可能是这样的,

../_images/image_g5_5.png

你所使用的场景可能会根据使用的 Nreal SDK或EasyAR Sense Unity Plugin 功能不同而不同。

在EasyAR场景中添加Nreal支持

准备可运行EasyAR的场景

接下来这一部分假设你有一个已经可以使用EasyAR的场景。你可以参考 样例使用说明 来使用sample,或参考 从零创建可运行的工程 创建一个全新的场景。

删除Main Camera

Nreal内有Camera,大部分情况下需要先删除场景中现有的Camera。

../_images/image_g5_10.png

在一些高级的用法中,你可以根据自己需要判断是否删除。

在场景中添加 EasyAR Nreal 支持组件

在AR Session中添加 NrealFrameSource ,选中 AR Session (EasyAR)Frame Source Group ,然后通过菜单 EasyAR Sense > Ext: Nreal > Frame Source : Nreal 添加。

../_images/image_g5_11.png

NrealFrameSource 移动到第一个。

../_images/image_g5_12.png

在一些高级的用法中,你可以根据自己需要判断它的位置,也可以在代码中修改。

对于在Nreal设备上的使用,需要注意在AR Session启动后 NrealFrameSource 可以被选择为Session的frame source。

通常可以设置 ARComponentPicker.FrameSourceFirstAvailableActiveChild 并确保 NrealFrameSource 的transform顺序是所有frame source的第一个,

../_images/image_g5_2.png

或者也可以设置 ARComponentPicker.FrameSourceSpecify 并手动指定为 NrealFrameSource

../_images/image_g5_3.png

在场景中添加 Nreal 组件

你可以遵循Nreal官方说明来添加Nreal的组件。

大部分情况下,你需要添加一个 NRCameraRig 的prefab(如与Nreal官方说明冲突,请以官方说明为准)。

../_images/image_g5_13.png

最后,一个简单的可以在使用Nreal运行稀疏空间地图建图功能的场景可能是这样的,

../_images/image_g5_5.png

你所使用的场景可能会根据使用的 Nreal SDK或EasyAR Sense Unity Plugin 功能不同而不同。

在运行之前,请确保阅读Nreal官方说明来了解一个有Nreal SDK的场景应该如何进行配置和运行。