第 4 章
第4章 狼穴与引擎(约 1992 年)
约翰·罗梅罗第一个走到白板前。他手里攥着记号笔,笔尖在空白处悬停了两秒——不是犹豫,是蓄力,像街机厅里投币前最后一刻的屏息。然后他画了一条粗线,从左上角拉到右下角,墨迹未干,他又在线的末端写下一个词:3-D。不是问句,不是提议,不是任何需要讨论的东西。是一个陈述,一个事实,一个已经在他脑子里跑完了全部关卡设计、敌人配置、武器反馈和通关帧率的完整游戏,现在只需要其他人追上来。卡马克靠在冰箱上。他的眼镜片反射着厨房顶灯的白光,双臂交叉在胸前,那种姿态不是旁观,是计算——他的大脑已经启动了一个子程序,正在后台高速运转,沿着从二维平滑滚动到三维实时渲染的路径,逐一测试每一个可能的算法分支。他没有说话,但他的沉默有一种特定的质感:不是拒绝,不是等待,而是一种正在占用全部认知资源的思考,像一台满负荷运行的CPU,暂时没有余力响应外部输入。罗梅罗认识那种沉默。他知道当卡马克的沉默朝向某个方向超过三分钟,通常意味着那个方向存在一条可通行的路径。
汤姆·霍尔从沙发上站起来。他手里拿着一本平装版纳粹地下工事图鉴,是从二手书店花七十五美分买的,封面卷边,内页散发出霉味和旧纸张的酸涩。他翻到一页标满折角的地方,把书摊开放在厨房桌上,让所有人看到那张黑白照片:一座混凝土穹顶坍塌在地下水层中,墙壁上布满铁锈色的渗水痕迹,走廊向黑暗中延伸,消失在无法判断尽头的地方。他开口说话,语气不像一个设计师在提案,而像一个考古学家在描述一座刚刚出土的陵墓——不该让玩家只是在迷宫里奔跑,而应该让他们感到恐惧,那种探索未知工事时从脊椎底部爬上来的、真实的恐惧。罗梅罗接过这句话,在汤姆的最后一个音节还没落地之前就接住了它,像接住一把递来的刀刃。他说,不是恐惧,是肾上腺素。恐惧会让人停下,肾上腺素会让人往前冲,他们要的是玩家觉得自己是个杀穿整座堡垒的疯子,不是个躲在墙角发抖的猎物。
他说这话的时候,眼睛里有一种光,那种光不属于讨论,而属于宣告——他已经看见了那个游戏,已经听到了PC喇叭里德军士兵的嘶吼和冲锋枪的扫射声,已经感觉到了玩家在键盘上颤抖的手指,只剩下把它从未来拽进现实的工程问题。这是1991年早春,id Software正式成立后的第一个制作周期开始前的那几分钟。在这几分钟里,没有人知道他们即将创造的东西会定义整个游戏类型此后三十年的语法。但如果你站在那间厨房里,你会看见两个约翰的眼睛里亮起了完全不同的光——罗梅罗的光是向外喷射的,像街机厅里高分榜上的霓虹灯,他想让每一个玩家在扣下扳机时感到自己是神;卡马克的光是向内收敛的,像CRT显示器关机后残留的绿色余辉,他想让屏幕上的每一道光线都服从数学方程,不多渲染一个多余的像素,不让任何例外破坏算法的纯净。他们搬进了路易斯安那州什里夫波特一处更正式的工作室。就在几个月前,他们刚刚拿到天极软件支付的第一张版税支票:10,500美元,并以此为基础创立了id Software。车库的门已经打开了一条缝,光漏了出来。
一栋租来的两层小楼,楼下是车库,楼上有四个房间,墙壁刷成褪色的淡黄色,地毯上留着前任租客宠物的气味。他们从Softdisk的办公室搬来了电脑设备,从湖街公寓搬来了睡袋和微波炉,从Apogee的支票里拿出了第一笔钱买了六台新的386 PC。阿德里安·卡马克——与约翰·卡马克没有血缘关系,是团队的艺术师——在地下室里架起了一台用旧相纸干燥器改装的扫描仪,开始把纳粹旗帜、铁十字勋章和剥落的砖墙纹理转化为数字文件。他的手指上沾满了定影液的气味,那些酸性的、金属般的气息渗进他的皮肤,成为他此后整个职业生涯中某种挥发不去的东西——后来他告诉别人,每当他回忆起《德军总部3D》的制作周期,鼻子都会先记起地下室的暗房,然后才是屏幕上那些灰色石墙。约翰·卡马克选择了最小的房间作为他的工作站。窗户朝北,终日照不进直射的阳光,墙壁上没有任何装饰,除了一块白板,上面密密麻麻写满了数学公式。
他每天从晚上八点开始工作,一直持续到第二天早上十点,然后睡到下午,醒来后继续。这种作息不是出于浪漫的“夜猫子”传统,而是出于一桩纯粹的计算——夜间整栋楼的电路负载更稳定,机器运行更不容易出错,电话不会响,没有人会敲门,世界的熵值降到最低,他可以把全部认知资源分配给一件事:让光线在计算机里以正确的方式弯曲。光线投射引擎的核心原理,在学术论文中早已存在,但卡马克面对的不是理论问题,而是一个工程问题:如何在386处理器上,以每秒至少十五帧的速度,动态生成一个由玩家视角决定的可探索空间。当时的PC没有图形加速卡,没有浮点运算单元,所有计算都必须压缩到整数运算的范围内,每一毫秒都要从CPU的时钟周期里榨取出来。卡马克的解决方案在数学上是对称的,在工程上却是暴力的:他将世界简化到一个极端——所有墙壁都是垂直于地面的矩形,所有地板和天花板都是水平的,整个地图可以表示为一个二维网格,每个格子要么是空的,要么是墙。
然后,引擎从玩家的视点向屏幕的每一列像素发射一条射线,计算这条射线与最近墙壁的碰撞点,根据距离决定该列墙壁的高度,再按列填充颜色。这个方案抛弃了三维空间中的几乎所有复杂性——没有斜坡,没有高度差,没有非正交的墙角,没有真正的多边形,没有一个可以抬头看见天花板或低头看见脚底的纵向自由度。但正是这种舍弃,让不可能变成了可能。当卡马克第一次让引擎在一个空荡荡的灰色迷宫中跑起来时,帧率稳定在二十帧以上,那是一种比任何数字都更真实的证明——屏幕上,墙壁在随着“前进”键的按下而平滑地逼近,转角处,新的走廊以数学般的精确展开,没有撕裂,没有颤抖,没有延迟。卡马克盯着屏幕看了很久,然后他做了一件在他身上极为罕见的事:他站起来,走到走廊里,对其他人说,你们来看一下。那是1991年4月的一个深夜。罗梅罗、汤姆·霍尔、阿德里安和杰伊·威尔伯挤进卡马克的小房间,围在他身后。
屏幕上是一片灰色的迷宫,没有纹理,没有敌人,没有声音,只有墙壁、地板和天花板,用深浅不同的灰色区分开来。卡马克按下前进键,灰色的墙壁开始流动,像是一道道水泥的波浪向屏幕两侧退去,然后他转了一个弯,新的走廊扑面而来,又在下一瞬间被甩到身后。整个过程持续了大约十五秒,卡马克松开按键,画面静止。没有人说话。然后罗梅罗说:“操。”
他又说了一遍,声音更轻,但更确定:“操。这就是了。”
这就是了。这句话在当时的语境里,意味着所有人在同一个瞬间看到了同一件事——这不是一个技术演示,不是一次实验,这是一种全新的观看方式。在此之前,PC游戏中的空间要么是固定的,要么是拼贴的,要么是用预渲染图像欺骗眼睛的,但现在,屏幕上的空间是连续的、实时的、可被探索的。它让玩家不是观看一个世界,而是进入一个世界。那一刻,所有人都在卡马克身后站着,看着那片灰色的迷宫,没有人能说清楚自己究竟看见了什么,但每个人都知道,他们刚刚跨过了一条此后无法再退回的边界。然而,真正的断裂不是在那个夜晚发生的。它发生在接下来的几个星期里,当卡马克开始以他特有的方式——那种将美学问题转化为工程问题的方式——推动引擎走向“干净”的极致时,裂痕第一次显现出来,虽然当时没有人称它为裂痕,它更像是一种细微的温差,在房间的不同角落累积,尚不足以让任何人感到寒冷,但已经足够让某些东西开始凝结。阿德里安为墙壁绘制了纹理。
他从纳粹地堡的历史照片中提取砖石图案,用扫描仪逐行捕获,然后手工修正像素,让它们可以在重复平铺时不留接缝。当这些纹理被加载到引擎中,贴到墙壁上时,效果是立竿见影的——灰色的抽象走廊变成了有物质感的纳粹工事,每一块砖都像是在讲述一个关于囚禁、暴力和绝望的故事。汤姆·霍尔看到后,立刻开始扩展他的设计文档,他已经构思了数十个关卡,每一个都有不同的主题:地牢、实验室、指挥中心、毒气室。他想要一个在叙事上连贯、在氛围上沉浸的游戏,一个让玩家感到自己正在穿越一座真实的、有历史的纳粹堡垒的作品。但卡马克不喜欢那些纹理。不是不喜欢设计,而是不喜欢它们对引擎产生的效果。当墙壁被覆盖上复杂的砖石图案后,像素变得嘈杂,视觉上的干净感消失了,取而代之的是一种他称之为“视觉噪音”的混乱。更重要的是,纹理的平铺重复在透视下会产生一种微妙的失真——当一面墙延伸到远处时,砖块的尺寸不再均匀,光照产生的明暗变化与纹理本身的灰度冲突,让整个画面显得“脏”。
在卡马克的审美体系里,“脏”不是一种风格,而是一种错误。他对阿德里安说,把纹理去掉。阿德里安愣住了。他花了三个星期制作那些纹理,每一块砖都经过手工修正,以确保在重复平铺时不会产生可见的接缝,但现在卡马克说要把它们全部去掉,让墙壁回归到纯色——不是石头的颜色,而是某种抽象的、数学化的灰色,一种在现实世界中不存在的光滑表面,它代表的不是纳粹地堡的砖石,而是光线在理想条件下碰撞到理想平面后返回的纯净数值。罗梅罗听到这个决定时,正在他的房间里用Tile Editor绘制关卡布局。他放下鼠标,走到卡马克的房间门口,靠在门框上。清洁的渲染比纹理重要,卡马克说。砖石图案会干扰距离判断,会让玩家在转角处慢半拍,而那半拍就是生与死的区别。罗梅罗站在门口,没有继续争论。不是因为被说服,而是因为他意识到,这个决定和美学无关。卡马克不是在讨论游戏应该长什么样,而是在定义游戏能做什么。
在他构建的世界观里,引擎的视觉输出不是一个设计问题,而是一个工程问题,其标准不是“美”,而是“真”——数学意义上的真,光线在虚拟空间中不受干扰地传播的真。纹理是干扰项,是噪音,是必须被删除的冗余。罗梅罗站在门口,看着卡马克的后脑勺,看着屏幕上那些被剥离了所有纹理后剩下的灰色走廊,那些抽象的、几何的、没有任何历史指向的走廊,他忽然意识到,他要在这个世界里做设计,就必须接受一个前提:这个世界的物理法则不是由历史或美学决定的,而是由卡马克的引擎决定的。引擎说你不能有倾斜的墙壁,你就不能有倾斜的墙壁;引擎说墙壁必须是纯色的,你就必须接受灰色的砖石;引擎说世界只能是一个二维网格的拉伸,你就必须在那个网格里找到所有的可能性。罗梅罗回到自己的房间,重新打开Tile Editor。屏幕上是一个16x16的网格,每一个格子代表游戏世界中的一块空间,他可以用鼠标点击来放置墙壁、空地、门、敌人、宝物、秘密通道的入口。
这个工具是他自己写的,和卡马克的引擎一样,都是对限制的回应——因为引擎只能处理网格化的世界,所以关卡编辑器也必须基于网格;因为引擎不能渲染真正的三维物体,所以所有的敌人和物体都必须是二维精灵,从八个方向绘制,以模拟从不同角度观看的效果。罗梅罗盯着那片网格,看了很久,然后他开始设计。他设计的不是纳粹地堡。他设计的是,在卡马克的引擎所允许的范围内,一种最大密度的肾上腺素体验。他放弃了汤姆·霍尔对历史真实性的追求,转而拥抱一种更原始的、更接近街机游戏的逻辑——每一层的目标不是沉浸,而是推进;玩家的任务不是理解,而是征服。他设计迷宫的方式和他曾经在街机厅里征服高分榜的方式一样:理解规则,找到规则中的缝隙,然后在那个缝隙里建立自己的王国。引擎说墙壁必须是直角的,他就把直角变成武器——每一处转角都可能是伏击点,每一段走廊的长度都经过计算,让玩家在遭遇敌人时处于最紧张的距离。
引擎说空间必须是二维网格的,他就把二维网格折叠成三维迷宫——秘密通道隐藏在可推动的墙壁后面,宝物放置在只有通过迂回路径才能到达的密室中,每一个关卡都像是一个被精心设计的陷阱,从入口就开始收紧,直到最后的BOSS房间才释放所有累积的压力。他设计了一种秘密房间。那些房间不在地图上显示,也不在逻辑上必需,它们纯粹是奖赏——对好奇心、对探索欲、对偏离主路径的勇气的奖赏。有时它们藏在墙壁后面,玩家需要推开一块颜色略有不同的砖石才能进入;有时它们藏在走廊尽头的死胡同里,只有转身后退时才会发现身后的门已经打开。在这些房间里,罗梅罗放置了额外的武器、弹药和宝藏,还有纳粹士兵的尸体——不是敌人,而是装饰,是暗示,是某种未讲述的故事的碎片。他后来告诉别人,他最享受的时刻不是设计BOSS战,而是设计这些秘密房间。
它们是他的签名,是他在卡马克的灰色迷宫里留下的唯一证据,证明有人曾经在这里,试图在纯粹的光线计算与肾上腺素释放之间,找到某个属于他自己的、不可被还原为数学公式的空间。汤姆·霍尔在设计文档上越走越远。他写了一个完整的故事背景,讲述了盟军间谍威廉·“B.J.”·布拉兹科维奇被俘后从纳粹地堡中逃出的过程,每一层都有叙事的推进,每一个BOSS都有在剧情中的位置。他设计了毒气室、监狱区、实验室、食堂,甚至考虑了士兵的巡逻路线应该符合真实的军事逻辑。但卡马克和罗梅罗对叙事不感兴趣。卡马克不感兴趣,是因为叙事在引擎中没有位置——引擎只关心光线和碰撞检测,不关心动机和情感;罗梅罗不感兴趣,是因为叙事会拖慢节奏——他想要的是玩家在按下扳机时的本能反应,而不是在阅读文本时的理解。汤姆·霍尔发现自己站在一个尴尬的位置上:他既是团队的首席设计师,又是团队中唯一一个关心游戏讲述什么的人。他的设计文档越来越厚,但被采纳的部分越来越少。
罗梅罗开始在关卡编辑器中直接修改他的设计,删掉那些为叙事服务的过渡区域,增加更多的敌人和武器,把每一层的设计目标从“推进剧情”改为“制造混乱”。汤姆去找卡马克,希望他能站在自己这边。卡马克正在调试引擎的一个新功能——数字化的音效。他从一个音效库中找到了德军士兵的语音样本,那些声音是专业配音演员录制的,用夸张的德语口音喊出“Achtung!”“Spion!”和“Mein Leben!”。当这些声音被加载到引擎中,通过PC喇叭播放出来时,它们产生了一种奇异的、在恐怖与滑稽之间摇摆的效果。卡马克对此很满意,不是因为它们有趣,而是因为它们提供了直接的反馈——玩家扣下扳机,敌人发出声音,因果关系清晰、即时、可验证。汤姆试图在那些声音的背景中讨论叙事的必要性,但卡马克的注意力已经被下一个技术问题吸走了。他对汤姆说,他要的不是小说,是游戏。如果玩家需要故事,他们可以翻开书。
这句话后来被复述过很多次,在不同的采访和回忆录中,它被赋予了不同的语气和含义。但在当时,在那个房间里,卡马克说这句话的方式不是傲慢的,而是纯粹的——对他来说,这是一个事实陈述,就像他说“光线在均匀介质中沿直线传播”一样。游戏是交互的,故事是线性的,两者的结合不是不可能,但需要一种他尚未找到的数学结构,而在找到之前,他不愿意在引擎中为叙事预留任何特殊的通道。汤姆·霍尔走出房间,手里攥着他的设计文档,那些打印出来的纸张在掌心微微发潮。他回到自己的工位,继续写下去,但速度慢了下来,像是某种东西已经在他体内开始冷却。到了1991年夏天,游戏已经有了一个可以运行的版本。第一关的完整布局已经完成,罗梅罗设计的迷宫在屏幕上呈现出一种在简洁与混乱之间摇摆的质感——灰色的墙壁没有纹理,但走廊的转折和敌人的配置让它们充满了威胁;
德国士兵的精灵从八个方向绘制,阿德里安用像素一点一点地勾勒出他们的钢盔、制服和冲锋枪,然后罗梅罗给他们配置了AI——不是真正的AI,而是基于状态机的简单行为模式:巡逻、发现玩家、追猎、射击、死亡。当玩家第一次进入走廊,远处站着一个背对着他的士兵,脚步声在PC喇叭里发出空洞的回响,然后士兵转过身,看见了玩家,喊出“Achtung!”,开始射击——那一刻,测试者感到的不是一个游戏角色在攻击他,而是一个空间在攻击他。那个空间有它自己的意志,有它自己的居民,有它自己的暴力法则,而玩家能做的唯一一件事,就是在这场暴力中成为更快、更狠、更不留余地的那一方。罗梅罗邀请了几个朋友来做测试。他们不是游戏开发者,只是普通的玩家,坐在电脑前,握住键盘,按下前进键,然后在第一个转角处被一个冲出来的士兵吓到,尖叫着按下后退键,撞上身后的墙壁,屏幕上的枪口火光闪烁,喇叭里传来“Mein Leben!”的嘶吼,然后他们的角色死了。
他们从键盘上抬起手,手指在颤抖,但眼睛在发亮。他们说,再来一次。罗梅罗站在他们身后,看着这一切,脸上的表情不是满足,而是一种更深的、近乎贪婪的东西——他知道他抓住了什么,他知道这个游戏里有某种在《指挥官基恩》里没有的东西,某种更原始、更直接、更接近街机厅里那些高分榜上闪烁的霓虹灯的东西。他后来对卡马克说,这不是一款游戏,这是一台肾上腺素机器。卡马克没有回应那个比喻。他的注意力已经转移到了另一个问题上。引擎的当前版本表现良好,但它是一个专用引擎——它的每一个部分都是为《德军总部3D》定制的,墙壁的高度、地板的颜色、敌人的行为模式,所有这些都硬编码在引擎中,如果他们要做一个新游戏,就必须从头开始重写大部分代码。卡马克开始在他的一台备用电脑上写一个新的版本,一个更抽象、更通用、更不依赖于任何特定游戏内容的引擎。他在代码注释中写下了一些关键词:“可复用性”“通用渲染管线”“数据驱动的关卡加载”。
他没有告诉任何人他在做这件事,不是因为保密,而是因为在他看来,这不是一个需要讨论的决定——这是唯一的合理路径,就像之前他决定了纹理必须被删除一样,这不是一个美学的选择,而是一个工程的选择,它遵循的是一套内在的逻辑,不需要外部的验证。但罗梅罗注意到了。他经过卡马克的房间时,看到备用电脑屏幕上那些陌生的代码,问了一句,你在做什么。卡马克说,下一个引擎。罗梅罗说,这个还没做完。卡马克说,我知道。这段对话只持续了不到十秒,但它包含了此后所有故事的种子。卡马克说“下一个引擎”,不是因为他厌倦了《德军总部3D》,而是因为在他的认知框架里,引擎的价值高于游戏——引擎是通用的,游戏是特例;引擎是永恒的,游戏是暂时的;引擎可以被复用、被改进、被扩展,而游戏一旦完成,就只能被归档。罗梅罗说“这个还没做完”,不是因为他不想做下一个引擎,而是因为在他的认知框架里,游戏的价值高于引擎——引擎是工具,游戏是体验;引擎是手段,游戏是目的;
他们之间的分歧此时还包裹在合作的热度中,像是两块碰撞的板块之间的摩擦,尚未产生足够的地震,但裂缝已经在海底形成,无声地延伸,等待着某个未来的时刻,当压力足够大时,将整个大陆撕开。1992年5月5日,《德军总部3D》作为共享软件发布。Apogee采用了与《指挥官基恩》相同的模式——第一章免费,完整版需要付费注册。在发布后的第一个月,注册收入达到了二十万美元。到年底,这个数字超过了八百万美元。杂志开始打电话来,采访请求堆满了杰伊·威尔伯的传真机,曾经在Softdisk的格子间里嘲笑他们是“夜猫子”的那些人,现在在行业杂志上读到他们的故事,看到照片上那群穿着T恤和牛仔裤、站在什里夫波特那栋二层小楼前的年轻人,标题写着“车库天才征服PC游戏世界”。
罗梅罗出现在杂志封面上,他的长发、他的笑容、他那种将游戏设计描述为“比摇滚明星更摇滚”的说话方式,让他成为媒体追逐的焦点。他带着记者参观工作室,展示关卡编辑器,让他们试玩游戏,然后站在他们身后,看着他们被转角处的士兵吓到尖叫,笑着说,这就是他们想要的。卡马克拒绝了所有采访。不是因为他讨厌媒体,而是因为采访占用了他用来思考的时间,而思考是他唯一真正在乎的事情。当记者们围在罗梅罗身边时,他坐在自己的房间里,窗帘拉上,屏幕上的光标在代码编辑器中闪烁,一旁的那个备用电脑上的工作已经从一个念头变成了一个项目的雏形。他在那个新引擎中做了一些根本性的改变——任意角度的墙壁、高度可变的楼层、光照衰减模型、一个更抽象的数据结构,允许地图不再是简单的二维网格,而是更加复杂的空间拓扑。他在文档中写下了一行字,后来成为id Software此后五年所有技术决策的基石:下一个引擎将不依赖于任何特定的游戏设计。
当庆祝活动在楼下进行时,卡马克坐在他的房间里,看着屏幕上那些尚未被赋予任何游戏内容的空白视口,手指悬在键盘上方,没有敲击。他知道他们刚刚创造了某种改变游戏历史的东西,但那个东西本身——那个用灰色墙壁和数字化的德语喊叫构成的迷宫——对他来说已经结束了。它的问题已经被解决,它的极限已经被触及,它不再是一个需要工程师的工程问题,而是一个需要商人的商业产品。他选择不介入后续的商业运作和游戏维护——那些事情会占用他用来思考的时间。楼下,笑声和香槟瓶塞的声音透过地板传来;楼上,卡马克把手放回键盘上,开始输入下一行代码。那是一行关于多边形裁剪的算法,枯燥、精确、没有任何温度。这个选择的代价是脱离庆祝时刻,但获得的是专注:一个更通用、不依赖于特定游戏的引擎,其价值将叠加在未来所有项目中。