旋转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. el表达式中的比较和包含

    相等( equal ) :eq 不相等( not equal ): ne / neq 大于( greater than ): gt 小于( less than ): lt 大于等于( great th ...

  2. BJFU fudq的等式

    /* BJFU fudq的等式 http://101.200.220.237/contest/19/problem/118/ 数论 勒让德定理 二分答案 */ #include <cstdio& ...

  3. HDU5924 Mr. Frog’s Problem

    /* HDU5924 Mr. Frog’s Problem http://acm.hdu.edu.cn/showproblem.php?pid=5924 数论 * */ #include <cs ...

  4. idea安装Jerebel 与使用

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

  5. [Asp.net]EF更新之后要 保存

    数据库那边保存表 项目里保存模型

  6. HDU 3756

    很容易就想到把三维转化成了二维,求出点离Z轴的距离,把这个距离当成X坐标,Z轴当Y坐标,然后就变成了求一个直角三角形覆盖这些点 像上一题一样,确定斜率直线的时候,必定是有一点在线上的.于是,可以把直线 ...

  7. java-类生命周期(二)

    上文介绍了java-类生命周期(一),理论性比較强.认为太复杂的同学,瞟一下本文的样例加深理解. 先给道题目,看看答对没. /** * 类载入试验基类 * * @author peter_wang * ...

  8. sqlite学习笔记7:C语言中使用sqlite之打开数据库

    数据库的基本内容前面都已经说得差点儿相同了.接下看看如何在C语言中使用sqlite. 一 接口 sqlite3_open(const char *filename, sqlite3 **ppDb) 打 ...

  9. 【DataStructure】One of queue usage: Simulation System

    Statements: This blog was written by me, but most of content  is quoted from book[Data Structure wit ...

  10. c3---scanf

    #include <stdio.h> int main(int argc, const char * argv[]) { // 要求: 存储用户输入的整数 // 1.用户输入的整数确定吗? ...