顯卡發展史-3D 圖形 API 的發展

在看完 1980、1990 年代錯綜複雜的 2D 圖形發展之後,接下來我們要進入當今顯示適配器主要的用途-3D 立體圖形的世界了。

還沒有 3D 圖形加速卡的時代

首先我要特別強調,本篇所謂的「3D 圖形」指的是「實時運算 3D 物體的外觀並顯示在屏幕上」的意思,並不是指單純的立體圖形 (立體圖形並不是後來才有的東西,差不多早在計算機可以顯示圖形以後不久,就可以在計算機屏幕上見到所謂的 3D 立體圖形了,因為其實靜態的 3D 立體圖形只是角度改變跟上了光影的 2D 圖形罷了)。

所以在還沒有發展出獨立的 3D 圖形加速卡之前,實際上計算機就已經有能力進行 3D 物體外觀的實時運算了 (當時沒有特化的專用芯片,所以是通通丟給 CPU 負責),只是速度慢到人們難以接受的地步而已,更別提要搞出動畫效果或是看起來像影片順暢撥放的等級了。

3D 圖形 API 的發展

在 1980 年以前,基本上要開發一套可以在各種系統之間通用的 2D、3D 圖形程序是非常困難的,因為每臺計算機使用的顯示設備可能都不一樣,每家圖形芯片廠商設計出來的產品具備的特性也各有不同,因此在 1980 年代的軟件工程師得針對各式各樣的計算機撰寫不同的程序代碼版本,這顯然是很浪費精神與體力的一件事情。

還記得前面我們提過在 Windows 3.0 時期,微軟在操作系統中加入了 GDI 這玩意兒嗎?從那之後廠商們只需要針對 GDI 這個 API 接口進行優化,並撰寫驅動程序給操作系統用來負責硬件與 GDI 層之間的通訊即可,這讓顯示適配器的通用性與開發難度都獲得了相當程度的改善。

而在 3D 圖形的世界裡人們也做了類似的事情,從早期的各自為政開始逐步發展為幾套大家共同使用的 3D 圖形 API,在開始介紹 3D 圖形之前我想先談談這些當今或歷史上曾經扮演重要角色的 API (不過我在這邊只先談發展緣起,各版本的功能在之後介紹顯示適配器時才會點到)。

早期的 3D 圖形 API-PHIGS 與 IRIS GL

在 1990 年代初期,實時 3D 圖形演算基本上還沒有進入個人計算機領域,而當時在工作站與服務器的世界裡最主要使用的 3D 圖形 API 有 PHIGS 與 IRIS GL 兩種。

IRIS GL

顯卡發展史-3D 圖形 API 的發展

IRIS GL 由當時業界的領導者 Silicon Graphics, Inc. (SGI,是一家成立於 1981 年的公司,以設計繪圖工作站與專業繪圖領域芯片聞名,後於 2009 年申請破產保護並被一家叫做 Rackable Systems 的公司所併吞) 所提出,全稱為 Integrated Raster Imaging System Graphics Library,是一款私有的 (封閉原始碼) 2D/3D 圖形 API,主要用於 SGI 自家的 IRIS 繪圖工作站上 (基於 MIPS 架構,使用 SGI 自家發展的 IRIX 操作系統)。

PHIGS

而全稱為 Programmer's Hierarchical Interactive Graphics System 的 PHIGS 則是 IRIS GL 最主要的競爭對手,這款 API 最大的特色是 PHIGS 是一款開放的 API 標準因此獲得不少大廠的支持 (特別是 SGI 的競爭對手),許多知名科技大廠都有推出自家產品適用的 PHIGS 版本,例如 IBM 的 graPHIGS、Sun 的 SunPHIGS 等。

顯卡發展史-3D 圖形 API 的發展

這兩款 API 在 1995 年以前互有競爭,而 PHIGS 更是在 1997 年正式成為了國際 ISO 標準 (ISO/IEC 9592;1997),但 PHIGS 最終因為不支持立即模式 (Immediate Mode,指工作站接收到繪圖指令後就立即使用幾何圖形產生器繪製出物體圖形的能力) 與使用上比起 IRIS GL 來說困難、複雜許多 (我想從英文全名上就看得出這點了 XD),因此在接下來的發展中漸漸沒落。

