GeForce 浅谈3D 概念

GeForce 3的一般規格

GeForce 3的一般規格

NVIDIA Geforce 3

NVIDIA最新的這款晶片有很多讓人驚訝的數字製程Process:0.15 微米電晶體Transistors:5千7百萬個像素管線Pixel Pipelines:4條每個像素同時可覆貼的紋理Simultaneous Textures Per Pixel:2個每個像素每次處理的最大貼圖數Maximum Active Textures Per Pixel per Pass:4個每次每個像素運算的數目Number of Pixel Shading Operations per Pass:36個 (4 per combiner, 9 combiners) 每次每個頂點的計算指令Vertex Instructions Per Vertex per Pass: 128道正式推出時的晶片核心頻率Core Frequency Of Released Card: 200 MHz 正式推出時的記憶體頻率Memory Frequency Of Released Card: 230 MHz DDR (double data rate,雙倍速資料傳輸) 正式推出時的記憶體大小 Frame Buffer Of Released Card: 64MB 支援的記憶體形式: SDR或DDR 記憶體介面傳輸寬度 Memory Interface Width: 128-bits

GeForce 3晶片裡的電晶體有5千7百萬個,這比GeForce 2多兩倍不止。 甚至是Intel最新的處理器Pentium 4也不到GeForce3的八成。 為了讓晶片面積不要太大,GeForce 3採用0.15微米製程,與先前GeForce 2系列0.18微米的製程相比,提升製程可以讓這款怪獸級的晶片有更高的運行頻率,與更低的電力消耗。

乍看之下,GeForce 3與其前輩GeForce 2有很多相同的地方。 仍然有4條像素處理管線,每個像素每個週期可覆貼兩個材質,記憶體介面仍然是128-bits寬,跑230 MHz (460 MHz DDR),和GeForce 2 Ultra完全相同。GeForce 3晶片核心電壓是200 MHz,比GeForce 2 Ultra的250 MHz還低。

當你繼續讀下去的時候,你慢慢會發覺,5千7百萬個電晶體可不是唬人擺好看的。 從帳面的這些數據上看起來,NVIDIA這款新晶片好像是僅比前輩GeForce 2那些晶片要好一些些,但你會漸漸發覺,每一項GeForce 2原有的功能都更為精進,讓前輩GeForce 2 Ultra對這款擁有許多嶄新技術的GeForce 3晶片也是含笑點頭,欣慰後繼有人。 就讓我們一個一個來看這款新晶片有那些新的技術。

按照我的習慣,我會依照對3D繪圖管線運作的影響來討論這些新技術,底下這張圖先給各位一些概念:

3D Pipeline

 

GeForce 3 新的頂點著色功能---先進的技術,樸實的名稱

Vertex Shader

GeForce 3的'nfiniteFX'繪圖引擎的第一個部分是稱為'Vertex Shaders'的頂點著色功能。可以說是GeForce 3最重要的新功能。比GeForce2多出來的3千2百萬個電晶體,大部分都花在這上面。 這個名字實在太謙虛了,其實Vertex Shader能做的遠超過為頂點著色。 我倒覺得「頂點處理器」這名稱還比較貼切。 這項功能讓程式設計師能夠對特定物體,甚至整個畫面的每一個頂點,指定特別的運算程式,卻不需要CPU介入。

為了解釋這有什麼意義,我們得要回頭看看3D繪圖的流程。

3D Pipeline

你現在所看到的是整個3D繪圖流程的第一步,在觀察者座標變換和三角形設定之前。 每禎畫面都是這樣完整的運算過一次才完成。

首先,各種3D應用程式(3D-Application),比方說3D遊戲好了,要提供遊戲的人工智慧,遊戲裡的物理現象,與玩家操作的互動,場景的管理等等。 鑲嵌(Tessellation)把數學定義的曲面解構為許許多多的多邊形或者三角形,少數幾款新遊戲才會在執行時進行這項工作。 在GeForce3之前,這部分的計算都是由CPU負責的,而GeForce 3則可以接掌這種運算,我等一下還會再詳細提到

 

什麼是頂點---Vertex?

3D繪圖流程的下一個步驟是座標轉換。 我在先前的文章已經解釋過了,所以我這次就稍微簡短一些。螢幕上的3D場景是由物體,燈光,以及觀察者所組成的。這樣的解說很基本,但是也很完整。 畫面裡的每一個物件,無論是你操縱的勇士英雄,飛車太空船,一堵牆壁,地板,或是其他雜七雜八的東西,全都是由很多的三角形組合而成的。

Wireframe

Vertices(單數則拼作Vertex)就是這些三角形的頂點。事實上,3D立體物件就是由這些頂點構成的。 當遊戲程式引擎把遊戲畫面上的物件定義資料傳送給繪圖晶片作運算時,它傳送的就是這些頂點而已。 每個頂點都包含著許多資訊。 除了空間中的X,Y,Z座標位置,以及W(權重),還有在聚光和散射光源下表現的顏色。 這些顏色資料通常以RGBA格式編排,分別代表紅,綠,藍,以及透明度(alpha)。 頂點也還必須包含它的法向量,垂直與三角形平面而指向「外面」的向量。 另外,還得包括要貼上的材質紋理的座標,s,t,r和q,代表著頂點在紋理材質上的相對位置。 在一個頂點可以貼上許多材質紋理的情況下,每個頂點當然就會有許多與這些個別材質紋理相對位置的資料。 還不只這些!像是霧的相關資料,或者單獨一個點的尺寸,甚至更多。 你就知道,在3D場景當中,小小的一個頂點,描述3D物件最基本的單位,攜帶著這麼多資料。

座標轉換--Transform

上面那個茶壺你已經看過了。一般的程式,會將物體的資料用「通用」的座標表示方法(物體座標/環境座標),送到座標轉換引擎裡作運算。 然後你可以從不同的位置、角度、方向來看這個茶壺,這就是觀察者座標。要從不同的座標觀察,就要改變茶壺的各個頂點座標,這可能包括旋轉,放大/縮小,上昇,下降,左偏,右移等。 這就是所謂的座標轉換。 座標轉換引擎會依據觀察者座標,改變遊戲程式送來的物件頂點座標。

 

照明---Lighting

我們剛剛學到,組成這茶壺的每一個頂點除了帶有顏色的資料外,還帶有要指派給它的材質資料。別忘了,要看到東西,還得把燈打開。 照明引擎所做的運算很複雜,運算過程要參照的因素很多。 包括了光源的數目,型態(環場光,單一光,方向光,投射光)以及其處理的形式(環境式,漫射式,聚光燈式)等。

只有在真的有支援頂點照明的遊戲裡,這種照明引擎才有發揮的舞台。 目前的遊戲,最常運用的是光貼圖技巧(light mapping),把事先計算好的照明結果,當成材質貼上物體。

頂點著色單元---The Vertex Shader

我剛剛描述的就是內建在GeForce256,GeForce2及ATi的Radeon晶片裡面稱為座標轉換與照明單元(T&L-unit)的功能。GeForce 3也把T&L內建在晶片裡,以配合DirectX7,一般遊戲就算沒有使用到新的頂點著色單元,也可以省下不少運算時間。

好,我們現在了解到每一個頂點都攜帶相當多資料,比方說座標,權重,法向量,顏色,材質座標,霧,及其單點大小等等。頂點著色引擎能夠以簡短的程式來改變上述這些資料。 這些小程式直接由頂點著色引擎本身執行,不必勞駕到中央處理器。 典型的晶片內建座標轉換與照明引擎將遊戲設計師的才能限制在3D運算管線裡的運算資料送到座標轉換之前。 在有了頂點著色引擎的支援之後,遊戲設計師對遊戲場景裡的3D立體物件能夠為所欲為的操縱變化,而且不需要用到中央處理器。

這開展了一片新天地。程式可以改變頂點的任何資料,比方說改變物體的形狀,以達到更接近真實的移動、殘影、混色、內插(在兩種外型間轉換),以及變形。 頂點上的顏色資料及材質貼圖座標也可改變,包括所有物體表面上的視覺效果,如顏色、反射、凹凸貼圖(bump mapping),(如Blinn bump mapping)或者其它投影的貼圖等。照明的運算也可以讓程式設計師隨心所欲。 但是,多少還是有些限制。 頂點著色引擎終究不像是'nfiniteFX Engine'(直譯為「無限特效引擎」)這個名字暗示般的無際寬廣。 在頂點著色引擎裡執行的程式還是有限制的,最多僅能包含128道指令,運算需要的時間也是另一個限制因素。 我們現在很快的來看看詳細的內容。

 

頂點著色引擎---Vertex Shader---細論

Vertex Shader

上面這個圖表清楚的說明了,每個頂點可以包含16項(entry)資料。 每項資料包含4個32-bit的浮點數。 16項資料已經夠多了,可以包含正常的一個頂點內含的所有資料,像是頂點的座標,權重,法向量,散射光,聚光,霧特效座標,及單點大小等資訊,還有不少空間可以留給好幾個材質紋理要進行貼圖時的座標位置資料。

在頂點著色引擎內部,這些資料都是以「項」為單位來作運算的。 我們剛剛學到,每一項都是4個32-bit的浮點數,這如同你下一道指令,就可同時進行四個運算一般,這讓頂點著色引擎單元實際上就是一個「單一指令多重資料」(single instruction multiple data, SIMD) 的處理器。 這種安排很有道理,因為大部分的座標轉換與照明運算都是4x4或3x3的矩陣運算。 所有的資料都是浮點數,所以全部的運算都是浮點運算。 基本上,頂點著色引擎是個很強大的單一指令多重資料的浮點數處理器, Pentium 4裡SSE2運算單元勉強可以與其相比。

