旋转VR相机不头晕:一个反直觉的发现
旋转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相机不头晕:一个反直觉的发现的更多相关文章
- 一个反直觉的sql
引子 在<容易引起雪崩的两个处理>里,我提到一个慢查询的问题.本文先从整洁架构的角度讲讲慢查询sql完成的功能以及设计,再介绍对sql进行的实施测试现象以及思考. 设计讲解 一见杨过误终身 ...
- 为什么玩VR眼镜会头晕?
为什么玩VR眼镜会头晕?看完本文你就懂了 很多用户都体验过各式各样的VR眼镜或者说头盔,但是不管哪一款,都很容易出现头晕的情况.相信大家都纳闷过,为什么玩VR眼镜会头晕?实际上这是和设备本身的技术 ...
- 从谷歌到脸书:为何巨头纷纷“钟情于”VR相机?
VR的火爆,自然无需多言.而基于VR这一个概念,已经在多个相关行业不断衍生出新的产品.服务或内容.VR眼镜.VR头盔.VR相机.VR游戏.VR影视.VR应用--但VR产业的发展并不是齐头并进,而是出现 ...
- 有关默认相机转VR相机
呃...15年开篇~ 去年想写一个有关默认相机转VR相机的脚本,当时没写完,今天不小心翻到并写完了,而且思路也和原来完全不一样了,增加了是否删除原相机与是否转换所选相机的选项. 由于国内VR版本比较混 ...
- CoSky-Mirror 就像一个镜子放在 Nacos、CoSky 中间,构建一个统一的服务发现平台
CoSky 基于 Redis 的服务治理平台(服务注册/发现 & 配置中心) Consul + Sky = CoSky CoSky 是一个轻量级.低成本的服务注册.服务发现. 配置服务 SDK ...
- UIView动画效果之----翻转.旋转.偏移.翻页.缩放.取反的动画效
翻转的动画 //开始动画 [UIView beginAnimations:@"doflip" context:nil]; //设置时常 [UIView setAnimationDu ...
- Unity3D for VR 学习(1): 又一个新玩具 暴风魔镜 4(Android)
2016年伊始,有了VR虚拟现实硬件设备: 暴风魔镜4–好奇者的新玩具 . 2015年下半年的朋友圈中各种VR.AR的新闻层次不穷,搞的我也心痒痒的:好歹咱也是职业的Unity3D程序员,高大上的O ...
- Java中将一个反斜杠转换成两个反斜杠
代码示例: s = s.replaceAll("\\\\", "\\\\\\\\");
- qt如何去掉文件路径最后一个反斜杠的内容
QString strTemp = “E:\\hell\\word\\detect.txt” int nIndex = strTemp.lastIndexOf('\\'); strTemp ...
随机推荐
- MVC基于Struts2的CRUD,java+bean+struts
1,所需jar包,将jar包导入lib中 2,项目目录结构 3,struts.xml <?xml version="1.0" encoding="UTF-8&quo ...
- springboot实现拦截器
你首先需要一个搭建好的springboot项目,具体怎么搭建我还没有相应的随笔可以交给你,可以自己上网上看一下,学习一下,之后我要是总结出来的话,这里面我会通知的 首先这个项目的目录结构是这样子的 首 ...
- 【ACM-ICPC 2018 南京赛区网络预赛 A】An Olympian Math Problem
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 估计试几个就会发现答案总是n-1吧. 队友给的证明 [代码] #include <bits/stdc++.h> #def ...
- springmvc上传操作
创建虚拟目录 配置tomcat的配置文件server.xml 在真实路径中放置一个图片 启动服务器: 直接可以通过配置的虚拟路径来访问真实路径中的图片 所以 我们在做图片上传的操作的时候 就可 ...
- JavaScript(DOM编程补充一)
HTML属性的直接调用: 还可以通过getAttribute方法获取属性的值: setAttribute方法: removeAttribute ---------------------------- ...
- UIButton上字体的对齐方式
设置UIButton上字体的对齐方式,不是用: [Button.titleLabel setTextAlignment:UITextAlignmentCenter]; 而是用: [Button set ...
- 小米2S电池电量用尽充电无法开机解决方法
背景: 昨晚睡觉前关机,记得电量还有百分之七八十,但早上起床后,指示灯一直红灯闪烁.按开机键和其它键都没反应! ! 解决方法: 扣下电池,用万能充冲电,略微多冲一会,由于 ...
- struts2提交多个对象带图片
一:实体类 二:前台页面 三:Action处理
- Oracle 中UNDO与REDO的差别具体解释
一 为了更清楚的看出2者差别,请看下表: UNDO ...
- 《Java虚拟机原理图解》 1.2.3、Class文件里的常量池具体解释(下)
NO9.类中引用到的field字段在常量池中是如何描写叙述的?(CONSTANT_Fieldref_info, CONSTANT_Name_Type_info) 一般而言.我们在定义类的过程中会定义一 ...