1.7 Unity XR模拟工具
AR应用运行时需要采集来自设备摄像头的图像数据、设备运动传感器数据、LiDAR传感器数据(如果有),并以此为基础构建环境感知和估计设备姿态,因此不能像普通3D应用那样可以直接在Unity编辑器中运行,而需要部署到真机设备上进行调试,这是一件特别费时费力的工作,影响开发迭代速度。
在AR Foundation v5.0版本推出后,也同步推出了XR模拟(XR Simulation)工具,允许开发者直接在Unity编辑器中进行AR应用调试(14)。XR模拟工具模拟生成AR应用运行时的环境和传感器输入数据,因此,在使用该工具时可以通过单击Unity编辑器上的Play按钮进入运行模式,在XR模拟工具提供的场景中,可以像真机一样执行平面检测、2D图像检测跟踪、点云检测等操作,极大地方便了AR应用的测试调试。目前XR模拟工具支持的功能特性如表1-5所示(15)。
表1-5 XR模拟工具支持的功能特性
XR模拟工具默认并不会开启,需要进行配置,在Unity菜单栏中,依次选择Edit→Project Settings打开Project Settings窗口,选择XR Plug-in Management项,在右侧面板中选择PC选项卡,勾选XR Simulation复选框,如图1-41所示(16)。
开启XR模拟工具后,就可以像调试普通3D应用一样调试AR应用了,即可通过单击Unity编辑器上的Play按钮进入运行模式,XR模拟工具会加载一个默认场景,在该场景中可进行平面检测、2D图像跟踪等功能测试。
图1-41 开启XR模拟工具
XR工具支持通过鼠标和键盘操作漫游场景,具体方式如下:
(1)按住鼠标右键,上、下、左、右移动旋转摄像头。
(2)按住鼠标右键,再按住键盘W键前进、S键后退。
(3)按住鼠标右键,再按住键盘A键向左移动、D键向右移动。
(4)按住鼠标右键,再按住键盘Q键向上移动、E键向下移动。
为避免与场景中用户定义的操作冲突,XR模拟工具也允许关闭键盘操作。在Unity菜单中,依次选择Unity→Preference打开偏好设置窗口,选择XR Simulation项,在右侧打开的面板中取消勾选Enable Navigation复选框,如图1-42所示,在该配置窗口也可以选择使用的模拟环境。
图1-42 取消键盘按键操作
结合鼠标与键盘操作就可以自由漫游场景,在此过程中AR Foundation则会执行相关的功能,如环境特征点提取、平面检测等,其行为与使用真机进行测试一致。平面检测只会针对与轴对齐的平面,不检测斜面;场景网格检测则会检测场景中的所有表面,与真机表现一致,但2D图像检测跟踪会跟踪场景中任何标记为图像的对象,而不管这些图像是不是在参考图像库中,这与真机表现不一致(主要是为了方便调试功能)。
XR模拟工具提供了一个虚拟环境管理窗口,可通过Unity菜单,依次选择Window→XR→AR Foundation→AR Environment打开该管理窗口,在该窗口中,可以查看、编辑、配置虚拟环境。XR模拟工具带一个默认的简单场景,可以选择管理窗口环境管理栏,单击下拉菜单中的Import sample environments按钮导入更多的模拟环境,如图1-43所示。
图1-43 导入更多的模拟环境
在导入成功后,就可以根据需要选择工程模拟环境了,如图1-44所示。
导入的所有模拟环境均由Unity预先制作,这些环境模型存储在UnityXRContent/AR Foundation /SimulationEnvironments路径下,这些预制模型涵盖了常见的主要使用场景,可以选择与开发项目预期使用场景相似的模拟环境进行测试。事实上,Unity工程中任何挂载了SimulationEnvironment组件的预制体都会被XR模拟工具认为是预制环境,都会被扫描和添加到图1-44所示的列表中供选择使用,因此,除了使用Unity预制的模拟环境,也可以创建、编辑、复制自己的模型环境,如图1-45所示。自定义的模拟环境场景与其他场景一致,可以包含各类元素、物体、对象,唯一的区别是模拟场景根对象必须挂载SimulationEnvironment组件。
图1-44 根据需要选择不同的模拟环境
图1-45 创建、编辑、复制模拟环境
在选择好模拟环境后,单击Unity编辑器上的Play按钮进入运行模式就可以加载新的模拟环境进行AR应用的测试了。
不管是Unity预制的模拟环境还是自搭建的模拟环境,在进行AR应用模拟调试时,这些模拟环境都可以被AR Foundation进行特征提取、平面检测等,模拟环境也无须添加碰撞组件,但在进行如下模拟时需要进行额外的设置。
1.2D图像检测跟踪
在模拟环境中设置可跟踪的2D图像需要进行如下操作:创建空对象,为其挂载SimulatedTrackedImage组件,并且确保该对象Y轴指向上(默认方向),然后在该对象下创建Quad对象,将其绕X轴旋转90°以使Quad对象平铺为可视化2D图像,正常为其赋上纹理即可。
在模拟环境中检测识别2D图像需要满足SimulatedTrackedImage组件的Image属性指定的图像与参考图像库中的参考图像一致(17),但事实上为了方便,任何挂载SimulatedTrackedImage组件的对象在模拟时都会被AR Foundation跟踪,无论其2D图像是否在参考图像库中,但如果2D图像不在参考图像库中,则ARTrackedImage的GUID值将会为0。
2.网格
AR Foundation会检测到模拟环境中的场景网格,但无法为检测到的网格进行语义区分(Classification),为了测试语义功能,可以为模拟环境对象挂载Simulated Mesh Classification组件,并设置其类型(手工设置网格语义),挂载该组件的对象及其子对象都可以被AR Foundation检测到。事实上,如果场景对象未挂载Simulated Mesh Classification组件,则AR Foundation检测出来的网格分类都会被标记为None。
3.X-Ray着色器
为了方便查看封闭的模拟环境场景,可以将其外壳(墙壁)材质着色器设置为Room X-Ray,如图1-46(a)所示。将材质设置为该着色器后,墙壁向外一面不再渲染,不遮挡我们操作查看模拟环境。为控制裁剪区域,可以在场景对象上挂载XRayRegion组件(场景中只需挂载一个),并设置相应裁剪参数,如图1-46(b)所示。
图1-46 设备墙壁着色器及裁剪参数
XR模拟工具可以进行灵活配置,在Unity菜单栏中,依次选择Edit→Project Settings打开Project Settings窗口,选择XR Plug-in Management→XR Simulation项,在右侧面板中可以进行模拟参数调整,如模拟环境所在的掩码层(Mask Layer)、环境扫描周期、射线检测距离等,通过自定义设置,可以适应各类模拟环境,特别是自搭建的模拟环境,以使模拟更贴合实际需求。
除此之外,每个模拟环境根对象上挂载的SimulationEnvironment组件属性参数也都可以根据需要进行调整,这些属性参数控制着模拟环境的外观、渲染、相机位置、场景入口,也定义了在进行模拟时场景的可操作边界及初始视场等,合理设置这些属性参数能为模拟带来很大的方便。