https://zhuanlan.zhihu.com/gu-yu
前文回顾:
The world at your fingertips — 天涯明月刀幕后12(新的旅程)
随机地图
在开发这个版本的过程中,我们也逐渐意识到,不管引入了多少高端特性,地图制作效率始终还是一个巨大的瓶颈。
这个Demo的地图是512x512米,由于地图尺寸不够大,美术发挥空间有限,远景不容易做出层次,无法摆脱盆景感。其他游戏一般就牺牲了大视距,远景不好看是吧?我们就别看那么远了。但我们也不想做"其他游戏",近视距表现力受限,我们希望能看到巨大的场景。这个重要的Pillar也会在后续直接推进了天刀的技术变革,导致我们做出了天刀的一个重要的大地图技术框架,此处先按下不表。
在当时,即使我们并没制作这么巨大的地图,我们依然发现美术开发效率远远跟不上进展。当时的Level Artist应该是团队中最精锐的美术力量了,但依然是每天加班,固然有程序开发的编辑器不成熟,但工作量巨大也是不争的事实。
由此导致了两个分支的技术选型。从纯技术的角度,我希望推进自动生成随机地图,程序有更多的发挥空间,也是一个上流的特性。从技术美术的角度,他们推进了整套大地图方案。这部分我们先聊聊随机地图。
和老于讨论了一下随机地图的想法。出发点是通过技术,缓解内容制作的不足。无论如何,地图的开发总是一个成本极高的事情。如果天刀有大量的随机地图副本,应该是能很好的缓解内容不足问题。老于很认同,当时正有额外的程序人手,我们就找人开始做研究。
随机地图并不是一个新鲜的概念,Diablo开始就已经被大家认同。但制作方式有很多的不同流派,Diablo用的是拼接地图的形式,有点像拼接积木,定好每一个房间模块的边界,然后边缘吻合的模块可以随机拼在一起,辅助一些小的随机算法,增加一下多样性。玩过拼图桌游卡卡颂的同学应该很容易能理解。
但我们是一个MMORPG,强调室外的画面表现。想强调山川河流和大场面,这个技术并不完全适用。
另一种流派是高度图的方式,以perlin noise做切入点,进行地形的生成。但感觉生成后只有地形高度信息,不便于后续的道路生成,逻辑信息也不太好安排。作为地形地貌生成是足够了,但可玩性内容还是不太容易控制。
我们选择了另一种方式,生成多边形的的小格子,用维络图包围简化,然后根据各种因素来生成地形、植被、道路等,这个方式可控性更好,且看上去比较有趣。
Demo开发一路顺利,很快就看到了不错的进展,但是实际要用到产品中,还是各种纠结。产生的地图,质量不错,能达到一般网游的地图质量,配合高质量的美术资源,看上去也有模有样。但这样的地图,肯定无法和关卡美术手工精心制作的地图相比。随着我们努力推动,随机地图一天比一天看上去更好,眼看就要有希望了。我们都开始规划如何随机生成Gameplay的内容,让这个地图真正可玩了。
但不怕和别人比,就怕和自己比。隔壁还有少量团队在走另一个技术分支,大地图技术,他们也已经初步展现效果,从各方面来看,随机地图都达不到这个效果。我还想挣扎一下,又让技术美术小黑和程序苦战一番,调整算法,技术上做妥协,引入更多预置的场景模块,以加强整体的设计感,对随机地图进行了多方面的增强,增加了两种地貌,尝试了一些自定制的建筑布局。
给老于看了几次,大家对最终的效果还是不够满意。老于还是觉得,在精力有限的情况下,我们还是专心做好大地图就够了,随机地图看不见希望,短期之内是一个能做到70分,但很难达到要求的技术。最后这个特性就彻底被砍了。
天刀开发中期,有很多类似的技术,因为达不到要求,最终被砍掉,随机地图也是其中不大不小的一个功能。每个特性的存在,都是为了产品服务,做取舍并不是那么简单的事情,需要考虑到沉没成本,考虑到团队的感受,考虑到后续进一步推进的方式。在一线带团队的时候,往往会当局者迷,太多的考虑因素,会让人难于做决定。老于总是化繁为简,从直觉出发,作出最终的判断,没那么多纠结,质量才是最终考虑因素。
大地图
花开两朵各表一枝。
面对前一次技术demo做出的场景,我们两条腿走路,除了随机地图,技术美术小黑也给出了一个方向建议,他希望尝试一下大地形系统,老于也比较支持我们多线做一些技术尝试。
大地形系统的第一个障碍,就是制作的工具系统。
在第一个demo中,产能是一个很大的问题,关卡美术同学做一个不大的场景,拖动一下terrain,就需要非常多的时间,如果要做更大的地形,基本绝无可能,工作量无法承受,时间长短也不能接受。而且地形制作和关卡设计息息相关,无法外包。
所以过程化的生成地形系统必不可少,我们需要能快速生成广阔的地形,尽可能减少美术的人力投入,他们最主要的精力,应该花在修正地形而不是制作地形上。我们通过第三方工具来做这个地形的生成,并且在工具里面开发了导入功能。
老于在外部工具中看了新的地形表现,觉得制作效率相当理想,这个制作量是美术凭手工无法达到的。更可贵的是,整体品质也极高,美术的手工制作,做不出这样高质量的地形。既然质量和效果都好,那就没什么好说的,我们程序就努力把这个系统做到版本中吧。
如果只是做产品的Demo,那这个事情已经结束了。但做Production绝不会这么简单,自动生成的地形,并不能全部满足策划对关卡设计的需要。我们还需要提供对地图的修改功能,这样才能保证策划对关卡设计的需求。
游戏编辑器是有内建的Terrain编辑功能的,但这工具也只是勉强堪用,咱们的in house工具,无法和外部已经发展了很多年的专业编辑工具相比。于是小黑又推荐了另一个对地图编辑比较友好的工具,我们做了editor中地形数据的分块导入导出,策划对哪一块数据不满意,就可以单独导出到新工具中修正,然后再导入回游戏。
分块读取、存储,渲染等等,说起来容易,做起来事情不少。Tough哥和编辑器小李忙了很久,才基本保证流程可运行。地图美术开发们一边只能等我们的工具集,一边学习新的编辑体系和工具集,技术美术小黑和美术们忙了很久,培训,研讨新的制作体系。
尺寸增大,带来了很多新的问题,游戏的存储容量以及运行内存不行了,这个还好办,分块分距离就好了。浮点数的表现精度也不行了。具体表现在距离原点比较近的角色,动画很流畅,距离原点比较远的角色,动画就会一卡一卡。查了一下原因,发现之前地图小,大量的3D坐标变化,都是放在世界空间中进行的,场景变大以后,坐标数值变大,于是浮点数的小数部分精度就不行了,参与几次transform计算后,每轮计算都会有一些精度损失,累积起来就没法看了。解决方法也很简单,在局部坐标系把重要的坐标变换做完,最后再把世界坐标系的位移算上就好了。类似的小问题层出不穷,考验着本来就不完美现在更是摇摇欲坠的引擎。
Tough哥又学来了Terrain Skirt的技法,再大的地图,总有边界。Terrain Skirt技术在地图的边界,把原来的地图镜像一遍,延伸出去。不需要额外的制作,地图凭空就大了很多。而且反直觉的是,身处地图中间的玩家并不能感觉到地图的重复。这样美术的制作成本相当可控。当然做起来不那么轻松,工程化的工作不少,后续引入每个新功能,都需要和以前的功能结合。Terrain Skirt需要影响Streaming系统,阴影,水,植被等等,对Editor也有巨大的挑战。
经过长时间的开发,整套体系的功能逐渐Ready,又是很多轮深入的整合、协作,我们逐渐把地图规格确定,4x4公里可玩区域,加上Terrain Skirt后到了12x12公里,一次满足对广阔世界的所有想象。
我们很高兴的看见,美术已经做出了多张漂亮的新地图。虽然只是简单的场景,空空荡荡,没有玩法,没有建筑,但地形地貌相当出色,的确是当时网游中前所未见的。
死在这样的竞争对手下,随机地图也该瞑目了。