英偉達的建立

1983年,黃仁勳大學畢業後,20歲便加入了AMD公司擔任芯片工程師。兩年後又加入了另外一家位於硅谷的創新公司巨積公司(LSI Logic)。因爲業績出色,他多次獲得晉升。在巨積公司任職期間,黃仁勳結識了兩位太陽微系統公司的芯片設計師,普里姆和馬拉科夫斯基,並且通過與他們合作促成了太陽微系統公司在1989年推出的Sun GX。Sun GX是三維圖形處理器。以前,一個設計師如果要設計一個汽車模型,最初給出的只是簡單的“線框骨架”,而Sun GX可以在這個框架基礎上,迅速繪製汽車金屬表面、車漆紋理等,幫助設計師預覽模型,並在此基礎上進一步調整外觀或結構。

而那兩位芯片設計師有一個想法,就是把Sun GX移植到個人電腦上。因爲個人電腦有一個特別的應用:遊戲渲染。渲染(Rendering)是遊戲視覺的核心技術。電腦遊戲中的那些精美的動畫,包括日夜交替的光影效果等等都是通過實時渲染來實現的。渲染所需要的計算量很大。當時個人電腦的中央處理器(CPU)無法負擔這樣的計算量,因此常用的做法就是在電腦主板上設置一個特定的插槽,插槽裡插的是專門爲渲染任務外置電路板,上面的核心部件就是一個圖形芯片,來執行渲染的任務。

我們現在都知道,這個電路板被業界稱爲“圖形加速卡”,又叫顯卡。

然而,他們這個提議卻遭到了太陽微系統公司管理層的拒絕。這兩人決心自己動手開發這款面對普通用戶的電子遊戲芯片。然而,兩人知道自己都不擅長管理業務,於是在1992年,他們找到了之前合作過的黃仁勳。經過很長時間的思考,黃仁勳終於說服了自己。1993年,黃仁勳與這兩人一起成立了英偉達公司。黃仁勳擔任CEO,普里姆出任CTO,馬拉科夫斯基則擔任工程副總裁的職位。

在英偉達成立之後,公司迅速開始開發其首款顯卡產品NV1。爲了與市場上其他顯卡產品區分開來,他們在NV1的設計中採用了一種與主流不同的渲染方法。爲了更好地理解NV1的技術特點,我們先簡單介紹一下圖形渲染的基本原理。遊戲設計師需要爲每個遊戲中的對象構建三維模型,但玩家在電腦屏幕上看到的形象是二維的。因此,渲染的核心任務是將三維模型的表面信息投影到二維平面,並計算每個像素點的顏色。這些顏色會綜合考慮光源、材質等複雜因素。

不過,直接計算三維模型表面上每個像素點的渲染信息是非常耗時且複雜的。所以爲降低計算量,行業普遍採用一種高效的分解方法——三角形渲染框架。這個框架的核心思想是將三維模型的表面分解成一個個小的三角形。你可以打開文稿看一下對應的圖。爲什麼使用三角形呢?原因在於三角形是構成平面的最簡單幾何形狀,同時計算機對三角形的處理效率極高,相關優化算法也十分成熟。然後在渲染的時候,依次執行下面幾步。

第一步叫做頂點着色(Vertex Shading):處理三角形的頂點信息,這一步的主要工作是計算3D模型中每個三角形頂點在二維屏幕位置,然後根據光源的位置、類型以及材質的反射特性,計算每個三角形頂點的光照強度和顏色。

第二步叫光柵化(Rasterization)。剛纔只是得到了三角形頂點在二維屏幕的位置和顏色,這一步是根據剛纔的三角形頂點信息,確定三角形內部所有的點在二維屏幕的位置。

第三步叫做像素着色(Pixel shading)。我們找到了一個三角形頂點的位置以及該三角形內部的像素位置,那麼下一步就是要對這些像素進行着色。通常,這一步通過插值算法,根據三角形三個頂點的光照、顏色等信息,計算出來該三角形內部所有像素點顏色和紋理信息,從而生成高質量的二維圖像。這一步是由像素着色器(Pixel Shader)完成的。

剛纔這個過程,你沒記住也沒關係,關鍵在於,我們可以看到,渲染本質上就是大量的數學計算。

