旋转VR相机不头晕:一个反直觉的发现

本文章由cartzhang编写,转载请注明出处。 所有权利保留。

文章链接:http://blog.csdn.net/cartzhang/article/details/50547422

作者:cartzhang

目前为止,对所有VR开发者来说一个明确建议:你可以使用传统游戏杆移动VR相机位置,但是任何水平方向上旋转(鼠标视角或摇杆旋转)都会引起玩家不适。

如上所说,我找到一个方法,当平滑旋转时,玩家不会有任何不适。

一、适用场景

玩家在太空中漂浮,在他前面有个很大的行星在旋转。在行星表面有成千上万的对象(树,建筑物)。如你所想,当行星旋转,在行星表面的对象跟着它旋转。

这会产生一个工程问题。行星表面的每个对象一次绘制调用——这非常消耗性能的。静态批处理可以减少行星表面数百个对象为一个整体网格,一次绘制调用。但是静态批量只在对象不运动情况下可执行。因为行星上旋转的,行星上所有的对象很明显都在转换。理想情况,行星及其表面对象是静态的,不旋转的。

二、解决方案

让玩家绕着行星旋转,而不是旋转行星及其的表面对象。

因为玩家在太空中的一个固定的地方,你也需要旋转天空盒(我使用一个星云立体贴图)。使用此法,玩家不会感觉到任何旋转或移动。而是,看起来像行星在旋转,玩家是静止的。然而,对游戏引擎来说,成千的对象可被静态批处理,性能会有极大提升。

我们可做进一步处理。使用行星原点(不是玩家原点)作为旋转中心轴,玩家可以使用摇杆来控制绕着行星旋转。当玩家旋转摇杆,对引擎来说,玩家改变了他自己绕着行星原点的位置。但是,对玩家来说,看起来就是他控制行星,手动转动它,他不用做物理移动就可以看到行星的任何地方。

有趣的是,位置跟踪允许玩家站立在行星上行走,坐着的玩家只需要“旋转”行星来代替。

这样的结果:行星上成千上万对象的渲染——作为静态对象而旋转玩家,不会引起不适。

三、重点导读

摇杆的偏航旋转令人头晕,但是绕着不同的原点旋转在固定帧率下感觉不错。这个方法可行,多亏了旋转天空盒和玩家对行星旋转的直觉感受。大脑分不清天空盒和玩家绕着行星旋转。对大脑来说,最合逻辑的感觉是我们希望是:行星旋转。

四、译者说明

【译者说明:本方法目前只适用于星球之类的游戏。再说,星球游戏大家需要在不同速度旋转的话,也不太好使用。若只可以使用一个基本的旋转,其他的都相对其旋转,这样不知道,会不会减弱眩晕。故此,意思就是要减少场景中动态的对象,减到最少。个人理解,仅供参考】

原帖地址:http://dshankar.svbtle.com/vr-camera-rotation-without-nausea-a-counterintuitive-discovery


若有问题,请随时联系!

非常感谢!!

