王者歸來性能翻番 GeForce6技術解析
編者按:在慢慢閱讀本篇21頁的文章之前,對于急于了解NVIDIA GeForce 6系列強勁性能到底如何的用戶,您可以點擊【這里】的跳轉鏈接,搶先看看我們的預測試成績。然后再回頭細細品評全文,謝謝您的閱讀。
今天,2004年4月14日,在蟄伏了太久太久之后,NVIDIA終于正式發布了萬眾期待的GeForce圖形芯片的第6代產品,工業代號NV40的GeForce 6800系列圖形芯片及其板卡。

北京時間4月14日,NVIDIA在美國正式發布了其最新高端的GeForce 6系列顯卡——GeForce 6800標準版和Ultra版。NVIDIA方面表示,GeForce 6系列顯卡具備眾多新特性,其中包括更高速的整體設計架構、能夠適應最新的各類軟件標準、具備更高精度的編碼/解碼片上芯片,以及直接輸出HDTV等支持未來應用的最新功能。

由于這款顯示芯片非常引人矚目,從它設計之初,各類相關的傳言始終就沒有停止過。我們也曾經多次報道過關于這款神秘的顯示芯片的新聞,按照時間由近到遠的倒敘,我們來簡要回顧一下我們曾經的報道。
《NV40性能披露3DMark03成績輕松突破12000》
《把你看得清清楚楚NV40“意想圖”搶先看》
《驚人高功率NVIDIA NV40需要雙插頭供電》
《NV40 Logo釋出正式名稱敲定GeForce 6800》
……
和這個眾人期待的NV40相關的消息實在太多太多,你可以通過點擊【這里】的鏈接,看到我們“PCPOP-電腦時尚”所報道過的關于它的諸多內容。
GeForce 6800 Ultra要采取雙接口取電了
如果說過去諸多日子的期待和盼望已經讓DIY玩家們等得難以忍受,那么今天就讓我們一起宣泄壓抑已久的熱情,一起來仔細看看這位歸來的王者——NVIDIA GeForce 6800。<
NVIDIA GeForce 6系列圖形芯片最引人注目的技術就是最新開發,NVIDIA獨有的CineFX 3.0引擎了。
對于CineFX技術,大家可能對這個名字并不是很陌生。這一著名的引擎最初出現在NV30系列發布的時候。GeForce FX5800芯片上采用的就是第一代CineFX引擎。后來,NVIDIA推出FX5900和FX5700系列,伴隨著這兩者的問世,CineFX 2.0版本引擎也展現在了世人面前。而這次引人矚目的GeForce 6系列GPU的發布,也同時順理成章地把CineFX 3.0帶到了人們的視線里。

NVIDIA為GeForce 6系列新設計的標志
那么,這個CineFX 3.0引擎究竟有什么特別,值得我們如此關注呢?我們先來看看CineFX 3.0的 技術要點。
首先,CineFX 3.0完全支持微軟DirectX 9.0中的Shader Model 3.0,這個最新版本的Model包括大家非常熟悉的VertexShader 3.0以及PixelShader 3.0。這兩種渲染技術自DX8時代就是人們所討論的熱點,而到今天也已經是第三代了。現在看來,這兩個強力渲染技術還將成為未來游戲主要使用的熱點技術,前途不可限量。
其次,CineFX 3.0完全支持最初由SGI提出的OpenGL 1.5版本。雖然現在OpenGL在日常應用中的地位正日益有被DirectX取代的跡象,但不可否認的是,這種傳統的開放式圖形編程語言仍然有著強大的生命力。它的高效簡潔,仍然吸引著包括id Sofrware在內的諸多開發者為之著迷。
CineFX 3.0還支持微軟的High-Level Shader Language(HLSL,高級渲染器語言)、OpenGL Shader Language(OpenGL渲染器語言)和NVIDIA自己開發的CG著色環境——能夠讓游戲編程人員輕易將DirectX和OpenGL結合起來的編程環境。現在,正在有更多的游戲開發者使用CG來協調工作,提高開發效率。<
首先我們先來談一談GeForce 6系列支持的DirectX 9.0中的VertexShader 3.0。
對于VertexShader,很多關心圖形技術的朋友應該已經比較熟悉了,VertexShader直譯過來是頂點著色器的意思。VertexShader的具體過程就是完全處理網格中的每一個頂點,而處理的過程則是由程序員預先通過編寫好的程序來控制并實現。這個過程中,每個頂點的顏色、貼圖坐標等信息都可以任意修改然后生成。
更形象一點的說明,這就像一個C語言函數,輸入參數是一個頂點的位置、法線和顏色等,而輸出過程可以由程序員自己控制確定。然后所有這些通過三角形插值計算后傳到下一個函數——PixelShader去。至于如何處理輸入信息,如何生成輸出信息,都可以提前在這段程序中指定。

