EP.003 / TRANSCRIPT

虚拟逐字稿

John Carmack(上):图形世界的王

FINAL MASTER / release-approved

一个星期

0:00

一台 IBM PC,只租一个星期。

七天以后,机器必须归还。

八十年代末,John Carmack 已经靠 Apple II 和 IIGS 的合同编程挣钱。他想把工作转向 IBM PC,却没有自己的 PC。于是他租来一台,买下 Turbo Pascal,给自己定了一个很具体的期限:在租期结束以前,把手上的程序移植过去。

[001]

引用 [001]

supports

Carmack 的后见口述支撑合同编程、租用 PC 一周和 Turbo Pascal;不据此补写精确移植项目、日期或年轻时已经知道的后果。

定位 Lex #309 01:36:30-01:37:40; Slashdot answer on UMKC, Apple II/IIGS contract work, and entering Softdisk

查看完整证据关系

这不是一台神奇的机器。真正特别的是归还日期。

如果移植没有完成,他失去的不只是一周租金。他刚刚摸到的 PC 市场,会再次回到一台不属于自己的电脑里面。

John Carmack(原声): So what I wound up doing is I rented a PC for a week and bought a copy of Turbo Pascal. And so I had a hard one week, and this was cutting into what minimal profit margin I had there. But I had this computer for a week. I had to get my program ported before I had to return the PC. Yeah. And that was kind of the first thing that I had done on the IBM PC and what led me to taking the job at Softdisk.

他完成了移植。

个人冲刺可以跨过一次门槛。可下一份合同怎么办?下一台机器怎么办?一本买不起的书、一处没有人帮忙发现的错误,又怎么办?

一个星期足够证明他能做这份工作,却还不能让这份工作持续下去。

租来的机器也规定了问题的大小。七天里没有空间把目标无限扩大。无论实际移植经过了哪些步骤,归还日期最后只承认一种结果:程序能不能在这台 PC 上运行。期限没有让机器更快,却把一次职业转换压缩成一个人必须及时完成的交付。

这种工作方式很适合制造一次结果。它不适合制造一个职业。一次移植完成以后,他仍然需要重新寻找设备、资料、客户和下一笔收入。每个问题都从争取工作条件开始,真正用于编程的时间,只是条件剩下来的部分。

这里是《原代码》第三期,《虚拟-John Carmack》的上半部分,《图形世界的王》。我们从这台租来的电脑出发,看一个程序员与工作环境的关系,怎样一步一步反转。

三十天

2:37

不久以后,Carmack 进入了路易斯安那州什里夫波特的 Softdisk。这家公司定期制作和发行磁盘软件,游戏团队叫 Gamer's Edge。

Softdisk 给他的工作机,是一台有四兆内存的三八六,主频二十兆赫。年薪两万七千美元。Carmack 后来形容,那笔钱让自己第一次觉得富足:可以买书、披萨、Diet Coke 和游戏。更重要的是,第二天上班时,电脑还会在那里。

[002]

引用 [002]

supports

工资、机器配置和消费清单来自 Carmack 后见回答;富足与能力增长是他的个人感受,不是客观贫困或绩效测量。

定位 Slashdot answer on 27K salary, 4 MB 386-20, books and rapid learning; Lex #309 05:05:43-05:07:15

查看完整证据关系

机器旁边也有了人。

Tom Hall 是同一支游戏团队里的设计和创作成员。他能把一项程序能力变成角色、关卡和笑话。John Romero 是程序员,也会盯着工具、产品和玩家看到的东西。负责团队生产与商业运作的 Jay Wilbur,则要让这些人按时交付下一张磁盘。

他们不需要等 Carmack 把一套完美系统写完,才开始工作。引擎今天能做什么,其他人就必须在本月把它接成一款可以交付的游戏。

Wilbur 后来这样描述团队的循环:Carmack 会告诉大家,当前引擎能够完成 A、B、C;其他人围绕这些能力讨论,怎样在下一个期限前做出一款游戏。于是一个底层功能不会只在程序员自己的机器上被评价。它会同时面对玩法、工具、产品和交付期限。

引擎也会反过来收到回答。一个技术能力如果没有人能在三十天里把它接成内容,它对这支团队来说,就还不是可以交付的产品能力。

[003]

引用 [003]

supports

Wilbur 的团队证词支撑约三十天交付和 engine 能力由团队接成产品;不把后建页面日期当原始采访日,也不把团队方法改署成 Carmack 原话。

定位 Wilbur interview page 1, Gamer's Edge thirty-day cycle and engine-to-product workflow; Slashdot answer on Hall, Romero, Roath, machines, and learning at Softdisk

查看完整证据关系

三十天是另一种期限。

一个星期租期结束,机器会被搬走。三十天交付结束,结果会留下来:哪些做法有效,哪些关卡做不出来,哪些工具让同事浪费了时间,哪些限制应该在下一轮改变。