另一個重要的部分是12個SIMD暫存器(相當於程式中的變數),每個也都可以存放4個32-bit浮點數。這12個暫存器就是頂點著色引擎可以變戲法的地方。除了這12個可以自由存取的暫存器之外,還有96個4x32-bit的SIMD常數,必須在程式開始之前設定好。這些常數可以用在程式裡,甚至可以利用指標間接存取,但是有點不方便,每道指令只能使用一個常數。如果某種運算牽涉到超過一個常數,必須先用額外的指令把常數讀入暫存器。這麼多常數,典型的應用就是存放座標轉換的矩陣(通常是4x4大小)、照明特性、動畫特效的資料、向量內插(例如變臉特效或者內插畫面),以及時間(用在質點系統或者內插畫面)等等。有一種特殊的程式叫做「頂點狀態程式」,可以設定這些常數,一般的程式只能當作常數讀取。

這些運算指令本身都很簡單,因此也很容易理解。 頂點著色引擎不允許迴圈(for, while),跳躍(goto, jump),或是條件式分支運算(if-else),單純就是每條指令一條線排好,照著次序一個個執行,每個頂點著色引擎容許的長度是128條指令。 運算完成之後,頂點應該已經依照設計師的意思完成座標轉換與照明。 若是頂點還需要更多處理,可以再進入頂點著色引擎一次。

頂點經過運算後仍然是頂點,座標轉換為一致的裁剪空間(homogenous clip space),並且完成照明運算。 有一點很重要的是,頂點著色引擎的運算過程不會改變頂點的數目。一個進去,一個出來。

 

頂點著色引擎的程式---Programming The Vertex Shader

底下的這些資料,大概也就那些有程式設計經驗以及對3D繪圖有心得的讀者會感興趣了。

指令集:

指令參數動作
nop 不做事
mov dest, src搬移資料
mul dest, src1, rc2dest = src1 x src2
add dest, src1, rc2dest=src1+src2,也可以做減法
mad dest, src1, rc2, rc3dest=src1*src2+src3
rsq dest, srcdest.x = dest.y = dest.z = dest.w = 1/sqrt(src),平方根的倒數(比平方根有用多了)
dp3 dest, src1, src2dest=src1 . src2 三維向量內積
dp4 dest, src1, src2dest=src1 . src2 四維向量內積
dst dest, src1, src2計算距離向量,若 src1 是 (NA,d*d,d*d,NA) 而 src2 是 (NA,1/d,NA,1/d),dest 將成為 (1,d,d*d,1/d)
lit dest, src照明運算,包含兩次內積與一次指數運算. src is:src.x = n o l (unit normal and light vectors)src.y = n o h (unit normal and halfangle vectors)src.z is unusedsrc.w = power (in range +128 to -128)
min dest, src1, src2最小。dest中的每個元素都是src1與src2中較小的
max dest, src1, src2最大。dest中的每個元素都是src1與src2中較大的
slt dest, src1, src2小於。若src1小於src2則dest為1,否則為0。dest = (src1 < src2) ? 1 : 0
sge dest, src1, src2大於或等於。若src1大於或等於src2則dest為1,否則為0。dest = (src1 >= src2) ? 1 : 0
expp dest, src.wdest.x = 2 ** (int)src.wdest.y = fractional part (src.w)dest.z = 2 ** src.wdest.w = 1.0
log dest, src.wdest.x = exponent((int)src.w)
dest.y = mantissa(src.w)
dest.z = log2(src.w)
dest.w = 1.0
rcp dest, src.wdest.x = dest.y = dest.z = dest.w = 1 / src

這些指令集的數目雖不多,但是已經很足夠了。 為了讓程式設計師能夠再輕鬆些,NVIDIA還加上了不需要花時間的反轉與混合

 

頂點著色引擎的程式--- Programming The Vertex Shader,續

Negate and Swizzle

也可以對暫存器以及常數做遮罩,僅存取一項資料的某部分。

Masks

你可以看的出來,縱使這套指令集是沒幾條指令,而且也沒有跳躍,或是條件式分支,這套頂點運算指令集的威力事實上是很強大的。 最重大的限制就是程式最多僅能有128條指令,而且執行時間是每條指令至少要一個運算週期。

 

頂點著色引擎的程式--- Programming The Vertex Shader,續

底下這表格,是一些常見運算所需要的週期數目。

向量外積2
除法 2
開平方 2
乘法與加法一起4
轉換到切割座標,用一個單方向燈照明,以及計算一個材質座標7
高精度對數 9
高精度指數 9
低精度三角函數(sin/cos)9
高精度三角函數(sin/cos)13
轉換到切割座標,用一個聚光燈照明,以及計算一個材質座標18
計算4 x 4反矩陣38
17 道單點光源126

微軟的Xbox有兩個可以同時運作的頂點著色引擎,GeForce 3僅有一個,而內建的座標轉換與照明運算功能不能與頂點著色引擎同時使用。 因此GeForce 3對頂點的運算僅能一個一個照著次序來。

NVIDIA提供了常用的頂點程式模組以及一些固定功能的頂點程式。 甚至還包括一個稱為NVLink的程式,可以幫助你撰寫頂點運算程式。 底下是「雙面照明」的例子。

Two Sided Lightning

底下的幾點是我們要注意的一個頂點運算程式裡的指令不能超過128條。 這限制了光源的數目(尤其是聚光源)以及如模擬骨架運動時,可賦予的矩陣數目。 程式寫的越長,其執行時間就越長,整體效能也就越低落。 若非必要,使用內建的座標轉換與照明引擎就可以了。 在少數幾支程式之間切換很快,在許多支程式之間切換就比較慢,看來GeForce3有「快取」這些頂點運算程式。 一個進去,一個出來--頂點著色引擎無法增加新頂點,影響其他頂點,或者「看到」其他頂點的資料。 程式本身必須確保運算的結果已經完成座標轉換與照明。

總括而言,頂點著色引擎強大的功能讓人印象深刻,提供予程式設計師極大的揮灑空間。 但是,稍稍瞄一下Xbox的規格表,相比之下,你會發現GeForce 3的頂點著色引擎還僅能算是襁褓階段。

充滿可能性的新世界--頂點著色引擎能發揮的空間

我不得不承認,這一段的標題太大了。 因為根本沒辦法詳列出所有程式設計師可以用GeForce3作出來的特效。 但至少,我還能對這顆NVIDIA旗艦晶片能作出來的特效,提出幾個較有趣的來討論討論。

模擬骨架運動-矩陣調色盤變形 Skeletal Animation - Matrix Palette Skinning

我們已經知道,頂點著色引擎能夠進行大量的矩陣運算。 這意謂著NVIDIA以前那個沒用的2矩陣變形年代總算過去了。 遊戲畫面上人物的臉部表情變化、四肢移動,以及衣物飄動,現在都能很寫實的表現出來。 NVIDIA宣稱最多有32個矩陣(32根骨頭)可以參與每個頂點的運算。 但回頭看看那每一個頂點運算程式裡的指令不能超過128條的限制,絕大部分的情況應該是少於32個。 但是,縱使是20個矩陣的變形,就已經是令人印象深刻的成就了。

Matrix Palette Skinning

變臉特效(Morph)以及內插畫面(Key Frame Animation)

一個比較容易創造出擬真動畫的方法是,先定義好物體變形前後兩幅畫面各頂點的位置,然後讓頂點著色引擎去計算這前後兩幅畫面當中,各頂點在逐漸變形時的位置。 藉由這種方法,ATi的Radeon晶片展示的是將一張笑臉逐步變成生氣的表情。 NVIDIA展示的則是一隻正在游泳的海豚。

Dolphin

這邊還有一個例子。

Keyframe

 

程序變形---Procedural Deformation

程序變形,意謂著在一個平板或是一般正常物體的表面上,經由一些特殊的運算程序而模擬出變形的效果。 這種模擬變形大部分是動態的,也可以是靜態的。 典型的例子像是模擬水波,風中飄揚的旗幟,或是模擬(靜態的)被子彈打到而凹凸不平的鋼板表面。

Flag - Bullet

Pertubation

個別頂點殘影---Per-Vertex Motion Blur

要在3dfx的產品上達到殘影的效果,必須使用T緩衝區(T-buffer)(因而犧牲了效能)。 這種殘影也可以由頂點著色引擎計算出來。 頂點的法向量(與所處平面垂直,指向「外」的向量)如果正對著前進方向(迎風),就不做改變,而法向量背對前進方向的頂點,就與前一張畫面的同一頂點位置混合,看起來就像物體被風拉扯向後。 依照移動向量的長度(物體的移動速度),頂點上的透明混色alpha值逐漸降低,讓它看起來是漸漸的透明模糊化。 你不得不承認,這看起來很像是真實時的效果。

Motion Blur


設定內積凹凸貼圖(Dot Product Bump Mapping, Per Pixel Bump Mapping)---Setup For Dot Product Bump Mapping (Per Pixel Bump Mapping)

設定內積凹凸貼圖(Dot Product Bump Mapping, Per Pixel Bump Mapping)---Setup For Dot Product Bump Mapping (Per Pixel Bump Mapping)

隨著DirectX7的推出,以及GeForce256、GeForce2,和ATi的 Radeon繪圖晶片,都能運用一種稱為個別像素照明(per pixel lighting)的技術,其中包括了內積凹凸貼圖。 凹凸貼圖技術的概念是避免使用真實的幾何資料構成物體表面的凹凸質感。 這種技術比指定額外的「法向量陣列」(Normal Maps)「便宜」多了,卻可以模擬出凹凸不平的質感。 理論上,「法向量」是垂直於特定平面的向量,計算光線反射的過程,需要這個向量。 內積凹凸貼圖所用的方法是對三角形上的每個像素賦予假的法向量,而照明時就針對每個像素的「假」法向量做運算。 這種運算造就了凹凸貼圖的特殊效果,讓一塊原本是平面的區域看起來有凹凸不平的感覺。 毫無疑問的,三為內積凹凸貼圖運算是目前最好的凹凸貼圖技術。

