HoloLens 2影像抖动与稳定性
最近在使用Unity与HoloLens的配合中,发现空间中的Shader板子中的图像一直在抖动,无法稳定的定在空间中固定的位置。遂决定认真研究一下HoloLens影像稳定性问题。
HoloLens中内置了图像防抖管道,管道在后台自动运行。但是我们应避免造成稳定性下降。
全息影像质量描述
当HoloLens可以追踪周围环境的时候,以60FPS的速度可以确保影像和坐标系匹配
- 准确度:全息影像在空间中预期的位置与否
- 抖动: 环境跟踪性能下降的时候回发生高频率抖动,需要进行传感器优化传感器优化
- 颤动:呈现频率低会导致全息影像运动不均衡。需保持恒定60fps
- 偏移:运动过程中全息影像远离空间定位点的位置,发生偏移
- 跳动:全息影像偶尔发生“弹出”或“跳动”,跟踪调整影像匹配对环境的理解,发生跳动
- 浮动:全息影像随用户的头部运动发生摇摆。当应用程序未完全实现重投影,且未校准时会出现
帧速率
HoloLens显示为240FPS,每四个颜色显示一个色域,所以实际图像的帧率为60fps。HoloLens采用预测的方法猜测头的位置。采用60fps进行呈现的时候,通过以下三种方式帮助实现稳定的全息影像。
- 降低图像生成延迟,以30FPS运行会增加延迟,降低延迟减少预测误差,提高稳定性
- 图像生成时间要与刷新时间相一致,否则相同的图像会连续显示两次,意味着每次纠正的错误量很多,导致不必要的跳动
- 减少影像运动的速度,运动速度越快,抖动越明显
全息影像呈现距离
将全息影像放置在两米处,此时两台显示器在此距离处完全重叠
同时剪裁的平面应当尽量离用户85cm以外。当内容距离小于85cm时,请保证不会频繁的靠近或原理全息影像,否则会产生频繁的视觉辐辏-调节冲突的不适感。内容涉及应尽量避免,尽量少移动。
设计人员都应构建好内容场景,以鼓励用户在距离内容 1 米的位置来与内容交互
重新投影
HoloLens提供了一种硬件辅助的全息稳定技术,充分考虑了头部移动动态效果和视点的变化。许执行特定的操作以重新利用投影。重投影主要包括以下四种
- 深度重投影
- 平面重投影(效果不好)
- 自动平面重投影(默认使用)
- 不进行重投影:如果不执行任何操作,则会使平面重投影并在使用者头部凝视方向固定防抖平面,通常不达标
程序需要执行特定的操作做启动不同的重投影
- 深度重投影:针对每一帧提交深度缓冲区。深度重投影通过“Windows Mixed Reality”设置”窗格的“XR 插件管理”下的“共享深度缓冲区”选项来完成
- 平面重新投影:应用程序会针对每一帧告知系统要稳定的平面位置。 Unity 应用程序调用 SetFocusPointForFrame,并应禁用“共享深度缓冲区”。
- 自动平面重新投影:若要启用,应用程序需要像深度重新投影那样将其深度缓冲区提交给系统。 使用混合现实工具包 (MRTK) 的应用可以将摄像头设置提供程序配置为使用“自动平面重新投影”
验证是否争取设置深度
HoloLens 2 提供一个可视化工具,可用于显示设置和未设置深度的位置,该工具可从“设备门户”启用。 在“视图”>“全息影像稳定性”选项卡上,选中“在头戴显示设备中显示深度可视化”复选框。 正确设置深度的区域将为蓝色。 未设置深度的呈现项将标记为红色,需要修复。
使用平面重新投影
这里不讨论空间内容仅讨论平面,将防抖动平面对齐包含内容的平面
防抖动平面是实现稳定全息影像的好工具,但如果误用它,可能会导致图像严重不稳定。
- 使用完后,别忘了关闭它。 可以将防抖动平面置于用户身后或将其附加到不再处于用户视野中的对象,以此结束使用它。 确保将防抖动平面的法线设置为与摄像头前向相反(例如 -camera.forward)
- 请勿快速在两端之间来回更改防抖动平面
- 请勿将防抖动平面保留设置为固定距离/方向
- 请勿让防抖动平面贯穿用户
- 请勿在运行于台式电脑(而非 HoloLens)时设置焦点,应改为使用基于每像素深度的重新投影。