Carmack 后来估计,自己进入 Softdisk 后的半年里,编程能力几乎翻了一倍。这当然不是一次测量。它更像一个人回看那段时间时,对反馈速度的记忆。

此前,他必须追赶机器。现在,机器、收入、书、同事和下一次交付,第一次持续地围在他的工作旁边。

这种环境没有消除期限,它把期限变成了反馈。机器不再在星期结束时消失,同事却会在每天的工作中碰到代码留下的边界。Carmack 能更快尝试,其他人也能更快告诉他:这项能力究竟有没有下一步。

[004]

引用 [004]

supports

能力翻倍是 Carmack 的主观后见估计;本稿据生产节奏作环境分析,不把二者写成可量化因果。

定位 Slashdot answer describing programming skill almost doubling in six months; Wilbur interview page 1 on monthly Gamer's Edge production

查看完整证据关系

屏幕滚动的夜晚

5:08

稳定的环境很快碰到它自己的边界。

当时的主机游戏里,人物向前奔跑,新的地面、砖块和敌人会从屏幕边缘连续出现。屏幕像一扇向世界移动的窗。可在 IBM PC 上,这种平滑横向滚动很难实现。

最直观的办法,是人物每走一步,就把屏幕上的像素整体搬到新位置,再补上刚露出来的边缘。对当时的 PC 来说,每一帧都搬动整块画面,代价太高。

Romero 把 Michael Abrash 的 EGA 图形文章递给 Carmack。EGA 是当时 PC 使用的一种显示标准。Abrash 是一位公开撰写底层图形技术的程序员和技术作者,他把显示控制器里那些不容易从普通文档看懂的机制写了出来。

Carmack 多年后回忆,自己从这些文章里理解了 EGA 控制器的路径,再继续发展适合手边问题的技巧。知识从文章进入办公室,又从 Romero 手里抵达 Carmack。它没有替团队完成游戏,却改变了他们可以尝试的问题。

[005]

引用 [005]

supports

Carmack 本人后见前言支撑知识传递与继续发展;不能据此把 Abrash 的公开机制、滚屏实现或 Commander Keen 全部归给任何一个人。

定位 Black Book foreword paragraphs on Romero pointing Carmack to Abrash's EGA articles, learning controller details, and developing further techniques

查看完整证据关系

Carmack 的解法,关键不在于把所有像素搬得更快,而在于少搬。

可以把显存想成一张比显示窗口更宽的纸。玩家往右走时,程序先让窗口在这张纸上移动;只有边缘新露出来的窄条需要补画。窗口走到纸的尽头,再利用显示地址的回绕,把空间继续接起来。

机器没有突然获得五倍算力。程序只是重新决定:这一帧里,什么必须改变,什么可以留在原处。

具体的显存布局、地址回绕和兼容路径留到下期。此刻先看结果:IBM PC 的屏幕,可以像主机游戏那样向一侧平滑移动了。

这项变化很容易被后来更复杂的三维画面遮住。可在那一刻,它改变的是 PC 游戏与玩家之间的感觉。人物不再走到屏幕边缘、停住、等待下一张画面出现。玩家按住方向键,地面持续从脚下经过,屏幕外的空间像是早已存在,只是刚刚进入窗口。

程序实际保存的仍然只是有限图块和有限显存。连续世界,是代码在正确时机更新一条边缘以后,交给玩家的判断。

[006]

引用 [006]

supports

类比只解释少画、较大表面与窗口移动的基本直觉;第一代 DDICI 具体实现和后续 Keen Dreams 源码不能混为同一份代码。

定位 Lex #309 00:07:39-00:09:51 on avoiding full redraw; Romero Dangerous Dave history and preserved DDICI descriptions of tiled EGA scrolling

查看完整证据关系

如果那天只有 Carmack 看见这块屏幕,技术也许只会停在一段演示代码里。

Hall 留在办公室,和他做了一个通宵。Carmack 让滚动成立,Hall 补上标题、关卡、画面和一小段音乐。他们借用现成的 Dangerous Dave 角色与《超级马力欧兄弟三》的开场节奏,做出一份能够直接玩的演示。

这份演示后来被叫作 Dangerous Dave in Copyright Infringement。它的目的很窄:不用解释寄存器,只要让人看见,一个 PC 角色也能在连续画面里向前跑。

完成以后,两个人把 demo 留给 Romero。参与者后来回忆,软盘被放在他的键盘上,旁边只有一句很短的指令:Run me,运行我。

第二天的 Romero 不需要读技术说明。他只需要启动程序,看熟悉的横版关卡在一台 PC 上连续移动。技术从“Carmack 说机器现在能做什么”,变成了同事可以亲手运行、立刻判断的东西。

[007]

引用 [007]

supports

参与者后见材料支撑 Carmack 与 Hall 的动作分工;DDICI 与后来为 Nintendo 制作的更完整 demo 必须分开。