● 無限長度的頂點處理程序
在CineFX 3.0版本的VertexShader中,對于程序的長度已經沒有了限制。這也就意味著程序員可以根據自己的需要任意編寫渲染頂點用的程序,不必受原來的限制。
這里要額外說明幾個問題。圖形編程雖然屬于高級語言,但是仍然需要生成類似于匯編語言的代碼。在VertexShader 1.0中,對于最終的每個程序的代碼長度,DirectX限制是128條。到了VertexShader 2.0中,程序的長度增加到了256條。
筆者之前在沒有得到VertexShader信息的時候,曾經估計VertexShader 3.0指令的長度仍然會受到限制,但是將達到2.0版本的兩倍,也就是512條。但現在看來我們低估了這些業界的開發精英們。3.0版本的VertexShader的確在這個方面是有質的提高,而且給了大家,特別是圖形程序員一個大大的驚喜——長度無限了!
這點其實是非常重要的,因為如果在原來,程序員要利用VertexShader處理復雜的頂點信息,那么他在編程序的時候就需要受到舊版本VertexShader的限制。程序因此不能夠寫的太長,而需要分別的寫成數個程序,然后在具體執行時,一個接一個的運行。這樣的情況會造成程序在執行的時候,效率并不是很高,因為各個獨立程序之間的切換,以及數據傳輸都要占掉很多資源。
如果Shader有長度限制,原來可能還需要把一些比較復雜的效果分成幾種效果在最終進行組合,然后把模型分別用這些效果向屏幕的后備緩沖中繪制,這個過程會重復很多遍并疊加,這也導致效率降低。
而現在就好了,在新版本的VertexShader中,程序的長度不再受到限制,程序員可以通過寫一個獨立的程序來完成全部的操作。
這樣的好處不言而明,運行一個單獨的程序能夠省掉中間的跳轉的步驟,讓程序運行的速度加快。<
任何學過計算機編程的朋友一定都非常熟悉編程中的流程圖,“if、else、then”這些都是大家非常熟悉的控制程序流程的關鍵字。但是在圖形編程當中,控制程序的流程卻并不是那么方便。
但,這里我們的語氣要再轉折一次。過去圖形編程中的種種不便,在VertexShader 3.0的控制之下變得輕松了太多——它提供了全新的程序流程控制的能力,而現在GeForce 6系列GPU正是提供了對3.0版本的完全支持。

在VertexShader 3.0中,開發人員可以得到額外的分支選擇和各類循環的支持。開發者還能輕易的調用子程序,并能從子程序中獲取返回值。這些現在看似簡單的程序功能,卻能大大地讓程序執行效率顯著提高,特別是在配合了前面我們講到的“沒有長度限制的程序體”以后,就能讓編寫圖形程序更加的自由,讓效率更加的提升。
最后,我們簡要看一下新的程序流程包含的能力。
首先提供了一些新的指令,例如IFC/BREAKC、IF/BREAK/CALLNZ。這些指令大大豐富了程序開發者所擁有的功能,讓過去需要用很多指令才能實現的效果變得輕而易舉。
新版本渲染器提供一個統一的返回地址和地址寄存器的8級堆棧。這個堆棧能夠幫助實現分支以及子程序的調用,另外還能夠作為壓棧和彈出地址的寄存器用。這又大大方便了開發人員的工作應用。
最后,VertexShader 3.0還提供了條件代碼的選擇。讓用戶掌握更多的流程權力。<
置換貼圖(Displacement Mapping)這個名詞我們也已經比較熟悉,它早已不是第一次出現在我們的文章中。這種技術在業界通常有兩種叫法:CG美工通常稱之為置換貼圖,而游戲程序員通常稱之為位移貼圖。
我們知道,在游戲或者其他應用到3D圖形技術的地方,建模的時候通常為了節省資源,并不能夠將3D模型建得非常細致。一是建模的時候投入的精力會太多,二來更重要的是過多的多邊形雖然使效果更細膩,但也會嚴重影響速度。
但是,享受3D圖形的用戶卻是非常貪婪,因為他們不想面對一些直棱直角的方塊來“享受”他們的3D游戲,而希望在電腦屏幕上見到真實生活中的拱頂,見到恐龍的皮膚是粗糙而多毛,他們更希望水面波光粼粼……那么如何形成更為細致的3D效果呢?這就需要使用貼圖來實現。
我們這里要額外討論置換貼圖就是基于上述這些應用。那么置換貼圖究竟是如何實現凹凸的感覺的呢?
置換貼圖的過程就是按照一張灰度圖(表示表面凹凸的高度)來給頂點沿著垂直表面的方向一個位移,產生真正的凹凸。這要求模型比較細致。某些情況下,這還需要結合N-Pach曲面等技術,實時把模型細化,然后再用貼圖的方法將物體的貼圖補上。
我們以一個恐龍的頭部來作為例子給大家介紹。
僅僅有模型和貼圖的恐龍
首先,我們看恐龍的頭部。恐龍頭部的3D模型并不是很復雜,整個頭部圓滾滾的,簡直就不像是恐龍,倒是有些像海豹的頭部——特別是皮膚非常光滑。這樣的效果自然是不能讓消費者滿意的,我們就需要找出一種巧妙的方法“騙過”您的眼睛,讓您感覺到這就是一頭實實在在的恐龍。
現在根據恐龍頭部的細節生成一個凹凸細節的數據表,這個表僅僅是一個矩陣類型的數據,所以就要比真正的復雜的3D模型的數據量小的多得多。
接下來,我們把這個數據傳給圖形芯片。圖形芯片內部的引擎將這個數據附加在恐龍頭部的表面。根據矩陣中的每個元素置決定每個點的高度,實現3D效果。注意,這是3D模型中的點,而不是最后顯示成為2D的像素
使用置換貼圖的恐龍
最后,我們再把最初的恐龍頭部貼圖貼上,就成為一個栩栩如生的恐龍頭了。
以往實現這樣的效果并不是采用針對頂點實現的,而是通過每個像素來完成——這就是我們熟悉的凹凸貼圖技術。
大家可能還記得在Matrox當初推出G400的時候,其中有一項技術就是凹凸貼圖。這種技術和剛剛介紹的置換貼圖不同,它不改變模型,而是靠按照凹凸參數和光源方向來計算表面的亮度,從而最終模擬出凹凸的效果。<
頂點著色器復用流分頻器(Vertex Frequency Stream Divider)聽起來很玄乎的名字。我想大家一定看過《指環王》三部曲了吧,其中大量的軍隊就是利用電腦數碼復制來實現的。

