VR游戏开发难题多?《Nostos》团队给出了解决方案

网易游戏学院 2019-02-26
限于种种原因,以往的VR世界往往只是⼀个狭小的空间。而在整个行业发展越来越成熟的当下,国内VR原创精品游戏大有可为,网易首款多人在线VR新游《Nostos》就带来了开放世界探索的可能性,在德国科隆展上反响热烈也显示了中国自研VR游戏对全球玩家的吸引力和影响力。


《Nostos》采用了真实物理模拟、超大世界无缝地图和自由移动系统三项技术,能够让玩家充分体验到VR世界的迷⼈魅力。对于创新型自研游戏的打造,研发团队表示:“我们希望打磨得更精良一点,清晰用户体验,包括游戏内容。”

那么,《Nostos》开发团队是如何解决整个VR世界的连续表现,海量数据的性能保障、制作成本的控制,多人协同问题的?2019网易游戏开发者峰会上,《Nostos》核心开发工程师Arthur为我们带来分享。

以下为分享实录:

我与大家分享的是开放世界的开发。

首先我会列举一些制作VR世界常见的难题,和最后我们给出相应的解决办法


难题1:整个世界如何连续表现?

像闯关类游戏,各个关卡是单独存储的,在进入新的关卡只要显示加载画面就可以了,那对于开放世界我们不可能存储一个超大的场景。我们是基于unity开发,如何在unity上做这个事情呢?

难题2:海量的数据,如何保障性能?

如何解决包体很大,加载时间久,吃内,cpu和显卡的问题。

难题3:制作费用高,工期长?

如何降低制作成本,降低工期。

难题4:如何多人协同工作?

unity的习惯,就是很多东西都放在场景里面,如果说两人同时编辑一个unity场景文件,靠svn合并基本上是不可能的事情。如何让很多人同时工作呢?

下面我将从这四个方面,来讲我们是如何应对这些难题。

流式加载

大家都应该看过在线视频的网站,进度条会前后缓冲一段时间,是为了应对网络的卡顿,以及回看的需求,对于三维场景的漫游也有类似的做法,将场景划分成可以拼接的区域,只需要加载相应周围的区域,随着相机的移动,我们会加载新的区域,并卸载不需要的区域。


我们用的是unity里的插件WorldStreamer,基于Unity additive scene loading API做的一个流式加载器,它支持正方形划分、九宫格加载以及环形加载,它可以按照任意方式分层,比如地形,物体,水体等种类。也可以按照尺寸来分层。

性能和视距

主要分三个方面:地形、物体和植被

地形:将Unity的地形分块,然后运用World Steamer做流式加载,这样可以控制加载的范围,降低加载时间,降低性能消耗。

但这样远处的地形就看不到了,所以我们做了超远距离的LOD,近处我们用高精度的terrain,远处我们用低精度的mesh,运用环形加载把他们整合进去。

环视加载支持的中心的九个地块和周围的地块的尺寸大小必须都是一样,这样才能无缝的拼接起来。但是我们发现,如果地块很大的话,中心的高精度地块面积就会很大,这对性能也不太好。

因此我们做了些改进,使得环形加载可以让中心和周围地块尺寸不同。我们也制作了一些离线工具能够烘焙Mesh地形,还做了切割地形的工具。

物体:

◆我们首先按照包围盒大小进行分层。小的加载距离近,大的加载距离远。

◆使用LODGroup,制作多级LOD。

◆对于很远的模型,只加载最低精度模型或公告板,降低加载时间,降低计算选择LOD层级开销。

◆离线工具,将LODGroup地块转换成纯低模场景,高精度模型和低精度模型整合到环形加载。

植被:

一些尝试

Unity地形自带植被功能?

Unity的地形上面是有刷植被的功能的,我们曾经尝试过,发现在大量植被情况下,性能很差,帧率卡得非常低,经过调研发现大量消耗在剔除和LOD计算上面。

直接用GameObject?

我们尝试时发现同样数量的植被,如果转成GameObject的话,编辑器直接就打开了,原因是因为Transform组件开销,编辑器卡死,场景文件巨大,在运行时还会单独剔除和LOD计算。

因此我们正在规划一个植被系统,有密度管理,有统一的LOD计算,有视锥删除,Job,Instancing。

