Table of Contents
曲面細分 Tessellation
接下來終於要講到 DirectX 11.0 最重要的改進了,曲面細分是一般人在進行遊戲或圖形應用時最容易感受到的新功能,也是對 DirectX 11.0 繪圖管線架構影響最大的一項,不過這項功能到底是幹嘛用的可能不是那麼好理解。
如果從字面的意義上來看,曲面細分指的就是將原先模型中的多邊形切割成數個細小的多邊形再進行個別處理,概念上畫起來跟微積分中的積分有一點相似,透過大量細分組成圖形的多邊形就可以逐漸逼近出圓滑的曲線 (進而得到外觀看起來更接近真實物體的模型)。
不過講到這裡相信你應該會有這個疑問:「那這樣 Tessellation 跟 Geometry Shader 有甚麼不同呢?」,沒錯,在功能上曲面細分確實跟幾何渲染器很像,都是可以基於現有模型下去「無中生有」出新的多邊形來讓畫質提高、使畫面更加逼真的技術,但它們本質上的差異造成了這樣的結果。
其實為什麼不使用 GS 的答案其實很簡單,因為 Geometry Shader 只是原本渲染管線的一部分,因此必須遵循原有的像素渲染流水線機制走過一輪之後才能讓 Geometry Shader 達成我們的目的,但顯而易見地這樣的作法會造成很多無謂的時間與性能浪費 (明明已經走過那些工序了卻為了生成新多邊形而得重頭走過),因此使用 Geometry Shader 來做曲面細分太慢也太過不切實際,於是才有了 Tessellation 技術的構想出現。
DirectX 11 當中的 Tessellation 技術主要是透過在 GPU 當中引入兩種新的 Shader 與專門用於處理曲面細分的電路單元來實做的,新增的兩類 Shader 分別是 Hull Shader (外殼渲染器,HS) 與 Domain Shader (域渲染器,DS)。
首先看到外殼渲染器 (HS) 的部分,在資料經過像素渲染器之後就會進入 HS,此時 HS 可以根據程式內的定義來決定是否將資料送到曲線細分電路 (Tessellator) 進行曲面細分處理,此外 HS 也負責決定後續的曲面細分處理要生成多少頂點與使用甚麼樣的演算法。
接下來進入曲面細分電路 (TS) 之後就會依據外殼渲染器 (HS) 的指示來進行曲面細分處理 (額外頂點與多邊形的生成) 等,完成處理之後就會將資料送交回域渲染器 (DS) 進行法線平移運算與置換貼圖等操作,並接續原有的繪圖管線繼續進行處理。
有趣的是,最早在電腦用 GPU 中加入曲面細分電路的是 AMD 的 Radeon R600,不過當時僅是 ATI 從設計 Xenos 時獲得的經驗「順便」加入到 R600 架構當中而已 (更早的前身其實是早在 DirectX 8.x 時代 ATI 就已經開始發展的 TruForm 技術),要說 ATI 是這項技術的主要發明者其實也不為過 (微軟也出了不少力),在當時這項技術還不是 DirectX 的正式規範,因此僅是 AMD 所獨有的設計,而且也還不成熟,有很多缺陷尚待補上因此並沒有被普遍應用,儘管後來曲面細分技術被微軟納入 DirectX 11 規範當中,但由於設計與 ATI 當年的做法不盡相同,因此並不能向下相容。
而更諷刺的是,由於 AMD 架構的先天缺陷,使得 AMD 產品在曲面細分上的性能高度受制於 GPU 內的曲面細分電路而無法像 NVIDIA 的架構那樣輕易拓展,因此在後來 NVIDIA 顯示卡在曲面細分方面的性能反而得以遠遠超過 AMD 的產品,甚至變成 NVIDIA 在 GeForce 400 系列當中大力宣傳的技術特性之一。
AMD Terascale 2
- 推出日期:2009 年 09 月 (Cypress)
- 所屬系列編成:Radeon HD 5000 系列、HD 6000 系列、HD 7000 系列、HD 8000 系列、Rx 200 系列
- API 支援:DirectX 11.0、OpenGL 4、OpenCL 1.2
- Shader Model 支援:SM 5.0
介紹完 DirectX 11 之後由於篇幅還剩下不少,因此我打算就在本篇順便接續介紹 AMD 的首款 DirectX 11 架構了 (之所以連續三篇接著介紹 AMD 架構是因為在 DirectX 11 這一世代是由 AMD 拔得頭籌),Terascale 2 架構是目前為止 AMD 沿用最久的一代 GPU 架構,最早可以從 HD 5000 系列開始出現,後來又屢次被用於低階入門款顯示卡上,直到 2014、2015 年都還可以在市面上買到基於 Terascale 2 架構的入門級顯示卡。
開發代號的由來
在開始介紹 Terascale 2 之前我想先聊聊這代產品的開發代號,之所以特別把它抓出來談的原因有二:這是 ATI/AMD 第一次用英文單字取名自家的 GPU 架構與核心,而且從此不再使用數字命名 (基本上是出於混淆對手的考量,因為 RV870 可以很明顯猜到這是 RV770 的後繼)、這個名稱跟台灣很有淵源。
Terascale 2 架構最初用於 Radeon HD 5000 系列,這個系列的開發代號被命名為「Evergreen」,沒錯,就是台灣的長榮集團,聽說由來是當年 AMD 圖形部門的主管來台灣參加台北國際電腦展 Computex 2007,在展會結束之後他們下榻的酒店就是長榮集團旗下的長榮桂冠酒店,而這群工程師正好又在想下一代產品要叫甚麼名字想不太出來,於是就有人提議乾脆用飯店的名字命名,因此這代架構就叫做 Evergreen 了 (除此之外這個名字還有象徵 AMD 主題色-綠色與象徵長青的意義)。