真正在做動畫的時候,不可能將每個半獸人的模型都完全建立出來,但是我們卻在電影中看到了一支栩栩如生的軍隊。那是因為每個模型雖然一樣,但是運動的方式卻并不完全相同。這些各自變化著的動作,使人們在看電影的時候宛如真的面對一支龐大部隊的千軍萬馬——這可不能塑造成國慶大典上整齊的禮兵隊,反而看上去不真實了。
NVIDIA GeForce 6系列GPU支持的VertexShader 3.0中就有一項技術是用來實現上述這種宏大效果的,這就是頂點著色器復用流分頻器(Vertex Frequency Stream Divider),這個技術能夠實現相同模型的不同動作,讓大批量的模型顯得是形態各異。
復雜的場景再也不是電影的專利
程序員可以預先設定不同的運動參數,然后分別賦值給任何一個單獨的模型。在程序運行的時候就能實現《指環王》中,獸人軍隊的出征的效果。
在這樣的特效支持中,筆者相信采用大量模型的游戲就會隨后推出,到時候在實時的3D游戲中享受電影般宏偉的效果再也不是夢想了。<
說完了VertexShader 3.0,就該接著說說和它齊名的另一項技術——PixelShader 3.0。自從微軟的DirectX中把Shader Model推到前臺,這兩個技術就從未分開過。
和VertexShader處理頂點數據不同,PixelShader(像素著色器)處理的是每個像素的數據,也就是最后生成2D圖像以后的工作。所以PixelShader是3D圖形中最后的步驟。
GeForce 6系列GPU中帶來的CineFX 3.0引擎提供了對PixelShader 3.0的支持,將像素著色的精度提高到了32位,而且GeForce 6系列GPU提供了原生的32位像素處理能力。

● 無限長度的像素處理程序
我們前面在介紹VertexShader 3.0的時候就提到了這點。第3代CineFX支持的PixelShader 3.0中同樣不再限制像素著色程序的長度。
據現在發布的情況看,原來像素著色器每個程序要求的最大長度為96條指令,而現在程序員們就可以根據自己的需要任意加長程序長度了。
這其中的好處,基本上和前面我們提到的一樣。首先是能夠實現更復雜的特效,然后更能免除在程序調用上的資源浪費,而且能夠用一個程序實現原來多個程序的功能,讓效率得到明顯增加。
● 動態程序流程控制
在程序長度不再受限制的同時,PixelShader 3.0也同樣增強了程序流程控制方面的功能。
新的PixelShader 3.0完全支持子程序、循環和分支的程序流程,提供了循環計數寄存器和條件碼的支持,還提供了一個新的back/face寄存器,給與了程序員完整的控制能力。
● 靈活的數據類型支持
CineFX 3.0支持自由的數據類型的使用,也就是程序員可以自由的選擇使用16位或者是32位浮點數據來存儲操作數據。雖然這兩種數據類型的使用并不會對性能造成影響,但是32位浮點模式需要占用更多的存儲空間。
支持16位浮點操作數的另外一點原因,就是在電影行業的數碼處理中使用的是這一標準,通用的數據類型能夠讓電影和CG制作人員輕易兼容使用。<
● 多渲染目標(Multiple Render Targets)
GeForce 6系列圖形芯片支持的PixelShader 3.0中還支持一種較新的技術,我們要額外放在這一頁來簡要介紹。這就是多渲染目標(MRT)技術。
這種技術的作用就是將每像素的數據保存到不同的緩沖區當中。這樣的好處就是這些緩沖區數據由此可以成為照片級光照效果著色器的參數。
在這種方法的幫助下,光照可以在所有幾何圖形被渲染以后最后進行應用,不再需要進行多步的渲染。因而這種技術也可以被稱為延期著色(Deferred Shading)。存儲在這種類型的表面中的數據可以包括位置、法線、顏色以及材質的信息。
我們來看一個MRT技術用于產生一個高動態范圍的場景的實例。
在第一個渲染步驟,開發者創造出3個輸出緩沖區,這包括:1個顏色的貼圖、1個法線的貼圖和1個深度的貼圖。
在第二個步驟,使用法線和深度貼圖結合光照條件計算出光照。然后,場景在帶有顏色貼圖的情況下被精確地照明。
最后在第三個步驟中,超過0~1范圍的超高亮度的光線值被帶入場景中,計算包含高亮度像素附近的像素的發光。這個步驟產生出難以置信的發光效果。<
● 額外的視覺效果
CineFX 3.0增強的性能和新技術使得程序員們能夠創造出與以往不同的特征和效果,除了前面談到一些要點外,這些新的增強還包括如下內容。
◎ 次表面散射
皮膚和表面呈現出深度感,光線隨著深度產生變化,這就可以表現出非常逼真的半透明效果。
◎ 柔和陰影