這是對於法向量陣列的解釋:

法向量陣列是一張包含著RGBA色彩資訊格式的材質圖片,其RGB分別代表X,Y,Z空間座標。圖片裡的每個像素都可以解釋為一個法向量。法向量陣列提供了每一個像素各自獨立的法向量。 通常我們得要將單位長度的光向量轉換為顏色資料,才能在暫存器結合單元,或是材質處理階段進行運算。

Bump Mapping

不幸的,有得必有失。 每次當這個被凹凸貼圖處裡的物體若是要旋轉或移動的時候,各個三角形上的法向量陣列也隨之改變,因為它們的方向本來就是隨著視角與光源在變化的。 以往這種座標轉換的計算是以軟體完成的,換言之,得要仰賴中央處理器的計算能力。 因此,遊戲程式(如Evolva),一旦使用這種三維內積凹凸貼圖的功能,就變的有點兒遲鈍。

頂點著色引擎用一種稱為「材質空間」(texture space)的技術,計算法向量陣列。 這種運算過程也稱為「個別頂點三維內積」(per-vertex dot3-setup)。 在3D繪圖流程更底層的地方,GeForce 3的像素著色引擎接受由頂點著色引擎傳送過來的頂點資料,可以產生凹凸貼圖需要的法向量。 這在GeForce 3裡,整個運算過程都是在繪圖晶片內完成的,不需要中央處理器出手,對效能的影響也會降低。

光線折射效果---Refraction Effects

在日常生活中,常常可以看到光線的折射現象。 一般人第一個想到的,大概就是各種透鏡的效果。 像底下的這個魚眼鏡頭。 其實,光單是一片厚厚的玻璃,或是玻璃杯裡的水,也有同樣的效果。 在巴黎-達卡越野車賽,沙漠中的熱空氣也是能這樣的扭曲光線。 只要你頂點運算程式寫的漂亮,頂點著色引擎就能夠運算出各種光線折射的效果出來。

Fish Eye

 

折射與反射---Reflection and Refraction

折射與反射---Reflection and Refraction

底下這個圖片又是一個頂點著色引擎能夠作出來的驚人特效,這個頂點運算程式只用了27道指令。從DirectX6與GeForce256發表以來,我們都已經知道「立方體環境景觀貼圖」cube environment mapping technique可以模擬出真實的反射效果。 頂點著色引擎還可進一步的將光線折射效果與立方體環境景觀貼圖融合在一起,底下這個圖片就是一個例子。

折射與反射---Reflection and Refraction

你可注意到畫面上這個透明橢圓玻璃球不僅是反射它前面的景色,也折射隱藏在它後面的景色。

漸層霧化---Layered Fog

我們知道每個頂點也都有包含霧化資料的數值,因此不難想像頂點著色引擎能夠依照個別的頂點,操縱這些霧化資料,計算出不同強度的霧化效果。 底下這張漸層霧化的例子裡,依據的就是每個頂點與地板的距離遠近來決定霧化效果的強度。 頂點運算程式檢查各個頂點與地板的距離,然後以此計算出該頂點霧化資料的數值,聽起來既簡單又基本,不是嗎?

漸層霧化---Layered Fog

在這圖片裡唯一令人不解的是,房間裡怎麼會起霧呢?窗戶好像是開的。 或許是NVIDIA的工程師們有鑑於在工作室裡,各個同事的屁屁排氣量都很大,所以靈機一動,做出這張需要開窗散毒氣的圖來,哈哈。

 

更多特效

各位可不要睡著了,咖啡可以去廚房續杯,泡麵吃完可以吃乾糧,我想GeForce 3的頂點著色引擎能作的特效也介紹的夠多了。 底下我再標出一些NVIDIA認為重要的規格:與新的像素著色引擎結合,能模擬極逼真的皮毛效果。 頂點著色引擎可以完全不用中央處理器插手,模擬的大量質點粒子的物理現象。 水面底下折射到水面上的光線模式可以由頂點著色引擎以框架融合(mesh-blending)的方式實現。 雙面照明可以讓三角形的前後各定義不同的照明屬性。 剪影著色 (Silhouette rendering),遮色片照明 (membrane lighting),彩虹著色 (rainbow rendering),不等向性照明(anisotropic lighting),色調渲影(toon shading),都是很迷人的光彩效果。 Perlin雜斑演算是最普遍的雜斑產生技術,對要產生雲塊,煙,螺旋狀霧,火苗等,都很有用。藉由頂點著色引擎,這些效果都可以獨立於中央處理器之外,完全在GeForce 3裡進行計算。 *很多點光源---先前的DirectX7在每個頂點上只能定義8個光源。 因為頂點著色引擎,現在可以多很多了。 NVIDIA展示了一個有17個散射光源的例子。 但是,128道指令的限制多少還是侷限了聚光源的數量。

頂點著色引擎---Vertex Shader總結

毫無疑問GeForce 3晶片裡的頂點著色引擎能夠變化出來的特效實在是令人吃驚。這個「頂點處理器」無疑地朝向「如同照片般真實」的虛擬世界邁進了一大步。 Microsoft微軟就要量產的遊戲機Xbox,也有這種功能,而且是GeForce 3的增強版本。 目前所知Xbox的規格,應該會有兩個可以同時運算的頂點著色引擎。

不幸的,多少也還有一些問題。 你我大概都瞭解還得要好長一段時間,才會有支援這種頂點著色引擎技術的遊戲出現。 不只是遊戲發展廠商得要花上好一陣功夫才能熟練發揮頂點著色引擎的能耐,也得要有好一段時間,配備頂點著色引擎的顯示卡才會在市面上普及起來。 只要GeForce 3仍然是少數有錢人專屬的消遣,就不會有足夠的誘因讓廠商發展支援頂點著色引擎的遊戲。 別忘了整個遊戲與顯示晶片市場是花了多久的時間才接受晶片內建的座標轉換與照明引擎,GeForce256是1999後半年發表的,但是到現在必須要硬體座標轉換與照明運算才能正常執行的遊戲還是不多見。

第二個問題是有關那些頂點運算程式的性能。 現在還不知道上述的那些精彩特效,其運算的速度是否能夠用在遊戲上。 Blinn 凹凸貼圖的畫質是很棒,但是一旦它們嚴重拖累系統的效能,那就一點也不討喜了。

頂點著色引擎單元實在是一項很棒的特色,而且應該給予高度評價。但是現在還不是購買GeForce3的合理時機。

 

GeForce 3可程式化的像素著色引擎---The Programmable Pixel Shader Of GeForce 3

'nfiniteFX Engine'的第二個部分是像素著色引擎('Pixel Shader')。 就像它的兄弟--頂點著色引擎,它也是可程式化的。 它是GeForce 2上面NSR(NVIDIA Shader Rasterizer:NVIDIA 著色與填色)的進一步發展。 讓人摸不著頭腦的是,NVIDIA對這個像素著色引擎的效能還不大願意公布出來,語多保留。 好像是NVIDIA對這運算單元的能力有點慚愧的樣子。 John Carmack先生最近一篇有關GeForce 3像素著色引擎的評論好像也是持同樣的看法,他們以前可不是這樣謙虛含蓄的。

3D繪圖流程:在像素著色引擎計算之前---What Happens In

The 3D-Pipeline Before The Pixel Shader?

一開始我得先解釋什麼是像素著色引擎。 基本上它是GeForce2繪圖晶片的一部分,它將實際的像素進行上色處理然後呈現為你在螢幕上看到的影像。 讓我們來看看這是繪圖流程中的哪一部份。

3D Pipeline Pixel Shader

經過頂點著色引擎的處理後,得到的是經座標轉換並且照明的頂點。 下一個步驟是裁剪,將場景之外那些看不到的,不必要的頂點都裁剪掉,背面去除(Back Face Culling)作的事情也是一樣的,它把從你視野看不見的那些頂點都剔除掉。 然後由觀察者座標轉換將這些看的見的頂點的x,y座標座標轉換為視窗座標。

再來是建構三角形。 頂點的任務就到此為止了,而像素開始接過手來演好戲。 這個過程也可以稱為---將真實的3D物件轉換成假的3D物件,或是2D平面影像。 因為你的螢幕終究是2D平面的表現方式,絕不會有七夜怪談的貞子從電視裡爬出來,所以每一幅螢幕上的影像終究是平面的。 你有想過貞子從高掛在牆壁上的電視爬出摔下來,頭破血流哀嚎的場景嗎?當然那是不可能發生的。

 

3D繪圖流程:在像素著色引擎計算之前。續---What Happens In The 3D-Pipeline Before The Pixel Shader? Continued

建構三角形的步驟計算出填滿三角形所需要的參數,包括形成這個三角形外圍各個像素的座標。也就是每一條掃描線上第一個和最後一個像素的位置來。

Triangle

結果看起來就像這樣。

填色單元把每一個像素都填上了顏色。

Triangle

到這個程度,這個三角形從此就只能以2D平面的型態存在了。 但每個像素還是保有它原先Z軸的數值資料,能夠再讓填色單元拿來進行內插運算。 那些顏色的資料(依據著色機制),和材質紋理的座標,也都要一個個像素來作內插,全都根據一開始三個頂點所攜帶的資料。 你可以看的出來,建構三角形與填色的確不是輕鬆的工作。 每一個像素都得送上一大堆的資料給3D著色管線。 在GeForce 3的情況下,因為它有四條著色管線,所以一個週期至少必須餵上4個像素的資料作運算。

代表著三角形的像素資料,會被送進GeForce3的像素著色引擎。包括z座標,顏色,紋理材質的資料。

GeForce 3在建構三角形與像素著色引擎之間,其實還有個「光速記憶體架構」,這我在後面的文章會提到。

 

