引言
晕动症(Motion Sickness)是 VR 产品留存率的头号杀手。数据上,初次使用 VR 的用户中约 25% 到 60% 会出现不同程度的不适,其中 5% 到 10% 反应强烈到必须立即摘下头显。这不是「用户不适应」的问题,而是感官冲突的生理必然。
工程上的核心矛盾是:沉浸感要求内容尽量真实,而舒适度要求尽量削弱运动信息。全真实的移动方式(平滑自由移动)最晕,全削弱的方式(瞬移)最不晕但破坏空间连续性。所有舒适度设计都是在这两端之间找位置。
本文按「成因理论 → 延迟与帧率 → 移动方式 → 视觉冲突 → 视野限制 → 参考系 → 渐进适应 → 度量」的顺序展开,给出可直接落地的参数与配置。渲染侧的延迟控制见 Unreal VR 渲染管线与立体渲染 ,显示侧的硬件因素见 XR 显示光学与头部眼动追踪 。
目录
- 晕动症的成因理论
- 延迟与晕动的关系
- 帧率与抖动
- 移动方式对比
- 视觉与本体感觉冲突
- 加速与转向设计
- 视野限制与隧道视觉
- 参考系与固定物
- 渐进适应设计
- 其他不适来源
- 度量与评估方法
- 舒适度工程清单
- 权衡取舍
- 常见坑清单
- 小结
1. 晕动症的成因理论
主流解释是感觉冲突理论(Sensory Conflict Theory):
大脑整合三类信息判断「我是否在动」:
前庭系统(内耳) → 感受加速度与重力方向
视觉系统 → 看到相对运动
本体感觉(肌肉) → 身体姿态与用力
VR 中:
视觉说「我在快速前进」
前庭说「我没动」
本体感觉说「我坐着没动」
→ 三者冲突 → 大脑判定为「中毒幻觉」→ 触发恶心反应
进化解释是:这种冲突在自然界通常由神经毒素引起,因此身体用恶心与呕吐来排毒。这也解释了为什么越真实的前庭刺激越少、视觉运动越强的场景越晕。
一个关键推论:只要能降低「视觉运动」与「前庭感受」的冲突量,就能降低不适。所有舒适度技术本质上都在做这件事。
1.1 人群敏感性分布
不适反应不是二元的,而是连续分布:
| 人群比例 | 表现 | 产品含义 |
|---|---|---|
| 约 20% | 几乎不晕,可长时间平滑移动 | 硬核玩家的体验上限 |
| 约 40% | 轻微不适,可随适应改善 | 通过设置项覆盖 |
| 约 30% | 明显不适,需瞬移等强舒适手段 | 默认配置必须满足 |
| 约 10% | 强烈不适,无法使用 | 需要专门的无移动方案 |
这组比例决定了默认配置必须服务最敏感的那 40%,而把激进配置留给愿意主动开启的用户。任何「大部分人不晕」的论证都忽略了 10% 的绝对不可用人群,而这部分人恰恰是最容易留下差评的群体。
2. 延迟与晕动的关系
延迟是最不该妥协的舒适度因素,因为它同时破坏沉浸感与舒适度:
Motion-to-Photon 延迟与不适的定性关系:
< 15 ms → 大多数人无感
15~20 ms → 敏感人群可能察觉
20~30 ms → 明显不适,尤其在转头时
> 30 ms → 强烈不适,无法长时间使用
原因:延迟导致「视觉运动」与「前庭运动」在时间上错位,
即使两者方向一致,错位本身也会引发冲突。
对策按优先级:
- 保帧率优先于保画质:降分辨率、降画质都比掉帧好。
- 开启时间扭曲:用最新头部位姿重投影,掩盖部分延迟。
- 避免主线程阻塞:任何 GC、IO、网络解析都要异步化。
- 关闭会导致抖动的效果:TAA 鬼影、后处理链过长都会增加感知延迟。
一个常见的错误优化顺序:
❌ 先提升画质 → 掉帧 → 晕
✅ 先保帧率 → 有余量再加画质
3. 帧率与抖动
帧率本身也是舒适度因素,且抖动(Jitter)比低帧率更糟糕:
| 状态 | 帧率 | 不适程度 |
|---|---|---|
| 稳定 90 fps | 90 | 低 |
| 稳定 72 fps | 72 | 低(略低于 90) |
| 波动 90 到 60 | 平均 75 | 高(抖动感明显) |
| 稳定 45 fps | 45 | 高 |
| 波动 90 到 30 | 平均 60 | 极高 |
结论:宁可稳定 72,也不要波动 90 到 60。工程上应:
; UE 中锁定帧率并启用动态分辨率保稳定
t.MaxFPS=72
r.MobileDynamicResolution=1
r.Mobile.DynamicResolution.MinScreenPercentage=70
动态分辨率的作用:
帧时间超预算 → 自动降分辨率 → 保帧率稳定
帧时间有余量 → 自动升分辨率 → 提画质
目标:帧时间方差最小,而不是平均帧时间最小
4. 移动方式对比
移动方式的选择是舒适度设计的核心决策:
| 方式 | 晕动程度 | 空间连续性 | 适用 |
|---|---|---|---|
| 瞬移(Teleport) | 最低 | 断裂 | 默认方案,通用 |
| 冲刺瞬移(Dash) | 低 | 部分连续 | 需要方向感的场景 |
| 平滑移动(Smooth) | 高 | 连续 | 硬核玩家、FPS |
| 传送加过渡动画 | 低 | 视觉连续 | 折中方案 |
| 手臂摆动移动 | 中高 | 连续 | 与真实行走关联,部分人适应好 |
| 真实行走(Room-scale) | 无 | 连续 | 空间允许时最优 |
工程建议:默认瞬移,把平滑移动放进设置项并明确标注「可能引起不适」。这是行业通行做法,也是审核与用户评价的关键。
瞬移的实现要点:
抛物线射线预览落点 → 显示落点标记 → 松开后淡入淡出过渡
淡入淡出时长 100~200 ms,太短会突兀,太长会拖沓
落点必须校验(不在墙内、法向不过陡)
瞬移的配置细节与落点校验见 Unity XR Interaction Toolkit 交互体系 。
4.1 瞬移的三种变体
1. 经典瞬移
抛物线预览 → 松开 → 立即出现在落点
最舒适,但完全切断空间连续感
2. 冲刺(Dash)
视线方向快速位移,位移过程可见(0.2~0.4 秒)
保留部分方向感,比平滑移动舒适
代价:短暂的视觉运动仍会致晕敏感人群
3. 传送门 / 世界拉动
保持玩家不动,把世界拉过来(或显式显示传送门)
对最敏感人群友好,但对场景设计有要求
实现上等价于相机不变、世界坐标整体平移
选择依据是目标人群的敏感度与是否需要方向感。动作类游戏常用冲刺(需要判断移动方向),社交与展示类用经典瞬移即可。
5. 视觉与本体感觉冲突
除了移动,还有几类常见的感官冲突:
| 场景 | 冲突来源 | 对策 |
|---|---|---|
| 虚拟手不动但身体在动 | 手与身体视觉不同步 | 移动时保持手部相对静止或隐藏 |
| 加速/减速 | 前庭感受不到加速度 | 限制加速度,加视觉提示 |
| 上升/下降 | 重力感知冲突 | 用电梯式(有舱体参照)而非自由飞 |
| 相机被动画驱动 | 视线被动移动 | 避免强制相机动画,改由玩家控制 |
| 场景旋转 | 前庭感受不到旋转 | 旋转幅度小、速度慢,或改用瞬移转向 |
相机动画是强烈的致晕源:任何「自动移动相机」的设计(过场动画、被击退、被拉拽)都会让前庭系统感到矛盾。若必须做,应缩短时长并加视觉参照。
6. 加速与转向设计
平滑移动中,加速度比速度更致晕:
速度与不适的关系(平滑移动):
恒定速度 → 较可接受(仍晕但轻)
突然加速 → 明显不适
突然减速/急停 → 明显不适
反复加减速 → 最不适
设计原则:
加速度上限 : ≤ 5 m/s²(约半个重力加速度)
速度上限 : 行走 1.4~2 m/s,跑步 4~6 m/s
加减速时长 : 至少 0.3~0.5 秒的过渡
// 平滑移动中的速度缓动
float targetSpeed = input.magnitude * maxSpeed;
// 用有限加速度逼近目标速度,而不是直接赋值
currentSpeed = Mathf.MoveTowards(currentSpeed,
targetSpeed,
maxAcceleration * Time.deltaTime);
转向同样有讲究:瞬时旋转(Snap Turn)比平滑旋转舒适得多。
| 转向方式 | 舒适度 | 说明 |
|---|---|---|
| 平滑旋转 | 差 | 持续的前庭冲突 |
| 瞬转 30° | 好 | 每次转 30 度,快速干脆 |
| 瞬转 45° | 好 | 大角度,减少转身次数 |
| 瞬转 15° | 中 | 精细但需要多次 |
| 真实转身 | 最好 | 靠身体转动,无冲突 |
推荐默认 30 或 45 度瞬转,并把平滑旋转作为可选。瞬转的角度与时长(通常 100 到 200 ms 的视觉过渡)需要实测调优。
7. 视野限制与隧道视觉
视野限制(Vignetting / Tunneling) 是平滑移动时最有效的舒适度技术:在移动期间缩小视野,减少周边视觉的运动信息。
原理:
周边视觉对运动极其敏感,是晕动的主要输入源
移动时把周边变暗(隧道视觉),只保留中心清晰区域
→ 大幅减少「我在动」的视觉证据
参数参考:
移动中视野半径 : 正常视野的 50%~70%
过渡时长 : 100~200 ms
遮挡方式 : 径向渐变黑边,边缘要柔和
静止时 : 完全恢复,不要常驻
实现要点:
1. 用后处理或全屏四边形做径向遮罩,半径随速度插值
2. 只在「平滑移动」时启用,瞬移不需要
3. 遮挡强度做成可调(关闭 / 弱 / 中 / 强)
4. 不要用纯黑,用低透明度的暗色,避免突兀
实测效果:开启中等强度隧道视觉后,平滑移动的不适报告通常能下降 40% 到 60%,是性价比最高的舒适度技术。
8. 参考系与固定物
提供静止的视觉参考物能显著降低不适:
有效的参考系:
座舱(驾驶舱、飞船、车辆)→ 视野中有不动的框架
固定的地面网格或地板
不随移动的 HUD 框架
玩家自己的虚拟身体(可见的手与躯干)
无效或反效果:
与玩家一起移动的跟随相机
全屏跟随的 UI(缺少空间参照)
无任何静止物体的空旷场景
座舱设计是经典解法:驾驶类 VR 之所以相对舒适,正是因为玩家坐在有框架的座舱里,周边视觉有大量静止参照,与真实乘坐车辆的体验一致。
对于必须平滑移动的非载具场景,可以加「地面网格」或「虚拟手」作为参照,成本低但有效。
9. 渐进适应设计
适应能力因人而异,产品设计应支持渐进:
分层设计:
第一层(默认):瞬移 + 瞬转 + 无强制相机动画
第二层(进阶):平滑移动(可选开启)+ 隧道视觉强
第三层(硬核):平滑移动 + 弱隧道视觉 + 平滑旋转
首次启动:
强制使用第一层,不做任何「进阶」暗示
在设置中提供说明,让用户主动尝试
会话时长:
首次使用建议 10~15 分钟,避免长时间暴露
提供「休息提醒」是可选项,但对留存有帮助
关键原则:不要让用户第一次就接触最晕的配置。首次体验的负面记忆会让用户直接卸载。
9.1 适应曲线与暴露计划
典型适应过程(平滑移动):
第 1 次(10 分钟) : 明显不适,多数人无法完成
第 3~5 次 : 不适减轻,可完成 15 分钟
第 10 次以上 : 多数人可连续 30 分钟以上
少数人(约 10%) : 无论如何适应都无法耐受
关键变量:
暴露间隔 : 至少间隔数小时,连续暴露会加重不适
单次时长 : 从 10 分钟逐步增加到 30 分钟
主动控制权 : 由用户自己控制移动(而非被动观看)显著减轻不适
「主动控制」是重要的舒适因子:同样一段移动,由玩家自己操作比被动观看舒适得多,因为前庭系统对身体动作有预期。这提示设计上应尽量避免「自动播放式」的移动演示。
10. 其他不适来源
除了晕动症,还有几类不适:
| 问题 | 原因 | 对策 |
|---|---|---|
| 眼睛疲劳 | 辐辏调节冲突(VAC) | 内容放在 1.5~3 米 |
| 头痛 | IPD 不匹配、长时间佩戴 | 正确设置 IPD,限制时长 |
| 面部压迫 | 头显重量与绑带 | 前后配重,减轻面压 |
| 闷热出汗 | 面部封闭、散热差 | 通风设计,短会话 |
| 颈部酸痛 | 重量前倾 | 后置配重,减轻整机重量 |
| 干眼 | 眨眼频率下降 | 定时休息提示 |
VAC(Vergence-Accommodation Conflict) 值得单独说明:在 VR 中,眼睛的辐辏(双眼汇聚)指向虚拟物体距离,但调节(晶状体对焦)始终在屏幕的固定焦距上。这种冲突导致眼疲劳与头痛。当前无完美解法,只能通过**把主要内容放在固定焦平面附近(约 1.5 到 2 米)**来缓解。
11. 度量与评估方法
舒适度不能靠「我觉得还行」来判断,需要量化:
常用量表:
SSQ(Simulator Sickness Questionnaire)
16 项症状,输出 Nausea / Oculomotor / Disorientation 三个分数
适合实验对比,耗时约 2 分钟
VRSQ(Virtual Reality Sickness Questionnaire)
SSQ 的 VR 精简版,9 项,更快
Borg CR10
单维度疲劳/不适自评,1~10 分,适合快速迭代
工程实践:
每次改动后,招募 10~15 名测试者(含 2~3 名敏感人群)
做 10 分钟标准化任务,前后各填一次 VRSQ
记录「坚持时长」与「主动退出率」
必须包含敏感人群:只测不敏感的人会得出「没问题」的错误结论,而实际上 10% 的用户已经无法使用。
12. 舒适度工程清单
一份可直接落地的清单:
渲染层:
□ 帧率稳定(优先动态分辨率,其次降画质)
□ Motion-to-Photon 控制在 20 ms 内
□ 关闭运动模糊、景深、自动曝光
□ 正确设置 IPD
移动层:
□ 默认瞬移 + 瞬转(30~45 度)
□ 平滑移动作为可选项,默认关闭
□ 平滑移动时开启隧道视觉
□ 限制加速度(≤ 5 m/s²)与速度上限
□ 落点校验(不穿墙、法向不过陡)
内容层:
□ 避免强制相机动画
□ 主要内容放在 1.5~3 米
□ 提供静止参照物(地面/座舱/虚拟手)
□ 首次体验使用最舒适配置
□ 提供休息提醒
验证层:
□ 测试者包含敏感人群
□ 用 VRSQ 量化,记录退出率
13. 权衡取舍
- 瞬移与平滑移动:前者最舒适但破坏连续性,后者沉浸但致晕,默认前者、可选后者。
- 隧道视觉强度:越强越舒适但越破坏沉浸,中等强度是多数场景的平衡点。
- 画质与帧率:帧率优先,画质可以降;掉帧的代价远高于画质下降。
- 瞬转角度:角度大减少转身次数但方向感差,30 到 45 度是常用折中。
- 内容距离与沉浸感:远处内容沉浸感强但易触发 VAC,1.5 到 3 米是舒适区。
- 会话时长与内容体量:长会话留存好但暴露风险高,应提供分段与休息提示。
14. 常见坑清单
- 用平滑移动做默认:首次用户大量不适,应默认瞬移。
- 只测不敏感人群:得出「不晕」的错误结论,上线后差评集中爆发。
- 允许帧率波动:波动比低帧率更致晕,必须用动态分辨率保稳定。
- 保留运动模糊:VR 里必然引起不适,必须关闭。
- 自动曝光未关:转头时亮度跳变,是隐性致晕源。
- 强制相机动画:过场与被击退都强烈致晕,尽量改由玩家控制。
- 忽略 VAC:内容全放在近处导致眼疲劳与头痛。
- 隧道视觉常驻:静止时也遮挡会破坏沉浸,应只在移动时启用。
- 加速度无限制:急起急停最致晕,必须限加速度并加过渡。
- 无休息提示:长时间暴露后不适累积,用户归因为「这应用很晕」。
15. 小结
舒适度的工程主线是:先保延迟与帧率稳定 → 默认瞬移加瞬转 → 平滑移动配隧道视觉 → 限制加速度与转向速度 → 提供静止参照 → 渐进引导用户适应 → 用 VRSQ 量化验证。核心洞见是「减少视觉与前庭的冲突量」,所有技术手段都是在服务这一条。
投入产出比最高的三件事:锁帧率保稳定、默认瞬移、平滑移动时开隧道视觉。这三项几乎零成本,却能覆盖大部分不适场景。
若要在移动芯片上同时满足帧率与画质,读 一体机 XR 性能优化实战 ;交互层的舒适实现见 Unity XR Interaction Toolkit 交互体系 。
延伸阅读
- Unreal VR 渲染管线与立体渲染 — 延迟与帧率的渲染侧控制
- XR 显示光学与头部眼动追踪 — IPD 与 VAC 的硬件基础
- 一体机 XR 性能优化实战 — 保帧率的性能手段
- Unity XR Interaction Toolkit 交互体系 — 瞬移与转向的实现
继续阅读
探索更多技术文章
浏览归档,发现更多关于系统设计、工具链和工程实践的内容。