這個技術使得陰影不會顯得很刺眼。場景中由光線和物體陰影構成的邊沿,看上去很柔和,因此更精確地表現出實際的狀況。
◎ 環境和地面陰影
陰影可以投射到周圍環境表面上,諸如草或者其他植物上,不再會有眼睛可見的異常或者影響性能。32位流水線允許地面陰影精確地隨著觀察點的移動而移動。
◎ 全局照明(Global Illumination)
預渲染和實時渲染之間一個最主要的區別就是光照。要產生盡可能逼真的圖像效果,電影渲染工具通常需要花費以小時計的時間來確定場景中光線在物體之間反射的情況。
由于支持接近無限長度的像素著色器程序,以及浮點格式的濾波以及顏色混合,這些難以置信的復雜效果可以以接近實時地完成,因此給實時的應用程序帶來更接近照片級質量的效果。<
當顯卡性能發展到一個階段后,幾乎所有的廠家都會開始更多地關注畫質。
我們已經了解到GeForce 6系列圖形芯片支持的CineFX 3.0引擎的一些技術,如果說這些全都是性能方面的新增長點的話,那么GeForce 6系列圖形芯片還提供了更加完美的畫質方面的提高。
NVIDIA的GeForce 6系列圖形處理單元(GPU)將高品質圖像的性能和精度推向更高的層次,讓開發人員能夠借助GeForce 6圖形芯片的強大威力創造出更加真實的畫面。
魔幻風格的包裝預示著魔幻般的效果
◎ 新一代的NVIDIA的圖形芯片采用了創新的超標量架構,可以支持在一個周期內處理更多操作數,避免了在圖像質量和速度之間的矛盾,并且大大提升了圖形效果的標準。
◎ 在完全支持32位浮點的整個流水線的驅動下,GeForce 6系列GPU提供的完整128位顏色給電影般的圖像效果帶來了可能性。
◎ 程序員可以工作在更具有存儲效率的16位格式,而當場景需要最干凈、最高的視覺沖擊效果的時候,又能輕易地轉換到完整精度。
◎ 新的NVIDIA擴展高動態范圍(High-Precision Dynamic-Range,HPDR)技術是GeForce 6系列架構的一部分,它基于Industrial Light & Magic OpenEXR標準,但更進一步提升了靜態和動態圖像品質。具有了NVIDIA HPDR 技術后,影像中的物體運動會變得更流暢,紋理細節也會更精細。
◎ GeForce 6系列產品還包含了新的旋轉柵格(Rotated-Grid)反鋸齒系統,它使得顯卡有更精確的像素顏色表現,使得多邊形邊沿更清晰、精確和平滑。<
● 超標量設計
超標量設計,這個技術名詞我們其實早就聽說過,不過都是在一些關于處理器的信息中看到的,而對于顯示芯片,采用超標量設計才是比較新的一種方式。
作為超標量設計,其實就是在一個時鐘周期內完成多個操作,從而實現性能的翻倍。為了更好的解釋問題,我們先來看看傳統的著色器。

沒有采用超標量設計
我們看到,在這樣的情況下,整個著色單元擁有一個像素著色單元,由于每個單元的處理能力是4個操作,所以每一個時鐘周期能夠完成4個操作。

采用超標量設計
我們再來看看采用了超標量設計的GeForce 6系列圖形芯片的著色器。它擁有了第2組著色器單元,每個周期能完成兩倍的像素操作,也就是8個操作。
憑借兩組著色器單元,GeForce 6系列圖形芯片的體系架構可以支持真正的并行雙路處理,也就是在不同的著色器單元上同時執行兩條指令。
有些體系架構也會嘗試采用非超標量的單著色器架構來實現單周期雙指令執行。然而這種體系架構和我們今天介紹的GeForce 6系列圖形芯片擁有的架構卻完全不同,因為它們在完成著色的方式上的區別是非常大的。

傳統的架構(左)對NVIDIA超標量架構(右)
對于單著色器架構,只有兩條指令在同一個著色器單元上執行,并且兩條指令必須作用于同一像素或者全部字段的分量上。
而在GeForce 6系列圖形芯片的體系架構上,我們能在像素分量上實現更多的總算術計算的吞吐量。在每個周期里,雙著色器單元能在每個周期執行4條指令,相當于每個像素能進行了8個操作。
● 全32位浮點處理
GeForce架構始終允許游戲開發人員可以為每個畫面或者場景選擇所需的精度級別。隨著GeForce 6系列圖形芯片正式支持32位精度,現在開發者的選擇更簡單了,因為使用全32位浮點精度的時候會造成性能降低的問題已經消除了。
開發人員依然能在優先考慮內存空間利用率的時候使用16位模式,但是他們能夠在需要更加精細的畫質以及效果的時候采用32位精度。那樣就能夠做出效果更為出眾的圖像,而用戶也將體驗到更豐富、更絢麗的畫面,游戲開發人員也能夠以此讓自己的作品獲得更好的評價。<
● NVIDIA HPDR技術
我們在這一部分開篇的時候就提到了NVIDIA的HPDR技術,這一技術的全稱是High-Precision Dynamic-Range,說明白就是讓顏色更加豐富的一種技術。說到這里可能有些朋友會產生疑問:系統支持的顏色不就是32位么,要那么精確的顏色也顯示不出來。
我們知道,在電腦上顯示顏色并不能夠顯示所有的顏色,因為自然界中的顏色是無數的。人們將自然界中的顏色總結以后以紅綠藍三原色的結合來表示,為了表現亮度,又加入了Alpha值作為亮度的表現。
我們電腦上能夠顯示的顏色目前是紅、綠、藍、Alpha等4個通道,每個通道8bit,也就是每個通道上2^8=256種顏色,存儲一種顏色就需要4個8bit的空間,也就是32bit的空間。
然而,在實際的圖形處理中這樣的精度仍然是不夠的,隨著圖形的運算,其中顏色的部分也將產生變化,那么這就不能保證變化以后仍然是標準的每個通道256個顏色值中的一個了,勢必會有非整數的顏色值產生。在存這個數據的時候就不免涉及到取整的操作,經過多次的運算,最終產生積累誤差,造成圖像色彩細節的丟失。
那么如何解決這個問題呢?NVIDIA的GeForce 6圖形芯片就提供了一種解決問題的方案,就是在運算的過程中采用了精確度更高的高精度浮點值來存儲顏色。傳統的用來存儲顏色的32位寄存器因此就不夠用了,GeForce 6系列圖形芯片會自動采用更大的非標準寄存器來存儲顏色數據。只是在最后顯示的步驟再轉換成標準的顏色數據。
采用這種技術的好處就是能夠讓圖像中的細節始終保持很高的水平,我們來看一張截圖:
在這個HDR光照的示例中,白光范圍非常亮,而下方大理石板的暗部細節依然保持完好。
我們注意到,這張圖中的亮度變化比較大,但是如果注意暗的地方的話,我們可以看到:暗部的大理石的細節保持的非常好,而不想我們之前經常能夠見到的有所不同。因為在這樣有高亮的光源的環境中,為了形成相應的對比,暗部的細節會在對比下而有所損失。
GeForce 6系列架構提供了NVIDIA HPDR技術,能達成實現強大高動態范圍的渲染技術的需求。NVIDIA EXR在著色渲染、混合渲染以及濾波操作的時候都提供了廣泛的數據精度,改善包括靜態和動態的畫面效果。
結合NVIDIA EXR技術,高動態范圍渲染就能夠高效、漂亮地執行。渲染任務可以分為為3個環節——光傳遞、光調影射、色彩及伽瑪糾正。
接下來我們分別再來看看這3個過程。<
● 光傳遞
首先我們來看看光傳遞(Light Transport)。我們先來理解一下這個過程。首先我們知道只有光線照在物體表面,然后反射到眼睛里以后才能看見,然而我們會發現在現實生活中,即使在陰影中的物體我們依然能夠看到,這就是因為雖然沒有直射的光線照在上面,但是從別的物體上的反射光依然能夠照射到它,再反射到我們的眼睛里。
實際場景中的光線反射是相當復雜的:光線不斷的被反射,最終讓整個場景中都充滿了或明或暗的光線。光線在物體間不斷的反射也就是光傳遞的實質。

