如何避免虚拟现实中的晕眩

大家好,今天跟大家分享一下北京理工大学翁冬冬教授,在深圳开发者大会中发表的晕眩相关研究。希望可以给相关的读者或是开发者伙伴一些信息与帮助。翁冬冬教授与他的团队在HTC
Vive之前已经研究虚拟现实显示设备数十年,对虚拟现实及人体的影响研究相当的丰富。

【一、晕眩的八大可能原因】

【二、晕眩的产生原理与迷思】

【三、三种不同的晕眩来源】

【四、避免虚拟现实晕眩的三种理论】

【五、改善虚拟现实晕眩的四个方向】

【六、缓解虚拟现实晕眩的七个方式】

【七、翁教授的有趣题外话!】

更多深圳开发者峰会的信息,请看这里!

https://www.htcvive.com/cn/forum …
wthread&tid=173

===============================================================================

【一、晕眩的八大可能原因】

首先,翁冬冬教授明确说在前头,以下的研究内容并不是说开发者能做什么或是不能做什么,而是在体验者发生晕眩情形时,可以做为参考依据的线索与出发点。「因为VR能够达成的世界很美好,我们
才更应该注意我们内容呈现的质量。」翁冬冬教授说道。

先讲简单结论,看一下使用者会晕的八大可能原因:

  1. 系统延迟(俗称的lag)

  2. 视场角(FIELD OF VIEW)越大,越容易晕

  3. 第一人称比第三人称越晕

  4. 场景细节越复杂越晕

  5. 场景越真实可能越晕

  6. 被动比主动操作容易晕(就像开车的人不会晕车)

  7. 有静态参照物(几乎不动的一个对象)会好很多(驾驶舱,甚至鼻子)

  8. 不良的视角晃动(比如说刻意营造的震动效果: 想象云霄飞车等)

===============================================================================

【二、晕眩的产生原理与迷思】

再来,我们可以更进一步深究一下晕眩的产生原理:

1. 晕眩其实是身体的保护机制,是大脑前庭受到「不良」的刺激后,警告身体的一种反应。

2. 何谓「不良」的刺激?举凡生活中的晕车、晕船、晕机;玩计算机或仿真器时的不适;以及虚拟现实装置中可能造成的运动错觉。

3. 简单来说,当视觉/感官接受的讯号,与前庭系统受到的刺激对不起来,就是「不良」的刺激,就容易晕眩。

然后,我们常常有一些对于晕眩的迷思

1. 【迷思:计算机上看不会晕,用头盔看也就不会晕?】错,不同的设备上观看的内容,眩晕与否以及程度是很不一样的。

2. 【迷思:场景越真实越不会晕?】错,场景的细节越多,越容易发生晕眩

===============================================================================

【三、三种不同的晕眩来源】

翁冬冬教授的团队更进一步说明了三种不同的晕眩来源(动晕(motion-sickness)、仿真器晕眩、虚拟现实晕眩),以及其不同的地方:

【首先,一般的动晕症状】

像是坐车、坐船、坐飞机时因为颠簸、摇摆、旋转等任何形式的加速运动,导致大脑前庭与感官认知有所差异,以致晕眩的不适应症状(肚子不适、恶心、头晕等)。但是,持续并稳定等速的被动运动

(如火车、飞机、电梯速度稳定时),前庭的感受器会以同样的速度运动,就不会被人体所感知到。

【再来,数字媒体导致的仿真器晕眩症状】

和一般晕动症不同的是,所谓的「仿真器晕眩症状」往往是因为不牵涉任何实际运动所导致的。晕动症发生是在实际有运动的时候(船上、飞机上),仿真器晕眩症却是因为视觉上感受到有运动,实际

上却完全没有任何运动而导致。所以常见有些朋友在观看屏幕上3D画面,进行3D游戏时会有不适感。于人体的症状也跟一般动晕症稍有不同(如眼睛疲劳)。

【最后,因为虚拟现实媒体导致的虚拟现实晕眩】

由于虚拟现实所产生的独特沉浸感,加上在虚拟现实环境中,常有在身体不动的情况之下,视觉观察动态的场景,此时容易产生强制性的运动感(运动错觉)。常见症状有恶心、眼部不适、真实感减弱

、和方向障碍。虚拟现实晕眩症的症状往往比前面两种晕眩还来得严重,可能是因为虚拟现实较强的沉浸感导致,这会破坏体验者对虚拟现实的好感,使对虚拟现实失去安全感,也是限制未来虚拟现实

发展的重要障碍。

===============================================================================

【四、避免虚拟现实晕眩的三种理论】

为了避免产生麻烦的虚拟现实晕眩症状,有三种理论可供参考

【感知冲突理论:是否违反感官的预测?】

人的感官有一种「预测」的学习能力,因此当我们习惯了重力往下,东西松开之后就会认知他将往下掉。如果把我们放到一个重力不是往下的环境,换句话说,一个环境刺激与感官习惯不同的世界,可能会引起晕眩症。

