设计全息显示的内容
为全息显示器设计内容时,需要考虑几个元素以实现最佳体验。 我们在下面列出了一些建议,你可以在 “颜色、光线和材料 ”页中详细了解全息显示器的特征。
大图面上色彩鲜艳的挑战
根据 HoloLens 的经验研究和测试,我们发现在大面积的显示器中使用鲜艳的颜色可能会导致几个问题:
眼睛疲劳
由于全息显示是累加的,因此色彩鲜艳的全息影像会使用更多光线。 屏幕大面积的明亮、纯色很容易引起用户的眼睛疲劳。
手部遮挡
明亮的颜色使用户在直接与对象交互时难以看到他们的手。 由于用户看不到自己的手,因此很难感知手/手指与目标表面之间的深度/距离。 手指光标有助于弥补此问题,但它在明亮的白色表面上仍可能具有挑战性。
难以看到手在明亮的彩色内容背板上
颜色一致性
由于全息显示器的特点,显示屏上的大面积明亮区域可能会变得斑点。 通过使用深色方案,可以最大程度地减少此问题。
颜色选择的设计指南
对 UI 背景使用深色
通过使用深色配色方案,可以最大程度地减少眼睛疲劳并提高直接手部交互的置信度。
用于内容背景的深色示例
使用半粗体或粗体字体粗细
HoloLens 允许你的体验显示美观的高分辨率文本。 但是,建议避免使用较细的字体粗细(如浅色或半浅色),因为垂直笔划可能会以较小的字体大小抖动。
面板 (粗体或半粗体字体粗细,) 提高了易读性
使用 MRTK 的全息背板材料
HolographicBackplate 材料应用于 HoloLens shell 中的多个 UI 面板。 其功能之一是可看到用户基于面板移动其位置时可见的彩虹效果。 背板颜色在预定义的光谱上巧妙地移动,在不影响内容可读性的情况下,创建引人入胜且动态的视觉效果。 颜色的这种微妙变化也有助于补偿任何轻微的颜色不规则。
透明或半透明 UI 背板的挑战
透明 UI 背板示例
视觉复杂性和辅助功能
由于全息对象与物理环境混合,因此透明或半透明窗口中的内容或 UI 易读性可能会降级。 此外,当透明全息对象叠加在一起时,由于深度混乱,用户可能难以交互。
性能
若要正确呈现透明或半透明对象,必须对它们进行排序,并与背景中存在的任何对象混合。 对透明对象进行排序的 CPU 成本适中,混合具有相当大的 GPU 成本,因为它不允许 GPU 通过 z 剔除 (即深度测试) 进行隐藏表面删除。 不允许隐藏图面移除会增加最终呈现像素所需的作数。 这会施加更多的压力填充速率约束。
深度 LSR 技术的全息影像稳定性问题
为了提高全息重新投影或全息影像稳定性,应用程序可以将深度缓冲区提交到系统,用于每个呈现帧。 使用深度缓冲区进行重新投影时,需要为每个颜色呈现的像素写入相应的深度缓冲区。 具有深度值的任何像素也应具有颜色值。 如果未遵循上述指南,则呈现的图像中缺少有效深度信息的区域可能会以产生伪像的方式重新投影,而伪影通常显示为波状失真。
透明元素的设计准则
使用不透明的 UI 背景
默认情况下,透明或半透明对象不写入深度以允许适当的混合。 缓解此问题的方法包括,使用不透明对象,确保半透明对象看起来靠近不透明的对象 (如不透明的背板) 前面的半透明按钮,强制半透明对象写入深度 (不适用于所有方案) ,或呈现代理对象,这些对象仅在帧末尾提供深度值。
MRTK-Unity中的解决方案:/windows/mixed-reality/mrtk-unity/performance/hologram-stabilization#depth-buffer-sharing-in-unity
通过使用坚实且不透明的背板,我们可以确保易读性和交互置信度。
最小化受影响的像素数
如果项目必须使用透明对象,请尝试尽量减少受影响的像素数。 例如,如果对象仅在某些条件下可见, (如累加发光效果) ,则当对象完全不可见 (时禁用该对象,而不是将累加颜色设置为黑色) 。 对于使用带 alpha 掩码的四边形创建的简单 2D 形状,请考虑改为使用不透明着色器创建形状的网格表示形式。
MRTK (混合现实 Toolkit) for Unity 中的深色 UI 示例
MRTK 基于深色方案提供了许多 UI 构建基块示例。