然而在計算機中需要模擬真實的效果卻非常麻煩了,因為實際情況的數據量是無限大的。如果需要計算光線在場景中的不斷的反射情況,就勢必需要處理大量的光線數據,這其中包括幾何位置、貼圖映射、光源位置、光的反射率等必不可少的眾多繁雜信息。
這些數據的數據類型是沒有要求的,這也就意味著采用越高的精度來存儲數據,就能夠表示越高的動態范圍,到最后就能顯示出越高的細節,讓用戶看到豐富真實的細節。
NVIDIA的GeForce 6系列的支持的HPDR技術,遵循了和OpenEXR標準一致的一種名為SM10e5的編碼方法來存儲光線的數據,這種數據格式包含了1個符號位、10位尾數以及5位指數,用來反映光傳遞的信息。
這種編碼方法表示的數據的表達式是根據要求動態范圍的不同而不同的,我們來看看這種SM10e5編碼的表達式。
● 色調映射
接下來的過程是光照傳遞相位的輸出數據會被映射為二維影像的顏色值和操作指令。這樣的處理被稱作色調映射。
● 色彩及伽馬糾正
在最后階段,就是色彩及伽馬糾正,把這些色彩數值從一個標準的紅、綠藍“色彩空間”轉換為顯示器的紅、綠、藍“色彩空間”。
另外,伽馬糾正會被后期應用,因此在轉換到最終顯示設備的處理過程中,需要對色彩強度的對數微分進行計算。
動態高范圍技術(HPDR)渲染效果就是對存儲高精度色彩信息的一個最好應用。在渲染場景時,計算結果首先以高亮度差、高精度的浮點顏色保存在一個離屏表面(Off Screen Surface)中。然后,通過最終的色調映射過程,將這些顏色轉換到在屏幕上顯示的顏色范圍內。這不僅能夠使顏色效果顯得更豐富、更柔和,還能實現一些類似于瞳孔在不同強度的環境光條件下自動調節大小以調整亮度的效果。<
● NVIDIA EXR GPU需求
為了實現這種渲染方式,GPU必須具備浮點精度的著色、混合、濾波以及貼圖功能。而最重要的是,還必須有能力把這些色彩數據以原有精度(或近似原有精度)存儲起來。因為只有這樣,浮點數據的對數特性能夠被保存起來。如果中間處理的結果仍以每象素256級別存儲,那么GPU所具備的一切浮點顏色處理都等于是白費。
● 浮點著色
正如前面提及的,32位著色是GeForce 6系列GPU的原生操作模式,著色操作能夠以最高的速度執行,同時保持最高的精度。也就是說在向表面輸出顏色值時,GeForce 6系列天生就有極高的浮點精度。
● 浮點混合
混合操作是指把之前渲染的像素和給定位置的新近渲染像素進行結合。根據渲染的效果,這些數值會被混合為一個最終的色彩值。以前的混合都是從每通道256級別的貼圖或屏幕緩沖中取出顏色,然后再進行混合。而現在更高的精度意味著像素混合的結果更加精確、品質更高。像運動模糊、柔和陰影以及需要對一個場景的多個動態光照計算進行累積,這些需要顏色混合的特效都能從浮點混合受益。
● 浮點濾波
濾波操作是指利用濾波器對像素操作,讓場景中的對象看起來更銳利或者更平滑。在早期沒有濾波效果的硬件上,場景中的貼圖紋理會出現馬賽克的感覺。
濾波主要包括雙線性濾波和三線性濾波。當像素處于狹窄觀察角度的時候,濾波同樣能讓畫面品質起到銳化的作用(即各向異性濾波)。例如廣闊地面的貼圖,如果不使用各項異性濾波,在遠處很可能出現模糊的現象。
其他的浮點濾波效果還包括了色調映射、光輝等,這些都是做高動態范圍渲染所要求具備的功能。如果沒有浮點濾波,對于顏色平滑過渡的紋理,很容易出現顏色像階梯一樣分布的結果,使效果大打折扣。此外,NVIDIA GeForce 6系列GPU還支持更高的精度級別和16倍的各向異性濾波。
● 浮點貼圖
貼圖操作是指對一個給定的多邊形貼上一張紋理。原來的紋理像素色深最大是32位,每個顏色通道8位,而現在具備浮點貼圖功能后,我們就能實現諸如全方位陰影映射(利用向接受陰影的物體投射陰影貼圖實現柔和陰影效果)、景深效果(即影視作品里那種近處清楚、遠處模糊或遠處清楚、近處模糊的效果)以及光線追蹤(如玻璃、金屬的折射、反射)等獨特的效果。
由于陰影貼圖中保存的是物體與光源的距離信息,所以以前要保存這個信息,必須利用PixelShader將距離分發到RGBA等4個顏色通道中去(就好像數字7839,利用RGBA分別保存7、8、3、9,記住,每個通道只能保存0~255),最后恢復時再用7×1000+8×100+3×10+9)。
在每像素計算的情況下,這將帶來極大的計算浪費。而現在,僅用一個浮點顏色通道就可以十分精確的記錄這個距離信息,無需任何多余的轉換!景深效果的道理也是一樣。<
● 存儲色彩
如前所述,GPU必須有能力把這些色彩數據以原有精度(或近似原有精度)存儲起來。因為只有這樣,浮點數據的對數特性才能夠被保存起來。否則GPU所具備的一切浮點顏色處理都等于是白費。
GeForce 6 GPU通過OpenEXR、sRGB等顏色格式,提供了高精度的、含有指數表示(即將浮點數表示為0.3245×10^24)的顏色存儲能力。這種能力將成為HDRI(高色彩范圍渲染)技術中的關鍵一環——色調映射過程能夠正確進行的保證。
表格1中我們給出了sRGB、OpenEXR的表達范圍差別。OpenEXR為光線傳遞等計算提供了相當大的表達范圍。不過對于任何存儲和映射類型而言——例如那些在用于高動態范圍渲染階段的色調映射和色彩糾正——sRGB是更為明智的選擇。
| | Range | Precision | Storage* | Notes |
| RGBE | 76.8 dB | 9-bit log | 189.8 Mb | Radiance- compressed 32-bit float |
| 32-Bit TIFF | 76.8 dB | 24-bit log | 759.4 Mb | IEEE-754 32-bit floating point |
| OpenEXR | 12.0 dB | 11-bit log | 379.7 Mb | ILM-developed 16-bit floating point |
| e-sRGB 12 | 4.6 dB | 12-bit poly | 213.6 Mb | Clamped at [–0.53..1.68] |
| 16-Bit int | 4.8 dB | 16-bit linear | 379.7 Mb | Clamped at [0..1] |
| sRGB | 3.5 dB | 8-bit poly | 189.8 Mb | Clamped at [0..1] |
| RGBA | 2.4 dB | 8-bit linear | 189.8 Mb | Clamped at [0..1] |
NVIDIA EXR技術解決了高動態范圍渲染的難題。它提供了一種等同于專業攝影棚品質的16位浮點渲染格式,用于光線傳遞階段的存儲、混合、著色、貼圖以及濾波操作。此外,NVIDIA EXR技術還允許在色調映射和伽馬糾正階段采用sRGB格式。
“對于電腦圖形來說,正確地表現肉眼對真實世界感知的大范圍色彩和光照,一直以來都是巨大的挑戰。現在NVIDIA公司已經完全支持浮點貼圖、浮點混合以及sRGB伽馬糾正,在高動態范圍渲染中再現精確的色彩和光照變得簡單易用了。”NVIDIA的技術經理Herb Marselas如是說。
最讓人叫絕的是,NVIDIA EXR技術是完全基于硬件執行的。無需像素著色器程序編碼或者解碼。對于程序員來說,這無疑是一個福音。此外,該技術已經在微軟DirectX 9.0和OpenGL中獲得支持,這意味著它日益成為一個公開的標準。<
● 旋轉柵格抗鋸齒
最新一代的NVIDIA GeForce GPU引入了一種旋轉柵格抗鋸齒取樣算法。與以前的4點取樣抗齒相比,基于像素的相同數量的取樣樣本,這種新的取樣方式能以領先于業界的性能,提供顯著增強的色彩精確性。