GeForce 3像素著色引擎的基礎概念---The Basics Of GeForce3's Pixel Shader

當你在電腦上執行3D應用程式時,GeForce 3的像素著色引擎負責填滿螢幕。 就像其它的像素著色引擎,它結合了顏色及照明資訊,還有紋理材質,以決定每個像素的正確顏色。 這樣用說的好像很簡單,但如你猜想的,GeForce的像素著色引擎可是相當複雜的東西。

GeForce 3有四個像素著色引擎,而NIVDIA用下面的句子來形容這種運算單元:

"像素著色引擎單元根據著色程式,將紋理材質的座標(s,t,r,q)轉換為顏色(ARGB),像素著色引擎使用浮點運算,紋理材質表,以及前一次計算的結果。"

Pixel Shader

上面這張圖讓你稍微瞭解一下像素著色引擎到底是在忙些什麼。 基本上,著色程式可以同時使用4個不同的貼圖,進行8個混色運算。 然後再來第九個運算是加上聚光源,以及霧化效果,再最後一道步驟是alpha混色,決定了這個像素的透明度。

像素著色引擎單元當然還有執行其它的繪圖演算,譬如它會察看應該畫出來的像素在螢幕上相對應z軸的座標,看看畫面上有沒有其它的像素,蓋住了它手頭上這個剛要演算的像素,若在z軸座標上有其它的像素蓋住了它手上剛要演算的像素,它就把手上這筆像素的資料丟棄掉,再接受一筆新的像素資料來運算。 若在z軸座標上沒有其它的像素蓋住了它手上剛要演算的像素,它就運算這筆像素的資料,然後著色,接著把這塊像素的z軸座標資料寫進z軸緩衝記憶區中,最後再拿一筆新的像素資料來運算。

你還好吧,頭昏眼花了嗎?需不需要蠻牛?這些只是基礎,讓我們現在來看看細節。

 

===============================next 17=======================================

http://www.tomshardware.tw/436,review-436-16.html

===========================================================================

 

每個週期2個貼圖,但每次通過有4個貼圖?---2 Textures Per Clock Cycle, But 4 Textures Per Pass ?

以硬體的觀點來看像素著色引擎,它跟GeForce2上的NVIDIA NSR很類似。 它每個週期可擷取2張材質資料,所以如果是3或4張材質,它就得要兩個週期才拿的完。 你算一算GeForce的晶片核心是200 MHz,而GeForce 3有四組這種像素著色引擎單元,對一個像素指派2張材質而言,其像素填充率高達800百萬像素/秒,若是拿3或4張紋理材質,則是400百萬像素/秒。 材質填充率在每個像素需要2個或4個材質資料時,是1600百萬個材質/秒。 在1個像素索求1個材質材質資料時,是800百萬個材質/秒。 在每個像素3個紋理材質時,是1200百萬個材質/秒。 GeForce2需要兩次才能處理3或4個材質,但是每次只需要一個週期,所以這些數字和GeForce2 GTS上的幾乎是一樣。

除了這些相似處,GeForce 3的像素著色引擎還是要比GeForce2的NSR進步多了。

像素著色引擎每個週期僅能擷取2張紋理材質,但是每次它其實是可擷取4張紋理材質的。 這是個很明顯的不同,也讓你體會到,光去計較那粗略像素填充率其實是會錯誤的誘導。 GeForce的NSR運算在每個像素一次僅能指派兩個紋理材質,若你還想要多加,這個像素得等下一個運算週期才有機會。GeForce 3的像素著色引擎單元要指派3或4個紋理材質給一個像素時,的確是需要兩個頻脈,但它仍然是在一個運算週期裡就可以完成。 所以你若是光以填充率來評估效能的話,在這兩種情況下幾乎是不分軒輊的。 GeForce2的NSR每個像素指派3或4個材質紋理時,需要2次運算週期,但每個運算週期在一個頻脈就可完成,因此加起來是兩個頻脈,這和GeForce 3的像素著色引擎單元要指派3或4個紋理材質給一個像素時,需要兩個頻脈是完全一樣的。

GeForce 3不同的地方在於它省下了寶貴的記憶體頻寬,因為它對緩衝記憶體裡顏色的資料,與z軸緩衝記憶裡的z軸資料僅作一次的讀取或寫入動作。 而GeForce2要執行同樣的讀寫動作時則要兩次的週期才得以完成。 若是以32-bit的色深以及3D晶片填充率理論上的高值來跑程式的話,GeForce 3以一個像素指派3或4張材質紋理時,對記憶體頻寬的需求是2 (1讀 + 1寫) X 200 MHz / 2 頻脈X8 byte (32-bit色深+ 32-bit Z軸) = 1,600 MB/秒。 GeForce2呢?則需要3,200MB/秒。 記憶體頻寬並不會把材質讀取的時間算在內,因為兩者是一樣的,但是它們對頻寬的要求比例程度卻是很大的。 從這邊可以看的出來,若是在一個像素要求3或4張紋理材質時,GeForce 3的像素著色引擎單元要比GeForce2的NSR先進許多。 為了達到最大的填充率,GeForce2比GeForce 3要求多出1,600 MB/秒的記憶體頻寬以達成最大填充率的任務。 在先前的幾篇評論,我們就已經闡明了記憶體頻寬對畫面填充率有極大的關鍵性影響。

 

可程式化的像素著色引擎---Pixel Shader Programming

我們已經知道了GeForce 3的像素著色引擎單元可以和頂點著色引擎單元一樣的程式化。 一個像素著色引擎程式只能包括12道指令,其中4個是紋理材質的運算,8個是混色運算。 像素著色引擎程式得要先經過頂點著色引擎才能到達像素著色引擎,這讓頂點著色引擎單元可以加入一些參數到像素著色引擎程式裡,如,在頂點著色引擎單元裡以三維內積凹凸貼圖技術處理完的凹凸點參數。 對像素著色引擎而言,這是最大的特色,因為可以被頂點著色引擎所操縱。

一個像素著色引擎程式可以有三種指令。參數的常數定義,8個常數,從c0....到....c7。 最多四次材質位置運算最多8個混色運算,結合材質,固定或計算得來的顏色資料,以產生顏色及像素的透明值。

每一個紋理材質運算都用到一組紋理材質的座標以:查出過濾過的紋理 (典型情況) 視為一個向量視為一個矩陣的一部分

底下這表格可以讓一些有興趣的人了解到指派紋理材質座標後,可以做出很有彈性演算。

紋理材質定義指令參數解釋
text0擷取過濾過的紋理 Just fetch a filtered texel color
texbemtDest, tSrc0環境景觀凹凸貼圖 Bump Environment Map
U += 2x2 matrix( dU )
V += 2x2 matrix( dV )
Then Sample at ( U, V )
texbemltDest, tSrc0環境景觀凹凸貼圖不含明亮度 Bump Environment Map w/ Luminance
U += 2x2 matrix( dU )
V += 2x2 matrix( dV )
Then Sample at ( U, V ) & Apply Luminance
texcoordtDest將紋理材質座標轉換成顏色Just turn the texture coordinate into a color
texkilltDest若s,t,r,q任何一個小於0,則刪掉紋理材質 Kill any texels where at least one of s,t,r,q is < 0
texm3x2padt1, t0"padding" instruction as part of the texm3x2tex instruction - performs a dot product of t0's color with these texture coordinates
texm3x2text2, t0Take previous dot product from "pad" instruction as the S coordinate
Perform dot product of t0's color with this texture coordinate and use as T
Sample from a 2D texture using ( S, T )
texreg2artDest, tSrcSample from ( tSrc.A, tSrc.R )
General dependent texture read operations, takes part of a color from the tSrc texture to use as S,T coordinates of the tDest texture fetch.
texreg2gbtDest, tSrcSample from ( tSrc.G, tSrc.B )
General dependent texture read operations, takes part of a color from the tSrc texture to use as S,T coordinates of the tDest texture fetch.
texm3x3padt1, t0Padding for 3x3 matrix operation
以3D紋理材質的座標作為矩陣的行 Uses the 3D texture coordinate as a row of the matrix
texm3x3spect3, t0, c0Normal Compute Non-Local Viewer Specular reflection about Normal from Normal Map
texm3x3vspect3, t0, c0Normal
of the 3 sets of 4D textures
texm3x3matt3, t0, c0以3x3 矩陣作向量旋轉,然後對立體貼圖或是3D貼圖取樣

'texreg2ar'及'texreg2gb'這兩組指令是對獨立紋理材質的讀取運算,先前僅在環境景觀凹凸貼圖技術有支援,我們知道這是源自Matrox的G400及ATi Radeon的技術,現在NVIDIA的晶片也有支援這種指令了。

 

可程式化的像素著色引擎--- Pixel Shader Programming 續

可程式化的像素著色引擎--- Pixel Shader Programming 續

Environment Mapped Bump Mapping

上面這張圖是典型的環境景觀凹凸貼圖EMBM。

底下是簡單的紋理材質混色指令

紋理材質混色指令參數解釋
adddest, src1, src2dest = src1 + sr2
subdest, src1, src2dest = src1 - src2
dp3dest, src1, src2dest = ( src1.x * src2.x + src1.y * src2.y ...)
lrpdest, factor, src1, src2dest = (factor)src1 + ( 1-factor)src2
muldest, src0, src1dest = src0 * src1
maddest, src0, src1, src2dest = ( src0 + src1 * src2 )
movdest, srcdest = src
cnddest, r0.a, src1, src2if ( r0.a > 0.5 ) { dest = src1; } else { dest = src2; }

像素著色引擎支援引數及指令修飾詞。 讓程式設計師負擔不會太大。

