6月5日,2015年第三期GameLook开放日‧虚幻引擎专场活动在上海正式举行,此次活动由Epic Games与GameLook联合主办。在以往的映象中,用虚幻引擎开发游戏是大团的专利,但是在此次开放日活动中,徐化以及他的团队队员告诉我们,四个人也能开发虚幻游戏,游戏品质同样达到高水准。
GameLook报道/ 6月5日,2015年第三期GameLook开放日‧虚幻引擎专场活动在上海正式举行,此次活动由Epic Games与GameLook联合主办。
以往开发虚拟游戏的团队是什么样的?大家普遍认为用虚幻引擎做游戏的团队都是大团队,只有大团才有这样的技术积累和精力,做出高品质的游戏。但令人惊讶的是,《幻》作为一款虚幻沙盒游戏,它的开发团队只有4个人。此次活动,《幻》团队的创始人徐化作了《幻-从零开始制作经验》的主题演讲。
徐化作为一名编剧,在没有任何游戏开发经验的情况,为何会选择用UE4虚幻引擎去开发游戏呢?徐化现活动现场说道:“我们的团队组合有点奇葩,就我个人而言,我是个编剧,没有任何游戏开发的经验,相当于是从零开始。虚幻引擎提供较好的技术支持,如果用户不是特别会编程,也可以使用。即使一个人完全不懂怎么开发游戏,那么只有UE4完全可以帮助你做到。对于“幻”团队来讲,我们要做的就是一切从零开始,直达最高点。”
在技术支持上,幻团队的程序、美术各自分享了在研发过程中遇到的难题,以及如何利用UE4技术支持解决问题。
以下是演讲实录:
选择虚幻引擎开发游戏的前提 :开源、蓝图、持续进化
徐化:《幻》是一个4人团队,我们是在用UE4做一个全平台太空探索的沙盒游戏。近几年中国手游市场的状态是:渠道商、硬件商占的比例很高,但没有高质量的游戏内容推出,因此我们希望做中国最高质量的单机游戏,同时网络对战也是支持的。
为什么选择虚幻引擎来开发这个项目呢?其实说起来,我们的团队组合有点奇葩。就我个人而言,我是个编剧,没有任何游戏开发的经验,相当于是从零开始。虚幻引擎提供较好的技术支持,如果用户不是特别会编程,也可以使用。即使一个人完全不懂怎么开发游戏,那么只有UE4完全可以帮助你做到。对于“幻”团队来讲,我们要做的就是一切从零开始,直达最高点。
对于游戏开发者来讲,都知道虚幻引擎有什么优点?在我学习开发的过程中发现了它的三个杀手锏:一是引擎开源。“《幻》从零开始”游戏是完全虚拟太阳系的,其中的每个星球都是等比大小,如果想要把引擎改到这种程度,必须要有引擎开源作为支持。第二个杀手锏是蓝图,它是可视化编成,即使没有学过程序,也可以编写基本的逻辑和菜单里面的内容。还有第三点版本持续进化,当中有很多新的功能被添加进UE4里,就如同寻找宝藏的孩子,可以不断通过开启新地图,得到想要的奖品。
实现大世界:做随机地貌 无缝切换
程序 李威:我很有幸参与《幻》这个项目,并在团队里负责《幻》的“大世界实现”部分和“扩张生成”部分的开发。《幻》想达到的一个“大世界”目标,就是整个太阳系所有的星球。太阳系内的星球上有各种各样的地貌,类似于火星这种的星球,它本身的元素导致它星球本身就具有红色的色彩。那么大家所熟知的月球呢?就是各种环形山的地貌,地球是大家很熟悉的每天生活的地方。因为可能很多人一辈子都无法登上太阳系内其它星球,所以如何将头脑中设计的内容在游戏中表达出来?这是我们要的结果。但在这个游戏里,我们可以模拟出类似的环境,让玩家可以体验到可能是后几代人才能体验到的内容。
当初在设计“大世界”的时候遇到很多问题,首先一个在于地球本身。做科学研究方面的人士知道,地球本身的数据量是比较大的,一个10米和100米精度范围的高度和纹理数据就有20G。UE4的单位是1cm,如果再往下放几个单位的话,就会发现这个数据量对于一个游戏来说是无法承载的内容。我们可以这么想,地球显然不是太阳系里最大的星球,但是地球的半径超过6000公里,也就是说可以达到10^8数量级,一般来讲浮点数的精度范围是10^7到10^8这个数量级,接近32位浮点数的精度极限。
在实际的开发过程中,如果对这个数量级强制进行渲染,首先造成的后果就是会超出虚幻世界地图范围的极限,光感可能会发现问题。UE4早期 的是50万个单位(相当于5公里左右),新的版本改到200万个单位(相当于20公里左右),但对于描述超过6000公里半径的地球是远远不够用的。强制渲染还存在一个问题:渲染的过程最后到了地表,会很明显的发现地球画面不断抖动,所有的顶点和纹理会不断抖动,因为你超出了虚幻的范围,这样的导致的结果就是上下步之间的误差会很大。
《幻》大世界的这方面内容,是拿网上的一个开源项目作为参考。大概的思路是把球面理解为6个平面的拼接,用一个立方体描述球体,在分界地方构成三个平面。当我们的视角接近星球的时候,就会把这个面进行细分,距离视角越近的面就会被越多细分出来,如果接近到面的位置,再把视角拉回来,线光打上去,就可以看到那几个地方的密度高于其他部分。
地球本身的数据量很大,如果放在游戏中去用,玩家需要下载一个20G的自然量,你会发现这根本不切实际。实际上,就算是开发者也会认为这是不可能做到的事。因为开发者需要安排这20G的数据,还要让玩家觉得这一切看起来很简单。我们想到用一种随机生成的方式,对新产生的平面进行随机数计算,使用多个相干噪声的算法叠加。
说起来这种方式在国外已经研究了很长一段时间,最早的论文出现在上世纪80年代左右,论文中就提到怎样让随机生成出来的地貌更加接近真实自然界的地貌?举个例子,比如world machine是虚幻官方推荐的生成大地形的方案,这是把相关技术集大成的一个作品。
随机生成的地貌会节省开发者很大精力,而结果也不会太差。基于此,我们可以让他先让它生成大块的内容,然后再去首发一些细节的,这也是游戏最后可能会用到的方案。前期,我们做出来的效果并不是很好,试图模拟出山脉的走势,有点类似于梯田的感觉,还包括像千针石林一样的大堆石头山。
虚幻引擎本身的材质以及蓝图都是用的节点编辑方式,有些内容在虚幻编辑器里是看不到的,需要自己专门开发,因此有许多工作需要我们自己来完成。在这里不得不提到的一点是,虚幻3与虚幻4的节点编辑器是完全不一样的,如果需要用虚幻4开发游戏需要重新学习。但是学习的过程不需要很长时间就能上手,所以我们会发现虚幻引擎相当于一个巨人,开发者能够踩在巨人的肩膀上发现很多精彩的世界,也可以事先自己的的想法,一方面在学习的过程中提升自己能力,另一方面可以更完美开发游戏。
实现大世界,要解决浮点精度问题
大世界的实现里有一个浮点精度问题,这也是最大的问题。如果直接是有Float,在大星球进入厘米级别的时候,整个画面会随着相机的运动而抖动,因为此时细分面的初始位置已经在浮点精度之外了。星球之后是整个太阳系,太阳系就用Double来描述,精度控制范围不能超过一个Double。如果这样会带来一个问题:虚幻内部很多都是用Float32来做的,甚至有些Sharder场合都是用Float16,这就牵扯到精度转换的问题,怎么做呢?
经过研究,我们把每个星球和每个细分面的位置用一个Double来描述它,在运算的过程中,摄像机推进到哪儿,就把星球和摄像机的Double的位置先做一个运算,将它映射到一个Float空间里。因为特别远的事物眼睛是看不见的,这样就相当于把没有精度的剔除,剩下的就可以在Float空间里囊括,这样能很快的解决问题,这对以后的升级或是其他过程也不会产生影响。
UE4在美术制作具有很好的可控性
高级材质贴图师 王勇赫:在《幻》的团队里,我主要负责模型、贴图,以及材质和关卡搭建。《幻》的游戏美术风格比较接近电影,包括到目前为止开发出来的内容。在开发过程中会用到一些工具,幻接受一些新的开发工具,比方说我们用DDO做的小瓷娃娃,两层材质,只用时1h左右。
这个比以往用PS去做材质简单很多。另外我们也会用Substance Painter中先做一些基础材质,将材质快速的涂抹上去,看出效果后最后进Unreal中细化调整。
《幻》当中VR演示模型要做到的是让它四季变换,在UE4中可以看到雪已经将整个山都覆盖了,也可以实时的观察到当我拖动雪的高度时可以实时的变化。这套材质的运算方法可以根据山体的高度、斜面来计算以及判定它的材质走向,可以运用到由程序生成的不同的地形上面。只要准备好相应的材质方程,并且在虚幻强大的材质系统中将它们结合在一起,就可以得到一个非常完美的效果。
UE4对动画、特效方面技术支持较好
概念美术 申犇:我在《幻》团队中主要负责设定一块的内容,动画和特效之类的。
第一点,做动画、绑定的美术,对于骨骼的数量比较在意,我也是。我们尝试了一个模型,一共914个骨骼,2830帧动画,(有人要问为什么搞这么多跟骨骼,其实我们想给玩家一种从未有过的体验!)UE4能够完美的导入而且效果很好,当然有传言说UE4只支持256根骨骼:
// Changing this is currently unsupported after content has been chunked with the previous setting
// Changing this causes a full shader recompile
static TAutoConsoleVariable<int32> CVarMaxGPUSkinBones(
TEXT(“Compat.MAX_GPUSKIN_BONES”),256,
TEXT(“Max number of bones that can be skinned on the GPU in a single draw call. Cannot be changed at runtime.”),
ECVF_ReadOnly);
UE4对骨骼动画的支持又到了一个新高度,这也是《幻》决定使用它的一个重要原因。
第二点,是关于外部物理属性的导入。我们再次做了极限尝试,用了巨量的面数来完成了一个披风的制作,添加物理属性,最终UE4告诉我们它可以很完美的支持外部物理引擎参数的导入。
第三点 大家都熟知的传统表情插件Blend shape多数用在表情的制作上,我们进行了大胆的尝试,实现了金属生长的过程,以及破碎动画的过程,解决了大量的资源以及操作性,且UE4中也完美的表现出来,当然了Blend shape的制作过程中会需要很多单体模型的驱动,但我们最后导入引擎的时候仅仅需要导入一个单体即可,大大节省了资源量以及繁琐的骨骼数!
徐化:VR是我们的第一次尝试,在北京我们展示了一下效果特别好。我希望《幻》能开发出中国最好的游戏,给玩家一种全新的体验,谢谢。
如若转载,请注明出处:http://www.gamelook.com.cn/2015/06/218538