【姿态平衡理论:视觉导致的姿势改变,是否与其他感官相异?】

我们可能在虚拟现实中操控着飞机高速的转弯,视觉中告诉你需要偏动一下姿势以免被作用力甩出去,但好好坐在位置上的大脑,却什么作用力都没有感受到,感官矛盾之下可能会晕眩。一旦我们在外

界刺激之下无法保持一个稳定的姿势,可能就会因此感到不适,姿势不平衡感越强,人们就会更不舒服。这有些类似感知冲突中的感受,却因为是前庭系统无法应付的不良刺激,所以被视为更加受限的形式。

【中毒理论:虚拟现实体验是否刻意营造失去感官能力的错觉?】

由于人体长久的进化过程,晕眩变成一种身体失去感官能力时的自然警讯。当设计不合理的虚拟现实内容,让身体误以为已经摄取某种导致它失去运作能力的物质,就会自然触发晕眩、呕吐、等帮助身体排出毒素的反映。

当然,除了以上三种理论之外,还有像是显示屏幕的问题、个人的体质等,都可能有所影响

===============================================================================

【五、改善虚拟现实晕眩的四个方向】

最后,针对虚拟现实的晕眩症状,有个简单的快速的check-list供各位朋友参考

【系统原因(软硬件整体设计不良)】

  1. 运动能力丧失 (如手机虚拟现实中,明明没有移动却在视觉中大幅度运动)

  2. 运动能力缺失 (如Virtuix Omni提供的部分移动感,却仍受限的运动能力)

  3. 运动能力不一致 (在能够自由运动之下,却和其余感官感受的不一致)

【软件原因】

  1. 屏幕显示更新率

  2. 运算性能限制

  3. 交互系统延迟

  4. 定位系统延迟

  5. 显示器视场角(field of view)

  6. 屏幕分辨率

  7. 显示器对比度

  8. 显示器亮度

  9. 瞳距

  10. 出瞳距离

  11. 头盔体积重量

  12. 头盔配戴舒适度

  13. 定位系统准确度

  14. 视觉、听觉、触觉协调性

  15. 听觉输入音量

(其中以1~4为最主要原因)

【软件原因】

  1. 细节复杂度 (越复杂 = 越频繁的眼动 = 更重的大脑负担)

  2. 环境逼真度

  3. 视角选择 (第一人称比第三人称易晕)

  4. 场景比例 (ex: 场景中人的高度与现实不一致)

  5. 主动/被动? (被动比主动易晕,ex: 乘客vs.驾驶)

  6. 视角不良运动 (ex: 刻意营造的不合理视角晃动,身体无感/视觉有感的云霄飞车晃动)

  7. 环境特性 (ex: 不易分辨方向的狭窄黑暗环境相对易晕)

  8. 有无静物参考? (没有静态参照物易晕,ex: hover junkers的船甲板, 射击游戏的准星)

  9. 图像色度、饱和度

  10. 环境模糊度

  11. 环境开阔度

  12. 物体动静态影响

  13. VE与RE差异

  14. 视角与物体远近

  15. 虚拟视场角大小

  16. 参照物影响

  17. 场景复杂度 (越复杂 = 越频繁的眼动 = 更重的大脑负担)

  18. 速度、加速度影响

  19. 运动复杂度

  20. 头部转动频率

  21. 标志点影响

(其中以1~8最为主要)

【个人原因】

  1. 经验与习惯

  2. 心理因素

  3. 性别与年龄

  4. 疲劳程度

  5. 使用VR装置的频率

  6. 主视眼影响

  7. 平衡感

  8. 视觉与前庭感官健康

  9. 对新事物接受能力

(其中1~2为主要因素)

===============================================================================

【六、缓解虚拟现实晕眩的七个方式】

  1. 设计合理场景

  2. 提高硬件(画面)更新率/降低延迟/增加定位准确度/减轻头盔重量/设计合适的视角

  3. 不要在进入虚拟现实后快速移动或做一些不平稳的动作

  4. 离开虚拟世界后不要马上坐下、走动一下可以帮助回到真实世界

  5. 增加运动平台来模拟实际运动

  6. 在虚拟场景中增加静止参考元素

  7. 提前适应虚拟场景

===============================================================================

【七、翁教授的有趣题外话!】

最后,翁冬冬教授另有一些有趣的题外话发言,在此给大家参考!

  1. (晕眩是前庭受不良刺激) 但是人类偏偏很喜欢刺激前庭(开快车、旋转木马、云霄飞车),会带给大脑愉悦感。

  2. VR中学会的技能,在现实生活中也是真的学会,是有科学理论基础的。

  3. 对Gear VR只有一个字:恶,尤其不规则高速转动的游戏,一定非常晕(翁教授补充:虽然我很爱玩)。

  4. 我没有拿HTC的钱,但HTC Vive确实是我研究几十年来用过最好的(VR装置)!