修飾詞解釋
r0.aAlpha Replicate
1 - r0Invert
-r0Negate
r0_biasBias - subtract 0.5
r1+bx2Signed Scale - 2 * ( x - 0.5f )
_x2double result
_x4quadruple result
_d2halve result
_satclamp < 0 to 0 and < 1 to 1

以上有關像素運算程式算是比較枯燥的部分。 接下來我們來看一些比較有趣的部分。

 

先進的像素著色引擎與其優點---Advances And Advantages Of The Pixel Shader

我們知道像素著色引擎可以用許多巧妙方式去組合出許多像素運算程式來,而且我們也知道,在每個像素索求多於2個紋理材質的狀況下,它要求的頻寬也少很多。 除了這些之外,像素著色引擎還有那些引人注目的地方呢?

底下這些是GeForce 3像素著色引擎的詳細規格陰影貼圖更快的載錄紋理材質影像乘法,高達8x8對稱核心支援4096x4096或512x512x512 解析度的紋理材質立體方塊圖像的貼圖每邊可高達4096x4096x32-bit色深支援YUYV的紋理材質圖像(自動轉換成RGB三原色)支援全景貼圖
可以指向任何一個圖像,如背景緩衝區(back buffer)裡的圖像,而可直接當作紋理材質使用邊緣色彩及邊緣紋理材質硬體同步化讀取/寫入功能
對同一張紋理材質,允許讀取及寫入動作用最高效率進行。
可以對背景緩衝區著色,然後馬上能當作紋理材質使用 Pass through colors 支援DX6規格的環境景觀凹凸/明度貼圖(就是環境景觀凹凸貼圖)簡單的紋理材質,S,T 在alpha/紅(AB)及藍/綠 (BG) 等向的雙方向性反射分佈照明 Isotropic Bi-Directional Reflectance Distribution Function based lighting (BRDF) 內積產生色彩貼圖或z座標真正的反射影像凹凸貼圖

嗯,大家都承認洋洋灑灑這麼長的一列規格功能表,好像高級轎車的配備規格表,讀起來也讓人有戴方帽的感覺,但是還是沒人知道:天啊,這些到底是什麼咚咚啊?我自己也開始覺得這篇評論已經長的有點嚇人,你的咖啡大概也續杯續的煩了,乾糧也吃光了,上面那些讓人不知所云的東西我挑幾個出來講就好了。

 

陰影貼圖---Shadow Mapping

GeForce 3裡面這個新建立的像素著色引擎,用一種新的計算方法去演繹出陰影來,看起來極為真實。

陰影貼圖---Shadow Mapping

整個概念也蠻好理解的,看看底下這兩張圖:

Building Shadow Maps

程式設計師要考量的有下面這些條件:每個點狀光源只能有一張陰影貼圖如果產生陰影的光源或是有陰影的物件沒有移動,就不必更新它的圖像要做出一個陰影圖來,就從光源的位置畫出z軸場景來,然後以圖像的方式儲存在z軸緩衝記憶體就可以了要使用陰影貼圖的時候,對場景像平常一樣的演繹著色,但是不要在z軸的座標裡以光源所在的位置對場景的空間投射texgen 晶片本身會比較z軸上的兩個點,然後依照比較的次序來產生出0或1的數值。 這是對z軸上的第1,4,9個圖像採樣所得到的。 其所得到的結果就像是有遮色濾片的圖像,能讓陰影圖像的值介於0.0到1.0之間。 然後再用這結合起來的圖像對物件照出陰影來。

目前為止,NVIDIA對陰影貼圖甚至連一張展示片都沒有。 得要等市面上有支援的程式才能看的到這陰影貼圖技術的成品是怎樣

 

等向BRDF照明---Isotropic BRDF Based Lighting

BRDF的概念是,不論你觀看物體的角度,都能維持一定的真實感。 BRDF是bi-directional reflectance distribution function的縮寫,底下這個圖就是啦:

等向BRDF照明---Isotropic BRDF Based Lighting

想理解GeForce 3裡的BRDF演算,得要知道許多複雜的計算公式及許多模型不同的表面。 跳過這些理論,我們直接看底下展示的圖片就好了。

等向BRDF照明---Isotropic BRDF Based Lighting

左邊這個例子是一個女士穿著天鵝絨的衣服,然後以Minnaert 反射法來演繹,這是BRDF的一種形式。 右邊相同天鵝絨的衣服則是以一般造影的演算法來演繹。 可惜我不得不把圖片縮小成這樣子,但你們還是可以分辨的出來兩者之間在真實感上面的不同表現。

 

Blinn凹凸貼圖=真實反射影像凹凸貼圖---Blinn Bump Mapping = True Reflective Bump Mapping

GeForce2及ATi的Radeon都能夠做出很棒的Dot3凹凸貼圖運算dot3 bump mapping,這種運算需要一張特別的紋理材質,一個代表法向量圖片。法向量陣列為每個像素定義出一個新的法向量,從而在完全平面的三角形上模擬出實際上不存在,但是看起來是凹凸不平的表面。 GeForce2上的像素著色填色單元,也稱為NSR = ' NVIDIA Shader Rasterizer ',卻沒辦法演繹立方體環境景觀貼圖cubic environment map凹凸面上的反射光。

GeForce 3上的像素著色引擎則能夠做出真實反射影像凹凸貼圖來,這種貼圖方式又稱為Blinn凹凸貼圖。 在頂點著色引擎運算出凹凸貼圖需要的法向量後,像素著色引擎藉此運算出這個像素的反射向量,並依據觀察者座標來產生反射圖像。

用Blinn凹凸貼圖技術貼出來的圖像,跟真實的反射幾乎是無法分辨孰真孰假。

Blinn Bump Mapping

 

抗鋸齒功能---Anti-Aliasing - Removing The 'Jaggies'

去年,當3dfx全力推廣這個在Voodoo5上面唯一有用的抗鋸齒功能時,抗鋸齒功能在3D影像界裡是一個很大的議題。 NVIDIA為了不輸場面,也加入了這種功能,但是提供的方法,卻大大的犧牲了3D表現的性能。 雖然3dfx的犧牲T-buffer緩衝記憶體方式的確是要比NVIDIA的超取樣方式要聰明的多,但一個是阿呆,一個是阿瓜,兩者的抗鋸齒功能實在是華而不實。 想要有高畫面更新率的電腦玩家根本不會去開啟抗鋸齒功能,因為隨之而來的3D效能真是慘不忍睹。

如果你不知道什麼是抗鋸齒功能,請回頭看看這篇文章link,在2000年四月份的GeForce2文章裡我有詳細的解說全螢幕抗鋸齒的功能。

Anti-Aliasing

上圖你所看到那些礙眼的小階梯狀,其實是因為兩兩不同角度的三角形交接而成的。 現在的紋理材質圖片及性質相近的圖像表面上,你已經很難看到這種礙眼的小階梯狀,因為都已經有先二次或是三次線性過濾過了。

現在唯一使用的,除去階梯效果,以及把畫面平滑化的技術是對整個畫面以某種過濾方法來運算。 這種運算當然是有些浪費,因為大部分的畫面並沒有這種階梯狀圖像,所以實際上不必要對整個畫面作這種過濾運算。 但是,又不可能去知道瞬息萬變畫面上哪裡會出現這種階梯效果,以前還有一種邊緣去聚齒化的技術,但是效果很差,所以不得不要對整個畫面作過濾運算

那麼,在3D畫面裡過濾'filtering'是什麼咚咚啊?為了不讓這篇文章像是老阿媽的裹腳布,我不會去詳述二次,LOD,三次,及等向過濾運算技術。 就只簡單的講:過濾就是:用不只一個採樣點的顏色,來對一個像素作顏色運算。 再說簡單一點,過濾就是,對一個像素作顏色運算時,還要對鄰近各個像素的顏色作參照採樣,然後才來作運算。 好,這就是全螢幕抗鋸齒運算的原理了。

超採樣抗鋸齒功能---Super-Sampling Anti-Aliasing

遮色過濾運算的困難地方在於,它要求比像素更深入,更低一層的次水平的準度,才會顯出其效果來。 目前有兩種以已知的方法來做到比像素更深入一層的準度。 最常用的一種技巧是超採樣運算。 超採樣的概念很簡單,但是卻得大費周章。 作超採樣運算時,你螢幕上的畫面實際上是以比較高的解析度演算上色後,再折衷顯現出來的。 在我舉的例子裡,4倍的超採樣就是比螢幕上的解析度大4倍的狀況下演繹運算來的,換言之,就是在x軸和y軸都有原來尺寸2倍量的像素。 在螢幕上你看到的像素,實際上是原先在後置緩衝區經4倍大解析度的上色演繹後的4分之1,經由這種演算,就能做到比單一像素更深入一層的準度,每4個像素經過超採樣的遮色過濾運算後,減肥成1個像素,這樣子就成了全螢幕抗鋸齒功能。 這樣運算出來的畫面很漂亮,但是,4倍解析度的資料量把可憐的3D晶片操的氣喘如牛,力有未逮,整個填充率直落谷底,3D繪圖的效能變的可憐兮兮。 因為多了這麼一道過濾運算,超採樣抗鋸齒運算出來的遊戲畫面,其畫面產生率,比4倍大解析度下,沒有超採樣抗鋸齒運算時的情況,還要低落。 現在,市面上所有的GeForce晶片及ATi的Radeon晶片都有這種超採樣抗鋸齒運算的功能。 但你頂多只能在800x600的螢幕解析度上玩一玩(若設定為4倍超採樣抗鋸齒,你的顯示卡晶片得要處理1600x1200解析度畫面的資料量!),你要再調高一點,遊戲的畫面根本就不能玩了。

 

多點採樣抗鋸齒運算---Multi-Sampling Anti-Aliasing