定位 Romero DDICI history on the overnight demo and division of work; Hall Science of Happiness part 1 on the Super Mario 3-inspired PC demo

查看完整证据关系

第二天,Romero 看见了演示。

同一块滚动的屏幕,在三个人手里完成了三次变化。Carmack 把机器的新能力做出来,Hall 把能力变成能玩的内容,Romero 则把这个结果理解成离开原有产品边界的机会。

这里的顺序很重要。Romero 不是先相信一个关于未来的演讲,再要求团队证明它。他先看见一份可以运行的 demo,才把它理解成商业机会。Hall 也不是等待引擎正式完成以后才开始设计;他在能力刚刚成立的晚上,就用关卡、画面和音乐测试它能不能成为游戏。

代码到判断之间的距离很短。一个人改完程序,另一个人当天晚上补上内容,第三个人第二天就能决定是否值得继续。

Softdisk 不愿采用一条不能兼容更早 CGA 显示标准的路线。站在发行磁盘软件的雇主一边,这是一项真实的产品约束。可对三个人来说,如果滚屏只能因为旧显示标准被放弃,他们刚刚完成的结果就没有下一步。

[008]

引用 [008]

supports

参与者与发行方后见材料支撑 Romero 的商业判断和兼容边界;不把 Softdisk 的拒绝写成反技术或恶意阻挠。

定位 Romero DDICI history on seeing the demo and company opportunity; Apogee Keen history pages 1-2 on Softdisk compatibility constraints and the team pursuing a separate product

查看完整证据关系

大约一周后,一封署名 Ideas From the Deep 的提案信寄给 Scott Miller。Miller 经营的 Apogee 用 shareware 发行 PC 游戏:先让一部分内容通过公告板和玩家复制传播,再向愿意继续玩的用户销售后续内容。

信的日期是,一九九零年九月二十八日。

开头只有一句:

“Here is the completed demo.”

“完成的演示在这里。”

信里提醒 Miller,这是一份机密材料。团队没有只问他愿不愿意发行眼前这个 demo,而是提出用“这个引擎”制作一组作品。技术已经从一次证明,变成可以重复使用的生产计划。

但信仍然只是一份提案。没有零售渠道,没有已经成立的公司,也没有证据保证玩家愿意付钱。四个人赌的是另一件事:只要作品能够先到达玩家,滚屏带来的差异就不需要等待原雇主改变产品路线。

[009]

引用 [009]

supports

同期信件直接支撑日期、completed demo、engine/series 计划和四人共同提案;不证明公司注册日、最终协议或逐段作者。

定位 1990-09-28 proposal-letter scan, date line, opening sentence, engine/series proposal, and four-person signatory/photo area

查看完整证据关系

纸上不是一个名字,而是四个。

除了 Carmack、Hall 和 Romero,还有负责视觉工作的 Adrian Carmack。信里已经出现了“这个引擎”、一组游戏和 Commander Keen 的角色设定。一个通宵 demo 还没有变成公司,却已经把代码、内容、视觉、产品判断和发行出口写在同一页纸上。

Scott Miller(原声): We were taking advantage of this whole online ecosystem that they weren't doing it. And so we were getting this crazy distribution. And, you know, we would make a game and release basically one third of it for free. And that blew their minds.

[010]

引用 [010]

supports

信件与发行方后见史共同支撑四人提案和 shareware 出口;不把 Adrian、Miller 或其他生产环节缩成 Carmack 技术的附属品。

定位 proposal-letter scan, four-person area and Commander Keen/engine language; Apogee Keen history pages 2-4 on roles, shareware route, and December 1990 release

查看完整证据关系

同年十二月,Commander Keen 的第一组三部曲发布。玩家控制一个戴头盔的小男孩,在外星关卡里奔跑、跳跃和射击。第一章可以自由复制,后两章付费购买。

Hall 为这个技术结果给出角色和世界,Adrian Carmack 等人把视觉接成产品,Romero 继续处理工具、代码和商业推进,Miller 的发行结构让陌生玩家能够先运行第一章。滚屏仍然重要,但玩家付费购买的不是一项显存技巧。他们购买的是一款已经有角色、节奏、关卡和后续章节的游戏。

shareware 分享的是可以玩的商业产品,不是底层源代码。可它已经足够改变这几个人的工作:玩家能得到游戏,团队能看到收入,Softdisk 之外第一次出现了可以持续的发行路径。

早期闭环快得惊人。滚屏变成 demo,demo 变成提案,提案变成产品,产品又变成离开原雇主的现实条件。

[011]

引用 [011]

supports

材料支撑 Keen 的 shareware 发行和团队获得独立出口;shareware 产品传播不等于源码开放。

定位 Apogee Keen history page 4 on 1990-12-14 shareware release and team formation; Electric Playground answer crediting Scott Miller/Apogee for shareware

