在今年1月份,美国拉斯维加斯举办的CES 2024上,XREAL发布了XREAL Air 2 Ultra,这是继XREAL X以来XREAL推出的第二款真正具备6DoF空间定位能力的AR眼镜。
当时在CES现场,XREAL Air 2 Ultra就给笔者留下了深刻的印象——钛合金的框架与电致变色镜片的搭配让这款产品在外观上就具备了出色的质感,优秀的SLAM能力和精准的手势识别对于一款主打空间计算的AR眼镜来说也是不可或缺的功能。
不过CES现场排队等待体验XREAL Air 2 Ultra的人实在太多,因此留给每个体验者的时间就十分有限。笔者在现场不到半个小时的体验时间里,只来得及看一看XREAL官方提供的Demo,有点囫囵吞枣意犹未尽的感觉。
时隔6个多月,在7月31日,这款AR眼镜终于是正式发售了,售价3999元。我们也是第一时间拿到了一台XREAL Air 2 Ultra,终于能够更深入的体验一下XREAL第二款、同时市面上也很少见的双目SLAM AR眼镜。
1月份我们在CES现场体验时,使用的是XREAL Air 2 Ultra + OPPO Find X5手机的组合;而在5月底,XREAL推出了最新的空间计算单元Beam Pro,作为手机的替代,Beam Pro在搭配AR眼镜使用时做了许多体验上的优化。这次评测中,我们也将使用XREAL Air 2 Ultra + Beam Pro的组合,来看一看XREAL为空间计算打造的一体化开发套件,表现究竟怎么样。
值得一提的是,伴随着XREAL Air 2 Ultra的发布,XREAL还基于跨平台游戏引擎Unity构建了最新的NRSDK软件开发套件,因此这次我们不仅会去体验XREAL Air 2 Ultra的所有硬件功能,还将尝试着基于最新版NRSDK开发一个运行在Beam Pro上的空间应用,以更好的了解XREAL Air 2 Ultra + Beam Pro的组合对于开发者来说具备怎样的意义。
闲话不多说,让我们进入正题吧!
XREAL Air 2 Ultra,专为轻量级体验打造的空间计算产品
XREAL Air 2 Ultra这款新品给我们的第一印象是惊艳。从外观来看,这款产品相比XREAL Air系列其他眼镜的最大的差异,是其采用了钛合金作为框架,亮面金属的边框相比纯塑料的材质让这款眼镜具备了更强的质感和时尚感。
结合电致变色镜片本身的滤光效果,XREAL Air 2 Ultra更像是一款精致的墨镜。这也是全球首款采用这一材质作为框架的AR眼镜。
钛合金的框架有效的减轻了眼镜的整体重量。相比同样具备双目SLAM能力的XREAL X眼镜106克的重量,XREAL Air 2 Ultra的重量仅有83克,与Air 2 73克、Air 2 Pro 75克的重量十分接近。较轻的重量为眼镜的佩戴舒适度提供了基础的保证,XREAL还做了更多的设计来保障长时间使用场景下的佩戴体验。
鼻托方面,XREAL Air 2 Ultra提供了3种尺寸的鼻托支架,用户可以自行拆卸更换,此外鼻托支架的支撑角度也能够自由调节,为不同鼻梁高度和形状的用户提供最舒适的支撑。接触鼻子的部分,XREAL Air 2 Ultra采用的是柔软的中空气垫,不易下滑可以提供稳稳的支撑,同时还能够有效的分散眼镜重量对鼻子的压迫。
镜腿设计上,XREAL Air 2 Ultra支持三个角度的调节,让用户可以将眼前呈现的画面放在最习惯的高度。镜腿夹脚微微内收,佩戴上脸时既能提供很好的夹合力确保眼镜不下滑,也不会对太阳穴和耳朵上方的位置产生压迫。
在显示方面,XREAL Air 2 Ultra采用了XREAL自研的第三代“惊鸿锐影”光学引擎,显示面板是两块来自索尼的0.55英寸1080P分辨率的Micro-OLED,光学模组则由XREAL自研,FoV达到52°(其余Air系列产品均为46°),能够实现120Hz刷新率、500尼特亮度、100000:1的对比度和107%的sRGB色域覆盖,表现十分出色。这种Micro-OLED + BirdBath的组合,是目前市面上使用最广泛、也是公认显示效果最好的AR眼镜光学方案。
实际体验来看,XREAL Air 2 Ultra的画面精细不会有明显的像素颗粒感,整体色彩观感优秀,没有察觉出偏色的情况,120Hz的刷新率确保了用户在转动头部时画面显示依然流畅无撕裂,较高的对比度让画面中暗部的细节更出色,这些优点综合到一起,带来了令人印象深刻的显示效果。
而电致变色镜片目前已经成为了BirdBath光学方案高端AR眼镜产品的标配,无论在晴朗的室外还是光线较弱的室内,只需要轻轻按下镜腿底部控制电致变色镜片的按钮,我们就能让其切换到最适合的透过率,确保XREAL Air 2 Ultra能够提供最佳的显示效果。
我们使用场景较暗的电影画面分别测试了室外明亮环境、室内明亮环境以及室内昏暗环境下XREAL Air 2 Ultra表现。从结果来说,这款AR眼镜提供的三档电致变色镜片调节功能能够应对大多数的使用场景:室外可以调节至透过率最低的一档,确保强光下AR眼镜的画面依然清晰可见,室内昏暗环境下可以调至透过率最高的一档,确保你依然可以看见周围的环境。
还需要指出的是,XREAL Air 2 Ultra并没有采用一些友商产品上使用的屈光度调节功能,而是给用户提供了近视插片框架,用户可以根据自己的需求前往眼镜店配片。
也许有不少人会认为屈光度调节功能十分方便好用,但在我们看来,目前大多数AR眼镜提供的屈光度调节功能体验仍有待提升,一方面是屈光度调节范围有限,而目前国内人群高度近视的人占比并不低,另一方面是通常近视还会伴随着散光、斜视等其他问题,仅仅调节屈光度并不能带来最好的视觉体验,还可能会加重眼睛的负担,让用户能够根据自己的实际情况去进行定制或许是一个更好的选择。
音频方面,XREAL Air 2 Ultra采用的是AR眼镜上常见的开放式设计,在双侧镜腿上下方各配备了一个超线性立体扬声器。这种设计方式,主要考验的是音频系统在嘈杂环境下的表现以及对漏音的控制能力。
我们在地铁车厢中实际测试了XREAL Air 2 Ultra超线性立体扬声器的能力,在将音量调节至较大的情况下,我们在车厢嘈杂的环境中依然能够清晰的听见扬声器中传来的人声和背景音乐,但与此相对应的是随着音量的变大,会有一定的声音外泄,不过整体来说外泄声音较小难以分辨其中的内容,用户无需太过担心因为声音外放而对他人造成干扰。
为XREAL Air 2 Ultra开发空间应用
前文我们提到过,伴随着XREAL Air 2 Ultra的发布,XREAL还将其基于跨平台游戏引擎Unity构建了NRSDK升级到了2.2.1版本。结合XREAL Air 2 Ultra的双目SLAM能力,这套SDK可以为开发者提供6DoF空间定位、手势识别、图像识别、平面检测、深度网格、空间锚点等丰富的功能。
在这次评测中,我们将会尝试两件事,帮助大家对基于XREAL Air 2 Ultra开发空间应用这件事有更好的了解:
一是将NRSDK中自带的示例场景构建成可执行的App安装到Beam Pro上并且确保运行成功;
二是对示例场景做一些修改,将NRSDK提供的功能全部集成进去整合到一个App中,同样我们需要将其安装到Beam Pro上并且确保运行成功。
在进行这两件事之前,首先我们需要确保开发环境全部安装正确。
为XREAL Air 2 Ultra和Beam Pro开发空间应用,要安装Unity 2019/2020/2021/2022.X四个版本之一,同时还要安装Unity中Android Build Support组件确保能够将Unity工程文件编译成安卓应用。这里我们下载安装的是Unity 2022.3.37f1c1 LTS个人版。
此外,还需要额外安装Android Studio,然后通过Android Studio安装Android SDK 10.0及以上的版本,由于Beam Pro操作系统的是Android 14版本,我们直接下载了最新的Android SDK。
最后,你还需要一个代码编辑器,这里我们选择了最常用的Visual Studio 2022个人版。
准备好开发环境,下载好NRSDKForUnity的包,我们就可以正式开始开发工作了。
在Unity中新建一个项目,导入刚刚下载好的NRSDKForUnity包,按照XREAL开发者社区的文档修改好项目的设置,这时我们可以在Unity左侧的窗口中看到,NRSDK提供了非常丰富的示例场景。
根据开发者文档的指引,我们首先尝试构建HelloMR这一场景。
NRSDK为Unity编辑器提供了一键修改项目设置的功能,大部分设置内容采用默认即可,需要手动调整的设置主要是Build Settings -> Player Settings下面的公司名和App名称。另外需要注意的是如果你是为Beam Pro构建App,Build Settings -> Player Settings -> Other Settings -> Write Permission应当设置成Internal而不是开发者手册中写的External(SDCard),否则在Beam Pro上运行时会报存储空间不足的错误。
在构建菜单添加场景时,按照顺序将HelloMR以及下图中所列举的全部场景都加入到Scenes In Build窗口中,否则菜单中点击不同按钮切换场景的功能将不会生效。
接下来构建成功生成APK文件后,即可在Windows命令行工具中通过ADB命令为Beam Pro(需开启开发者模式)安装应用或者直接将APK文件传输到Beam Pro机身存储然后通过文件管理器安装。安装完成后就能够在XREAL Air 2 Ultra的Home页面上看到图标。
点击运行,成功启动!能够正常进入各个场景中。
接下来,让我们Get Hands Dirty,自己上手去从零开始搭建一个Demo场景吧!
先叠个甲,我们只能算得上是入门级的开发者,因此最终呈现的场景只能追求功能的实现,而无法兼顾到场景的美术效果,还请大家见谅!
前文提到过,NRSDK有6DoF空间定位、手势识别、图像识别、平面检测、深度网格、空间锚点一共六大能力,在近一周的开发时间里,我们最终在Demo中成功加入了除空间锚点外的全部功能,而受限于时间和开发能力,剩下的空间锚点功能只能等后续有空再补上。
先说结论吧,从开发的整体体验来说,NRSDK为开发者提供了非常详细的功能Demo,给开发者们作为参考。对于大多数基础功能的实现,开发者只需要将NRSDK中提供的对应Prefab组件拖入到场景中就能够直接使用这些功能。
换句话来说,只要开发者对于使用Unity开发3D应用有一定的经验,就可以快速上手XREAL Air系列AR眼镜的应用开发。大多数时候开发者只需要将精力放在体验本身的交互和逻辑上即可,有效的降低了空间应用的开发门槛。
接下来则是我们实现每个功能的细节:
6DoF功能的开启最为简单,只需要在NRSDK提供的NRCameraRig组件调整一下Tracking Type追踪类型即可。NRSDK提供了4种追踪模式:6DoF、3DoF、0DoF(即跟头模式,画面会始终出现在面前固定的位置)、0DoF Stable(猜测是用于高铁、飞机等场景的防抖模式)。
XREAL Air 2 Ultra会使用眼镜两侧的SLAM摄像头来识别特征点,并追踪这些特征点随时间的运动,结合眼镜IMU传感器的读数来确定自身在环境中移动时的位置和方向。因此这里直接选择6DoF模式即可。我们也可以通过代码在Demo运行时动态的切换追踪模式。
开发者手册的信息显示,6DoF追踪还能为开发人员提供了实时地图构造和 3D 点云,可以为应用程序提供有关环境物理结构的信息。
接下来我们要给Demo加入手势识别和手势追踪功能。
手势识别和手势追踪是最贴近自然的交互方式,对于提升与虚拟物体交互的沉浸度有非常大的帮助。NRSDK能够识别每只手23个关节的位置和姿势,让开发者可以根据自己的需要定义手部动作和程序指令的对应关系。
同时,NRSDK已经内置了对6种手势的识别,给开发者提供了更易上手的选项。NRSDK还为控制器和手势两种交互方式实现了统一的事件机制,让我们无需额外的开发工作,也能够轻松的让一款应用同时适配支持/不支持手势识别的XREAL Air系列AR眼镜。
在我们的Demo中可以看到,控制的方式可以在控制器和手势识别间进行快速的切换,我们可以像使用控制器那样直接的与虚拟的物体进行交互。
在手势交互方面,NRSDK中默认提供的是使用手部射线进行选取、手势负责确认的方式,这种方式对于XREAL Air 2 Ultra + Beam Pro这种最适合坐着使用的组合来说最为合适。当然开发者也完全可以不依赖于射线,开发更贴近现实世界的交互方式,但这也意味着用户可能需要四处走动才能与周围环境中的虚拟物体进行交互。
我们尝试向Demo中加入的第二项功能,是Depth Meshing深度网格,从中一窥XREAL Air 2 Ultra对于周围环境的建图能力。
根据NRSDK的开发者手册的引导,我们在Unity中只做了一些简单的步骤,就成功的让深度网格呈现在了我们的面前。随着我们不断的观察向新的方向和区域,深度网格也在同步进行生成。在没有做任何优化的情况下,深度网格的生成速度已经稳定且高效,从精准度方面来看,深度网格的位置是十分准确的,在精度方面也足以胜任大部分的场景。
而有了这些带有物理碰撞检测的深度网格,我们就可以在应用中实现虚拟物体和现实物体的交互,甚至能够实现用现实物体遮挡虚拟物体的效果。从视频中可以看到,在深度网格生成后,我们可以让一些虚拟物体自由落体到深度网格上。毫不夸张的说,深度网格是一款空间计算设备最重要的能力之一。
在开发者文档中我们看到,NRSDK还提供了针对深度网格的分类功能,支持10个种类的标签,包括了室内常见的墙壁、地板、天花板、门,室外常见的道路、人行道、草坪、建筑等等,并且可以针对每个种类的标签设置一个Prefab并显示在对应的深度网格位置,相当于一个进阶版本的平面检测。
接下来是图像检测的功能。我们需要做的是将需要被识别的图片导入到项目中,然后为这些图片生成一个数据集Tracking Image Database,最后还要填入图片对应实物的尺寸。
做完这些准备工作,我们还要设定图片被识别后出现的虚拟物体,如果想要让出现的虚拟物体可以被交互,还需要撰写相应的交互代码。
我们在Demo中直接使用了官方的Spatial Life应用中用到的绿色卡片,做了一个简单的功能示例——当XREAL Air 2 Ultra识别到这张卡片时,会在卡片上生成一辆小汽车的模型,然后我们可以通过手势来与这辆小汽车进行交互,让它下落到对应周围环境生成的深度网格上。
针对具体的实现方法,官方的开发者手册写的并不是特别详细,也是让我们摸索了很长一段时间。前面的步骤开发者手册中写的都没有什么问题:首先我们需要为想要追踪的图片建立数据集,然后在NRKernalSessionConfig文件中设置好我们刚刚建立的数据集,随后可以在Unity编辑器中新建一个空的GameObject,并添加NRSDK中提供的MarkerDetector.cs脚本文件作为这个GameObject的组件。
到达这一步,我们已经可以做到通过SLAM摄像头追踪目标图片,并通过NRSDK提供的一些列API在程序中实时获取追踪的状态。不过想要像Spatial Life中那样让虚拟物体跟随着现实世界中的XREAL Markers动起来,我们还需要一些额外的步骤。
在项目文件夹中新建一个Prefab,然后为其新增一个NRSDK中提供了的NR Trackable Image Behaviour脚本。在脚本的Image Target参数中选中我们希望识别的图片,这个脚本会自动的帮我们完成一些设置,并且会在Unity编辑器中显示一张虚拟的追踪图片。
接下来我们只需要在这个Prefab下面继续添加在识别到图片后想要呈现的虚拟物体即可。
最终呈现的效果如下面一系列的动图所示:我们首先扫描了附近环境生成了一个深度网格,在视频中以彩色背景呈现,在画面右方有一块高出的地面的部分,是一张圆形的茶几,我们将绿色的XREAL Marker放在了茶几边缘,然后启动了图像追踪功能,当XREAL Air 2 Ultra检测到当前视野中出现了Marker,就会显示出我们预先设计好的虚拟物体。
随后我们拿起了这张Marker实物并进行了转动,虚拟的玩具车也会始终跟随Marker的位置和姿势运动。尽管由于手和Marker的互相遮挡导致了追踪的短暂丢失,但是一旦遮挡部分露出来,追踪就能够立马恢复。
最后结尾,我们通过一个Pinch手势触发了我们为玩具车写的交互,让其向前行驶,跃下茶几,落在了代表地面的网格上。
至此,我们也算是基本达成了在开发Demo前为自己预设的目标。
唯一剩下的空间锚点功能我们直接借用开发者手册的内容做个补全吧,这一功能可以让虚拟物体被锚定在现实世界的某一个位置上,即使用户关闭应用再打开,这个虚拟物体所在的位置也不会发生变化,这对于为用户提供一致且可靠的AR体验十分重要,还可以被用于实现多用户参与的AR体验,实现博物馆导览等类似的体验。
写在最后
一周的时间里,我们为XREAL Air 2 Ultra + Beam Pro开发了一个画面简陋但功能较为完备的空间应用Demo。在上述提到的功能之外,我们还参照官方Tutorial顺利实现了应用内的视频录制功能。唯一的遗憾,是XREAL Air 2 Ultra并没有RGB摄像头,因此我们只能录制黑色背景的机内画面。而无法录制以现实环境作为背景的MR视频来完整的展示使用这款AR眼镜时的画面。
需要说明的是,作为一个Unity新手,我们在开发的过程中也遇到了一些不那么顺畅的地方。例如我们常常在和一些奇怪的代码玄学搏斗,最常见的一个问题,就是Ctrl+C、Ctrl+V的代码没问题,一旦自己尝试着加上一些新功能运行总是出状况,让我们花费了大量的时间去排查BUG所在。
此外,官方提供的NRSDK开发者手册目前还是纯英文的,对于国内的开发者来说没有那么方便;开发者手册在部分功能的说明上写的较为简略,对于一些刚刚接触NRSDK和AR眼镜应用开发的开发者来说需要一定的时间去摸索才能更好的了解NRSDK提供的各项功能和API接口。
好在NRSDK的示例场景中已经提供不少现成的代码可以供开发者参考,尤其是针对一些核心功能甚至提供了不止一个示例来帮助开发者更好的掌握NRSDK和XREAL Air 2 Ultra + Beam Pro的能力,但我们也十分希望后续XREAL能够进一步完善NRSDK的开发者手册并且提供更丰富的Tutorial,更好的帮助开发者了解如何为XREAL Air系列产品开发出优秀的应用。
可以确定的是,如果你对轻量级空间应用的开发拥有浓厚的兴趣,那么NRSDK、XREAL Air 2 Ultra、Beam Pro的组合,是一个颇具性价比的选择:具备双目SLAM能力的XREAL Air 2 Ultra硬件素质出众且轻便易携;Beam Pro专为空间计算体验设计和优化;NRSDK提供了强大且齐全的空间计算底层能力,使用简单易上手。
根据XREAL透露的数据,目前XREAL Community里聚集的XR开发者数量已经达到数千人,这让我们十分期待后续能够在XREAL Air 2 Ultra + Beam Pro这套空间计算组合上,看到越来越多优秀的空间应用涌现。