概述
計算機不能直接生成曲線,當然更不能直接生成曲面。我們在計算機螢幕上看到的曲線、曲面實際上是由無數個多邊形構成的。當然多邊形越多,那么曲面就會展現的更為真實。在之前,這項工作都是由CPU完成的,但是CPU是通用處理器,幾何運算性能有限,不能無限制的增加多邊形數量。這也是我們在一些遊戲中看到人的臉“稜角分明”的緣故。
Tessellation技術,便是一種化繁為簡的手段,簡單的理解,便是在一個簡單的多邊形模型中,利用專門的硬體,專門的算法鑲嵌入若干多邊形,以達到在不耗費CPU資源的情況下,真實的展現曲面的目的。
不過值得注意的是,與媒體宣傳的不同,曲面細分技術並不是DirectX 11的全部,而只是DirectX 11的組成部分之一,更談不上最重要的組成部分。
發展沿革
Tessellation技術,或者說曲面細分技術,是由ATI在2001年開發的,一直以來都是
AMD-ATI的專屬技術。最早套用在微軟XBOX 360遊戲機上,在PC上沒有廣泛採用。從ATI R600(Radeon HD2000系列)核心以來,曲面細分單元一直集成在AMD-ATI的GPU內部,不過並沒有引起廣泛關注,直到微軟將其採納,加入DirectX11 。這也是AMD將HD6000系列顯示卡中的曲面細分單元稱為“第八代曲面細分技術”的原因。
Tessellation之所以未成氣候,就是因為此前的技術還不夠完善,另外
GPU處理能力不足也是一大因素,因此ATI即便有微軟的鼎力相助,也未能將該技術發揚光大。到了
DX10時代,ATI雖然在全線GPU當中整合了Tessellator模組,無奈孤掌難鳴,並沒有得到遊戲開發商的支持。
直到DirectX11時代,GPU自身的性能有了長足的進步,硬體上真正具備了
細分曲面的實力,再加上微軟重新改寫API渲染流程,專為
Tessellation開闢了新的
著色器,這才讓Tessellation技術得以重見天日。
原理簡述
曲面細分,或者更準確的說“鑲嵌化處理技術”,就是在頂點與頂點之間自動嵌入新的頂點。在自動插入大量新的頂點之後,模型的曲面會被分得非常細膩,看上去更加平滑緻密。它是一種能夠在圖形晶片內部自動創造頂點,使模型細化,從而獲得更好畫面效果的技術。 曲面細分能自動創造出數百倍與原始模型的頂點,這些不是虛擬的頂點,而是實實在在的頂點,效果是等同於建模的時候直接設計出來的。
曲面細分技術是完全可程式的,它提供了多種插值頂點位置的方法來創造各種曲面:
1. N-Patch曲面,就是和當年
TruForm技術一樣,根據基礎三角形頂點的
法線決定曲面;
2. 貝塞爾曲面,根據
貝塞爾曲線的公式計算頂點的位置;
3. B-Spline、
NURBs、NUBs曲線(這三種曲線均為CAD領域常用曲線,在Maya中均有相應工具可以生成)
4. 通過
遞歸算法接近Catmull-Clark極限曲面。
Tessellation技術最初主要被用以“
細分曲面”,隨著該技術被納入DirectX11範疇,得到大範圍推廣之後,插值頂點的算法也越來越多,因此用途也越來越廣,產生了很多非常有創意的套用。 例如
nVIDIA的一個Demo演示了利用Tessellation技術生產的“頭髮”,這些頭髮都是真實存在的,當然並不是為每一根頭髮建立一個模型,而是利用Tessellation技術在有限的頭髮模型中,鑲嵌入更多的頭髮模型。
除了大幅提升模型細節和畫質外,Tessellation最吸引程式設計師的地方就是:他們無需手動設計上百萬個三角形的複雜模型,只需簡單勾繪一個輪廓,剩下的就可以交給Tessellation技術自動鑲嵌,大大提高開發效率;而且簡單的模型在
GPU處理時也能大幅節約顯存開銷,同時大幅提升渲染速度。
細分技術
NVIDIA細分
作為GPU領域的領軍者,nVIDIA認為曲面細分技術所代表的GPU幾何性能是新一代顯示卡最重要的功能,也是DirectX 11最重要的組成部分。
GPU的發展從Geforce FX5800時代發展到Geforce GTX285,五代時間內像素處理能力增長了1500%,而幾何性能只增長了300%。因此
nVIDIA認為幾何性能已經成為制約GPU性能的瓶頸,在新一代
Fermi架構(費米架構,包括GT400,GT500系列顯示卡)中,要專門加強幾何處理能力,曲面細分作為幾何處理的典範便首先得到了加強。
在Fermi架構中,nVIDIA通過PolyMorph Engine,將
Tessellation任務分配給
CUDA單元(CUDA單元也就是通常說的“
流處理器”,nVIDIA稱其為CUDA單元)處理。Fermi第一代旗艦顯示卡GTX480擁有15個PolyMorph Engine,也就等效於擁有15個具有Tessellation技術處理能力的單元。
nVIDIA這樣做的優點在於,可以在高曲面細分負載下獲得優秀的曲面細分能力,也就是在純Tessellation計算中
GPU的幾何性能相當出色。
在單純的Tessellation計算中,nVIDIA以16倍於AMD的Tessellation處理單元的數量,得到了6倍於AMD的
Tessellation處理能力。不過缺點在於,這種設計占用了
CUDA單元的計算能力,前文說過,
曲面細分並不是DirectX 11的全部。在實際遊戲中,並不是單純的Tessellation計算。CUDA單元還要處理其他遊戲相關的3D渲染數據,如果遊戲中3D渲染數據處理需求不大,這種設計就不成問題,不過一旦3D渲染數據處理需求很大,比如高解析度,高
全螢幕抗鋸齒,豐富的光影效果等,那么這種設計的缺陷就會暴露出來。
這就是在3DMARK 11中,GTX460成績不如HD5830的原因之一,
3DMARK軟體圖形、光照、
抗鋸齒計算壓力很大,
GPU還要分出CUDA單元去處理曲面細分計算,因此整體計算能力便捉襟見肘。再比如在《
捷運2033》中,即使GTX580也不能打開全部效果在1080P下全程流暢運行, 且表現不及HD5970 。這與
nVIDIA的曲面細分實現方法也是有關的。
AMD細分
作為
Tessellation技術的開發者,AMD(ATI) 對曲面細分的態度有所不同。AMD認為,在當前的DirectX 11遊戲中,將一個物體的細分後最小的像素在16個是比較合適的,過分的加大曲面細分負載所帶來的變化,是人的肉眼無法分辨的。因此AMD堅持對模型做適度的Tessellation處理才是理智的,過分的加大Tessellation計算負載,只是在白白浪費計算資源,因為人的肉眼無法分辨。
在Evergreen架構(即HD5000系列)中,AMD秉承了自R600以來的做法,集成了一個專用的Tessellation處理單元。在之後的Northern Islands架構的Barts核心中(即HD6800系列),AMD又對
Tessellation處理單元做了最佳化,通過增強的執行緒分配
模組設計,Barts核心在低Tessellation計算負載下擁有1.5倍於5800系列的處理能力。當然高負載下仍然不理想。之後的採用Cayman核心的HD6900系列顯示卡,則將專用的Tessellation處理單元增加到2個。
AMD這種設計的優點在於,專用的Tessellation單元並不占用
流處理器資源,不影響3D渲染數據的計算。在實際遊戲中,畫面解析度越高,
抗鋸齒級別越高,3D渲染處理需求越大,這種設計的優勢就越明顯。
2011年12月22日,AMD發布了新一代測採用SI GCN架構的AMD Radeon HD7970顯示卡。得益於GCN架構,其曲面細分計算能力也得到了飛躍式的發展。HD7970顯示卡的曲面細分單元概念被幾何引擎流水線所代替,仍為專用的2個,但是採用了最新的硬體Tessellation
疊代單元,提高了頂點的復用度、片外快取設計有所增強、採用了更大參數的高速快取,因此HD7970的Tessellation和幾何快取都有顯著的增強,能在所有拆分倍率下達到4 倍於HD6970 。與競爭對手相比,HD7970較之於GTX580,以八分之一的幾何引擎數量獲得了1.6倍的性能。特別是這種設計仍不會占用顯示卡的3D數據計算資源。
硬體要求
支持曲面細分技術的硬體
曲面細分技術要求顯示卡支持
DirectX 11,也就是目前的
AMD HD5000、HD6000、基於全新GCN架構的HD7000,HD8000以及GCN1.1/1.2架構的R7 200/R9 200系列顯示卡和nVIDIA的GT400、GT500、基於Kepler架構的GT600,GT700(GT800系列顯示卡是筆記本上的),基於全新Maxwell構架的GT900系列顯示卡(GT800系列顯示卡是筆記本上的)。
值得注意的是,微軟在將曲面細分納入DirectX11時,做了最佳化修改。因此雖然AMD HD2000、HD3000、HD4000系列顯示卡也集成了曲面細分單元,但是並不兼容DirectX 11內的曲面細分技術,在DirectX 11遊戲中無法打開Tessellation效果。
作業系統
支持曲面細分的作業系統
需要作業系統為Windows 7,Windows 8或者升級了DirectX 11的Windows Vista。Windows XP不在支持之列。