
Quake II
Buy Game获取加强版《Quake II》的完整技术概述
Quake II
Buy Game新版《Quake II》的背后糅合了大量增强内容。有不少是与时俱进的补充,如动态阴影;其余则是重新使用《Quake II》1997年首发版所用技术所得的改进。
在完美保留其90年代首发版本游戏玩法的同时,《Quake II》又进行了升级改造,以迎接新一代玩家,本文即是对这些重要技术增强、改进乃至合作的概述。无论你是一位资深模组制作人,还是复古游戏爱好者,又或者只是对新版《Quake II》的机制好奇,都不要错过此文!
地图编译工具
和1997年原版相似,《Quake II》中的大多数照明都在编译时嵌入了BSP文件中。照明是由照明工具预先计算的,并且仅包含照明的压缩纹理会保存到BSP文件中。
Eric Wasylishen和Jonathan Barkley是大受欢迎的ericw工具的贡献者,我们与二位合作,一起加强了《Quake II》的BSP支持。我们还超越了原版游戏的支持,以在原始地图和用户地图中实现更好的照明。
烘焙照明仍然是一道完全基于CPU的进程,且可在完全没有GPU的无头机器上运行。在1997年的电脑上为原始地图提供照明时,最终的烘焙过程通常需要几个小时,甚至是一整晚。如今我们有着更多每兆赫兹效率且手握数十个处理核心,照亮玩家那带有繁多新鲜装饰效果的地图只需几分钟。
更强的照明像素(Luxel)密度
尽管术语有些花哨,地图编译器的这一改进其实很简单:原版游戏的光照比例为16:1,即游戏中每16个单元对应一个光照样本。我们重建了所有地图,将这一比例调至8:1,细节增强了4倍。在带有大量漫射照明的地图该效果不太明显,但是在有聚光灯投下硬阴影的地方效果显著。
光照网格支持
这项地图编译器特色来自《Quake III Arena》。原版《Quake II》照明面临一个挑战,即地面上的实体是基于其所站位置获得照明的。在处理地面上的物品和敌人时,这个系统运行正常,但在处理飞行怪兽时就出问题了。它们从上方飞过一片低角度的阴影一类东西时,会在半空中显得很阴暗。

除了储存光照贴图之外,现在我们还在封闭的世界空间里储存一个体素网格,这一网格内含光照样本,所有起作用的光线会在该区域照射。这是一个很简单的系统,提升文件大小和地图内存即可实现,可能正是这个原因,在《Quake III Arena》之前该系统从未派上用场。
纹理独立照明
另一个移植自《Quake III Arena》的概念是光照贴图如何关联实体表面进行储存。在原版《Quake II》,倾斜和缩放纹理,会导致光照贴图同样倾斜和缩放。现在,光照贴图的储存是基于笔刷大小,而非纹理大小。

烘焙环境光遮蔽
ericw工具最早的增强之一是环境光遮蔽,也叫污垢映射(dirt mapping),其作用是通过降低角落处的亮度,体现其接收较少的漫反射光线,从而为世界增添深度。

冯氏渲染(Phong Shading)
《Quake II》面世后,一个叫做ArghRad的工具发布了。这是一种加强版照明工具,支持冯氏渲染。冯氏渲染是一项出自上世纪70年代的老技术,用于调整低面数多边形表面的照明效果。该技术可帮助打造出圆形物体的表面效果,且无需重建结构以使其拥有更多面数。我们更新过的地图酌情采用了这一技术。

半透明材料
另一项真正凸显空间照明效果的更改是半透明纹理。半透明纹理允许光线穿过自身,且会赋予终点物体表面一部分自己的纹理颜色。这意味着彩色玻璃、全息影像、终端等纹理可以让光线穿过,并且会适当地影响穿过它们的光线。

有光照的液体
该特色在《Quake》地图制作人社区颇受欢迎,因为它在制作带有不同面积液体的地图方面实现了巨大的提升。原先,水不会被照亮,总是以全亮度呈现。现在,液体表面可以像其他表面一样接收光照贴图,且不会遮挡下方的光线。

图像
在过去,《Quake II》的热门特色是彩色照明。如今,该特色已彻底过时。但是,我们的新版《Quake II》在忠于原版美术的同时,略添几项升级,以提升游戏的视觉效果。
动画
Paul Steed的动画为《Quake II》注入超多个性色彩。从不起眼的抽动和空闲时间动画,到浮夸的翻越和下潜,你永远猜不到敌人接下来要做什么。我们许多人第一次玩这款游戏时,看到守卫俯身躲避爆炸火花,总会大吃一惊。不过,由于当时的技术限制,这些动画未能充分释放其潜力。
首先,MD2模型格式在顶点精度方面有范围限制。这就是许多人看到的“晃动”效果(在第一人称枪械模型上尤为明显)的成因。我们找到了大多数游戏模型的原始动画文件,还使用这些高分辨率动画为优化后的模型制作了骨骼动画,从而消除了晃动。

切换为骨骼动画的举措,也修复了一些线性内插失效的情况。这一点在Parasite的死亡动画中最为显著。Parasite阵亡时会翻身旋转且速度极快,因而线性内插动画会使其变成一堆多边形集合。

发光贴图
《Quake II》的纹理中有不少荧屏和光源,如武器的发光部件。然而在基础引擎中,它们像其他物体一样受光源和阴影的影响。现在我们支持发光贴图,这是一种应用于纹理之上的遮罩,标明哪些区域应该发光。这样一来,现在敌人身上的光源在暗处会发光,武器上的光源也会亮起,因而现有绘制皮肤的光源细节得到了提升。