过程化制作

在规则和算法的作用下,批量的制作大量内容。

首先列举一下都有哪些内容需要编辑:地形高度变化,和贴图的分布,植被的分布。这个工作量有多大呢?首先面积巨大,我们的游戏有几十平方公里,在做科隆展之前,地块基本上都是纯手工去做编辑,有大量地形数造工作要处理,而且Unity自带地形工具功能少,比较难控制。

我们做了一个推测,纯手工精编1平方公里大概需要2人月,那60平方公里,一个人要编十年。如果途中还有需求改变,迭代,就会花费大量时间。

接下来我会分享我们用到的两个过程化生成的方案

第一是地形,第二个是植被

地形:Unity上常用的插件工具有Map Magic.Gaia.World Macgine,它们的原理就是通过编辑节点逻辑,自动生成地形的高度图,高度图可以整块应用到地形图上。我们自己开发的地形工具也可以运用到地形的局部。Map Magic可以放非常复杂的东西来实现具体的需求。

接下来我们讲一下植被部分是如何过程化形成的

刚刚讲了用全手动的方法,1平方公里大概需要2人月,太耗时。我们就尝试能不能用全自动化的方法去过程化的生成结果呢?结果发现不达标。

第一不够美观,单调,缺乏多样性,不够有趣,不够精致。

第二影响玩法,难以定制游戏玩法路线和区域,形成的路线比较随机,很难去控制特定的路线。

因此我们就希望开发一个场编拥有所有控制的过程化摆动工具,它能够支持你自由控制逻辑索要作用的区域,还能够编辑生态逻辑。

用软工具一刷,地表贴图几种组合的植被就贴在地面上,同时会避开中间的道路,不会刷到道路上。


我们这款工具原理参考了GDC2017:


这个摆放工具的原理主要分三步:

第一步它的原始数据是各种各样的栅格图层,在图层间定义了一些逻辑运算,这些图层可以包括:河流,道路,地形高度,坡度......图层之间的运算可以是求交,求差,求反,曲线,模板变化等。

第二步是用了图像处理法中的Dither算法,

将灰度图离散化成点集。这个算法用在摆动工具上正好可以控制每个元素的距离,也可以通过浓度表达他的密度。


最后一步,将你的素材绑定到不同的图层里面。

在每一个素材上有不同的间距,有随机缩放和旋转的范围。

多人协同编辑

讲完了过程化制作,我们讲一下多人协同编辑我们是如何做的。

场编多人协作:

多人在线网络虚拟创作环境,每人有一个虚拟化身,可以对附近场景进行修改,数据同步给所有人,数据保存在服务端。好处是你可以看到别人正在干嘛,缺点是没办法版本管理。

我们基于WorldStreamer,按区域,功能将整个世界划分成单独的场景文件,每个文件同时只有一个人编辑,好处是可使用版本管理。

下图是一个场编工作前的示意图,比如他想编辑蓝色地块,他会先锁定这个地块,别人可以看到这一块被锁定了,提交后锁定会结束。


音频协作

如何让音频师和场编一起协作,首先加载显示层,把整个场景加载显示出来加载在最底层,音频师的音频编辑保存在AudioWorld上,结束的时候将AudioWorld切分成分块,整合到流式加载。


策划协作

我们开发了一个Entity世界编辑器,它有一些规则,可以生成一些资源,因为我们是联机的游戏,有些东西要放入服务端。


Q&A

Q:工程化工具开发了多久?是在游戏过程中开发的吗?

A:这个是在游戏当中做出来的。是在于美术和策划的沟通下逐步完善的。

Q:地形的远处lod如何和近处地形融合,解决接缝问题。

A:近处的高精度地形和远处结合,unity地形有相应的接口可以自动缝合,远处的mesh可以多生长一圈下沉的顶点,这样就不会有穿帮的问题。高端的方法,可能就需要了解Unity的顶点生成的算法,在运行时动态修改mesh边缘顶点。

来源:网易游戏学院
原地址:https://mp.weixin.qq.com/s/MnG5cZgf57efM8NAL1duYQ


最新评论
暂无评论
参与评论

商务合作 查看更多

编辑推荐 查看更多