VR视频类型识别

目前通过图像识别的方式区分视频类型,并已完成应用层的实现,识别率很高

相比通过获取视频文件特征标识的方式

优点:

1.不用修改系统的MediaScanner 所以不用升级系统

2.视频文件中一般只有mp4文件有metadata 其中box和uuid之类的特征标识并没有标准行业规范 所以通过图像识别的方式
没有文件格式和视频编解码的限制

缺点:

1.比获取视频文件特征标识的方式速度慢

基本思路

1.对一个视频 根据播放时长平均取若干帧图像 根据每帧图像识别后 返回的类型 做加权 最后权值大于40% 则为该类型

2.判断流程:

先判断左右眼3d — true — 返回3d类型 — false —

判断上下眼3d — true — 返回3d类型— false —

判断全景 — true — 返回全景— false — 返回2d

3.判断左右眼3d:取图像最中间一列像素 作为基准线 判断该列和其右边一列是否有连续性 如果不连续 则为左右眼3d

但很多3d视频左右眼宽度不相等 所以一次判断不是 还需要多判断几次 即左右各移动两次 每次移动一列

4.判断上下眼3d:取图像最中间一行像素 作为基准线 判断该行和其下面一行是否有连续性 如果不连续 则为上下眼3d

但很多3d视频上下眼高度不相等 所以一次判断不是 还需要多判断几次 即上下各移动两次 每次移动一行

5.判断全景视频:由于全景视频是360度的 所以图像最左边一列(第0列)和最右边一列(第n-1列) 必然可以连接起来 所以判断这两列是否有连续性 如果连续
则为全景视频

后面发现还存在如下问题

1.视频取帧速度慢 取一帧需要几百毫秒 所以性能瓶颈不在算法的时间复杂度 而是调用系统函数取视频帧慢

2.加权阀值40% 不合适 如果取两帧 则权重阀值为0了 至少应为50% 取帧的数量会影响耗时

3.如果视频有片头或片尾 比如黑色画面 显示演员列表之类的 对于图像判断连续性及加权结果 有很大影响

4.无论左右眼还是上下眼3d 很多视频 中间会有间隙或黑线 视频分辨率越高则间隙或黑线所占像素的行列越多 所以仅仅移动像素行列两次 是没用的

5.视频画面很暗 则对判断像素的连续性 有影响

我的解决办法及优化

1.跳过视频时长的前后10%的时间段 认为是片头或片尾 对视频中间的时间段取帧

2.取10帧或者取1帧 其实大部分情况下 在图像上的特征没有区别 3d视频左右或上下有对称性 全景最左和最右可以连接起来 所以只取1帧 不考虑加权
耗时减少一个量级

3.在不影响识别结果的情况下 对原始的视频帧图像进行等比例压缩 减少实时的内存占用 更少的像素判断次数 耗时减少

4.每个视频文件 不用每次应用启动都进行识别 可以缓存文件的hash值和视频类型的识别结果 后面启动不需要再识别之前已经识别过的视频文件
只需读取缓存过的识别结果

5.判断左右眼3d改为: 取左右眼各自区域图像的最中间一列像素 判断两列像素是否有连续性 如果连续 即说明图像对称 则为左右眼3d
但很多3d视频左右眼宽度不相等 所以一次判断不是 还需要多判断几次 即右眼区域图像左右各移动两次 每次移动一列 这样就不需要判断取图像中间列
即不存在有黑线和间隙的问题

6.判断上下眼3d改为: 取上下眼各自区域图像的最中间一行像素 判断两行像素是否有连续性 如果连续 即说明图像对称 则为上下眼3d
但很多3d视频上下眼高度不相等 所以一次判断不是 还需要多判断几次 即下眼区域图像上下各移动两次 每次移动一行 这样就不需要判断取图像最中间行
即不存在有黑线和间隙的问题

目前依然存在的问题

1.视频画面很暗 则对判断像素的连续性 有影响

2.经测试 调用系统函数对视频取帧 在乐视X2和S2的安卓6.0以上 存在兼容性问题

还需要做的优化

1.不用系统函数对视频取帧 改用第三方FFMPEG编解码库 并将其中取帧的部分提取出来 提高取帧速度

Q : 如何判断两列(行)像素连续性或相似性

A :

1.依次取出该列(行)的像素颜色值 对颜色值做位运算(要考虑各通道占位ARGB8888、RGB565、RGB444) 取出RGB三通道的值
两列(行)相同索引像素的RGB值分别求均值(两列或行差值的绝对值累加求和/该列或行的像素数) 取RGB三通道中的最大均值

2.同上 再对RGB三通道分别求方差(( 两列或行差值的绝对值-两列或行的均值)的平方的累加求和/该列或行的像素数) 取RGB三通道中的最大方差

3.求出的最大均值或最大方差 若超过阀值 则说明无连续性或低相似性

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×