查看完整证据关系

技术基础

12:25

离开 Softdisk 后,这支团队成为 id Software。过去三十天交付一次的循环没有消失,只是下一次技术变化可以直接改变公司要卖什么。

Hovertank 让玩家从第一人称走进简单迷宫,Catacomb 3-D 给墙面加上纹理,Wolfenstein 3D 把这种空间变成高速行动。三个项目不需要逐一展开。重要的是,前一个项目留下的能力,会成为下一个项目的起点。

这种推进并不意味着技术独自决定方向。一个高速绘制墙面的程序,需要设计者决定玩家为什么奔跑、在哪里停下;一条更自由的空间路径,也可能因为内容成本、控制方式或交付期限被收回来。引擎给团队一组新动词,团队再决定哪些动词真的值得变成游戏。

如果某种画面刚刚能够稳定运行,Hall、Romero、Adrian Carmack 和其他成员就要决定:它能承载什么角色、什么节奏、什么空间,又该用什么工具把它做成产品。

[012]

引用 [012]

supports

同期报道与参与方后见史支撑逐代承接和复数分工;三个过渡项目只作为因果桥梁,不据此简化完整作品史。

定位 Game Developer 1994 premiere-issue report on id's engine/content progression; Apogee Keen history pages 3-4 on team roles and transition to id

查看完整证据关系

Jay Wilbur 在九十年代中期的一次采访里,把这种方法说得很直接:

“技术基础,决定我们要做哪一种新游戏。”

这句话不是 Carmack 的个人宣言,也不是说引擎可以自动生成作品。它描述的是一种工作顺序:技术先划出当前边界,设计、美术、关卡、工具和发行,再把边界变成玩家可以进入的世界。

[013]

引用 [013]

supports

原句属于 Jay Wilbur 的团队方法概括;不能改署成 Carmack 原话,也不能推广为所有游戏公司的普遍规律。

定位 Wilbur interview page 2, 'the technology base is what dictates what kind of new game we do'

查看完整证据关系

Doom 把这套关系扩大了。

玩家进入火星基地,在狭窄走廊、开阔房间和隐藏区域之间寻找出口。门可以突然打开,怪物会从不同方向逼近,另一个玩家也可能通过网络出现在同一张地图里。让这种速度成立,需要引擎对空间作取舍;让玩家愿意继续走下去,需要关卡、声音、怪物、美术和武器反馈一起维持压力。

引擎要让墙、门、怪物和光照及时出现;关卡设计要把通道变成探索与战斗;美术要让有限角度和颜色的图像像活物一样行动;工具要让这些内容能够反复修改;网络和发行又把玩家带进同一个空间。

这里已经很难再说,程序员先完成一台机器,其他人只往里面填内容。关卡会暴露引擎的限制,美术会迫使工具改变,玩家的网络行动又会制造单人游戏里不存在的问题。技术规定工作边界,其他人的工作也持续把压力送回技术。

玩家随后用 WAD 文件和外部工具替换地图与数据,继续改造这个世界。这里开放的是产品的数据边界和创作接口,仍然不是完整商业源码。

[014]

引用 [014]

supports

材料支撑 Doom 的复数生产和 WAD 扩展边界;Carmack 2019 后见口述只用于区分 mod/data 接口与后来源码公开。

定位 Game Developer 1994 report on Doom production roles and multiplayer; JRE #1342 00:09:36-00:14:44 on WAD/PWAD, tools, QuakeC, and later source releases

查看完整证据关系

在 Softdisk,Carmack 使用公司提供的机器。到了 Doom,公司开始用他的下一套技术基础安排工作。

这是一种很强的位置。一个底层判断,会改变关卡能怎样连接,美术要准备什么素材,工具何时重写,产品又能向玩家承诺什么。

只要引擎、内容和发行还能迅速抵达同一个终点,这种结构就像一台不断加速的机器。

下一次,三者没有同时到达。

终于

15:44

Quake 要把完整多边形空间、角色、工具、网络和不同硬件路径放进同一款游戏。

这一次,玩家不只是看着二维怪物在空间里移动。墙、台阶、敌人和武器都要成为可以从不同角度观察的立体对象;光照、遮挡、动画和网络状态又必须在玩家转身时及时更新。每增加一种自由,旧游戏里可以隐藏的问题就少一个。

旧办法已经不够。技术团队必须决定哪些表面可能被玩家看见,怎样让复杂场景保持稳定帧率,游戏规则如何被扩展,网络延迟又该由谁承担。任何一项底层选择变化,都会沿着工具、关卡和美术向外传播。

Michael Abrash 此时加入 id,以图形程序员身份和 Carmack 一起寻找可见性与性能方案。他们试过多条路径,也放弃过多条路径。对引擎程序员来说,放弃可能意味着离可行结构更近;对已经制作内容的人来说,昨天成立的边界今天可能已经移动。