另外一種超採樣技術是多點採樣抗鋸齒運算。GeForce 3用的就是這種方法,但是同原理而另一種特殊演算法的技巧,3dfx先前就已採用了。 多點採樣抗鋸齒運算的概念就像它的名稱,在畫面上多處採樣並演繹上色,然後在比像素更深入,更低一層的水平(次像素水平),結合這些演算結果,並加以遮色過濾運算,來達到抗鋸齒的效果。 理論上,這種多點採樣抗鋸齒運算不見得對畫面填充率比較好,因為,還是得用4倍多的像素在次像素水平進行演繹來算出1個像素來,這樣出來的畫面產生率跟先前超採樣抗鋸齒運算是一樣的。 但是,就3D效能而言,多點採樣抗鋸齒運算要比超採樣抗鋸齒運算好一點,因為它並沒在高解析度下花費運算功力去計算那些沒有必要的畫面細節。

從3D性能的觀點來看,3dfx在這方面的概念要比NVIDIA的超採樣概念更高竿的原理在於,Voodoo5用一種特殊的技術來對這些次像素水平的採樣加以遮色過濾。 而遮色過濾實際上並沒有進行運算,這些採樣實際上是在那張Voodoo5卡上的那顆RAMDAC類比-數位轉換晶片裡在次像素水平條件下交互重疊而成的。 這也是為什麼沒辦法擷取這種畫面下來觀看。 遮色過濾處理過的畫面根本就不存在於畫面緩衝記憶體裡。 巫毒工程師其技術的確有獨到之處,Voodoo5晶片不受制於這麼一道大大影響顯示性能的遮色過濾運算,因此能夠在漂亮的抗鋸齒畫面下還能保有很高的畫面填充率。

GeForce 3新的高解析度抗鋸齒運算---GeForce3's New High-Resolution Anti-Aliasing (HRAA)

與原先的GeForce晶片裡抗鋸齒運算技術不同,NVIDIA的GeForce 3也是運用這種多點採樣抗鋸齒運算,而且整個運算電路都是在晶片裡面。GeForce 3也對畫面作多點採樣,並將資料儲存於畫面緩衝記憶體裡,在送出到螢幕前,用HRAA引擎來遮色過濾運算這些樣本,然後將運算結果儲存於後置記憶緩衝區。 這樣子,經過這種抗鋸齒運算過的畫面可以被軟體程式所擷取,也就能擷取這種畫面下來觀看了。

五點梅花排列法---Quincunx !

對於2倍或是4倍解析度畫面,除了一般的抗鋸齒運算外,GeForce 3還提供一種特殊的抗鋸齒運算模式,戲稱為'Quincunx'五點梅花排列法。 好玩的名字!'Quincunx'可不是什麼產科的胎兒先天性缺陷名詞,它只是另外一種超採樣的技巧而已。 五點梅花排列法先對5個像素進行遮色過濾運算,然後才產生出一個像素來---巧妙的地方在於---它只作2個採樣。 五點梅花排列法'Quincunx'演算出來的抗鋸齒畫面效果直逼4倍量解析度的抗鋸齒運算,而它只會多產生一個樣本畫面而已。 五點梅花排列法讓GeForce總算能夠在很棒的抗鋸齒畫面下有很棒的抗鋸齒3D效能。 它工作的原理如下述:

3D的場景如往常一樣的演繹著色,但像素著色引擎將每個像素儲存兩次,放在畫面緩衝記憶體裡不同的地方。 這道手續並沒有比那未作抗鋸齒運算的畫面演繹要花上更多的計算能量,而僅是在畫面演繹計算完成後,需要兩倍量的記憶體頻寬來寫入資料。

五點梅花排列法---Quincunx !

就當畫面上最後一個像素演繹計算完成後,GeForce 3晶片上的HRAA引擎,聰明的將緩衝記憶體當中一個樣本畫面往x軸及y軸各移動半個像素的位置。 這樣子,每個第一張樣本畫面的像素在位移的方向上都被第二章樣本畫面裡的4個像素以1/ SQR(2)的距離包圍起來。 然後HRAA引擎再對這五個梅花排列狀的像素進行遮色過濾運算,來產生一個抗鋸齒運算處理過的像素。 這種巧妙的方法就如向剛剛說的,畫質真的很棒。

五點梅花排列法---Quincunx ! 

Quincunx(五點梅花排列法)! 圖例

底下是重Quake3 Arena遊戲裡擷取下來的畫面,高畫質,解析度 1024x768:

No AA

2x AA

Quincunx

4x AA

嗨,Voodoo5 -GeForce 3的另一個多點採樣運算技術---Hello Voodoo5 - GeForce3's Other Multi-Sampling Features

直接的把這種多點採樣運算技術移植進GeForce 3晶片裡,讓它能作的可不僅僅是高性能的抗鋸齒運算。 剛剛已經說過了,3dfx的Voodoo5就是運用這種多點採樣運算技術,因此當你看到那一長列GeForce 3的規格功能表裡有許多原是Voodoo5特有的專長時,一點都不會訝異。 先前我們提過的個別頂點動態模糊化的效果,也是可以用這種多點採樣技術運算出來。 另一個典型的多點採樣技術能變的把戲是模擬景深'depth-of-field',玩相機的人對這名詞很熟悉,多點採樣技術可以模擬出相機鏡頭的光圈特性,遠處或是特寫景物的模糊與否,取決於光圈的大小。 光圈越小,景深越長,遠近景物都清晰;光圈越大,景深越短,只有焦距內的景物才清晰,焦距外的景物都是模糊的。

 

高維曲面---Higher Order Surfaces

從NVIDIA發表第一款晶片內建座標轉換與照明功能的3D圖形處理器的到現在已經快18個月了。 剛開始,對遊戲發展廠商還看不出來有什麼影響,最後,3D遊戲界慢慢的能夠運用這種晶片內建座標轉換與照明功能的優點,使的旗下遊戲畫面的三角形成形率持續上升,NVIDIA應該很高興,因為它的宗旨就是更多的三角形,更多的表面細節,更多的頂點。

在過去,大部分的AGP匯流排頻寬都耗在紋理材質資料的傳輸上。 單倍的AGP匯流排頻寬終究是太慢,2倍速的成為尖端的科技。 今天,紋理材質壓縮程式被廣泛的運用著,所以,紋理材質資料的傳輸量,在當今4倍速的AGP顯示卡下,不會有什麼問題。 但這並不代表4倍速的AGP匯流排頻寬就不必要。 事實上,4倍速的AGP匯流排頻寬慢慢變成效能的嚴重瓶頸,因為越來越細膩的3D物件表面的細節代表著越來越多的頂點,就像是春節時候高速公路南下北上的車子,要求更多的線道,頻寬,而終究把AGP匯流排通往圖形處理晶片的路給塞爆了。

另一個問題是,當前的遊戲程式師都竭盡心力的把遊戲裡零零碎碎的物件細節寫的很細膩。 創造遊戲場面裡的那些建築物及人物還算蠻有趣的一件事,但若要你將幾萬個三角形拼起來成一個細膩的物件,那麼環境景觀的創造工作就很煩悶了。 市面上有一些創造物件的軟體程式可以幫遊戲設計師省去這些工作。 但是,若一開始,知道有這種輸入幾個參數就可以做出物件來的軟體程式,那何必要先做好這些物件,再將上面那麼多細膩的頂點一個個的經由AGP匯流排傳送到圖形處理晶片呢?乾脆一開始就將這些創造物件的軟體程式設計在圖形處理晶片上,要用的時候輸入幾個參數就可以做出物件來了,這樣不是更方便嘛?

然後,還有一個惱人的問題。 現在程式裡的3D物件,無論它在螢幕上是遠是近,是看的見或看不見,它的頂點都是那麼多,畫面上有很多物件其實就那麼一個像素的大小,甚至比一個像素還要小just as small or even smaller than one pixel。 這些物件不必要的細節頂點也是塞爆AGP匯流排高速公路的原因,而這麼多小三角形對繪圖演繹管線也是一個嚴重的效能問題。

Microsoft微軟公司對這個問題的解決之道是稱為高維曲面(higher order surfaces)的一項技術。 它的概念是僅用幾個控制點來描述曲面。 一個曲線或是弧面僅由幾個控制點或是控制向量來定義,而用來描述這曲面形狀的功能/公式就稱為'Spline'。 有玩Photoshop或CorelDraw的朋友對'Spline'應該很熟悉。

 

高維曲面--- Higher Order Surfaces 續

GeForce 3能對那些可控制的頂點及功能/公式,而不是三角形,來變花樣。 當這些可控制的頂點及功能/公式資料傳給GeForce 3後,它就能依這些資料做出三角形來,然後再餵給頂點著色引擎。 這種用'Spline'曲面來做出三角形的過程稱為鑲嵌(tessellation)。 在過去,這種運算得在中央處理器裡完成。

高維曲面的優點很明顯:在AGP匯流排上僅傳送曲面控制點,而不是整個物件的全部頂點,大大的舒緩了匯流排的擁塞程度,讓AGP匯流排不再是整個3D繪圖效能的瓶頸。 用這種可以寫出DirectX 8和GeForce 3都支援的高維曲面物體的特殊工具程式,程式設計師可以創造出很細膩逼真的物件,而不是在幾千個三角形當中糾纏不清。 3D立體物件可以依據其必要的情況保持必要的三角形數量就可以了,確保在各種情況下的細膩度都是一樣的。 這意謂著,構成特寫鏡頭前面的這輛車子的三角形數目,要比畫面遠處角落的同款汽車的三角形要多很多很多。 這種技術叫做適應性鑲嵌(adaptive tessellation)。