高度雾
我们扩展了对雾的支持,添加了对基于高度的雾的支持,让地图制作人可以区分两种不同的颜色。这是作为后处理效果实现,而非作为地图中的体积空间实现。该技术也有一些妥协,但是对于地图制作人来说它是个可以让场景变得多样化的超棒效果。

枪口火花
严格来说虽然这不算是真正的技术补充,但是这一更改对玩法助益极大,所以我们仍将其加了进来!现在玩家和敌人手中的武器在开火时除了有动态光源之外,还会有枪口火花。这能帮助玩家快速识别谁在朝你开火,这一点在光线充足的房间内更有用,因为在那里动态光源可能会不太可见。

音频
我们对强化版《Quake II》的音频进行了提升。除了修复原始音频代码中的一些漏洞,并通过更快的CPU提高限制以支持更多语音外,我们现在还支持为每种纹理附加一个材质名称。
这么做有两个目的:一是允许行迹返回其碰撞表面的材质,以实现每种表面都有独特的脚步声。二是我们现在会粗略估算房间的大小和房间内所用材质,以选择混响预设。这样,行走在地下的下水道和行走在户外的草坪听起来会有所不同。
人工智能
在开发阶段,《Quake II》的人工智能历经不少改动。最初《Quake II》打算使用QuakeC语言,但在开发后期,决定改用本地库而非解释性代码。因此我们只得将所有现有的QuakeC代码换成C语言,且在此过程中,人工智能被简化,变得更像原版《Quake》。在重制版中,我们改进了机器人,并进一步将它们的内部逻辑暴露给了敌方人工智能。
更好的导航
我们已将许多机器人导航功能暴露给游戏DLL,允许游戏规划路线前往或离开任意点。然而,人工智能仍需要手动放置的导航点。起初,我们研究过通过Recast等解决方案生成导航网格,但我们认为该方案不适合我们的开发进度,因而决定改进现有的机器人工具。

原版《Quake II》人工智能有一些十分基础的功能,用以在环境中寻路前进。现在,我们的人工智能可以设定一个移动目标来向你靠近,也可以绕过带有阶梯的复杂房间,还能利用遍历点从高处跳下。
更好的决策
人工智能的决策得到了提升,相较于首发版,敌人的行动将更具深度。敌人在判断自己能否击中玩家方面的表现将变得出色得多,那些拥有多种攻击手段的敌人更是如此。
比如,射手手中的链式机枪若被墙壁挡住,会选择使用手雷,而不是把弹药倾泻到墙上。敌人有时也会选择一边迫近一边射击,而不是等到移动至目标位置再开火。这些改进有助于避免人工智能做出糟糕的决策,却不会真正改变它们的行为和战斗方式。
全新飞行人工智能
飞行人工智能已进行彻底重塑,使其看起来更自然;现在它们还会减速,不会突然停下,拐弯时还会滑行。飞行者无人机群在就位时,还会相互碰撞,反弹偏转。
还原的内容
翻找过原版《Quake II》文件的人,都会发现一些最初版本从未使用的动画。我们整理和打磨了这些动画,并重新加入了游戏。例如,Technician现在进行伏击之前会伸展可怕的爪子,Berzerker跳起来猛击地面的动作也让其更加凶猛。

Parasite经历了一些改动,使其战斗更加有趣。现在,它的长鼻是可以躲避的投射物,且可以嵌入墙壁。我们添加了这一机制,使得Parasite可以用上其拖拽和翻转动画,但是在攻击未命中后依旧脆弱。

机器人
下方是强化版《Quake II》的机器人新特色:
-现在机器人可以使用火箭跳跃去到一些难以抵达的区域,如拾取The Edge上的大血包。
-现在机器人可以理解游戏中的所有武器、物品和提升道具,并会在适当时使用它们。
-现在机器人可以理解所有敌人,还会攻击敌对敌人。
-现在机器人可以跳跃、下蹲、搭乘电梯/平台,可以使用梯子,还可以触发陷阱伤害敌人,自己还能规避陷阱。
-模组制作人可以通过游戏DLL的高级别指令,控制机器人的去向和行为。
-添加新的物品、武器和敌人到你的模组中,再给一份简单的文本文件加一行条目,机器人就可以看到和理解它们*(下面将进一步介绍)*
支持模组的数据驱动机器人
机器人的设计使其能快速且简便地支持模组,只需使用一些数据文件解释哪些实体能吸引它们的兴趣,以及这些实体如何运行。对任何模组制作人来说这都很简单,只需为自己的独特武器、物品和怪物等创建指定模组的定义文件即可。
下方是可用文件列表和“items”文件的内部截图:

更好的导航编辑器
在编辑器的信息和反馈协助下,强化版《Quake II》的玩家可以在任何地图快速设置导航。编辑器创建的NAV文件会保存为单独文件,可与你的模组或你的朋友共享。

更好的调试工具
有多款机器人调试工具可用,允许玩家调式某个机器人,或给它发送指令,或看看它在想什么。
这些调试工具允许玩家:
- 显示机器人的整体状态、目标等相关信息
- 显示机器人行为系统的当前状态
- 显示游戏模式和机器人所关切的物品/实体的信息
- 给世界里的机器人移动目标以测试导航
- 显示它们看见的敌人和它们攻击的对象
- 显示机器人武器系统的当前状态和它们的可用库存

调试线
现在你可以绘制游戏代码中的简单图元。这样玩家就可以绘制许多东西,如某实体的位置、世界文本乃至某东西的移动方向,这些都有助于调试。
可用的调试渲染图元:
- 线
- 点
- 圆
- 边界
- 球体
- 面向世界文本 (该图元始终面向本地客户视角)
- 静态世界文本
- 圆柱
- 射线