Abrash 的同期技术文章留下的不是一条直线,而是一系列被尝试、被检验、又被放弃的方案。有些方案平均表现很好,最坏的一帧却无法接受;有些减少了一种计算,又把代价转到别处。最终结构同样需要取舍,只是把一部分不确定工作搬到了游戏运行以前。

技术细节留到下期。人物关系上的变化已经足够清楚:Carmack 不再只是在一周里向自己证明一个办法可行。他和 Abrash 等程序员选择的结构,会成为关卡、美术和工具团队每天醒来以后面对的现实。

[015]

引用 [015]

supports

Abrash 同期文章支撑多轮方案与技术分工,Wired 支撑团队现场;不展开下期负责的 PVS 机制,也不把逐行代码归给单个人。

定位 Abrash Dr. Dobb's Sourcebook #255 sections on failed VSD approaches and final PVS; Wired 4.08 sections on Carmack/Abrash and Quake production

查看完整证据关系

作家 Marc Laidlaw 在一九九五年进入 id 观察制作。他不是项目成员,他留下的是一个驻场者看到的办公室。

那时,引擎和一部分视觉内容已经存在,游戏却没有稳定回答自己究竟是什么。中世纪、阿兹特克和科幻方向在制作中彼此覆盖;一些已经完成的关卡和美术被放弃。团队人数和专业分工让 Quake 能做得更大,也让一次变化同时落到更多人的工作上。

从屏幕外看,一套三维引擎已经能生成令人惊讶的画面。从办公室里看,画面只是许多未决问题中的一个:角色做什么,关卡用什么工具生产,网络如何工作,哪些内容还能保留,产品什么时候才能冻结边界。

引擎“接近完成”,甚至已经可以展示,并不意味着美术和设计终于可以不受干扰地填满它。只要架构继续变化,工具就可能重写;工具继续变化,已经制作的空间就可能需要重做。技术越靠近整个产品的底座,局部判断传得越远。

这不能被简化成 Carmack 一个人造成了 Quake 的延期。产品方向、工具、内容、网络和多人协作共同构成了问题。可引擎处在最底层,底层边界移动时,等待会向所有方向传递。

[016]

引用 [016]

supports

同期驻场报道支持方向变化与内容返工;记者观察不是完整生产台账,也不支持把全部延期或责任归给 Carmack。

定位 Wired 4.08 / Laidlaw author text on the August 1995 visit, expected Christmas ship, discarded quasi-Aztec work, retained medieval content, and team roles

查看完整证据关系

开放性也被重新写进产品。

Doom 时代,玩家已经会替换数据、制作地图。Quake 进一步提供可以修改游戏规则的 QuakeC、分层目录、数据包搜索路径和 -game 参数。外部开发者可以在产品划出的边界里增加规则与内容,不必修改原始可执行文件。

这套接口也是 id 对内部经验的一次回应。玩家过去会寻找缝隙、修改文件、给可执行程序打补丁;Quake 把一部分缝隙变成正式路径。基础游戏留在原处,新增内容只覆盖自己改变的部分。一个商业产品因此能承载许多不同规则与地图,同时保留明确的底层边界。

这是有意设计的扩展接口,仍然不是引擎完整源码已经公开。

[017]

引用 [017]

supports

同期开发者邮件支撑 Quake 的数据与解释器扩展边界;邮件归档载体不是完整原始 mail spool,扩展接口不等于完整商业源码发布。

定位 Carmack developer mail 'Quake's data access', 1996-06-26, on progs.dat, PAK search paths, loose files, and quake -game

查看完整证据关系

一九九六年六月,Quake 终于发布。

几天后,Carmack 在一份名叫 .plan 的公开工作记录开头写下四个词。

“Quake is out. Finally.”

“Quake 发布了。终于。”

[018]

引用 [018]

supports

两份后建载体互证文本与归档日期标签;不冒充原 id server 快照,也不把 Finally 扩写成未经公开的个人情绪诊断。

定位 Carmack .plan entry labeled 1996-07-01, opening line 'Quake is out. Finally.' in Team5150 2007 PDF and 2017 GitHub archive

查看完整证据关系

六年前,提案信写的是,完成的 demo 在这里。

那句话里的“完成”,指向一份很小的东西:足以证明横向滚屏、足以让收件人运行、足以开始谈下一步。Quake 的“终于”,面对的却是另一种完成:引擎、工具、内容、网络、发行和许多人的工作必须在同一天成为一个产品。

那时,引擎、内容和商业机会在几天里互相抵达。到了 Quake,一套能够划定未来图形边界的引擎,和一款真正可以发布的游戏,已经不再同时完成。

“终于”之后,才适合解释这期标题里的“王”。

图形世界的王,不是这个世界的唯一作者。它是一种工作位置:一个人的技术判断能够规定当前机器允许什么、暂时放弃什么;同事据此安排关卡、美术、工具、网络、测试和发行。

