Highlight
Apple Vision Science 团队基于人眼视觉系统和前庭系统的科学原理,为 visionOS 开发者提供了一套视觉舒适度和运动舒适度的设计准则,核心要求是:深度线索一致、减少眼部疲劳、避免感官冲突导致的晕动症。
核心内容
为什么深度线索会出错
大脑通过多种感官系统感知深度。当内容中的深度线索缺失、冲突或具有误导性时,眼睛无法正确会聚,导致复视或眼部疲劳(01:44)。
常见的问题场景:
- 稀疏场景:一片柠檬漂浮在空白中,大脑缺少判断深度的依据
- 冲突线索:大的物体在前但小的物体遮挡了它,相对尺寸和遮挡关系矛盾
- 重复纹理:左右眼锁定到重复图案的不同元素上,产生错误的深度感知
修复深度线索的方法
给大脑提供正确的深度信息(02:32):
- 使用熟悉的大小线索(绿色的柠檬片暗示是青柠,大脑会用已知尺寸推断深度)
- 添加模糊效果表示距离
- 使用相对尺寸(大的看起来更近)
- 加入背景、光影、遮挡和纹理密度
- 避免大面积重复纹理,或将其分割成小块
内容参数:距离、大小、对比度
需要长时间注视的内容(如阅读)应放在超过一臂距离的位置(06:13)。允许用户调整内容深度,让他们选择最舒适的位置。
最近处的空间只留给短暂交互或直接手部交互。其他情况用透明度或模糊效果把视觉注意力引导到更远的地方。
阅读文字用高对比度,背景元素用低对比度或透明度。文字大小和窗口尺寸要让用户无需转头就能舒适阅读。
眼部疲劳
向下看和左右看最舒适,向上和斜向最费力(08:15)。长时间阅读的内容放在视线中央略下方。如果必须让眼睛看向极端角度,设计成短暂交互,或者把内容移到视野中央。
在体验中设计自然的休息点,让用户可以暂停休息眼睛。
运动舒适度
前庭系统(内耳)感知身体运动,视觉系统感知外部运动。两者不一致时会产生晕动症(09:36)。
虚拟物体运动:大面积物体移动时,大脑可能误以为自己在动。让移动的物体半透明,让透视内容可见,可以缓解这个问题(10:47)。
头部锁定内容:尽量避免内容跟随头部移动。如果必须这样做,使用小窗口放在视线中央远处。更好的做法是用 world-locked 视图或 lazy-follow 动画(11:18)。
窗口内运动:保持内容的地平线与真实地平线对齐。移动相机时,让扩展焦点(focus of expansion)的运动缓慢且可预测,并保持在视野内。避免快速转弯或纯旋转运动(12:27)。
振荡运动:尽量避免持续振荡,特别是频率约 0.2Hz(每 5 秒一次)的振荡。如果无法避免,降低振幅并让内容半透明。通过 Reduce Motion 辅助功能提供替代方案(13:46)。
详细内容
亮度适应
当视野中大部分区域较暗时,切换到明亮场景要放慢过渡速度,给眼睛适应亮度的时间(07:43)。
立体内容的手动渲染
如果选择手动渲染立体视频,确保每只眼睛的视差(disparity)完全正确。错误的视差会导致严重的视觉冲突和极度不适(05:34)。
运动舒适的替代方案
快速旋转的替代方案:在快速淡出期间瞬间改变方向(13:11)。
大物体近距离掠过的替代方案:保持物体较小且距离较远,使用低亮度对比度的纹理让运动不那么明显(13:27)。
核心启发
-
做什么:开发一个 3D 艺术画廊应用,让用户在空间中浏览画作。
-
为什么值得做:画作可以放在超过一臂距离的位置,用户舒适地观看。每幅画之间留出自然休息点。
-
怎么开始:把画作放在 world-locked 位置,保持与真实环境的地平线对齐,避免画作跟随头部移动。
-
做什么:做一个冥想/放松应用,用缓慢移动的自然场景营造氛围。
-
为什么值得做:自然场景的缓慢运动符合运动舒适原则,透明度效果让透视内容可见。
-
怎么开始:使用半透明粒子效果,运动速度缓慢且可预测,提供 Reduce Motion 替代方案。
-
做什么:设计一个空间阅读应用,支持调整文本深度和大小。
-
为什么值得做:长时间阅读需要放在舒适距离,允许用户自定义深度可以减少眼部疲劳。
-
怎么开始:文本默认放在一臂距离外,提供手势调整深度,使用高对比度确保可读性。
-
做什么:开发一个教育应用,用 3D 模型展示分子结构。
-
为什么值得做:分子模型需要正确的深度线索(遮挡、光影、相对尺寸)才能舒适观看。
-
怎么开始:确保所有深度线索一致,避免重复纹理,模型旋转速度要慢,提供暂停按钮作为自然休息点。
关联 Session
- Design for spatial user interfaces — visionOS UI 设计基础:玻璃材质、排版与组件
- Build spatial experiences with RealityKit — 用 RealityKit 构建 3D 空间体验
- Principles of spatial design — 空间设计原则总览
- Go beyond the window with SwiftUI — SwiftUI 沉浸空间与场景类型
评论
GitHub Issues · utterances