電腦達人養成計畫 5-7:3D 圖形初登場與 1990 年代的「準」3D 圖形加速卡

在看完 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

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 等。

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

跨平台的代表-OpenGL

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

有在玩遊戲的人應該對 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 年以前主要由下面這些元件組成:

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

當時微軟內部的定位是將 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 圖形加速發展過程中數一數二重要的公司-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.

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

3DImage 9750、9850

發佈時間:1997 年

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

其實 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 系列也不是那麼一無是處,由於它們確實很便宜,因此在市場上被分為高階且昂貴的 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.

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

ATI 3D Rage (Mach64 GT)

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

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

從前面的敘述我們可以知道,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/s
API 支援等級:Direct3D 5.0 (不完整)、OpenGL 1.0 (僅軟體、2D)

由於 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 影片硬體解碼的支援。

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

S3 Graphics

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

S3 ViRGE

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

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 標準有一些出入)。

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

Exit mobile version