这个位置由所有接住技术的人共同制造。它给 Carmack 划定边界的力量,也让边界移动的代价落到更多人身上。

九个月

21:07

Quake 发布后的第二年,Electric Playground 问 Carmack,外部公司为什么要购买别人的游戏引擎。

他的回答不是“因为我们画得最好”,而是时间。

即使一家公司只花九个月重写引擎,那也是一段巨大的市场时间。要独立完成当时最前沿的技术,可能至少需要一年,还要承担集成、招聘和方向失败的风险。购买一套已经成立的引擎,是用钱换回这九个月,把有限开发周期留给自己的游戏。

Carmack 同时提醒,开发一款持续两年的游戏,意味着团队必须猜测两年后的硬件和技术曲线。预测错了,今天漂亮的架构可能在发布时显得保守;追得太远,产品又可能一直等不到稳定边界。

授权没有让外部公司开始等待 id 的每一次更新。它提供的是一个已经完成到足以购买的起点。合作方用成熟边界替换一段自研风险,再把时间投入自己的设计、内容和发行。

[019]

引用 [019]

supports

Carmack 的同期问答支撑授权节省自研时间;九个月是他的举例,不代表所有授权方、项目或合同的固定工期。

定位 Electric Playground 1997 interview, answer on licensing an engine, nine months of redevelopment, at least a year for state-of-the-art technology, and integration/personnel risk

查看完整证据关系

同一份回答,又把时间账单放回 id 内部。

Carmack 说,第一款采用 bleeding-edge engine,也就是最前沿引擎的产品,对设计师很残酷。技术不断变化,像有人从脚下抽走地毯;已经完成的内容可能被丢弃,计划中的功能也可能赶不上发布。等到后续团队在已知约束上工作,设计能力反而更容易完整发挥。

外部工作室购买引擎,是为了少等九个月。id 的设计、美术和工具成员,却可能先替这套引擎支付等待。

[020]

引用 [020]

supports

本人同期回答直接承认前沿技术对设计工作的代价;不据此把 Quake 全部返工或延期归给 Carmack。

定位 Electric Playground 1997 interview, answer describing the first bleeding-edge product as rough on designers, discarded content, missing features, and follow-on work under known constraints

查看完整证据关系

还有一条时间线,需要和授权、shareware、mod 分开。

Wolfenstein 3D、Doom 和 Quake 的完整商业源码,都是在游戏发布以后才陆续公开。到一九九九年 Quake 源码发布时,玩家早已能购买游戏,合作公司也早已能取得商业授权,mod 作者也已经能使用产品提供的数据和脚本边界。

源码公开以后,后来开发者可以阅读渲染、网络和工具的具体实现,移植到新的系统,也能从已经发布的选择里继续学习。它影响深远,却没有替原团队在产品制作期承担关卡、美术、测试和交付,也不能被倒写成这些游戏上市时就已经开放了全部底层代码。

四件事发生在不同时间,解决不同问题。shareware 负责传播产品,商业授权把成熟技术交给合作方,mod 接口允许在边界内扩展,源码发布才让底层实现成为后来开发者可以直接阅读和改造的材料。

“代码很快分享出去”,会把这些不同关系压成一句并不准确的话。

[021]

引用 [021]

supports

来源共同支撑产品传播、商业授权、扩展接口与源码发布的不同时间和合同;released source 不是原商业开发历史或逐行作者记录。

定位 id released-source repository records for Wolfenstein 3D 1995, Doom 1997, and Quake 1999; Quake data-access mail 1996-06-26; Electric Playground 1997 licensing answer

查看完整证据关系

省下来的时间去了哪里

23:53

进入二十一世纪,id 的项目周期继续拉长。

Doom 3 把统一的实时光照、动态阴影和更精细的表面变成核心目标。图形结果很早就能看见。可图形原型不是一款游戏,能够移动一盏灯,也不等于整套关卡、玩法、角色、工具和媒体已经完成。

对玩家来说,实时光影让房间不再只靠预先烤好的明暗图成立。灯光移动,物体和人物的阴影也会改变。对内容团队来说,同一能力意味着重新学习怎样布光、怎样控制表面复杂度、怎样让一个可随时变化的场景仍然可读。

二零零四年,Carmack 在游戏开发者大会 GDC 演讲时说,团队已经进入第四年开发;相同的核心画面,在更早的 GeForce 1 级硬件上已经有效出现。期间已有几代硬件能够运行这套技术,玩家仍然没有拿到完整产品。

[022]

引用 [022]

supports

演讲支撑图形原型先于完整产品和项目阶段;源码只支撑渲染结构,不证明全部开发工期、责任或产品决策。

定位 GDC 2004 Eurogamer transcript sections on fourth-year development, GeForce 1-era graphics, and three hardware generations; Doom 3 GPL renderer interaction paths

查看完整证据关系

