第180章 地形起伏
作者:西园寺公长   东京1991游戏制作新时代最新章节     
    《星际尖兵》的单人模式中,主角最初扮演的是一位应征入伍的新兵。
    因为在训练营中表现出色,被任命为一个五人新兵小队的队长。
    游戏的第一关开始,这个五人小队奉命去一处据点接替轮换的友军。
    但到达据点后,发现这里正在被进攻。
    主角配合据点内的友军击退了第一波敌人。
    此时任务转换为从危险地区安全撤离。
    和大多数的即时战略游戏类似。
    这一关的作用是让玩家熟悉游戏的操作。
    如何移动,如何选定进攻目标等等。
    里奇弗莱彻是个老即时战略玩家了。
    从《沙丘2》开始便接触这类游戏。
    基础的操作难不倒他。
    但是他很快发现了这款游戏的不同之处。
    “作为虫族的敌人会爬坡。”
    而且并不只是阶梯和缓坡。
    近乎绝壁的角度也能爬上来。
    到了游戏的第二关。
    玩家可以操作载具的时候。这一点就更是明显了。
    游戏中的不同载具,越野能力也不同。
    有些坡度轮式车辆能通过。有些就非得是履带车辆不可。
    而且上坡下坡时,车辆的动作明显和平地不同。
    根据坡度不同,会有特定的倾斜角度。
    “难道这是一款3d游戏?”
    里奇好歹是游戏厂商的员工。虽然是销售方面的职位。但是对游戏的基本原理也算是有些了解。
    从画面上看,游戏中无论地形还是单位,都不像是3d即时演算的样子。
    九十年代的即时战略游戏。大多数都使用的是“瓦片地图”。各种地图元素拼合起来后,本质上还是一张2d图片。
    这张地图上有时候会利用视觉错觉制造出一些高低起伏的地形效果。
    在一般的游戏中,这种高低起伏的区域起着一种障碍物的作用。
    双方的战斗单位在这种有落差的地形上也许可以互相攻击,但无法越过陡峭的坡度进行移动。
    那么《星际尖兵》这款游戏的爬坡功能是如何实现的呢。
    其实在这款游戏开发的早期,东海软件上海工作室曾经“疯狂”的尝试过制作一款全3d即时演算的rts游戏。
    甚至借助于虚幻引擎制作出了一个原型出来。
    在游戏的前几个关卡当中。双方总共出现的单位加起来只有几十个。
    这个原型运行起来还算流畅。
    至少,在高配置的电脑上运行还算流畅。
    但到了后面的关卡。以九十年代的电脑配置就实在吃不消了。
    游戏进入中期以后,玩家控制的主角因为战功晋升为指挥官。
    要完成一系列基地守卫,星球空降突击之类的任务。
    人类阵营这边的情况还好。
    为了符合游戏设定。虫族单位在相同难度下是要比人类数量多的。
    当一局游戏中双方总人口加在一起超过二百个以后。
    就算是九十年代顶级配置的家用电脑也已经吃不消了。
    这还只是游戏中期。
    考虑到游戏后期的大场面。还必须留出更大的冗余来。
    当然,造成这种情况的原因也不全是电脑机能的限制。
    作为一款游戏原型。
    需要优化的地方还很多。
    比如说游戏中细小的虫族单位,因为建模时只是等比例缩小。
    在游戏运行中占用的多边形数量过于浪费。
    这种事情其实是可以通过后期优化改善的。
    但就算是改善。也改变不了全3d化之后高配置需求这个问题。
    最后,上海工作室放弃了这个激进方案。
    回到了2d画面的原点。
    但是2d归2d。
    八足或者六足移动的虫族如果会被一个小土坡挡住,这也实在有些可笑。
    更不要说游戏的过场画面当中,就拍摄了漫山遍野的虫族顺着陡峭山壁冲击的场景。
    由此可见,“爬坡”恐怕是这款游戏的基本设定。
    最后,解决这个问题的,还是齐东海作为独立游戏开发者的野路子思路。
    齐东海给上海工作室提出的建议是。在2d地图的基础上,引入z轴这个概念。
    一般2d游戏的坐标系中,只有表示纵横两个方向的x和y轴。
    但在3d游戏里,有z轴这个概念。
    当然,《星际尖兵》当中的z轴并不是真正的z轴。
    而仅仅是一个表示高度的数值。
    游戏的地平面被设定为100。低于这个数值的就是下凹的坑。高过这个数值的便是凸起。
    为了减少计算量。并不是地图信息中每个像素都有独立的高度值。
    而是借助瓦片地图的“瓦片”这个单位。
    每片瓦片元素有自己的高度值。
    通过比较相邻的两个瓦片元素的高度差,就可以得到“坡度”这个数值。
    游戏中的不同单位有不同的爬坡能力。
    通过坡度值可以判定相邻的地图块是否可以通过、通过时要减速多少等等。
    爬坡时人类载具的不同仰角,又或者是虫类的不同动作。靠的也不是3d即时演算的结果。
    而纯粹是靠制作了各种角度的贴图动画而已。
    至于地形信息的存储。
    与其使用不直观的数组或结构体。齐东海提供了二十一世纪通用引擎中司空见惯的一种思路。
    使用一张图片文件来记录高度值。
    通过读取图片中特定像素点的颜色值,把颜色值转换为数字。用以标示地形的高度值。
    当然,实际使用时,为了节省运行内存。
    这张标示了地形的图片文件并不与游戏地图的像素一一对应。
    而是每个像素表示一块“瓦片”。
    这样做的好处是负责地图编辑的策划人员无需懂得代码。
    只用绘图软件,像绘制等高线地图一样就可以标记出地图的起伏。
    实际上,每个《星际尖兵》的用户,都可以得到一份地图编辑器程序。
    但是这款游戏的地图编辑器有两种运行模式。
    一种是傻瓜式的,只需要编辑地图块和资源等内容即可。
    另一种,则可以更细致的编辑地形。甚至通过简单的脚本语言为地图增加特定的事件。
    编辑出一张有特殊规则或者故事性的地图来。
    既然网络时代已经来临。玩家社区的创造力不容忽视。
    齐东海期待着玩家们用自己提供的工具搞出一些有趣的东西。
    当然,如果玩家们实在自己想不出什么也没关系。
    齐东海将来自己会搞。