在圣何塞的霓虹灯下
1993年的圣何塞,夜幕降临后,整座城市仿佛被点燃了一般。圣安东尼奥路上,各种霓虹灯牌争相闪烁,将这条通往硅谷核心地带的公路装点得如同一条流动的光河。路边那些刚刚兴起的连锁餐厅——必胜客、红龙虾——用巨大的灯箱招牌吸引着南来北往的旅客。往东望去,可以隐约看到圣何塞州立大学的钟楼;往西,则是无尽的工业厂房和新建的工业园区,那里正孕育着即将改变世界的科技公司。
就是这样一个平凡的加州小城夜晚,在一家普通的丹尼餐厅里,三个并不普通的年轻人正围坐在角落的一张四人桌旁。窗外,傍晚的车辆灯光偶尔扫过,将他们的侧脸短暂照亮。桌上散落着几杯已经凉透的咖啡,还有一张被咖啡渍沾湿的餐巾纸,上面画满了看起来像是某种几何图形的草图。
这三个人中,年纪最大的是柯蒂斯·普里姆(Curtis Prim),三十出头的样子,穿着一件洗得有些发白的牛津衬衫,镜片后的眼睛闪烁着工程师特有的专注光芒。他来自一个并不显赫的背景——父亲是俄勒冈州的一位中学教师,母亲在社区图书馆工作。从斯坦福大学电子工程专业毕业后,他在半导体行业已经摸爬滚打了七八年。柯蒂斯说话时带着一种沉稳的自信,那种自信不是来自傲慢,而是源于对技术本身的深刻理解。他曾在几家不同的芯片公司工作过,从最初的系统设计到后来的架构开发,几乎涵盖了芯片设计流程的每一个环节。这种全栈式的经验让他成为三人中最懂半导体工艺的人。
坐在柯蒂斯对面的是克里斯·马拉科夫斯基(Chris Malachowsky),三十岁出头,金色的短发微微卷曲,眼神中透着一股艺术家气质与科学家理性的奇妙混合。克里斯出生于威斯康星州密尔沃基的一个德裔家庭,他的祖父曾是底特律汽车工厂的工程师,从小就给他讲述机械运转的奥秘。这种对机械和结构的着迷,最终引导他走上了计算机图形学的道路。在佛罗里达大学读完本科后,他来到了斯坦福大学攻读研究生,师从当时在图形学领域颇有名气的教授。在太阳微系统公司(Sun Microsystems)工作期间,克里斯参与开发了多个图形处理相关的项目,积累了丰富的实践经验。他对光影、透视、三维空间的理解,远超一般工程师,这也为他后来在图形芯片设计上提供了独特的视角。
而三人中最后加入、却最终成为公司灵魂人物的,是当时只有三十岁的黄仁勋(Jensen Huang)。这个名字对很多人来说意味着现在的科技巨头英伟达,但在1993年的这个夜晚,他还只是一个在AMD和LSI Logic公司积累了些许工作经验的年轻工程师。黄仁勋1963年出生于台湾台北的一个普通家庭,父亲是位化学工程师,母亲是位教师。1973年,年仅十岁的他随家人移民到美国,先是在肯塔基州的一所寄宿学校就读,后来又在俄勒冈州立大学获得电子工程学位,并在斯坦福大学攻读了硕士学位。在那个年代,台湾移民背景在硅谷并不常见,黄仁勋身上兼具东方的内敛沉稳和西方教育培养出的进取精神。他说话时语速不快,但每一个字都经过深思熟虑,给人一种可靠而坚定的感觉。他的职业经历让他对整个计算机系统的架构有了全面的理解,从底层的芯片设计到上层的软件应用,他都有涉猎。
这天晚上,三人已经在这里坐了将近四个小时。餐厅的服务员换了一班又一班,邻桌的客人来了又走,只有他们这一角始终保持着同样的热忱和专注。话题从最初的寒暄,渐渐深入到对整个行业未来的畅想,最后凝聚成了一个具体而大胆的想法——创办一家专门制造图形处理芯片的公司。
这个想法听起来近乎疯狂。让我们把时间倒回到1993年,来看看他们所处的究竟是一个怎样的时代。
1993年的计算机行业,正在经历一场深刻的变革。个人电脑革命已经全面爆发,但距离普通人家里真正拥有一台电脑还有相当长的路要走。那一年,全球个人电脑的出货量约为4000万台,听起来是个庞大的数字,但考虑到当时全球五十亿的人口基数,电脑的普及率仍然相当有限。在美国,虽然IBM PC已经成为商业办公的标准配置,但大多数家庭仍然认为电脑是一种昂贵且用途不明的高端设备。康柏、戴尔、Gateway这些公司正在快速崛起,它们通过直销模式大幅降低了电脑的售价,让越来越多的普通消费者开始接触到这种神奇的机器。
然而,真正推动电脑进入千家万户的,并不是那些主要用于办公 spreadsheet 和文字处理的商务电脑,而是游戏。1993年,一款名为《DOOM》的游戏横空出世,彻底改变了玩家对电脑游戏的认知。在此之前,电脑游戏虽然已经存在多年,但大多数作品都是二维的、简陋的,无论是画面质量还是游戏体验,都与街机游戏相去甚远。id Software公司推出的这款《DOOM》,第一次让玩家在个人电脑上体验到了真正的三维游戏世界。血腥的搏杀、阴暗的走廊、怪物从四面八方涌来的恐惧感——这一切都以前所未有的真实感呈现在屏幕上。游戏发布后迅速风靡全球,成为有史以来最畅销的电脑游戏之一,也彻底点燃了玩家对三维游戏的热情。
但问题也随之而来。运行《DOOM》这样的三维游戏,对电脑的硬件性能提出了极高的要求。游戏需要每秒渲染数十帧的三维画面,而当时主流的个人电脑根本无法胜任这一任务。它们配备的显卡——如果还能称之为显卡的话——最初只是为了在屏幕上显示文字和简单的二维图形而设计的。这些显卡的工作原理相当简单:它们接收来自CPU的指令,将像素颜色数据写入显存,然后按照固定频率将这些数据传输到显示器。整个过程中,显卡几乎不需要任何计算能力,它只是一个数据的搬运工。
最早的PC显卡甚至连图形处理功能都没有。1981年IBM推出的第一台个人电脑IBM PC,配备的是一种叫做单色显示适配器(MDA)的显示卡。顾名思义,这种显卡只能显示单色文字——通常是黑底绿字或者黑底白字。它没有图形模式,无法显示任何图像。MDA的分辨率是720×350像素,可以显示25行×80列的文字,这足以满足当时DOS操作系统和大多数商业程序的需求。但对于任何想要显示图像的应用来说,MDA都无能为力。
到了1980年代中期,随着微软Windows操作系统的出现,情况开始发生变化。Windows的核心设计理念就是图形用户界面,这意味着电脑需要频繁地绘制各种窗口、按钮、图标和菜单。传统的MDA显卡根本无法满足这种需求,一种叫做彩色图形适配器(CGA)的显示标准应运而生。CGA支持四种颜色,分辨率最高可以达到640×200像素,虽然在今天看来粗糙得可怜,但在当时已经算是相当不错的进步了。
1987年,IBM又推出了视频图形阵列(VGA)标准,这是PC图形史上的一个重要里程碑。VGA支持256种颜色,分辨率可以达到640×480像素——这个分辨率在接下来的二十年里一直是PC显示的标准配置。VGA的成功是如此深远,以至于直到今天,我们仍然会在显卡设置中看到" VGA模式"这个选项。VGA之后,IBM又尝试推出了8514图形标准和XGA标准,试图进一步提升显示质量,但都没有获得像VGA那样的广泛采用。
与此同时,一群第三方显卡厂商正在悄然崛起,它们填补了IBM留下的空白,并为用户提供了比标准VGA更好的性能。这些厂商中包括S3 Graphics、Trident Microsystems、Cirrus Logic等公司。它们的产品通常被称为"Super VGA"或SVGA显卡,支持更高的分辨率和更多的颜色。虽然这些显卡在技术上比标准VGA有所进步,但它们的基本架构并没有本质区别——它们仍然是2D显卡,设计初衷是为了加速Windows的图形界面操作,而非处理复杂的三维计算。
这就为黄仁勋他们的想法提供了巨大的市场机会。三维图形处理是一个完全不同的领域,它需要全新的芯片架构。在二维图形处理中,显卡的主要工作是将预先准备好的像素数据复制到屏幕上。这个过程虽然看起来简单,但当分辨率提高、颜色深度增加时,数据量会呈爆炸式增长。一张1920×1080分辨率、32位颜色的图片需要超过8MB的显存来存储,而要在每秒60帧的刷新率下实时显示这样的画面,需要的带宽是惊人的。2D显卡通过在硬件层面实现这种数据传输的加速,大大减轻了CPU的负担,让Windows的界面操作变得流畅。
但三维图形处理要复杂得多。2D图像可以看作是三维场景在二维平面上的投影,只不过这个投影是由艺术家手工绘制的。对于电脑来说,它必须从零开始,根据虚拟的三维场景模型,通过复杂的数学计算,推导出每一帧的二维画面。这个过程通常被分为几个主要步骤:顶点处理、图元装配、光栅化、片段处理和输出合并。每一步都涉及大量的数学运算,特别是三角函数和矩阵运算。
让我们更详细地看看这个过程。首先,在顶点处理阶段,系统需要处理场景中每一个三维物体的顶点数据。每个顶点都有自己的位置坐标(x、y、z)以及法线向量、纹理坐标等属性。为了将三维坐标转换为可以在屏幕上显示的二维坐标,系统需要进行一系列复杂的坐标变换。这些变换包括模型变换(将物体从自身坐标系转换到世界坐标系)、视图变换(将场景调整到摄像机视角)、投影变换(将三维场景投影到二维平面)以及视口变换(将投影后的坐标映射到屏幕像素位置)。所有这些变换都可以用矩阵乘法来表示。以视图变换为例,一个顶点的世界坐标P与世界到视图的变换矩阵M相乘,就能得到该顶点在视图空间中的坐标P' = MP。这个过程需要对场景中的每一个顶点重复执行。
然后是图元装配阶段。在三维图形渲染中,最基本的图元是三角形,因为三角形是能够定义一个平面的最小多边形,同时也是进行光栅化最方便的几何形状。在这个阶段,之前处理过的顶点会被组装成一个个三角形。系统还需要进行背面剔除操作——在大多数情况下,我们不需要渲染那些背对着摄像机的三角形表面,因为它们会被前面的几何体遮挡。通过简单的向量运算,系统可以判断每个三角形的朝向,丢弃那些不会出现在最终画面中的三角形。
接下来是光栅化阶段。这个阶段的任务是将几何图元转换为像素(片段)。对于每个三角形,系统需要确定它覆盖了屏幕上的哪些像素。对于每个被覆盖的像素,系统还需要计算出该像素在三角形内部的重心坐标、纹理坐标插值等数据。这些计算涉及大量的浮点运算,在1990年代初的CPU上执行这些运算是一项极其耗时的任务。
光栅化之后是片段处理阶段,这是三维渲染中最复杂的部分之一。在这个阶段,系统需要为每个像素确定最终的颜色。这涉及到纹理映射、光照计算、雾化效果等多种复杂的视觉效果。以纹理映射为例,纹理可以看作是贴在三维物体表面的二维图像。当我们看一面砖墙时,砖块的纹理让我们能够分辨出那是一面墙而不是一面纯色的平面。在片段处理阶段,系统需要根据之前计算出的纹理坐标,从纹理贴图中获取相应的颜色样本。这个过程需要频繁的内存访问操作。
最后是输出合并阶段。在这个阶段,系统需要处理像素之间的遮挡关系,即所谓的深度测试。每个像素都有一个深度值,表示该点距离摄像机的远近。当两个像素在屏幕上占据相同位置时(这在三维场景中很常见),系统需要比较它们的深度值,只保留距离最近的像素。其他可能影响最终颜色的因素还包括透明度混合、模板测试等。
整个三维渲染管线的数学基础是线性代数和解析几何。坐标变换用矩阵来表示,旋转、缩放、平移都可以用特定的矩阵来实现。例如,一个绕Z轴旋转θ角的变换矩阵是:$$R_z(\theta) = \begin{pmatrix} \cos\theta & -\sin\theta & 0 & 0 \\ \sin\theta & \cos\theta & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \end{pmatrix}$$。透视投影则用一个不同的矩阵来实现,它能够产生近大远小的视觉效果。
对于1990年代初的个人电脑来说,执行这些运算完全超出了CPU的能力范围。那时的CPU,如Intel的80486或者早期的Pentium,虽然在整数运算方面已经有了不错的性能,但它们的浮点运算能力相当有限。以80486为例,它虽然内置了浮点单元(FPU),但其设计初衷是为了加速科学计算中的浮点运算,而非专门为三维图形处理优化。在处理三维渲染管线时,CPU需要逐个顶点和逐个像素地进行计算,完全无法利用并行性。这种串行处理方式严重限制了三维图形的渲染速度。
举个例子。假设一个简单的三维场景包含一万个三角形,每个三角形需要处理三个顶点,加上光栅化后的片段处理。假设每个顶点需要100次浮点运算,每个片段需要50次浮点运算,那么整个场景需要处理30000个顶点(每个三角形3个顶点)和数十万个片段。仅顶点的浮点运算就达到300万次,再加上片段处理,总运算量轻松超过一亿次。以当时486 CPU的处理能力,这可能需要几十秒甚至更长时间才能完成一帧的计算。而要达到流畅的动画效果,至少需要每秒30帧的渲染速度,这对CPU来说简直是不可能完成的任务。
这正是专用图形芯片存在的意义。与通用CPU不同,图形芯片专门为三维渲染设计,可以高度并行地执行这些计算。现代图形处理器拥有数百甚至数千个小型处理单元,可以同时处理多个顶点和像素。这种并行架构使得它们在三维图形渲染方面的效率远超通用CPU。举例来说,一个现代GPU可能拥有2560个着色器核心,它们可以同时并行处理大量的顶点和片段数据。这种并行性正是三维渲染管线所需要的,因为管线的各个阶段通常可以独立处理不同的几何元素。
在1990年代初,这种专用的三维图形芯片几乎不存在。当然,市场上确实有一些所谓的"3D加速卡",比如那些配合游戏主机使用的芯片。1993年,专注于游戏机的世嘉公司推出了配备Real3D芯片的VR-32街机系统;日本电气推出的PC-FX游戏机也配备了专门的3D图形芯片;3DO公司则采用了集成化的设计。这些解决方案虽然性能有限,但已经证明了专用3D硬件的价值。
然而,在个人电脑领域,3D图形加速还是一片空白。那些传统的2D显卡厂商,如S3、Trident和Cirrus Logic,似乎满足于在2D市场上竞争,对3D技术缺乏重视和投入。它们的产品线完全基于2D图形处理架构,根本无法直接用于三维计算。如果想要在PC上体验3D游戏,用户只能依赖CPU的纯软件渲染,其效果和性能都相当糟糕。
这种局面催生了另一类公司的诞生——专业3D加速卡厂商。1994年,3dfx Interactive推出了Voodoo显卡,这是第一款真正意义上的消费级3D加速卡。Voodoo的出现彻底改变了PC游戏的面貌,它能够以当时令人惊叹的速度渲染出带有纹理映射和过滤效果的三维场景。同期,S3和Trident等公司也推出了自己的3D解决方案,但它们的性能和Voodoo相比还有明显差距。3dfx凭借Voodoo显卡迅速成为PC 3D图形领域的领导者,开创了一个全新的行业。
黄仁勋、克里斯和柯蒂斯在丹尼餐厅里畅想的,正是这样一个充满机遇的市场。他们预见到,随着个人电脑性能的提升和游戏产业的发展,对3D图形处理的需求将会爆发式增长。但当时的CPU还无法承担3D渲染的重任,而传统显卡厂商又缺乏进入3D领域的技术能力和战略意愿。这为一家专注于3D图形芯片的新公司提供了完美的机会窗口。
他们三人恰好拥有填补这一空白的互补技能组合。黄仁勋在AMD和LSI Logic的工作经历让他深入了解了芯片设计和制造的全过程,从晶体管级电路设计到芯片制造工艺,从前端RTL设计到后端布局布线,他都有实际经验。同时,他还在软件领域有所涉猎,对驱动程序开发和系统集成有一定了解。克里斯则在太阳微系统公司积累了丰富的图形学专业知识,他的研究涵盖了从基础算法到实际应用的方方面面。他对渲染管线、几何变换、着色模型等核心概念的理解非常深入。柯蒂斯在半导体设计方面的专长让他能够从硬件架构层面优化芯片性能,他对芯片设计工具和设计方法学都有深入研究。
三人组合的另一个优势是他们的背景互补。黄仁勋来自AMD和LSI Logic,这两家公司分别在CPU和存储芯片领域有深厚积累,这让他对整个半导体行业有了全面的认识。克里斯来自太阳微系统公司,这是一家以工作站和服务器闻名的公司,他对高性能计算和图形学有着独到的理解。柯蒂斯则代表了更为纯粹的半导体设计背景,他的专长在于芯片架构和物理实现。
但他们面临的风险同样显而易见。1993年的芯片创业环境与今天截然不同。创办一家芯片公司需要巨额资金——光是芯片的设计和制造费用就可能高达数百万甚至数千万美元。与软件创业不同,芯片创业无法快速迭代,每一次设计错误都可能导致数月的返工和巨额的经济损失。此外,芯片从设计到最终产品需要经历漫长的周期,通常需要一到两年甚至更长时间。在这段时间里,市场可能发生翻天覆地的变化。
更关键的问题是,他们将要进入的是一个巨头林立的领域。英特尔和AMD在CPU市场占据主导地位,IBM、康柏、惠普等巨头控制着PC整机市场。在显卡领域,S3和Trident等公司虽然称不上巨头,但也有一定的市场份额和资金实力。一家只有三个人的小公司,想要在这些庞然大物面前站稳脚跟,谈何容易?
但他们也看到了巨头们的弱点。那些在2D显卡市场占据主导地位的公司,如S3和Trident,对3D图形技术的重视程度远远不够。它们安于在2D市场上赚取利润,缺乏向3D领域拓展的动力和决心。它们的工程师团队在2D图形处理方面可能是专家,但在3D渲染、几何处理等核心技术方面可能并没有太多积累。它们的组织架构和企业文化也可能无法适应新技术开发的需求。
对于英特尔和AMD这样的CPU厂商来说,图形芯片虽然有趣,但并不是它们的核心业务。它们的主要精力仍然集中在CPU的设计和优化上。虽然它们可能会在CPU中加入一些简单的图形处理功能,但不太可能投入大量资源开发专门的高性能3D图形芯片。这种"船大难掉头"的问题,为专注的初创公司提供了生存和发展的空间。
三人在丹尼餐厅里讨论的另一个重要话题是商业模式。芯片公司的商业模式与软件公司有本质区别。软件公司可以快速开发、快速迭代、快速调整方向;芯片公司则必须在投入生产之前就确定设计方案,之后很难进行实质性修改。芯片公司还需要与芯片制造厂(晶圆厂)建立合作关系,这通常需要承诺大量的订单和长期的承诺。对于初创公司来说,这种商业模式的资本密集度非常高。
他们考虑了两种主要的商业模式选择。第一种是成为无晶圆厂(Fabless)芯片设计公司,专注于芯片设计,而将芯片制造外包给专业的晶圆代工厂,比如台积电。这种模式的优势是资本投入相对较低,不需要建设自己的芯片制造工厂;风险是可能面临产能不足或者制造成本上升的问题。另一种选择是自己建立晶圆厂,进行垂直整合。这种模式的优势是能够完全控制芯片制造的各个环节,保证产品质量和产能;但劣势是需要巨额的资金投入,对于初创公司来说几乎是不可能承受的负担。
最终,他们选择了无晶圆厂模式。这一选择既有现实因素的考虑,也体现了他们对行业趋势的准确判断。在1990年代初,无晶圆厂模式在硅谷还是一种相对较新的商业模式,大多数芯片公司仍然坚持自建晶圆厂的垂直整合模式。但黄仁勋他们敏锐地意识到,随着半导体制造工艺的复杂度不断提升,维护一条先进的晶圆生产线所需的资金和技术实力将超出大多数公司的承受范围。专业化分工将成为行业发展的趋势。
他们选择台积电作为合作伙伴并非偶然。1987年张忠谋创立台积电时,大多数人并不看好纯代工的商业模式。但到了1993年,台积电已经证明了自己的价值——它为准无晶圆厂芯片公司提供了可靠的制造服务,让它们能够专注于芯片设计,而不必为制造工艺操心。选择台积电还