工具也真的变快了。

过去,关卡设计师调整一次可见性和光照,可能要等大约三十分钟构建。Doom 3 编辑器让灯光可以实时拖动,结果当场出现。按最直观的推算,项目应该因此缩短。

实时反馈首先改变的是工作动作。设计师不必提交一次漫长构建、离开座位、回来以后才发现灯的位置不对;他可以拖动、观察、再拖动。一次决定的反馈距离,从半小时缩到眼前。

但 Carmack 说,内容制作并没有变短。反馈变快以后,团队提高了精度。早期一个房间可以在几十分钟里完成,新的关卡从制作到第一次试玩要以人月计算;有时只为打通一面墙、重新连接空间,也可能再花一周。

工具消除了一种等待,更高的内容标准又把时间吸收回去。

[023]

引用 [023]

supports

Carmack 的演讲支撑工具反馈变快而内容周期未缩短的观察;缺少独立内容团队复盘时,不写成所有成员或所有关卡的统一统计。

定位 GDC 2004 Eurogamer transcript sections on roughly 30-minute lighting/visibility builds, real-time editor feedback, Wolfenstein room time, man-months to playtest, and a week to alter connectivity

查看完整证据关系

Rage 又把另一种时间放大。

id Tech 5 要在多种平台上维持每秒六十帧,并让美术能够给世界绘制大量不重复的纹理。第一次按需搬运纹理的 texture virtualization 实验可以很快看到效果,把它变成跨平台、可生产、可发布的系统,却用了多年。制作端需要庞大数据、构建机器、缓存层级和新的工具链,普通 mod 作者也更难复制同样的环境。

目标是让一幅由美术逐处绘制的世界,以每秒六十帧运动起来。玩家端看见的是连续世界,制作端面对的却是数量巨大的源素材、转码、缓存和平台差异。玩家机器不必一次装下全部细节,公司的生产系统必须知道每一块细节在哪里、怎样构建,又怎样在需要时送到屏幕。

早期 id 的工具可以跟着产品一起到达玩家和 mod 作者手里。Rage 的内容管线更像一套工业设施:它能支撑规模,也提高了进入门槛。省下来的显存没有凭空消失,它在制作端变成存储、计算、工具和组织成本。

二零一一年 Rage 发布时,Carmack 已经公开反思,id 经历了大约六年的出货空窗。他希望这段时间里本可以多完成一款产品。技术突破能提前展示一种未来,把展示变成稳定产品,又会重新积累被搬走的等待。

[024]

引用 [024]

supports

主讲自动稿与同期实测支撑多年产品化、60 FPS、内容管线和六年空窗;百分比及精确措辞未复听,不进入正文,项目结果不归因于 Carmack 一人。

定位 QuakeCon 2011 GameSpot ASR P1 06:28-07:17 and 18:33-22:12, P2 23:03-24:14 and 33:47-36:28; Digital Foundry Rage Face-Off pages on 60 FPS, streaming, cache, and platform differences

查看完整证据关系

六年里,目标硬件会变化,竞争产品会变化,玩家对开放世界和射击游戏的经验也会变化。出发时先进的选择,抵达时必须面对另一个市场。

这不是一份对 Rage 成败的单人判决。美术、设计、工具、平台、发行和组织决策都进入了最终结果。这里只需要保留一个限制:最先进的图形技术,不能替产品保存六年前的世界。

任务完成

27:47

二零一三年,Carmack 已经同时把注意力投向一家名叫 Oculus 的虚拟现实公司。八月,他在那里担任首席技术官;十一月,他正式离开 id Software。

id 对外声明,Carmack 在 id Tech 5 和当前开发所需技术上的任务已经完成,他的离开不会影响正在进行的项目。

公司声明对外强调的是产品连续性:正在开发的东西不会因为一位联合创始人离开而停下。于是二十多年的共同工作,被压成一句可以交接的技术状态。

“任务已经完成。”

[025]

引用 [025]

supports

同期公司公告与媒体保存声明支撑任命、离开顺序和 id 的公开表述;任务完成属于公司措辞,不自动代表 Carmack 接受同一判断。

定位 Oculus CTO announcement 2013-08-07; Polygon and Game Developer reports dated 2013-11-22 preserving id Software's mission-complete statement

查看完整证据关系

Carmack 自己的公开说明更短。他原本希望继续担任 id 的技术顾问,但没有实现;他也承认,分开注意力确实困难。

现有材料没有给出完整内部原因。节目不把沉默补成人际决裂,也不把离开解释成某一个项目的裁决。Oculus 在这里,只是他的下一份工作。

对这家公司来说,一项持续了二十多年的关系已经结束:年轻时,Carmack 追赶一台租来的机器;后来,id 长时间围绕他的下一套技术安排产品;现在,公司宣布,所需技术已经完成。

[026]

引用 [026]

supports

