快捷导航
查看: 1336|回复: 0

周赛锋 《VR引擎的选择与眩晕解决方案》

[复制链接]

大家好,我是火游网络的主程周赛锋,今天主要给大家分享一下VR的引擎选择以及眩晕的解决方案
VR是当下非常热门的技术,相信大家对VR技术都有一些了解。VR引擎目前比较知名的话有Unity3D以及Unreal,还有CryENGINE,当然,从广义上来说的话,CryENGINE相对用的比较少,而且听说的也比较少,它的学习资料在网上比较难以查阅,因为它相对于Unity3D还有Unreal都没有那么活跃,那我们先跳过它。
首先市面上有几种类型的设备,分别是PC端、移动端、一体机,首先顾名思义,PC端就是将VR硬件连接到电脑上,最后用头戴显示器展现虚拟的沉浸式画面。一体机其实跟移动端非常类似,移动端是将手机卡在一个VR眼镜内,然后通过手机作为显示,CPU和GPU来渲染,达到显示目的,但是一体机是将眼镜和手机相结合起来,相当于固定在一个设备上。目前来说,市面上比较有名的设备就是PC端的,包括HTC Vive,然后是移动端的GearVR,Oculus很可惜,因为被Facebook收购了,在国内基本上访问不到。
如何选择引擎?
那么回归正题,今天我们主要讲一下引擎的选择。今天主要对比一下Unity3D和Unreal,首先大家知道,Unity可能是大家听到过做VR最活跃的一个社区,它对它平台的支持,是目前来说所有引擎都比不上的,打比方做PS,Unreal的话需要重新编译所有的源程序,Unity就不需要,只需要切换一个平台,虽然它中间有一个非常漫长的编译过程,但可以通过一个Pro的版权来规避掉,它有一个Cache Server,Cache Server有一个比较好的特性就是在一台机器上编译过的,在另外一台机器上就不需要再重新编译,只需要把编译过的library给down下来就可以了,这是个非常方便的特性。
第二条说到这个Unity3D和Unreal,初学者应该怎么来选择,首先呢,Unity3D它是基于C#和javascript这两个语言来做脚本语言然后它的开发学习成本是非常低的,相对于Unreal,它是用C++,或是blueprint,就是蓝图来做逻辑还有脚本开发,相对比起来,Unity3D这方面可能没有像Unreal那么面向于所有开发人员,另外Unity3D最终是把所有资源整合到研发、程序这边来,整合到这个游戏内Unreal有一个Blue Trainership,可以直接让非编程人员来做一种像逻辑的连线,这种事情其实是非常友好的,做一些比较简单的开发是会比Unity更快,而且更直观地达到自己想要的效果,但是有个缺点就是这中间很难复制,要一个一个去粘贴。说到社区Unity有一个asset store,是非常活跃的一个社区,而且在中国,有一些比如蛮牛这些社区里面对于Unity的讨论是非常活跃的,相比于Unreal来说,是非常活跃的,而Unreal基本上比较复杂一点的公开资料,要么是需要有一些从业经验或者是去国外的网页上查,而且大多都需要翻墙。asset store目前对于HTC Vive有一个官方的支持,这个后面我们会讲到。
然后Unreal又有什么特点呢?它内建的模块都非常的全面但是学习成本也比较高,这样导致一个问题,就是大部分人都很难去经过自己的摸索把这个东西用好。然后Unity3D,它这方面相对来说比较人性化一点,因为它就是不需要通过很多的设置,就可以去达到自己想要的效果,但是会有一个问题,它的模块都基本齐全,但是没有什么深度,就比方说我们之前,Unity5.1版本开始,我们用了它们的动画编辑器,但它的动画编辑器,我举个例子吧,就是我们之前做动作混合的时候,然后它的多种动作状态,就是动画播放状态会有一个切换上的小bug,当然后面我们通过其他办法,就是做了一个动画管理器来规避掉这个问题。然后再打比方说,它没有内建的材质编辑器,这个东西需要自己写插件或者是从第三方去下载,这东西就比较不友好了。
最后大家可能关注的一个点就是,画面质量的问题,这里我打了一个问号,大家知道为什么吗?因为大家都说,Unreal的画面质量,好炫酷,光照系统好棒,但是Unity就反而没那么好,其实真的是这样吗?恐怕不是。我再举个例子,Steam上面一款游戏叫《奥日与黑暗森林》,是用Unity做的,它的场景是3D和2D相结合的制作方式。实际上这个光影效果,它的实时光渲染是不太输给Unreal的。实际上在渲染效率上面,Unreal确实是胜于Unity,但是从我们刚才说的,就是内建的材质编辑器和自带的光照系统渲染下,可能Unity会达不到Unreal的效果,这个时候我们需要做插件,然后自己去定制参数,我们可以通过很多调整把这个效果给调出来,因为很多场景虽说是以CG方式来播放,但是像闪电、树、发光,都是实时光来渲染的,那么这个效果的话实际上是不输给Unreal,最终表现效果实际上是非常棒的。但是这个游戏有一个缺点啊,它的那个主角的动作做得相对来说没有那么流畅,大家可能也会诟病就是Unity的动作混合没有那么人性化,但是现在我要提到另外一个游戏,也是大家应该都耳熟能详的,《Limbo(地域边境)》后面有个续作,叫《Inside》,在Steam上面好评还蛮多的,它有个特点就是操作非常顺畅,而且动作捕捉的非常棒,所有的人物/所有的角色,动作混合都几乎是可以称之为没有瑕疵的。
总结,从项目经验上来说,如果大家就是使用Unreal做过一些项目,那么我们推荐用Unreal,但是如果是从业VR,没有太多项目经验,就是想快速上手、快速出一个产品,有自己的想法,把创意融入进去的话,更专注于开发,那么我们推荐Unity3D。

