王者歸來性能翻番 GeForce6技術解析
首先我們先來談一談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中,程序的長度不再受到限制,程序員可以通過寫一個獨立的程序來完成全部的操作。
這樣的好處不言而明,運行一個單獨的程序能夠省掉中間的跳轉的步驟,讓程序運行的速度加快。<
關注我們