旋转VR相机不头晕:一个反直觉的发现的更多相关文章

  1. 一个反直觉的sql

    引子 在<容易引起雪崩的两个处理>里,我提到一个慢查询的问题.本文先从整洁架构的角度讲讲慢查询sql完成的功能以及设计,再介绍对sql进行的实施测试现象以及思考. 设计讲解 一见杨过误终身 ...

  2. 为什么玩VR眼镜会头晕?

    为什么玩VR眼镜会头晕?看完本文你就懂了   很多用户都体验过各式各样的VR眼镜或者说头盔,但是不管哪一款,都很容易出现头晕的情况.相信大家都纳闷过,为什么玩VR眼镜会头晕?实际上这是和设备本身的技术 ...

  3. 从谷歌到脸书:为何巨头纷纷“钟情于”VR相机?

    VR的火爆,自然无需多言.而基于VR这一个概念,已经在多个相关行业不断衍生出新的产品.服务或内容.VR眼镜.VR头盔.VR相机.VR游戏.VR影视.VR应用--但VR产业的发展并不是齐头并进,而是出现 ...

  4. 有关默认相机转VR相机

    呃...15年开篇~ 去年想写一个有关默认相机转VR相机的脚本,当时没写完,今天不小心翻到并写完了,而且思路也和原来完全不一样了,增加了是否删除原相机与是否转换所选相机的选项. 由于国内VR版本比较混 ...

  5. CoSky-Mirror 就像一个镜子放在 Nacos、CoSky 中间,构建一个统一的服务发现平台

    CoSky 基于 Redis 的服务治理平台(服务注册/发现 & 配置中心) Consul + Sky = CoSky CoSky 是一个轻量级.低成本的服务注册.服务发现. 配置服务 SDK ...

  6. UIView动画效果之----翻转.旋转.偏移.翻页.缩放.取反的动画效

    翻转的动画 //开始动画 [UIView beginAnimations:@"doflip" context:nil]; //设置时常 [UIView setAnimationDu ...

  7. Unity3D for VR 学习(1): 又一个新玩具 暴风魔镜 4(Android)

    2016年伊始,有了VR虚拟现实硬件设备:  暴风魔镜4–好奇者的新玩具 . 2015年下半年的朋友圈中各种VR.AR的新闻层次不穷,搞的我也心痒痒的:好歹咱也是职业的Unity3D程序员,高大上的O ...

  8. Java中将一个反斜杠转换成两个反斜杠

    代码示例: s = s.replaceAll("\\\\", "\\\\\\\\");

  9. qt如何去掉文件路径最后一个反斜杠的内容

    QString strTemp = “E:\\hell\\word\\detect.txt”   int nIndex = strTemp.lastIndexOf('\\');    strTemp ...

随机推荐

  1. [LeetCode] 347. 前K个高频元素

    python 版方法1:链表 class Solution(object): def topKFrequent(self, nums, k): """ :type num ...

  2. 查看eclipse的安装路径

    在桌面上快捷方式右键  点击属性  起始位置便是.

  3. JAVA循环迭代中删除或添加集合数据报java.util.ConcurrentModificationException错误

    1.写出下面的输出结果 public class test{ public static void main(String [] args) List<String> list = new ...

  4. SQL注入原理以及怎样避免注入

    SQL注入:究竟什么时候会用到SQL呢?回答是訪问数据库的时候.也就是说SQL注入-->直接威胁到了数据源,呵呵.数据库都收到了威胁,站点还能正常现实么? 所谓SQL注入,就是通过把SQL命令插 ...

  5. 远程视频监控之驱动篇(LED)

    转载请注明出处:http://blog.csdn.net/ruoyunliufeng/article/details/38515205 之前一直在考虑该不该写这篇,由于我之前在博客里有写过LED的驱动 ...

  6. DNS查询报文实例

    2.2 DNS查询报文实例 以www.baidu.com为例,用Wireshark俘获分组,结合2.1的理论内容,很容易看明白的,DNS请求报文如下: 图7 DNS请求报文示例 2.3 DNS回答报文 ...

  7. MVC、控件、一般处理程序中的session and cookie

    Mvc中: session: if (!string .IsNullOrEmpty(find)) //设置 Session["oip"] = "无锡"; Vie ...

  8. 下拉列表的使用(Ajax/数据联动)

    下拉列表联动

  9. 自动刷github提交记录

    前言 进入自己github主页会看到自己的提交记录,如果某天没有提交记录,那天的小方框就显示灰色.强迫症的我,每次进来看着就感觉不爽, 想着自己每天记得提交点东西,争取像阮一峰大神一样,每天都有提交记 ...

  10. 从DataTable高效率导出数据到Excel

    首先从数据库读取数据到DataTable,这我就不提了,大家都明白.下面直接介绍如何从DataTable高效率导出数据到Excel中的方法,代码如下: using Microsoft.Office.I ...