跨平臺的代表-OpenGL

顯卡發展史-3D 圖形 API 的發展

OpenGL 最早發佈於 1992 年 01 月 (距離個人計算機進入 3D 圖形加速時代還有好幾年的時間),一開始是由 SGI 發展,主要是當時 SGI 將自家的 IRIS GL 簡化與整理後的產物,因此 OpenGL 早期的版本與 IRIS GL 有著頗高的相似度。

OpenGL 與 IRIS GL 初期主要的差異是將 IRIS GL 內與 3D 圖形較無關聯或牽涉到授權協議的部分移除 (例如鍵盤、鼠標與窗口 API 等) 並改為開放標準,並且在文件的完善程度與標準化、一致性上比起 IRIS GL 來說有了大幅度的改進,這些因素加上 PHIGS 先天的一些弱點與使用上的困難,使得 OpenGL 得以在之後徹底擊敗 PHIGS,成為 3D 圖形中主流的 API 之一,至於原有的 IRIS GL 則轉型成為工業標準且維持私有授權的 OpenGL 特殊用途版本。

時至今日,OpenGL 仍然幾乎可以說是唯一能夠橫跨各大平臺的實時 3D 圖形標準,用於嵌入式裝置的特殊版本 OpenGL-ES 更是廣泛地受到手機等行動裝置的支持。

Windows 限定-DirectX

顯卡發展史-3D 圖形 API 的發展

有在玩遊戲的人應該對 DirectX 這個名詞不陌生吧?DirectX 是微軟在 1995 年為了提高開發者針對 Windows 9x 平臺製作多媒體程序的意願 (因為在 Windows 底下直接命令硬件做事不如在 DOS 底下容易) 而設計的「一大票」API 的總稱,從 Windows 95 OSR2 開始內建至系統中,成為重要系統組件之一。

DirectX 的全稱是 Direct eXtensions,顧名思義是用來向開發者提供讓它們得以直接透過程序對硬件下達指令,讓開發難度合理地降低並解決在 Windows 3.1 時代使用 WinG API 時多媒體程序效率不彰且不穩定的問題,並取代 Windows 3.x 下僅有存取畫面緩衝區 (Frame Buffer) 功能的 DCI (Display Control Interface)。

DirectX 在 2006 年以前主要由下面這些組件組成:

· Direct3D用於 3D 圖形實時繪圖,接下來我們主要討論的重點大多在這裡。

· DirectDraw用於 2D 圖形實時繪圖。

· DirectSound用於播放與錄製音訊,與聲卡比較有關。

· DirectInput用於處理鍵盤、鼠標或遊戲杆等輸入設備的接口。

· DirectPlay用於提供局域網絡或因特網間的通訊服務。

· DirectMusic建立在 DirectSound 的基礎上,主要用於方便使用硬件加速功能撥放與製作一些音效效果。

顯卡發展史-3D 圖形 API 的發展

早期的 DirectX 在推廣上並沒有很順利,某種程度上是因為當時的開發者們擔心 DirectX 最後會不會如同 WinG 一樣被微軟快速地放棄,因此即便 Direct3D 早在 DirectX 2.0 中就已經出現,但採用的軟件其實並不多,主要還是以 OpenGL 為主,DirectX 真正要被開發者接受要等到 1997 年的 DirectX 3.0 (下圖就是以 DirectX 3.0 製作的遊戲)。

顯卡發展史-3D 圖形 API 的發展

當時微軟內部的定位是將 OpenGL 視為專業高性能、高畫質工作站的圖形運算解決方案 (僅內建於 Windows NT,但 Windows 95 可以透過安裝套件補上),DirectX 的目標市場則是較為輕量化、主要用於消費性市場的解決方案 (主要由 Windows 95 部門推行,但 Windows NT 也支持),一方面也確實由於 DirectX 的多媒體功能較豐富,但 OpenGL 的繪圖演算功能較強,彼此各有長處因此 DirectX 與 OpenGL 之間的競爭還不算太激烈。