在此之前,每個像素的4個子像素取樣點位于一個2×2的正規柵格樣板內。透過些微地旋轉4個子像素的柵格,這種新的抗鋸齒方式就能提供相當于一個4×4菱形柵格的取樣信息。以前的4個取樣點,由于是呈正方形分布的,所以在每一行、每一列上存在兩個重復的取樣點。

這種重復性將導致相對來說取樣范圍的減小。而新的取樣方式中,每個行/列上都有一個取樣點,但是行數和列數相當于原來的2倍。這樣就相對擴大了取樣范圍。這無疑是一種極為巧妙的技巧。在圖片的范例中,請注意GeForce 6的子像素模板如何被旋轉為菱形。
旋轉柵格方式允許子像素更好地覆蓋在水平方向和垂直方向上。在圖片中您可以看到GeForce FX架構體系提供了兩個垂直值和兩個水平值的覆蓋面,而GeForce 6的覆蓋面提供了4個跨越水平和垂直子像素位置的值。這更多的覆蓋面能為多邊形邊緣提供更高的色彩精確性。<
提起UltraShadow和Shadow Volume(陰影體積),可能大家耳熟但似乎不太明白。可如果我們提到DOOM3就形象多了——沒有人不為其中逼近的影視質量的光影效果所折服。

但是目前的顯示硬件在運行DOOM3時都顯得有些力不從心。沒關系,新的NVIDIA GeForce 6系列圖形處理器引入了NVIDIA公司的UltraShadowⅡ技術,該技術加速了互動環境中陰影交集偵測的計算。
UltraShadowⅡ讓開發人員在下一代游戲中引入更復雜的光照效果和高品質、影片級的真實感。屆時這種技術將大大提高像DOOM3這種具有復雜光影效果的游戲的運行效率。
那么什么是UltraShadowⅡ呢?在介紹它之前,我們先來看一下在DOOM3等游戲中生成逼真陰影的原理。簡單的說,就是將物體沿著光線的方向擴展成一個棱臺,在棱臺內的物體就是處于陰影中的物體。這個棱臺就稱為“陰影錐”或“陰影體積”。而如何判斷物體是否在這個陰影錐內,就全靠一個稱為“模板緩沖”(Stencil Buffer,也叫“蠟版緩沖”)。
它的原理就像蠟染中的蠟層一樣,可以遮罩住屏幕上的任意區域,使得這些區域不被繪制。通過設置物體和陰影錐的深度,經過比較和一些運算,可以將要繪制的在陰影中物體對應于屏幕上的像素,利用蠟版緩沖遮罩住。
這樣我們再通過一種稱為“多遍繪制”(Multi-Pass Render)的機制,首先繪制陰影部分的物體的顏色,然后用蠟版緩沖將這些部分遮住,再繪制有光照的部分的顏色。對于每個光源都要做一次這樣的操作,就可以實現精確陰影的效果。
UltraShadowⅡ可以在生成蠟版式陰影錐時,提供雙倍的運算動力,讓像素處理速度獲得雙倍的提升。對于開發人員來說這樣的好處是免費、透明且無需額外編寫代碼的。GeForce 6硬件能透過這種新的較上一代提升4倍的陰影錐生成速度來實現這樣的好處。<
此外,NVIDIA UltraShadowⅡ讓編程人員透過消除不必要的區域運算,來實現更高速的計算陰影。由于以前模板陰影錐技術中不考慮光源和陰影的影響范圍,所以有可能陰影后面,遠處不在陰影中的部分也被加入處理過程中。這會帶來象素填充的浪費。
結合UltraShadowⅡ技術,編程人員能夠通過光源和陰影的范圍,定義一個場景中的遠近的界線區(通常稱之為“深度界線”)。這個界線能夠把計算限制在受光源影響的指定遠近范圍區域內。這樣,整體的陰影生成處理就能夠顯著地獲得加速。圖片中表示出了我們定義的一個場景子區域,把光照和陰影的計算限制在每個光源作用的有效區域內。
在接下來的插圖中,你可以看到使用UltraShadowⅡ技術,充分地降低需要被檢查的陰影區域的大小和需要考慮的物體數量。UltraShadowⅡ透過去掉處在陰影中的像素(讓硬件忽略不會作用于最終畫面的陰影像素),切切實實地實現性能提升。
我們看這個DOOM3中的場景。
這些線是通過UltraShadowⅡ進行陰影和光照計算后,產生物體輪廓的陰影投射線,即陰影錐的棱邊。
同樣的圖像,應用UltraShadowⅡ并將處理范圍限制在一個遠近界限區之內——生成較少的物體輪廓陰影投射線。
UltraShadowⅡ技術同樣能和NVIDIA智能取樣3.0版的技術完美配合,確保陰影邊緣能獲得正確抗鋸齒效果,防止斑塊或者鋸齒觀感。
有了GeForce 6系列GPU和UltraShadowⅡ技術,即將問世的下一代游戲例如DOOM3就能獲得戲劇性的執行性能提升。同時通過UltraShadowⅡ實現的精確光影效果,也為游戲畫面向影視級視覺效果進軍作出了巨大貢獻。<
現在的顯示卡不僅要求有出色的3D圖形性能和完美的游戲畫質,支持更多應用,提供完善的功能也是非常必需的,而作為這些應用中最重要的就要算是視頻解碼了。
我們還記得在486/586的時代,一塊能夠看VCD的解壓卡當時已經成為了多媒體電腦的標準配置,然而隨著CPU的性能的增強,軟解壓逐漸占據了上風,硬解壓卡逐漸被淘汰。
現在,隨著視頻壓縮技術的不斷進步,對解壓視頻的要求也越來越高,最典型的例子就是微軟的WMV9視頻壓縮,它高達1080線的分辨率讓很多強力電腦已經無法暢快播放。顯卡內部集成解壓功能的要求日益強烈。
GeForce 6800 Ultra號稱整合了業界第一枚片載視頻處理器(Video Processor,VP),具備了強大的可編程視頻處理能力,能夠接替大部分的視頻編碼操作,并且能夠提供高品質的視頻解碼,支持廣泛的視頻編碼格式和高帶寬視頻內容保護(HDCP)技術。