無可避免的,這種技術也有缺點。 NVIDIA的行銷廣告傳單當然不會提及。可以寫出高維曲面物體的特殊工具程式有很多種。 但GeForce 3只能使用一種。 NVIDIA說物體的碰撞偵測很直覺。 你仔細想一想,構成物體的三角形若沒有明確的計算出來,那遊戲會花很大的功夫去偵測這些未知的碰撞。 CPU得要時時計算構成這些物體的三角形表面,以偵測這些未知的碰撞,這會耗掉CPU很大的運算能量。 最後,GeForce 3的鑲嵌技術運算能力是如何呢?NVIDIA都沒說明清楚。 不是每個遊戲程式設計師都喜歡這種高維曲面技術的,因為那要換掉整個遊戲的3D成型引擎。 John Carmack先生大概是最明顯持保留態度的人了。

這種高維曲面的技術聽起來頗迷人。聽起來好像幾乎是不可能的十全十美。我倒懷疑GeForce 3會把這種技術吃進去只是要確保廣告上那句'支援DireX 8全部的特效'那句標語沒吹牛。往後我們會看看支援這種技術的遊戲在GeForce 3裡的性能是否可行,而當然得要先有這種遊戲才行。

GeForce 3的光速記憶體架構---GeForce3's Lightspeed Memory Architecture

我把GeForce 3裡最炫的技術留到最後再講。 它是NVIDIA旗艦級圖形處理器裡光速記憶體架構裡的一部分,而且所受的矚目可能超出3D晶片界的範疇。

在影響3D效能的眾多因素當中,一個很重要的因素是記憶體的性能,這在我們Tom硬體指南先前的文章numerous occasions已經解釋清楚。 基本上,那些3D晶片公司所宣稱的那麼高的填充率,僅是理論上的,因為晶片裡記憶體的頻寬並不足以供應所宣稱那麼高的填充率。 這種情況在32-bit色深的情況下特別明顯。

在顯示卡規格表上面所列的記憶體頻寬,其實都是尖峰值,這跟現實狀況有一大段差距。 去年被Pentium III搭配RDRAM的廣告所拐騙的可憐冤大頭現在應該都能深刻體會高頻寬不等於高性能。 搭配高頻寬RDRAM的Pentium III很容易的就被搭配PC133記憶體的系統打的落花流水,唉叫連連。最主要是因為RDRAM的遲滯時間實在是太長了,長到它要去擷取不同記憶體位置上的資料都要比擷取原來記憶體位置上的資料要慢的多。

對3D繪圖而言,記憶體的遲滯性與記憶體的最小存取寬度,要比頻寬重要的多,因為像素的著色總是很頻繁的對不同記憶體區域作讀取的動作。 每個記憶體頁面的一開一關都得浪費掉寶貴的時間。 我剛剛提到近來的3D物體表面是越來越細膩了,這造成了畫面上三角形的數量急遽增加。 三角形的數量急遽增加也相對是各三角形平均尺寸是越來越小。 在畫面遠處那細膩的物件可能就僅是一個像素的大小can contain triangles that are just one pixel in size 三角形越小,一般的記憶體控制介面就越沒效率。因為一個新的頁面開啟一次就只作一次讀/寫的動作。運算中的下一個三角形可能也是這麼小,但卻是畫面上不同的地方,因而需要關閉當下記憶體的頁面,而去開啟另一個記憶體的頁面,這種動作並沒有要求很大的記憶體頻寬,高峰的記憶體頻寬傳輸值僅在讀取一系列量大的資料時(爆發模式)才會出現。 另外一個問題是,一般的DDR-SDRAM (double data rate,雙倍速資料傳輸)對資料的傳輸是以256-bit = 32 byte片段來傳輸的。 若有一個三角形只有一個像素大,也就是8 bytes (32-bit 顏色 加上 32-bit Z軸的資料)的資料大小,它還是要求32 byte的頻寬來傳輸,算起來,足足有75%的頻寬被浪費掉。

 

GeForce 3的Crossbar Memory Controller 交錯型記憶體控制器---GeForce3's Crossbar Memory Controller

NVIDIA決意要解決GeForce 3裡這個越來越頭大的問題。 方法是降低記憶體的遲滯時間,並改進記憶體存取的限制。 其結果就是設計出一個全新的交錯型記憶體控制器。

GeForce 3的Crossbar Memory Controller 交錯型記憶體控制器---GeForce3's Crossbar Memory Controller

GeForce 3上面的交錯型記憶體控制器包含有4個各64-bit匯流排寬度的次記憶體控制器。 這4個次記憶體控制器彼此交互呼應並交互仲裁記憶體定址的問題,而讓記憶體裡資料的擷取盡量的更有效率。 這種傑出天才設計既可以解決記憶體遲滯問題,也可以改善記憶體的存取限制。 其64-bits的寬度要比常見的DDR-SDRAM記憶體控制器裡讀/寫都是256-bit寬度的匯流排要精細的多。 這4個不同的次記憶體控制器在全開的狀態下,可將記憶體遲滯時間降為原來的25%。 依我個人的觀點,這種設計的記憶體控制器是整個GeForce 3晶片裡最令人讚嘆流口水的地方。 因為它適用於每一種3D程式,不管是新版的或是好幾年前的老程式。GeForce 3的使用者未必馬上就能受惠於頂點著色引擎,像素著色引擎,高維曲面等,但是這種交錯型記憶體控制器則是立刻就能提升繪圖性能。 抱怨GeForce 3像素填充率的理論峰值'僅有'800 Mpixel/s,還不如GeForce2 Ultra的1,000 Mpixel/s的人們,鐵定還不懂這種先進的記憶體控制器是如何運作的。 無論畫面填充率計數器程式瞭不瞭解這種狀況,GeForce 3這種先進的記憶體控制器性能絕對可以保證在99%的情況下超越GeForce2 Ultra。

我在想,以前記憶體控制器的設計功力不是很高竿的那些公司,如VIA(威盛),會不會對NVIDIA開口,看看能不能給點提示,把這種先進的交錯記憶體控制器移植過去嗎?這種設計對微處理器效能的幫助是毫無疑問的。 Rambus公司也可以用這種技術解決RDRAM記憶體那惡名昭彰的遲滯問題。 在這種情況下,我希望NVIDIA對這種技術的專利權申請的夠早,要不然Rambus又會故技重施它卑劣下流的本性,拷貝NVIDIA的技術,申請專利,然後告NVIDIA侵權。 就當作是玩笑話吧。 大家都知道NVIDIA已經能掌握晶片組的技術,天曉的,說不定很快的,這種交錯型記憶體控制器就會出現在搭配NVIDIA晶片組的主機板上。 Intel得當心,而VIA(威盛)要加加油啊!

GeForce 3解決Z軸緩衝記憶體的進展 - Sunnyvale製的HyperZ---GeForce3's

Approach To Tackle The Z-Buffer - HyperZ Made In Sunnyvale

GeForce 3的光速記憶體架構Lightspeed Memory Architecture裡第二個部分就是減低Z軸緩衝記憶體的讀取動作。 在我先前有關討論ATi的Radeon256晶片時,已經解釋Z軸緩衝記憶體的讀取動作造成畫面填充率虛耗對繪圖性能的重大影響,以及隨之而來的那些看不見的像素或三角形耗掉記憶體頻寬的情狀。 若你不是很熟悉這個問題,請看看這篇評論page

NVIDIA的工程師總算看到ATi設計出來的HyperZ技術所能帶來的效能增進,而現在GeForce 3也有類似在ATi的Radeon256晶片上出現的設計了。

記憶體緩衝區當中最常被3D繪圖晶片存取的是z座標的緩衝記憶體。 理由很簡單。 在3D繪圖流程裡面,建構三角形和填色的演算過程當中,很少要去存取記憶體裡的資料。 填色運算也稱為z座標緩衝記憶體的生成階段。 在光柵化運算之前的各種運算都是在處理頂點,這些頂點都已經帶者z座標的資料了。 建構三角形/填色單元運算著三角形上每個像素的色彩值,紋理材質座標,並把其z座標值一併交付3D演繹管線。

像素演算引擎(在GeForce 3的例子裡就是像素著色引擎'Pixel Shader')接收到新的像素時,所做的第一件事就是讀取z軸緩衝記憶體的資料。 這個步驟是必要的,因為像素演算引擎得要知道與新的像素相同的x/y軸座標位置上是否有另一個像素,或是已經有一個舊的像素貼在它的前面。 如果真有一個像素躺在哪裡,而且它z軸的數值是0,或是小於新像素z軸的值,則把這個新像素排進像素演算引擎裡作運算。 這個像素運算好後的顏色直就寫到後置記憶體緩衝區裡,而其z軸的值就存在z軸記憶體緩衝區裡。 然後再接收一個新的像素資料,整個運算過程再重複一次。 你可以看的出來每一個三角形上的像素的z軸記憶體資料在運算時至少要被讀取一次,而在像素顯示到螢幕的時候還要再被讀取一次。 沒有其它緩衝記憶體裡的資料像是卡拉OK當紅的歌曲這麼受歡迎的。 你可以看的出來若能減少z軸緩衝記憶體的讀取動作,就可以省下許多寶貴的記憶體頻寬。

 

無失真的Z座標壓縮---Lossless Z Compression

NVIDIA要減少z座標緩衝記憶體對頻寬的需求量的第一個方法就是無失真(啊!謝天謝地)的z軸緩衝記憶體壓縮技術。 ATi的Radeon256晶片在2000年7月份就已經運用這種技術了。 NVIDIA說在4:1的壓縮率下是沒有失真的,也就是說將z座標緩衝記憶體對頻寬的影響減為原來的25%。 4:1的壓縮率下能沒有失真,可不是一件簡單的事情。 你自己可以試試看。 將一個重複'hello world'文字的文字檔案壓縮起來。 Zip/unzip程式也是一種無失真的壓縮程式。 你會發現隨著檔案越來越大,壓縮率也越來越高。 這種情形到達一個程度後就不會再升高了,這你就可以看得出來,單純的一個文字檔,縱使是僅重複著一個'h'字母,也並不代表可以有更高的壓縮率。 在GeForce 3和Radeon256晶片上也是一樣的情形。 兩個晶片都是沒辦法在有記憶體定址的動作之下對整個z軸緩衝區進行讀或寫的動作,單單就一個z軸緩衝區的數值,明顯的也沒法進行4:1壓縮。 看起來GeForce 3好像是在GeForce 3晶片裡的記憶體快取區對z軸緩衝區的次級單位進行壓縮運算。 Radeon256用的是8x8 = 64 byte的次級單位。