而隨著 OpenGL 逐步補強自己在多媒體功能方面的不足,DirectX 也將自己的繪圖演算功能不斷強化,兩者之間的競爭難免逐漸浮上臺面,但這次微軟一反常態的並未利用在 Windows 的市佔率來讓開發者轉向 DirectX,反而是選擇對 OpenGL 提供支持,這讓開發者得以同時混用兩大陣營的 API,例如使用 OpenGL 進行圖形渲染卻搭配 DirectInput 來處理遊戲杆輸入的部分。

至於具備 DirectX 硬件加速能力的圖形加速卡則主要是從 1997 年的 DirectX 5.0 開始大量出現的 (DirectX 4.0 與 5.0 同時間開始開發,但由於 DirectX 4.0 的改進內容有限因此沒有太多廠商感興趣,最終被微軟直接跳過),而第一批圖形加速卡大多不支持 OpenGL,主要原因就是前面提過的定位問題。

至今 DirectX 仍然是 Windows 系統的重要核心組件之一,不過架構設計與內容和早期版本已有相當大程度的不同。

如煙火般燦爛卻轉瞬即逝-Glide

顯卡發展史-3D 圖形 API 的發展

雖然還沒有正式介紹這間在個人計算機 3D 圖形加速發展過程中數一數二重要的公司-3dfx,但既然談到 API 就不得不把 Glide 這款曾經在數年之內成為圖形 API 界的王者,之後又在很短的時間之內被 DirectX 與 OpenGL 打得一敗塗地的 Glide API。

Glide API 與 OpenGL 有一定程度的相似,某種程度上可以視為 OpenGL 的簡化版本 (也就是將 OpenGL 比較少用的功能拿掉),因此除了輕量化得以很快速的設計出適用的圖形加速芯片之外,還保有著 OpenGL 易於使用的特性,由於 1990 年代後半 3dfx 推出的 Voodoo 系列成為了當時 3D 圖形加速器界的龍頭,因此其內建支持的 Glide API 也自然而然得到了廣泛的運用。

至於造成 Glide API 在目前已經徹底銷聲匿跡的主要原因是當時 3dfx 選擇將 Glide 保有為旗下的私有標準,禁止任何廠商以模仿或模擬的方式提供 Glide API,並且高度依賴 3dfx 自家的 Voodoo 系列芯片設計而難以移植,再加上 3dfx 在軟件改進方面始終著墨甚少,Glide API 進入 3.0 之後幾乎就沒有任何改進,最終在功能上也被 DirectX 與 OpenGL 遠遠甩在後頭。

在這些因素的結合之下,從 1998 年開始 Glide API 的熱潮就迅速衰退,而 1999 年 (也就是 3dfx 被 NVIDIA 收購前一年) 更沒有任何純粹使用 Glide API 的遊戲推出,即便在同年 3dfx 宣佈開放 Glide API 也未能扭轉任何情勢,在被親近 Direct3D 陣營的 NVIDIA 收購之後,Glide API 的發展也正式結束。

從 2D 圖形加速到 3D 圖形加速

「把 3D 圖形運算丟給 CPU 做,2D 圖形運算給專門的圖形加速卡做」,這句話從我們現在的眼光看起來應該是蠻奇怪的吧?照理說 3D 圖形運算的數據量應該比起 2D 來說成長了無數倍才是。

不過其實廠商們並不是「不想做 3D 圖形加速卡」,而是還沒有能力做或正常人還買不起。 (1980 年代以前的 3D 圖形加速卡基本上只有服務器或工作站會用,價格極為高昂,地位跟今天的 Xeon Phi、Tesla 差不多),不過科技的發展並不會因為這樣而停下腳步。

那些 2D 當 3D 用的顯示適配器們

