【杂谈】半条命图形开发两三事 第一章
做视频实在是太困难了,所以我先回归到文字创作上来(
PS:这篇文章可能将会是未来某期视频的文案
本文是我的第一篇非技术的杂谈类文章,但因为我业余专修图形学,所以也会穿插很多您不知道的,别人也没讲过的东西 :)
第一章:3D 游戏史前时代 - 金源诞生
1996 年,一款名为 Quake 的游戏横空出世。它的开发商 id Software 开创了商业游戏引擎的先河。它是由我们的神 John Carmack (约翰·卡马克) 领导一个很小的团队开发的。
Carmack 的履历已不用过多介绍,反正您只需要知道他是整个游戏引擎领域的神就对了。

Quake 凭借着实时 3D 渲染以及炫酷的特效迅速火了起来,并且直接推动了现代意义上的图形卡的发展,3dfx Voodoo 图形加速卡从某种意义上来说就是为 Quake 而生的。同时 Quake 所衍生出的的电子竞技模式与现代 WASD 键位也对后来整个游戏界产生了巨大影响。所以 Quake 是 FPS 历史上最伟大的游戏之一。

说到画面渲染,Quake 的光照使用了预计算辐射度,用它来生成光照贴图。虽然那会只提供了直接光照的光照贴图,但是它提供的光影效果在当年是任何游戏都无法超越的。
1997 年,Quake 2 诞生。它补充上了间接光照的预计算,使得它成为世界上第一款具有全局光照系统的游戏。

同时,Quake 2 也是现代计算机图形学入门的经典案例,它的渲染流程包含了很多现在都在应用的思想。并且 Quake 2 的渲染底层是模块化的,易于学习和理解。

谈到这里,您可能已经领会到了 Quake 2 引擎在当年是有多么得诱人了。
这时,几位怀揣梦想的胖子 (Gabe Newell 等人)很想做一款能轰动业界的射击游戏,他们早就看中了 id 的 Quake 引擎。经历了几番周折,Gabe Newell (G 胖) 托他的前同事 Mike Abrash 的关系找上了卡马克,接下来就是索取引擎授权的事了。
当然,卡马克也慷慨地给了 V 社 Quake 2 的授权(Fun Fact: 卡马克)。V 社修改了 Quake 2 引擎的大部分底层组件,用这款新的引擎做了另一款 FPS 历史上最伟大的游戏之一 —— Half-Life 半条命,这块新的引擎也有了一个新的名字 'GoldSource" (黄金起源引擎,俗称金源)

半条命(或整个金源引擎)沿用了 Quake 2 的光照烘焙系统—— "QRAD",全称 Quake Radiosity,翻译过来就是 “雷神之锤辐射度编译系统”,继承了 Quake 2 的全局光照编译功能,使得 1998 年正式发售的半条命也有不错的画面效果。

您可能在上上张图发现了,Quake 2 的模型投射了阴影。而半条命(这里展示的是零售版)没有,这是为什么呢?
其实在 E3 时期的半条命 Alpha 版演示中,它是有阴影的。

和现在普遍使用阴影图(Shadow Map)的方法不同,半条命(沿用 Quake 2)是使用的 Stencil Shadows,是不是一头雾水?其实现在普遍使用的方法最大的区别在于,Stencil Shadows 是通过计算一个投射体积 (Shadow Volume) 来实现的阴影,而 Shadow Map 则是一种生成深度图的方式,再来比较深度缓冲区的深度信息来计算阴影。

看到这里,您应该猜到了,Stencil Shadows 最大的一个缺陷就是阴影很硬,并且一般是无法解决的,模型有多硬他就多硬。您可以把它简单理解为把模型拍扁后投射在贴图上。并且它不够 “聪明”,逐对象的 Stencil Shadow 投射 Volume 并不能处理不同阴影之间的信息,而不像 Shadow Map 是一种全局的方案。
标红部分在实际渲染中体现的问题就是不同物体之间阴影的重叠,刚才那张半条命的截图也显示了。
半条命影子重叠了,我觉得不行 ······ V 社不是卖技术的 ······
—— 著名计算机图形学家 moemiko
不过,去除了这充满 Bug 的 Stencil Shadows,对半条命来说确实是件好事。
最后,算上那些经典的局部光照模型,就是大家熟悉的半条命的样子了。

今天我们花了简洁的篇幅讲了半条命在图形开发,尤其是阴影这一块的问题,下次我们接着讲其它的。
请期待 第二章 - 初见起源
Reference
[1] Tomas A-M., et al. "Real Time Rendering Fourth Edition", CRC Press, 2018.
[2] Xi Wang, "01.游戏引擎导论 | GAMES104-现代游戏引擎:从入门到实践", Bilibili website, 2022.
[3] moemiko, “半条命2在04年到底处于一个什么样的水准?(光影篇)”, Bilibili website, 2022.

