注:感谢氢离子对文章的优化和配图。
1970年的8月20日,45年前的这一天,约翰•卡马克降临地球。80到90年代是信息产业的黄金期,是电子科技发光的年代。先是个人电脑来了,有了IBM,有了苹果和摩托罗拉,接着零部件供应商接踵而至,最后被这些品牌整合到一块,拉成一条产业链。链一旦建立,软件开始登场。先是最底层的操作系统,又有了应用软件,应用软件最后开始细分,渗透到人类社会活动的各个领域。然后大家在细分领域展开竞争,先拼规则,再拼性能,最后拼思想。科技发展和生物进化论一样,越往后精分越多样化。所谓的大师先贤,正是这些精分节点上的先驱。约翰就是游戏软件领域的大师,他的技术和思想一直影响着人类,直到今天。
从FPS之父到视觉革新
约翰可以说是FPS游戏之父。FPS翻译过来是“第一人称射击”,首先你得是第一人称,其次要射击,这些限制就是规则。但这个规则只是个概念,形成不了专利,谁都可以去做第一人称游戏,不准射子弹,我可以射气球射泡泡,很难约束。专利针对的是技术,像DOLBY,D3D,HDMI这些,提供一套现成的,系统的,可实现的方法,是一个标准,一款制式,大家统一用这个接口,便捷高效效果好,大家认你的这套,你才能站得住脚。
所以编程出生的约翰正好有这个资本,成立了大名鼎鼎的id software,搞了一套游戏引擎来实现FPS这个概念性规则。引擎做出来后,为了测试,他先开发了一款叫《德军总部3D》的游戏,有了第一人称视角,有了射击,但因为当时硬件有局限,只能实现平角360°的三维视野。90年代初,无论是电脑游戏还是主机游戏,都是2D向3D过渡的节点时期,硬件性能突飞猛进。于是借着这个势,通过《德军总部3D》,他进一步改良引擎,并推出了后面大名鼎鼎的《毁灭战士》,最终实现了真3D的画面效果,引擎大卖。在这种历史的关键点上,往往向前一小步便能名留青史,相反一退缩,就会被洪流淹没得无影无踪。要知道那还是一个386、集显、DOS和软盘的时代,约翰就像勇猛的骑士,不穿盔甲,拿着把断剑,骑着匹瘦马冲破了城墙。要让大家服你,我觉得这个很关键。
现在玩家喜欢看画面,评测一上来,先说游戏画面,质感纹理怎样,锯齿如何如何。很多老玩家感叹现在的玩家都怎么了。其实过不在玩家,就跟有了印刷术的出现一样,印刷代替了手抄,书进入批量化生产,于是有料的没料的都来了。一样的道理,以画面烘托剧情的,单纯炒作游戏画面的游戏都会蹦出来,这是科技发展的必然结果。这是个好事,起码让玩家更有代入感。游戏行业,CPU运算能力够了,其实大家最后拼的就是视觉,就是图形的处理速度,当年约翰开动了这列火车,直到今天也没停下来。
神奇的“0x5f3759df”
约翰最擅长的就是压榨显卡的性能,通过对软件的优化反向拉伸硬件的功率,这点上的意义超过了他开创FPS的成就。为什么呢?当年他为了实现《雷神之锤》的真3D效果,竟自行研制了一套底层图形库,和OpenGL、D3D一样,充当软件和显卡之间的桥梁。道理和操作系统串联机器和应用相同,是一个标准制式,可以理解成是独立于3D引擎之外的图形加速软件,比引擎深一层,再深一层就是操作系统了。现在游戏公司都直接买引擎,买来开发游戏,当今90%的游戏程序员不会开发引擎,更何况是这样的底层API接口?
再说说引擎。现在很多人会用视频制作软件,把图片、音源、视频片段、字幕这些零部件统统丢进去,整合再完整播放出来,但会用不等于用得好,整合得更流畅更自然更有美感才是关键。这和游戏引擎是一个道理,让图形数据输出的速度更快,质量更高是一款好引擎的重要评判标准。引擎经常要对底层函数调用,越底层的数据调用得越频繁,尤其是3D图形的渲染这块,大家玩游戏时,碰到大场景经常出现卡顿,甚至角色悬空,其实就是图形算法的速度跟不上。
有种算法叫“牛顿迭代运算法”。比方开方运算,计算根号2是多少,先假设认定一个数,带入到函数中,获得这个数和√2区间的某个值(函数曲线切线与x坐标轴的交点),再迭代到原函数中继续计算,不断接近函数解,最后得出1.414。如果认定这个数是2,很接近,两步就能算出来,而假定数太大或太小,就要算半天,速度就下来了,图形处理的速度就变慢了。到头来运算速度成了碰运气,运气好,1秒搞定,运气不好10秒钟,速度本身并没提升。
于是大家巴不得自己都是先知,恨不得一下就能无限接近那个真实值。结果只有约翰做到了,他在《雷神之锤3》的开源代码中设置了“0x5f3759df”这个常数来算那个猜测数,后面加了一句“What the fuck?”的标注就搞定了。不管算什么,这个常数的运算能力都比牛顿快4倍。约翰首次把这种奇特的运算法调用至引擎,这就是后来著名的“平方根倒数速算法”。0x5f3759df犹如黄金分割线,是一道优美的自然法则,约翰发现了它,就跟门捷列夫发现了元素周期表一样,具有里程碑的意义。
(氢离子:有调查显示0x5f3759df并非约翰首创,之前就于计算机图形学的硬件与软件领域有所应用,在此不做细考。但《雷神之锤3》的代码中的确用到了0x5f3759df)
天才的开放情怀
除此之外,约翰还是坚定的程序开源运动倡导者。约翰来自堪萨斯州,美国版图的正中心,向西是加州硅谷,天才云集的高科技产业园,向南是人人都有枪的德克萨斯,结果看似文弱的卡马克坚决把Id Software定在了德州。我觉得这是个很有意思的事,说明内心强大才是真强大。卡马克创业时,开源运动正在硅谷轰轰烈烈开展。Linux创始人之一林纳斯反对微软的封闭式教堂主义,坚决反对软件专利,说技术领域就是菜市场,不光要创造,更要懂得分享,因为这是可以造福全人类的财富。卡马克从小受到信奉天主教父母的熏陶和教诲,素来具有奉献精神,听到这个召唤,他马上站起来响应,并率先垂范,陆续公开了自己游戏的源代码。
开源是个创举,是科技革命下璀璨的人文精神的凝华。因为编码的最高境界是一种抽象的想象,不再是你怎么说我怎么做,不是照本宣科。我在一个时段编出来的码代表这个时段的一个终点,然后一封包,跟用户说这个多少钱,你就用我的,别人的都是垃圾,这等于敲诈了用户的钱,还变相锁死了大家的上升通道。也许高智商的天才向来对世界存有感怀,懂得博爱。他们的目的不是为了赚钱,尤其是约翰这种富二代,更不care金钱。他们希望给后来者更好的生产工具,让后起之秀在他们的基础上创造出更多的成就。在别人眼中,他们可能是疯子,是傻子,但相信我,这事还真说不准到底是谁傻。
来自地球之外的人
我一直觉得约翰不是地球人,更像是外星人。早在20年前,3D游戏领域该干的事,他全干完了。大家不需要再去发现什么,金木水火土全有了,直接拿来用就好。突然有一天,他也发现自己好像该干的事都干了。于是呼的一下开了个公司,潜心研究制造飞天火箭去了。结果火箭并没飞起来,毁了他200万,他袖子一甩,扇子一摇,微笑着说:“这事儿比我之前玩的涡轮增压法拉利跑车稍微贵点,不过也不算太过分”。然后把公司卖给贝塞斯塔,说:你们来管吧,我去继续精进我的代码。来去如风。
在财富观念上,美国和中国有些差异。国内什么都要传承,企业也好,房子也好,反正只要是财产,必须得老子传儿子,儿子再传孙子。美国不怎么传,很多人更愿意把钱拿出来做慈善,取之大海,还之大海。30多年下来,约翰赚了很多钱,而且笔笔是巨款。他现在做事,不为生存,不为社会关系,纯粹是兴趣——那些因为兴趣获得的巨额财富,他现在同样因为兴趣把它们捐给学校、公会,捐给游戏社区那些独立开发者,颇有番不带走云彩的风范。或许约翰真的不属于地球,未来当你突然发现他遨游于太空,希望也别太惊讶。
文/品游师(微信公号:gamewhy2015,一个喜欢写作文的游戏玩家)