然而,普里姆在設計NV1時,並沒有採用基於三角形的渲染框架,而是採用了一種名爲二次紋理映射(Quadratic Texture Mapping)的方法。這個方法通過二次方程直接處理曲面的形狀和紋理,將紋理直接映射到複雜的弧形面上。和三角形的渲染方式相比,二次紋理映射的方法儘管要耗費更多計算資源,但是得到的物體和人物表面看起來更加平滑。

NV1於1995年秋季正式發售,此時,諸多熱門遊戲涌入市場,玩家對新顯卡的需求激增,NV1銷量表現良好,甚至超過了黃仁勳的預期,前景一片光明。然而,問題在NV1發佈後不久逐漸顯現出來。由於NV1採用的二次紋理映射方法和當時主流的基於三角形渲染框架不兼容,導致大多數遊戲開發者無法順利將遊戲適配NV1。不兼容的問題在一些遊戲中表現爲渲染錯誤,比如角色可能會出現穿模現象,像是“陷入人行道”或“穿牆而過”等等。此外,由於圖形驅動程序和操作系統之間的不穩定性,NV1在某些極端情況下甚至會導致系統藍屏死機。這些都極大影響了用戶體驗,導致NV1的銷量逐漸下滑,一些不滿的顧客選擇將顯卡退回商店。

更爲糟糕的是,1995年,微軟發佈了DirectX。一個統一的圖形和多媒體API框架,其中核心組件Direct3D確立了基於三角形渲染的行業標準。由於NV1沒有遵循三角形渲染標準,它無法很好地支持基於DirectX開發的遊戲生態。行業迅速向DirectX標準靠攏,NV1的“不兼容”局面被進一步放大,其市場表現隨之急轉直下。

黃仁勳後來將NV1的失敗稱爲“一場災難”。更糟糕的是,當時英偉達已經基於NV1架構爲下一代顯卡進行開發。然而,這一架構的根本缺陷讓英偉達面臨生死存亡的危機。黃仁勳決定“壯士斷腕”,放棄NV1的架構,直接跳過NV2,轉向完全重新設計支持三角形渲染的NV3。

開發一款新芯片通常需要數年時間,而英偉達幾乎沒有這樣的時間,因爲英偉達的公司賬戶只能支撐運營三個月。面對如此嚴峻的形勢,黃仁勳做出了一個當時異乎尋常的決定:他將最後的資金用於購買一臺芯片仿真器,這是一種可以用軟件模擬硬件行爲的工具。藉助仿真器,黃仁勳計劃跳過昂貴且耗時的多個迭代和原型開發環節,通過仿真測試的數字設計文件直接用於大規模量產,這在當時幾乎是聞所未聞的舉措。

這是一場孤注一擲的賭博,但也是英偉達公司生存的唯一希望。黃仁勳後來坦言,當時自己心裡對NV3到底能不能正常運作這件事也沒底。他說:“成功概率五五開吧,反正我們公司也快破產了。”1997年春末,英偉達的新NV3芯片終於問世。首批芯片被交付進行內部測試。測試表明,NV3芯片運行流暢,圖像質量大幅提升。黃仁勳賭贏了。NV3的正式產品被命名爲Riva 128。Riva 128的表現受到高度評價。這款顯卡每秒能渲染多達500萬個三角形,成爲最強大的3D圖形加速器之一。在發佈後的4個月內,這款顯卡的銷量突破100萬張,直接幫助英偉達渡過了財務危機。

所以,之前的NV1,這款被寄予厚望的產品,原本代表了英偉達對“革命性設計”的追求,但卻因偏離了行業標準而失敗了。然而,NV3,這款在瘋狂趕工中誕生的產品,卻取得了成功。

這給我們的啓發是,不能光從技術的角度來看自己是否領先,而需要同時考慮現有技術和主流兼容性的問題。許多公司,尤其是創業的小公司,如果一味強調自己的“技術領先”,容易忽視與主流兼容的問題,從而重蹈NV1的覆轍。

儘管NV3取得了成功,但是當時包括英偉達在內的所有顯卡公司CEO的頭頂,都懸着一把達摩克利斯之劍,這把劍來自當時的半導體巨頭英特爾。這些CEO揮之不去的擔憂是:隨着英特爾CPU性能的不斷提升,CPU會不會取代自己的顯卡?