GeForce 6800 Ultra提供了強大的視頻編碼、解碼支持,能夠實現MPEG-2(標準分辨率以及高清晰分辨率)、MPEG-4(DiVX)、WMV9(標準分辨率和高清晰分辨率)的硬件編碼和硬件解碼。
GeForce 6800 Ultra的VP還提供了自適應消除場交錯現象、高品質的縮放、伽馬糾正、噪點降低、WMV9/H.264的運動補償和色塊消除的硬件支持,這些特性都能有效地降低CPU的運算負擔,并且有效地提升畫面品質。
在視頻領域,GeForce 6800 Ultra的發展空間相當廣闊,視頻編輯軟件如果搭配了GeForce 6圖形芯片就能夠實現相當高速的視頻處理能力,日前,據稱Adobe公司已經決定在其下一代視頻處理軟件《After Effect》中提供對GeForce 6800 Ultra的支持,大大提高在非編操作以及特效制作上的效率。 <
最后我們來看看GeForce 6800 Ultra顯卡的具體規格。
| | ATI Radeon 9800XT | NVIDIA GeForce FX5950 Ultra | NVIDIA GeForce 6800 Ultra |
| 核心名稱 | R360 | NV38 | NV40 |
| 核心技術 [bit] | 256 | 256 | 256 |
| 制程 [μm] | 0.15 | 0.13 | 0.13 |
| 晶體管數量 | ~107 Million | 130 Million | 222 Million |
| 顯存位寬 [bit] | 256 GDDR | 256 GDDR | 256 GDDR3 |
| 顯存帶寬 [GB/s] | 23.4 | 30.4 | 35.2 |
| 像素填充率 | 3.04 Gigapixel/s | - Texelrate (Color+Z): 1900 texel/s | 未知 |
| 最高FSAA 等級 | 6× | 4×/4×MS+2×SS | 4×/4×MS+2×SS |
| 三角形生成能力 | | | |
| AGP總線 | 2×/4×/8× | 2×/4×/8× | 2×/4×/8× |
| 顯存容量 | 256MB | 128/256MB | 128/256/512MB |
| GPU 頻率 | 412MHz | 475MHz | 400MHz |
| 顯存頻率 | 365MHz [730 DDR] | 475MHz [950 DDR] | 550MHz [1100 DDR] |
| 公板顯存 | Hynix BGA specified for 400MHz | | Samsung 600MHz GDDR |
| Vertex Shader數量 | 4 | FP Array | 6 Units |
| 像素著色管線 | 8×1 | 4×2/8×0 | 16×1/32×0 |
| Textures per Texture Unit | 8 | 16 | 未知 |
| Vertex Shader 版本 | 2 | 2.0 | 3.0 |
| Pixel Shader 版本 | 2 | 2.0 | 3.0 |
| DirectX 版本 | 9.0 | 9.0 | |
| FSAA 方式 | MultiSampling | MultiSampling Mixed Mode | MultiSampling Mixed Mode |
| 顯存優化 | Hyper Z Ⅲ+ | LMA Ⅱ Optimized | LMA Ⅲ Optimized |
| Optmizations | SmartShader 2.1 | IntelliSample HCT | IntelliSample 3.0 |
| 顯示輸出 | 2 | 2 | 2 |
| 芯片內Ramdacs | 2×400MHz | 2×400MHz | 2×400MHz |
| 單顏色通道色深 | 10 | 10 | 10 |
| 其他 | TV Encoder On-Chip;FullStream | TV Encoder On-Chip;Extended Progammability | Video Processor and TV Encoder On-Chip;Extended Progammability |
| 發布售價 | $499 [當時價格] | $499 [當時價格] | $499 |
由于目前我們還沒有拿到樣卡,因此無法為大家拿出一個非常豐富的數據測試。但是我們從得到的資料中已經得知了一些GeForce 6800Ultra的測試數據。
我們針對上述數據,搭建了和NVIDIA測試GeForce 6800Ultra類似的一個平臺,按照最相近的設置進行了簡單的幾項測試。
我們先來看看NVIDIA測試GeForce 6800Ultra的測試平臺:

