曲面細分
曲面細分
曲面細分,英文稱Tessellation,如果直譯的話應該譯作“鑲嵌化處理技術”。由ATI開發,微軟採納后將其加入DirectX 11,成為DirectX 11的組成部分之一。由於這種技術廣泛的應用在曲面的幾何處理上,因此國內翻譯時通常譯作“曲面細分”。但實際上,這種技術不是只能用在曲面的細分處理上。
計算機不能直接生成曲線,當然更不能直接生成曲面。我們在計算機屏幕上看到的曲線、曲面實際上是由無數個多邊形構成的。當然多邊形越多,那麼曲面就會展現的更為真實。在之前,這項工作都是由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系列顯卡中的曲面細分單元稱為“第八代曲面細分技術”的原因。
事實上,在更早的DirectX 8時代,ATI就已經和微軟聯手開發了TruForm(N-Patch)技術,也就是Tessellation的雛形,並被納入DirectX8.1。但由於該技術有一些不可控制的BUG,因此被DirectX9和DirectX10無情的拋棄了。
Tessellation之所以未成氣候,就是因為此前的技術還不夠完善,另外GPU處理能力不足也是一大因素,因此ATI即便有微軟的鼎力相助,也未能將該技術發揚光大。到了DX10時代,ATI雖然在全線GPU當中整合了Tessellator模塊,無奈孤掌難鳴,並沒有得到遊戲開發商的支持。
直到DirectX11時代,GPU自身的性能有了長足的進步,硬體上真正具備了細分曲面的實力,再加上微軟重新改寫API渲染流程,專為Tessellation開闢了新的著色器,這才讓Tessellation技術得以重見天日。
曲面細分,或者更準確的說“鑲嵌化處理技術”,就是在頂點與頂點之間自動嵌入新的頂點。在自動插入大量新的頂點之後,模型的曲面會被分得非常細膩,看上去更加平滑緻密。它是一種能夠在圖形晶元內部自動創造頂點,使模型細化,從而獲得更好畫面效果的技術。曲面細分能自動創造出數百倍與原始模型的頂點,這些不是虛擬的頂點,而是實實在在的頂點,效果是等同於建模的時候直接設計出來的。
曲面細分技術是完全可編程的,它提供了多種插值頂點位置的方法來創造各種曲面:
1.N-Patch曲面,就是和當年TruForm技術一樣,根據基礎三角形頂點的法線決定曲面;
2.貝塞爾曲面,根據貝塞爾曲線的公式計算頂點的位置;
3.B-Spline、NURBs、NUBs曲線(這三種曲線均為CAD領域常用曲線,在Maya中均有相應工具可以生成)
nVIDIA的Tessellation DEMO展示
除了大幅提升模型細節和畫質外,Tessellation最吸引程序員的地方就是:他們無需手動設計上百萬個三角形的複雜模型,只需簡單勾繪一個輪廓,剩下的就可以交給Tessellation技術自動鑲嵌,大大提高開發效率;而且簡單的模型在GPU處理時也能大幅節約顯存開銷,同時大幅提升渲染速度。
作為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技術處理能力的單元。
曲面細分
這就是在3DMARK 11中,GTX460成績不如HD5830的原因之一,3DMARK軟體圖形、光照、抗鋸齒計算壓力很大,GPU還要分出CUDA單元去處理曲面細分計算,因此整體計算能力便捉襟見肘。再比如在《地鐵2033》中,即使GTX580也不能打開全部效果在1080P下全程流暢運行,且表現不及HD5970。這與nVIDIA的曲面細分實現方法也是有關的。
作為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渲染處理需求越大,這種設計的優勢就越明顯。
其缺點是,在3D渲染數據處理需求不大時,遇到高負載Tessellation計算,便力不從心。
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不在支持之列。