本人公开短文只支持顾问安排未实现和分散注意力困难;不能补写被驱逐、逃离管理或单一离职动机。

定位 Carmack public statement preserved by Polygon/Game Developer on 2013-11-22: hoped to remain a technical adviser, arrangement did not work out, divided focus was challenging

查看完整证据关系

时间有重量

29:00

六年以后,Carmack 回看 Rage 和 Quake,修正了自己过去对完成时间的态度。

他说,延期几个月和延期几年不是同一件事。Rage 开发大约六年,上市时竞争环境和目标硬件已经改变;如果重新选择,他会降低一部分技术雄心,更早把产品交出去。

这里的“物理性”不是一句抽象的时间管理格言。代码继续变化时,外面的机器仍在更新,其他游戏仍在发布,团队成员和玩家的经验也在变化。项目每多用一年,并不是在同一张静止地图上多走一段路;地图本身也在移动。

然后他说:

John Carmack(原声): We're going to make sure we ship the game when it's actually done. But the aspects of seeing it with a little bit more perspective now, it's like if you're talking slipping a quarter or slipping six months, yeah, great, that's definitely fine. But when you're talking about slipping years, you know, when years go by, the world changes around you in a way that being a kind of totalitarian about “it'll only ship when it's done,” I largely recant from that now, where with a little bit more perspective, time has a physicality that you may not appreciate.

时间有一种物理性。

[027]

引用 [027]

supports

2019 本人后见访谈支撑对 when-it's-done、Rage 六年和降低雄心的反思;原声已按重制版上下文复听,但仍不能把所有 Rage 问题归给工期或个人。

定位 JRE #1342 02:24:26-02:26:45; official auto-caption key phrase near 02:25:13

查看完整证据关系

再往后,Carmack 回看一九九零年的 PC 横向滚屏,又给出了另一种时间判断。

如果再等大约五年,更多算力会让程序员用直接得多的办法完成相似结果。那个滚屏 hack 的价值,就在于技术还只是勉强可行时,把结果提前交给玩家。

“五年”只属于他对 PC 横向滚屏的后见举例。它不能被扩写成 Keen、Wolfenstein、Doom 和 Quake 都精确提前了五年,更不能变成所有三维游戏共享的历史定律。

[028]

引用 [028]

supports

编辑后本人访谈支撑横向滚屏的约五年后见判断;不扩大到所有 3D 作品,也不反投射成 1990 年时已经公开的终身使命。

定位 Masters of Disruption installment published 2022-01-11, edited Q&A section on side-scrolling, waiting another five years, brute force, and barely possible hacks

查看完整证据关系

现在,那台租来的 IBM PC 可以再出现一次。

年轻时,Carmack 必须赶在一个星期结束以前完成移植。Softdisk 给他稳定机器和三十天反馈,Hall、Romero、Wilbur 等同事把技术结果接成持续工作。早期 id 又能在几天里让滚屏、demo、产品和发行互相抵达。

那时,他与环境之间最主要的冲突,是资源不够:机器不属于自己,算力不够,最直观的办法跑不动。hack 的作用,是在这些限制里挤出一条现在就能工作的路径。

后来,技术基础开始决定公司做什么。外部工作室购买引擎,是为了缩短自己的等待;id 的内容团队却要在移动的边界上工作。到了 Quake、Doom 3 和 Rage,省下来的计算时间、构建时间和研发时间,不断以新的形式回到项目里。

关系就在这里反转。开始时,工作环境决定 Carmack 何时能编程;后来,Carmack 的技术判断越来越像其他人的工作环境。再后来,产品规模和市场时间又变成没有任何一个人能够单独控制的外部条件。

所以,“图形世界的王”不是一句关于所有权的称号。

它描述的是一种曾经真实存在的工作位置:Carmack 可以决定一台机器怎样分配计算,也可以长时间影响一家公司怎样分配工作。这个位置离不开那些写内容、造工具、做美术、找发行、承担返工并把引擎变成游戏的人。

它也有一道最后的边界。

图形世界的王,可以让一部分未来提前。

但他不能让时间等待自己。

下一期,《购买未来的人》。

我们会回到这些被搬走的等待:为什么一块屏幕可以少画,为什么一张地图能提前计算,为什么缓存、预测和工具链可以让玩家先看到结果;又是谁在内存、网络、内容生产和人的感知里,支付了这段提前到来的时间。

片尾

32:55

你刚刚收听的是《原代码》第三期上篇,《虚拟-John Carmack(上):图形世界的王》。

本期使用的本人访谈、团队证词、同期提案信、开发者文字、源码记录和公司声明,会整理在 show notes 与公开证据页中。

你可以访问《原代码》的官方网站。网站地址是,原代码三个字的全拼,点 X Y Z。在那里,你可以查看本期逐字稿、证据引用关系和证据快照,也可以收听往期节目。

感谢你的收听。

我们下期再见。