在 1990 年代上半人們開始漸漸對個人計算機 3D 圖形有比較明顯的需求時,廠商們 (包含 ATI、Trident、S3 Graphics) 一開始想到的方式是將現有的 2D 圖形加速卡延伸,讓它們能夠具備部分 3D 圖形加速卡的能力 (通常是先朝著影片硬件譯碼能力的方向前進),不過這樣的作法造成的結果相當明確-這類產品的效能幾乎都差到只足以被稱之為「笑能」,也因為這樣許多在 2D 時代叱吒風雲的廠商在進入 3D 時代時都踢到了鐵板,甚至一厥不振的例子也不少。

Trident Microsystems, Inc.

顯卡發展史-3D 圖形 API 的發展

由於這個時期裡 Trident (泰鼎微系統) 的歷史已經差不多走到尾聲了,所以我就先把它提出來講吧,在進入 3D 時代的時候 (1995 年附近),Trident 已經被 S3 Graphics 的步步進逼搞到幾乎已經失去作為一家顯示芯片主流廠商的地位,雖然變得很「邊緣」,但一直都沒有真正在市場上完全消失,所以接下來要看的可以說是 Trident 在退出主流之後一連串試圖救亡圖存過程的奮鬥史。

3DImage 9750、9850

發佈時間:1997 年

這是大多數人認知上第一款由 Trident 推出的 3D 圖形加速芯片,不過在開始看這款產品之前,我想先談談 Trident 在發展 3D 圖形技術的過程。

顯卡發展史-3D 圖形 API 的發展

其實 3DImage 9750/9850 並不是 Trident 第一次推出 3D 圖形加速芯片,早在 1995 年 Trident 就曾經推出這類產品,型號則是 T3D2000,據說可以支持高達 16 MB 的 WRAM 與 64-bit 3D 圖形運算能力與 OpenGL,從規格上看起來在當時可是一款相當有希望讓 Trident 重返榮耀的產品,不過不知怎麼回事現在能找到的資料就只有 Trident 當時發的新聞稿 (而且還是在澳洲的國家圖書館網站找到的),完全沒有任何實體圖與紀錄可考,似乎是完全沒被任何顯示適配器廠商採用的樣子 (不曉得是不是因為大家對 Trident 的刻板印象就是低階產品的緣故?)。

而在 T3D2000 之後 Trident 還以其為基礎發展了後續的 T3D9692 與 ProVidia 9695,使用較低價的 EDO 內存,每秒可以運算產出超過五十萬個三角形,不過與 T3D2000 一樣,除了發佈新聞稿以外找不到任何數據,讓我真的有點懷疑這些東西是不是真的存在過。

回到 3DImage 9750/9850 本身,這款芯片其實沒有太多值得大書特書的地方,本質上它仍然只是一款 2D 圖形加速芯片,與前面提過的那三款「傳說中」的 Trident 產品幾乎沒有任何血緣關係,反而比較接近上代的 2D 圖形加速卡-TGUI9680 (前者與後者的主要差異為前者有 PCI 與 AGP 版本,後者有 AGP2X 版本且速度較快)。

值得注意的是,3DImage 9750/9850 並不支持任何 OpenGL 特性,在 DirectX 5.0 方面的支持度也不算完整,在影片解碼方面則可以處理 MPEG-1、MPEG-2、Indeo、Cinepak 四種格式,整體來說 3DImage 9750/9850 的 3D 圖形功能連堪用等級都達不到,

在使用過程中會持續有相當明顯的破圖現象出現,下面這段影片是以 3DImage 9750 執行當時的顯示適配器效能測試軟件的紀錄:

如果你拿 3DImage 9750 來玩遊戲的話,畫面則會是這樣的:

至於較高階的 3DImage 9850 得到的評價似乎比 3DImage 9750 還要來得好「一些」,舉例來說大概有這幾種說法:

· 「至少畫面是從頭到尾都這麼爛而不是一直閃爍了,在 3DImage 9750 上閃到我眼睛都快瞎掉了」

· 「比起畫面的流暢度,對於這系列來說畫出來的圖正不正確才是我們真正關心問題」

· 「畫面看起來穩定些了,但跳動的多邊形與破圖問題仍然清晰可見」