接下來是我們的測試平臺。
| 硬件系統 | |
| 處 理 器 | Intel Pentium4 3.0GHz [800MHz FSB] |
| 主 板 | 華碩 P4P800 [865PE芯片組] |
| 硬 盤 | Seagate Barracuta Ⅴ 60GB |
| 內 存 | OCZ 256MB DDR400×2 |
| 顯 示 器 | 愛國者 998FD |
| 電 源 | 鑫谷 400W P4 電源 |
| 驅動程序 | |
| 主板驅動 | Intel Chipset Inf |
| 顯卡驅動 | ForceWare 60.72 催化劑 4.4 |
| 操作系統 | 英文Windows XP + SP1 |
值得注意的是,因為GeForce 6800Ultra的性能已經過于強大,所以在通常的測試過程中即使是目前最高端的CPU也成為了整個系統的瓶頸,所以我們按照NVIDIA的建議,將所有測試的分辨率均設置為1600×1200像素。




測試的成績讓在場的編輯瞠目結舌——GeForce 6800Ultra的性能已經強大到了能夠將目前的最高端顯卡遠遠勝出的境地,各項測試成績要比GeForce FX5950 Ultra以及R9800XT高出100%以上。
羅馬不是一天建成的,代號NV40的GeForce 6系列如此搶眼的表現更絕非偶然。早在NV30 完成芯片的物理設計之前,NV40的研發就早已結束了論證階段,而順利進入開發的中期。
到了2003年年初,NVIDIA對于NV40的性能已經得到了初步模擬的結果,在去年中期這款令人引頸的產品進入了樣卡階段。

2.22億晶體管幾乎撐爆了0.13μm的極限
歷時18個月,前后投入10億美元研發,GeForce 6終于氣度不凡地向我們走來,驚人的16條像素流水線,2.22億晶體管幾乎撐爆了0.13μm的極限。就在這等同于4顆P4C晶體管總量的背后,確實更令人吃驚的成本控制——GeForce 6不會比FX5950U更昂貴太多。拜合作伙伴IBM頂尖的電路冗余技術所賜,GF6的自我糾錯能力空前強大,這一切讓我們有了面對“指環王”一般的敬畏感。
近期我們還將推出更為詳盡的評測以及相關的專題頁面,請隨時關注本站的后續報道。<
關注我們