Unity3D对于VR的一些使用。那么Unity3D对VR有哪些支持呢?首先是市面上比较常用的HTC Vive、Oculus Rift还有Gear VR,还有一些第三方的厂商,我们先讲一下HTC Vive,它直接使用assets store,然后里面可以搜到一个SteamVR Plugin,可以把Unity整个设置全部VR化,就是说开发者不需要再更多的去设置VR相关的内容,这是一个很方便的东西。然后Oculus Rift还有Gear VR,Unity5.1之后有一个新特性,Build Settings里面加入了Virtual Reality Supported,那么这东西是干嘛用的呢?这是一个选项,你只要播放了之后,就不需要再做任何操作了,它已经就集成了Oculus Rift还有Gear VR的几乎所有操作,就这么简单。我们之前合作的一些VR硬件,我们之前合作过一家VR硬件平台,我们对他们的内容做一些定制。它是一个类似于Gear VR,但是它最终做成一个一体机,那么就这个其实我觉得,一体机实际上是比移动端要好用一些,因为首先频繁的装上去,拆下来,也挺麻烦。然后它是直接使用,设备右侧有一个触摸板,通过触摸板来做所有操作,基于这个操作它实际上就是鼠标的操作。然后头显,它会直接用Virtual Reality Supported来支持你的头显的定位。
首先呢,介绍一下SteamVR Plugin。HTC Vive它是有一个头显,两个控制器,还有两个定位器,这些东西分别是怎么用,我们后面会讲到。它集成了头部,就是整个主角的控制,它里面有一个人物模型,眼睛位置、耳朵位置,耳朵也就是你的一个声音编辑器,完美的模拟的那种立体声,包括那种“嚯嚯”声都可以很真切的体会到,因为它是一键式支持,只需要拖一个它的控件进去就直接可以使用。它集成了控制模型的实时位置展示,就是你手上拿的HTC Vive的控制器,你在VR的第一视角可以直接看到它,并且你的所有操作上面都有真实的反馈,比如说我按下了扳机,里面的模型也按下了扳机。那么集成控制器的位置,姿势,加速度,角速度,还有按钮状态等数据接口,我们先讲一下它的位置和姿势吧,打个比方Steam上面有一个游戏,Valve公司出的《the lab》,它是一个很多游戏的小合集,里面让人比较深刻的两个游戏,一个是拉弓射箭,射箭手感非常好,在拉弓的过程中它是有震动反馈以及声音反馈的,给人感觉自己真正的拿起了弓射出箭,那这个是怎么实现的呢?它的控制器模型,首先它集成了两个控制器的位置,方向,以及控制器当前状态,包括它的姿势,加速度,角速度,包括NVIDIA出了一个《VR Fun House》,里面有用两支箭来戳气球,用到了加速度和角速度。另外我想说一下,大家有没有想过丢飞盘呢,对不对,这个是可以实现的,我丢出去的东西实际上都是有实时数据的,那么好,很简单,就是我们按下一个按钮,捡起一个东西,丢出去,松开,东西就飞出去了,这个是很真实的体验。集成游玩区域、虚拟墙、暂停/恢复等功能。我们先主要讲一下游玩区域和虚拟墙,因为戴上VR之后是看不到周围的,那么这个时候有什么解决方案呢?在HTC Vive安装的时候,可以设置游玩空间,在游戏的过程中,如果我碰到了,或者即将碰到区域边缘,那么它会给出提示,这个东西是SteamVR Plugin内置的,一键集成, 非常方便。其他的一些VR设备,有什么支持呢?Virtual Reality Supported,这个是Unity5.1以上的版本才会有,它集成了VR摄像机,还有跟踪头部朝向、位置集成了头部控制器的陀螺仪方向的一个实时数据更新,就是说,你挂上这个钩之后,在场景里面就出现了一个VR摄像机,来替代常规的摄像机,这个时候我们不需要去做什么。然后它还默认集成了这个位置,这个位置目前是HTC Vive还有Oculus Rift都会有的一个东西,就是我不管走到哪,我的头都是看在一个目标而且位置没有移动的话,给人感觉是很奇怪,那么Oculus Rift它的位置追踪器就解决了这个问题,就是说我站在这里,戴着眼镜偏头的话,里面的画面实际上也是会产生偏头的反馈,这个就相对来说比较真实了,而且它官方给了一个demo场景,在办公桌前看到的桌上的盆栽、电脑啊、椅子,你可以站起来,你可以绕到椅子后面去,这都是一个很真实的反馈。
这个Other Support,我们之前也和一些硬件厂商合作,他们就是直接提供SDK包,集成了VR的一些常用操作。值得一提的是,我们之前和大朋合作,它的那个一体机,实际上是跟Gear VR的操作方式是一样的,就是说我只要登上VirtualRealitySupported,我就可以不需要任何代码,去做自己核心的一些VR内容,这个东西我觉得对开发者是一个很便捷的东西。
眩晕问题
今年我们参加了几个展会,碰到一个大家最多的问题,就是眩晕,眩晕分为两种,一种是让你感觉到我戴的头好昏,就比方说我坐过山车,实际上这是一种大脑反馈过来的直接的表现,因为我后来玩了一下VR的过山车,我也会晕,为什么呢?首先呢,我人物移动,VR里面的快速移动会给我带来一种很反差的东西,就是我头部在处理移动,实际上我整个人身体没有移动,这个时候我第一反应就是好晕,我们可以用很多办法规避掉这个东西,我刚才说的《the lab》它是通过触摸板移动,那么怎么来规避掉这个问题呢,加了一个相当于是遮罩,把快速移动的过程中(的场景)遮挡一部分,而且这个移动在很快就结束了,就是我还没有真实的感觉到我移动的反差感,就已经停止了,这个时候就不会导致这种眩晕的问题,这是第一个,人物移动的眩晕,但是过山车这种东西我觉得是很难去规避掉这个眩晕的,哪怕它做的再真实也好,毕竟我自己坐了我也会晕。然后帧数过低导致眩晕,我们之前做一个产品放在一个平台上面,但是设备的刷新率只有60Hz,这个时候我看所有东西都是有残影的,都是有延迟的,我就很晕,后来换了OculusRift就没有那种延迟感。帧数过低的话你看到所有东西都是有残影的,这个时候你自己也处理不了这个问题,主要是设备,而且,在CJ上面有人问过我,你们怎么解决眩晕的,因为我们没有眩晕,因为在刷新率上面,人物移动上面都是没有问题的,那么这个时候问题就好解决了,而且就是出现这种眩晕问题,大多部分也不是技术上的问题,主要是设备的操作及时性,响应的及时性,就是大家可能不明白这是什么,打比方说,我拿武器砍了半天没有反应,有点类似卡顿,这种体验在第一人称的VR视角里面会感觉很难受,比方说,魔兽世界在网络延迟的时候,砍过去了,这种情况如果放在VR中会怎样呢,如果是别的玩家砍,那会好一点,如果是自己砍的话,就感觉乱了套了。刷新率过低,这个刚才提到了,跟帧数过低是一个类似的东西,帧数过低是自己的VR引擎对效率优化的不是特别好,执行的耗时长,类似update,每一次绘制花了太多时间的话,游戏响应会变慢,每一帧绘制的时间会变长,导致帧数过低,帧数过低和刷新率过低会产生同样一个问题,就是感觉自己在一个幻灯片世界里面,就很难受。
总结一下,VR是一个时下非常热门的技术,大多数人在VR上面也都是摸着石头过河,没有谁能说自己经验是非常丰富、做多少成品,实际上这都是空口之谈,在这里,我也是向大家分享一下我们团队的制作经验,以及一些想法,来帮大家就是绕过一些不必要的坑。最后,Unity3D还有Unreal在我看来,实际上在多数团队都还没有到拼引擎的地步,比方《奥日》这个游戏,其实是美术占了大部分,而不是对于引擎的使用。


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