不過 3DImage 系列也不是那麼一無是處,由於它們確實很便宜,因此在市場上被分為高階且昂貴的 AGP 3D 圖形加速卡與價格仍然偏高卻已經是上代產品的 PCI 2D 顯示適配器 (主要由 ATI、Tseng Labs 等提供) 兩大塊時,3DImage 系列作為當時唯一可以壓在 100 美元以下的 AGP 「2D」 顯示適配器來說確實殺出了一條血路,讓 Trident 得以繼續活著度過這個時期。

嗯?「2D 顯示適配器」?筆者我可沒打錯字,當時的部分媒體真的就這樣直接無視掉這款產品別腳的 3D 圖形功能了,當年 Anandtech 給的評語是這樣的:So you've bought this expensive AGP motherboard, but

you don't really NEED any 3D acceleration…at the same time you don't want to be confined to a piece of shhh…PCI video card, what are you to do? Trident may have the answer.

基本上可以說是 PCI 接口的大廠 2D 顯示適配器降價太慢救了 Trident 一命,接下來的 1998 年之中,Trident 沒有推出任何產品,靜靜地準備下次試圖用於絕地反攻的武器-真正的 3D 圖形加速卡 Blade 3D 系列。

ATI Technologies, Inc.

顯卡發展史-3D 圖形 API 的發展

接下來我想談的是以後幾乎在每篇當中都能佔有篇幅的 ATI,在收購 Tseng Labs 之前 ATI 就已經進入個人計算機 3D 實時繪圖的領域了,最早的相關產品可以追溯至 1995 年,與 Trident 不同,ATI 還是老樣子走比較高價位、高等級的路線,因此 Trident 與 ATI 之間的競爭關係不算。

ATI 3D Rage (Mach64 GT)

發佈年代:1995 年 11 月理論像素填充率:40 MPixel/s理論材質填充率:40 MTexel/sAPI 支持等級:Direct3D 5.0 (「非常」不完整)、OpenGL 1.0 (僅軟件、2D)

顯卡發展史-3D 圖形 API 的發展

第一代 3D Rage 是 ATI 旗下第一款可以支持部分 3D 圖形加速功能的產品,如同 Trident 一般 ATI 也選擇了以原有的 2D 圖形加速芯片作為基礎來延伸出自家的第一款 3D 圖形加速芯片,3D Rage 的核心基本上就只是改進版本的 Mach64 (稱為 Mach64 GT),使用此款芯片的首款顯示適配器以 ATI 3D Xpression 為名發售,最高提供 2 MB 的 EDO 顯示內存。

顯卡發展史-3D 圖形 API 的發展

從前面的敘述我們可以知道,3D Rage 本質上其實根本就依然只是一張 2D 圖形加速卡,不過當時 ATI 在宣傳的時候是特別強調了這款芯片的 3D 處理能力足以「遠遠將對手甩在後頭」,但實際上並無法完整支持 Direct3D API (某種程度上與微軟後來將新版 DirectX 延期並納入許多額外的改變有關),因此 3D Rage 的兼容性表現可說是相當地差勁,許多當時推出的新遊戲都無法在 3D Rage 上獲得充分發揮 (即便 ATI 在那些後來納入的功能以外的部分都做得還不錯),種種缺點迭加以後幾乎可說是與 2D 圖形加速卡沒兩樣了,這也造成了初代 3D Rage 的市場表現並不成功。

ATI 3D Rage II (Mach64 GT-B)

發佈年代:1996 年 09 月理論像素填充率:60 MPixel/s理論材質填充率:60 MTexel/sAPI 支持等級:Direct3D 5.0 (不完整)、OpenGL 1.0 (僅軟件、2D)

顯卡發展史-3D 圖形 API 的發展

由於 ATI 自己也很清楚 3D Rage 有著難以解決且無法忽視的兼容性問題,因此在來年 ATI 就推出了第二代的 3D Rage II,同樣是以 Mach64 為基礎,但經過大幅度的修改與重新設計及運作頻率拉高 1.5 倍,在像素與材質的理論填充率上都是上代的 1.5 倍,顯示內存容量最高可以高達 8 MB 的 SDR SDRAM,帶寬也從原本的 0.32 GB/s 翻倍為 0.664 GB/s,整體下來 3D 圖形的性能幾乎翻了一倍,是相當明顯的提升。

