隨著近代 GPU 的可程式化管線設計與兩大 API 支援等基本要素大致上在 2001 年確立了,因此從 2002 年開始,新款的 GPU 主要是以將現有架構改進、增加更多的彈性、拉高各項參數為主要目的。

2002:更加實用的 Shader Model 2.0

在 2001 年微軟發佈了 DirectX 8 系列 API 標準,我們說當時引入的 Shader Model 1.0 給 GPU 架構設計帶來了翻天覆地的變化,並且大大提升了未來所有遊戲設計師能夠運用 GPU 創造新效果的可能,並且大幅提升了 3D 立體圖形的實感,但 Shader Model 1.0 有下列這幾個主要的缺點,導致它其實「很難用」、「很有限」,而且「還不夠彈性」:

  • Shader Model 1.x 中,軟體工程師只能使用低階語言 (像是組合語言) 來控制 GPU 內的渲染器
  • 一次最多只能操縱 4 ~ 6 個相關材質
  • 一次只能下達 4 個材質指令 (SM 1.4 可以下達兩組由 6 個指令組成的材質指令),而且只能處理整數
  • 只有 8 組常數暫存器
  • 只能處理 128 個頂點處理指令

於是在 2002 年微軟發佈了新的 DirectX 9.0 標準來解決前面這些問題。

dxa9805

DirectX 9.0 與 Shader Model 2.0

在 Windows XP 推出後一年多的 2002 年底微軟正式對外發佈了 DirectX 9.0 更新 (實際上 GPU 設計商在幾個月前就拿到定稿版本的 DirectX 9.0 API 規格書了,因此是先有 DirectX 9.0 GPU 才有 DirectX 9.0 支援更新可供使用),相較於過去的 DirectX 7、DirectX 8 都有架構上的變更來說,DirectX 9 的改進幅度其實沒有那麼大,最重要的一項就是對 Shader Model 進行大幅改版,稱為 Shader Model 2.0。

axm8565

基本上在進入 DirectX 9.0 世代之後,GPU 內的繪圖管線並沒有甚麼改變,但從 DirectX 8 開始引入的 Vertex Shader 與 Pixel Shader 幾乎被重新設計了,改進了剛剛提及在 DirectX 8 當中具有的絕大多數問題,像是像素渲染器只能處理 32 位元或 48 位元整數的問題,在 Pixel Shader 2.0 當中一口氣提升為支援最高 128 位元的浮點運算能力,能夠同時下達的貼圖指令、色彩指令、頂點指令數量方面也都數倍的大幅提升,並且引入了動態/靜態流程控制與巢狀動態/靜態流程控制指令。

ake8866

除了在數字方面的大幅躍進之外,Shader Model 2.0 帶來的另一個重點則是 High-Level Shader Language (HLSL),中文翻譯稱之為「高階渲染器語言」,如同過去本站曾介紹過的,在 DirectX 8 當中 Shader Model 1.x 支援的語言實際上很有限,實質上只是低階組合語言 (儘管後來微軟在一些文件當中把 Direct3D 8.x、Shader Model 1.x 也追認為 HLSL,但實際上從官方的介紹文件可以證實實際上並不是這樣),因此在編寫上有相當的困難度,特別是在要撰寫複雜度較高的程式時,顯得更加力不從心,在引入 HLSL 之後,開發者得以活用 GPU 實際能力的程度便瞬間提高了不少。

而最後要提的是,儘管 DirectX 9 帶來的改進並不如前作那麼巨大,但 DirectX 9 可以說是歷代 DirectX 當中影響力最大、生存時代最長的版本 (直到今天都還有很多遊戲提供 DirectX 9 模式),雖然這某種程度上和 DirectX 9 是 Windows XP 能支援的最後一個版本、DirectX 10 要等到 2006 年才生得出來、Vista 失敗導致 DirectX 10 難以在短時間內普及、Windows XP 直到 2013 年市佔率才開始明顯下滑等因素有關,但最大的因素還是因為 DirectX 9 的 Shader Model 2.0 比起前作來說大有長進且能合乎基本需要的緣故。

接下來我打算介紹的就是 DirectX 9 世代的產品,首先要登場的是在可預見的未來內都會被 ATI 與 NVIDIA 兩家公司永遠銘記的 Radeon R300 與 GeForce FX。

ATI Radeon R300 (9000 系列中高階版、X3/X5/X6/X10 系列前期)

發佈時間:2002 年 08 月 (R300)、2003 年 (RV350/RV360/R350/R360)、2004 年 (RV370/RV380)
API 支援:Direct3D 9.0、OpenGL 2.0
Shader Model 版本:Vertex Shader 2.0, Pixel Shader 2.0
像素渲染器 (PS):8 組/頂點渲染器 (VS):4 組/材質對應單元 (TMUs):8 組/著色輸出單元 (ROUs):8 組 (R300/R350/R360)
像素渲染器 (PS):4 組/頂點渲染器 (VS):2 組/材質對應單元 (TMUs):4 組/著色輸出單元 (ROUs):4 組 (RV350/RV360/RV370/RV380)

axk8055

如同在上一篇曾經談到的,R200 系列曾經讓 ATI 短暫坐上性能王者的位置,但很快就被 NVIDIA 推出的 GeForce 4 Ti 給踹了下來,當時 ATI 曾經醞釀要再次改良 R200 為 R250 並用來推出 8500 XT 以奪回性能王者之名,但最後或許是聯想到當年 3dfx Rampage 的悲劇了吧?最後 R250 計畫並沒有實現,ATI 決定集中公司的開發能量來進行次世代 GPU 的研發,而最後的成果就是 R300 家族 (對了,R300 的主要開發團隊是由 ATI 在 2000 年收購的 ArtX 公司演變而來,而 ArtX 公司本身是從 SGI 獨立出來的,在此之前最著名的產品是任天堂 64 遊戲機的繪圖晶片)。

Radeon R300 架構諸元

adu8065

Radeon R300 系列的架構基本上是由 R200 演化而來,主要的改進可分為四大部分,首先是 Radeon R300 增加了對 Shader Model 2.0 的支援能力 (因此 Vertex Shader 與 Pixel Shader 幾乎被砍掉重練了,這使得 R300 成為世界上第一款得以完整支援 DirectX 9.0 的 GPU,看到右上角那一大塊浮點像素單元了嗎?

snx8065