可見度次系統:Z軸嚙合剔除技術---Visibility Subsystem: Z Occlusion Culling

在這個炫炫名稱後面,就是NVIDIA將Radeon的Hierarchical-Z運算加以改良成的新技術。 Z軸嚙合剔除運算是介於建構三角形與填色運算之間的一種特殊處理過程,讓像素著色引擎決定它手上的那個像素有沒有隱藏在先前著色完成的像素後面。 當Z軸嚙合剔除運算單元發現手上那個像素的確是隱藏在先前著色完成的像素後面時,Z軸嚙合剔除運算單元就會直接丟棄這個像素的資料,而不會讓它有機會進入像素著色引擎,因此省下了在像素著色引擎管線裡讀取Z軸緩衝資料的作動時間。

這種演算過程後面的技術看起來很像是,在Radeon的例子而言,對一部分場景進行hierarchical Z 快取的技術。 這種快取技術可以快速的讀取上述提到的Z軸緩衝區裡4:1壓縮率的次級單位,然後或許以區塊像素的方式重現Z軸緩衝資料,單單的儲存這區塊裡最低的那個z軸數值就可以完成這項作動了。 當建構三角形/填色運算在拆解某一個像素時,Z軸嚙合剔除運算會拿這個像素與其所屬的像素區塊的z軸數值作比較,若這個像素的Z軸座標值比其所屬的像素區塊的z軸座標值低,直接就丟棄這個像素的資料。 如果這個像素的Z軸座標值比其所屬的像素區塊的z軸座標值大,就把這個像素的資料往像素著色引擎送。

NVIDIA要比ATi 的Hierarchical-Z 技術高超的地方是一種自稱為嚙合查詢'Occlusion Query'的技術。 3D程式會要求GeForce 3去查詢某些特定區域(幾乎可以確信跟hierarchical z-快取的大小差不多)裡的z軸數值。 若查出來這區域裡的三角形的確是位在已經演繹運算好的物件的後面,這個區域裡的三角形就全部丟棄不予運算。

聽說這種Z軸嚙合剔除運算以及hierarchical-z快取的效率是取決於3D程式本身。 若3D程式,在將場景的物件資料一個個送交給3D晶片作運算之前,就先排好場景物件的送交次序,那麼就會有最好的效率。 理想狀況是,3D程式送出去的第一筆資料就是整個場景裡位於最前景的物件資料,然後再送位於後面位置的物件資料。 這樣就可以避免先著色位於背景的像素,然後在演繹前景物件的時候又把這背景著色好的像素覆蓋掉而白做工。 最糟糕的狀況是,3D程式把場景物件資料的順序倒著排,先送最背景的物件,最後才送最前景的物件資料(當然不會有程式故意這樣做),這種狀況下,無論是Z軸嚙合剔除運算與是Hierarchical-Z技術都幫不了什麼忙。 一般而言,3D物件的成形是沒有什麼順序的,造成場景深度的複雜性在2 - 3.5之間。 這種情況下,GeForceZ軸嚙合剔除技術可以幫很大的忙。

 

結論

沒有性能測試數據的支持,能夠作什麼結論嗎?在討論這種高階的3D繪圖晶片情況下,的確是不能。 但我還是可以對GeForce 3裡滿載的高科技提出一些個人的觀點。

首先我要說,這篇文章會成為我所寫過最長的評論文章,並非偶然。 如果你注意到整篇文章中沒有一個性能測試圖表,你當能體會這篇文章真的是長篇大論。 NVIDIA的GeForce 3晶片,Xbox裡顯示晶片的先驅,所搭載的繪圖技術實在是讓人蹚目結舌。 晶片裡5千7百萬個電晶體可不是光擺好看的,它們每一個都被用到!看看那頂點著色引擎,像素著色引擎,高解析度抗鋸齒功能,交錯型記憶體控制器,Z軸嚙合剔除運算,這晶片實在是塞滿了高科技!讓我喘口氣來,現在好好一個個的複習一下這些新科技。

頂點著色引擎---Vertex Shader

我說過了,我很喜歡這項技術,因為它提供設計師很大的發揮空間。 我個人最喜歡的是反光和折射的那個展示,清楚的闡明了經由這種3D演繹技術造出來的景象可以那麼逼真。 但是!(只要有Dr. Tom,就會有'但是!')GeForce 3裡就只這麼一條頂點著色引擎管線,其運算能量是否足夠讓支援這些先進技術的遊戲達到可以玩的程度,而不是看的到,卻吃不到的糖果,還有待觀察。 現在,雖然頂點著色引擎單元直接就是固定的數目,其頂點運算程式的指令最大也只允許128道,NVIDIA還是決定GeForce 3只有一條頂點著色引擎管線。 Xbox應該會有兩條這種運算管線。 我不會說這樣子就足夠了,我只希望頂點著色引擎能運行的夠好。

像素著色引擎---Pixel Shader

這個運算單元好像先前像素填色單元的改良版。 我不知道它可程式化的特點足不足以讓效能大大超越前一代像素演繹單元。 像素著色引擎最主要的特色是,它是由頂點著色引擎所驅動著,從這觀點來看,這很有道理。 兩個是唇齒相依。 我不大會去擔心像素著色引擎的性能,縱使它的峰值數據低於GeForce2 Ultra。 新的記憶體控制架構可以確保GeForce 3在絕大部分的情況下比GeForce2 Ultra要好的多。

高解析度反鋸齒功能---High Resolution Anti Aliasing

這項絕活啊,哼哼,嘿嘿,嘻嘻,稱霸武林,唯我獨尊哪!我已測試了許多次,效能卓越,畫質也棒極了。 先前我都還不是很看得起這種反鋸齒功能,縱使我常用的系統是配備GeForce2 Ultra,當把反鋸齒功能開啟的時候,整個繪圖效能低落到根本不值得一試。 而GeForce 3讓反鋸齒功能美夢成真。 五點梅花排列法'Quincunx'的反鋸齒功能在解析度1024x768x32bit色深的設定下畫面更新率輕鬆的超過70禎/秒,這成績不僅是滿意而已,簡直是太棒了! 我只在想NVIDIA是不是該更換五點梅花排列法'Quincunx'這個名詞。 在網際網路上應該很快就會幫它另取個名稱。

 

高維區面---Higher Order Surface

這項技術我不知道該怎樣想。 老實說來,或許你注意到了,我並不看好。 它背後的構思是不錯啦,但我不認為現在是施行的好時機。 它的效能我也抱持懷疑的態度。

交錯型記憶體控制器---Crossbar Memory Controller

我該怎麼說呢!啊!我太喜愛了!總算有人聰明的做出一些有意義的事來,然後運用到PC裡的記憶體介面去。 Intel,Rambus,VIA及Co都該好好的上一課。 如果它們不趕快醒一醒,NVIDIA很快的就會挾著優勢技術進入晶片組市場。 NVIDIA的這個技術夠帶種,好耶!這就是我要的!

Z軸嚙合剔除運算---Z Occlusion Culling

我還記得當初我對ATi的Hyper-Z技術如何的讚不絕口,讓我幾乎感覺對NVIDIA有點不公平,因為對它們先前的z軸技術我並不是很賞識。 當然,能發展出一種可與ATi的Hyper-Z性能幾乎是並駕齊驅的技術,是一件明智的決定,但它並不是第一個,所以我的熱情還是稍稍保留。 但我還是要說 "作的好啊!NVIDIA, 你走對路啦!"

效能

可惜現在GeForce 3的驅動程式還不夠穩定到可用來作效能評比的測試。 這並非說GeForce 3不穩定,只是現在,在少部分的軟體上跑起來會怪怪的。 這就是為什麼最好是等一等成熟的驅動程式出來,而不是急著要跑出一些半生不熟的效能測試數據。 在這邊,我所做過的測試跑得都很快。 上面提到的五點梅花排列法'Quincunx'的反鋸齒功能性能極為卓越,Quake 3跑出很棒的成績來,特別是在全彩及高解析度下更是優秀啊!。 當你意識到有這麼一個交錯型記憶體控制器在中間幫忙的時候,這種高性能你會覺得是理所當然。 因為平常總是記憶體頻寬的不足在扯GeForce運算能力的後腿。現在市面上還沒有一款支援頂點運算程式的軟體,所以我也沒辦法測試頂點著色引擎的效能。 我從來不會去想2000版或是快出來的2001版3DMark的測試數據有什麼意義,我也不認為縱使它能對頂點著色引擎單元作效能測試會改變我這種的看法。 畢竟,你要拿這個數據去和誰比呢?就只GeForce 3有頂點著色引擎這種技術啊!

總結

GeForce 3上滿載的高科技功能肯定會讓地球表面上的科技狂熱份子尖叫。 但是,大部分的功能還沒法有一展手腳的機會,因為市面上還沒有能發揮這些功能的軟體。 我們都知道當初晶體內建的座標轉換與照明功能花了多久的時間才有現在的全球普及率,所以我也知道不會馬上就有支援頂點著色引擎或像素著色引擎的奇蹟軟體出現。 當前令GeForce 3值得一看的是卓越的高解析度抗鋸齒運算以及天才的橫木型記憶體控制器。 除此之外,GeForce 3還可以看成是Xbox程式設計師一個優秀的發展平台環境。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值