更重要的是在 3D Rage II 上 ATI 針對驅動程序能夠調控的部分與支持的 API 進行了補強 (特別是補上了上代產品缺乏的硬件深度緩衝區 Z-buffer),因此在 3D Rage II 上使用 Direct3D 等 API 已經沒有太大的問題,也能透過第三方驅動程序來搭配 OpenGL 使用,並納入了對 MPEG-2 影片硬件譯碼的支持。

顯卡發展史-3D 圖形 API 的發展

之後 ATI 又針對 3D Rage II 陸續推出了 II+、II+DVD 與 IIc 等衍伸改進版本,在三角形生成能力上有了一些幅度不小的改進,但在材質對應效率不高與深度緩衝區的改進方面則沒有太大長進,要留待下一代 Rage Pro 才有比較大的改變,因此也有不少人認為 Rage Pro 才是 ATI 第一張真正的 3D 圖形加速卡。

S3 Graphics

顯卡發展史-3D 圖形 API 的發展

接下來本篇要談的最後一個廠商是在 1990 年代後半扮演個人計算機 2D 圖形世界霸主角色的 S3 Graphics,在過去幾年內有著爆炸性成長的 S3 Graphics 在進入 3D 時代時踢到了一塊非常大的鐵板。

S3 ViRGE

發佈年代:1996 年 07 月API 支持等級:Direct3D 5.0、OpenGL 1.0 (僅軟件)

顯卡發展史-3D 圖形 API 的發展

OLYMPUS DIGITAL CAMERA

ViRGE (Video and Rendering Graphics Engine) 是 S3 第一款同時可以作為 2D 與 3D 圖形加速芯片的產品,而 S3 也採用了類似 ATI 與 Trident 的作法,也就是使用現有的 2D 圖形加速芯片進行延伸以尋求快速發展新的 3D 圖形加速器,因此 ViRGE 是使用 S3 Graphics 旗下最具盛名的 Trio64V+ 改進而來。

在 ViRGE 上,S3 Graphics 使用了與 ATI 與 Trident 相似的作法,而最終 S3 Graphics 也嚐到了差不多的結果,那就是這張卡實際上根本只有 2D 圖形加速卡的功能,3D 圖形的部分根本就不堪用 (不過 S3 Graphics 的狀況應該是這三家公司之中最好的,因為 ViRGE 的 3D 圖形演算慢歸慢但不至於都是破圖與錯誤,也沒有發生重大的兼容性問題,再加上 S3 Graphics 在 2D 圖形方面的實力確實堅強),最終使得大多數選購這系列顯示適配器的人都只把 ViRGE 當成一般的 2D 圖形加速卡使用,下面的影片就是以 ViRGE 玩遊戲的實際狀況:

而在 1996 到 1998 年之間,S3 Graphics 仍然陸續為 ViRGE 系列推出後續的衍生版本,例如 ViRGE/DX 將內建的三線性過濾功能速度提升並改進了透視補正的功能、ViRGE/GX 則是增加對新式 SDRAM 顯示內存的支持能力,後續的小改版 ViRGE/GX2 (下圖) 則又增加了對 AGP 接口的支持 (算是世界上最早一批支持 AGP 接口的顯示適配器,不過由於太早推出因此與正式公告的 AGP 標準有一些出入)。

顯卡發展史-3D 圖形 API 的發展

至於 S3 Graphics 真正夠格的 3D 圖形加速卡,則是要等到 1998 年的 Savage 3D 系列才能見到。

在看完 1990 年代那些「準」3D 圖形加速卡之後,現在我們終於要進入「真。3D 圖形加速卡」的時代了,首先要看的是 1990 年代末期到 21 世紀初的部分,除此之外在本篇當中還有兩家非常重要且眾所皆知的公司將首次在本系列中登場。


分享到:


相關文章: