旋转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. Linux设备驱动--块设备(三)之程序设计(转)

    http://blog.csdn.net/jianchi88/article/details/7212701 块设备驱动注册与注销 块设备驱动中的第1个工作通常是注册它们自己到内核,完成这个任务的函数 ...

  2. Python半双工聊天

    半双工聊天 半双工聊天.创建一个简单的半双工聊天程序.指定半双工,我们的意思就是,当建立一个连接且服务开始后,只有一个人能打字,而另一个参与者在得到输入消息提示之前必须等待消息.并且,一旦发送者发送了 ...

  3. 【ACM-ICPC 2018 南京赛区网络预赛 I】Skr

    [链接] 我是链接,点我呀:) [题意] 让你把一个字符串的所有回文子串加起来.(当做数字加起来) 求他们的和. [题解] 回文树. 从两个根节点分别遍历整棵回文树. 按照每个节点的定义. 得到每个节 ...

  4. maven tomcat 热部署

    一.什么是热部署 就是在 tomcat 启动的时候进行部署 二.配置 tomcat 1.需要修改 tomcat 的 conf/tomcat-users.xml 配置文件.添加用户名.密码.权限. &l ...

  5. JavaScript(DOM编程一)

    在什么位置编写js代码 一般把js代码写在window.onload方法中 执行该方法时页面已经加载完毕,可以获取到所有的dom元素 --------------------------------- ...

  6. hdu 2435 dinic算法模板+最小割性质

    #include<stdio.h> #include<queue> #include<string.h> using namespace std; #define ...

  7. idea安装Jerebel 与使用

    在File->setting->plugins->下选择Browse repositories下搜索JRebel Plugin 下载,下载完成之后重启idea. 重启完成后,可见在工 ...

  8. RGB 与 (RGB转 YCbCr再转为 RGB)的图像

           RGB 与 (RGB转 YCbCr再转为 RGB)的图像   不可逆,能够从 矩阵的逆运算看出来. 附上 matlab 代码:         clc,clear; Source=imr ...

  9. 【java项目实战】dom4j解析xml文件,连接Oracle数据库

    简单介绍 dom4j是由dom4j.org出品的一个开源XML解析包.这句话太官方.我们还是看一下官方给出的解释.例如以下图: dom4j是一个易于使用的.开源的,用于解析XML,XPath和XSLT ...

  10. 6 Javascript:函数

    函数 函数是面向任务的. 当我们面临一个须要可问题的时候.往往无处下手.这时候.须要将问题分解为多个任务,从而逐一击破. 这里就须要函数的帮助. 语法 function Name() { Body() ...