2008年5月6日 星期二

[教學]次世代的新圖像技術介紹Shader Model 3.0(PS3/360對應)




Shader Model 3.0(一)
  所謂的Shadel Model是Microsoft包含在DirectX9的繪圖技術,其中又可分為Pixel Shader(像素渲染)和Vertex Shader(頂點渲染),而版本從最早的1.1到2.0,再到2.0 Extended,再到目前最新的3.0版。Shader Model 2.0具有先進的光影和動畫繪製技術,在正式發表之後,硬體和軟體各方面支援都成長得非常快速,但是Shadel Model 2.0還是有其侷限性,在指令長度的限制和複雜性方面,仍然不能讓多數的遊戲程式撰寫者滿意,也因此到了DirectX9.0c正式推出的時候,Shader Model也跟著從2.0版演化成3.0版了。那麼,Shader Model 3.0相對2.0又增加了那些新要素呢?以下就讓我們分別從Pixel Shader 3.0和Vertex Shader 3.0這兩個部分來看看。Pixel Shader 3.0  在正式討論Pixel Shader 3.0(PS 3.0)之前,我們可以先看看下圖的Microsoft官方網站上為PS 3.0和PS 2.0所做的歸納比較表。
上面的表格牽涉到許多非常專業的繪圖技術(其實仔細比較一下2.0跟3.0的規格,可以發現到3.0的規格看起來是好上許多的),大部份的東西其實只要交給繪圖程式設計師煩惱就好,其中比較有必要討論的還是在Shader length(渲染程式指令限制)、Dynamic flow control/Dynamic branching(動態流程控制/動態分支選項),以及Multiple Render Targets, MRT(多重著色目標)等項目,另外還要再加上一個表上沒有提到的Predication(預測)。

Shader Length─我們可以從上面的表格發現PS 3.0的Shader可支援的指令個數,從96個大幅躍升到65535個以上,這意味著PS 3.0可以進行更複雜的繪圖指令演算,容納更多的光影及材質運算,讓程式設計師有較少的限制,而能發揮更多的彈性。不過這部份的技術較受限於硬體支援,較低階的顯示晶片未必能完全發揮這個部份的能力。

Dynamic flow control/Dynamic branching─Dynamic flow control不僅可以直接省略許多非必要的程式運算,也可以略過許多不需要用到的指令,而減少指令集的長度,增進顯示晶片的運算效率。而Dynamic branching則以類似的原理達到增進效能的目的,例如假設在一個畫面裡有多個不同光源變化的話,利用Dynamic branching的技術,就不需要為每個光源撰寫不同的控制程式,只要寫好一個控制程式再加上不同的控制選項就可以了,如此也可以大幅減少顯示晶片的運算負擔,提高運算效率。

Multiple Render Targets, MRT─MRT可以在所有物體模型完成著色後,再進行光影的計算,如此就不用重複計算場景了;另外,在場景中看不到的物體模型也會被略過不再計算,這樣也可以減少許多不必要的程式運算。

Predication─Predication基本假設在於,如果在某個情況下可能會運用到多筆的資料,與其預測哪一筆資料會被真正的運用,不如把每一個可能的資料都拿來處理,再把正確的資料送到顯示晶片繼續之後的運算。其用意在於,雖然一一處理每個具可能性的資料會較耗費運算資源,但仍會比用預測的方式來的有效率,不過這種方式能否真正提高效率,仍然有待觀察
Shader Model 3.0(二)Vertex Shader 3.0
同樣的,我們先來看看Vertex Shader 3.0(VS3.0)和VS2.0的歸納比較表,從上表來看VS 3.0新增的幾項特色,在Shader length和Dynamic branching的部份,其所代表的意義,其實和PS 3.0是一樣的,在此就不多所贅述,所以接下來只針對Vertex texture和Instancing support來做說明。  在之前的Shader Model版本,Vertex Shader是不能直接存取材質資料的,但是在VS 3.0裡卻是可以的,也因此VS 3.0可以進行所謂的位移貼圖(Displacement mapping),也就是藉由同時處理頂點(Vertex)與材質資料,為場景中的每個元件、表面、以及角色提供更高的層次感與逼真度,而這同時也可讓程式撰寫人員以較少量的運算,針對物體模型進行細部的修正。這種技術在畫面品質的增益上,就表現在能夠讓水波或衣服等的物體,具有更自然的波動和質感。

以6800 Ultra(PCI-E)執行Far Cry 1.2的水面場景截圖  
另外一個新增的Instancing API支援部份,則是可以讓程式撰寫者在單一的基礎模型下,做不同的細部變化,而產生大量類似但仍略有差異的模型。例如,在一個森林的場景裡,常常是以大量相似的草或樹組成,如果具備Instancing API支援的話,就不需要一棵一棵的處理,只要以一棵樹為基礎,加上不同的位置、高度、枝葉形狀、顏色等參數變化,就可以變化出一大片樹林,可想而知,這當然可以讓程式設計師省了好大一番功夫。
以6800 Ultra(PCI-E)執行Far Cry 1.2的森林場景截圖
ShaderModel 3.0對遊戲執行的意義 
 我們從上面的解說來看,其實Shader Model 3.0所加強的部份,大部份集中在讓遊戲執行更有效率,以及讓程式設計者可以以較少的程式撰寫心力達到同樣的執行結果,這些部份對程式設計師而言可能較有意義,但是對於遊戲玩家可以親身感受到的畫質增進部份,Shader Model 3.0其實著墨不多。不過在遊戲玩家同樣會注重的遊戲執行速度方面,有了Shader Model 3.0內含的多項新技術的加持,相信會帶給玩家一個令人滿意的表現。  我們之前有提到,兩大顯示晶片商中,目前只有nVIDIA的GeForce 6系列有支援Shader Model 3.0,因此GeForce 6系列擁有與Shader Model 3.0相容的CineFX 3.0引擎,也就成為nVIDIA所要凸顯的,領先競爭對手的優勢之一。而當初ATi因為認定支援Shader Model 3.0的遊戲軟體短期內不會很多,而決定不加入支援Shader Model 3.0的策略,在首款支援Shader Model 3.0的遊戲─Far Cry 1.2版正式面世之後,是否會跟著動搖呢?(ATi的認定真的是...,不曉得在想些什麼)  測試結果會說話,就讓我們拿兩家廠商目前最頂級的顯示卡─nVIDIA的6800 Ultra(NV45)和ATi的X-800 XT(PCI-E),實際執行Far Cry 1.2來測試看看,Shader Model 3.0究竟能對遊戲執行表現造成多大的影響,也藉此來驗證ATi在Shader Model 3.0方面的決策是否能夠經得起考驗。測試方式及測試平台說明  這次測試的兩大主角,分別是nVIDIA的6800 Ultra(NV45)和ATi的X-800 XT,兩者皆為PCI-E界面,頻率皆為原廠設定值,以下分別列出兩款顯示卡的頻率資訊,並列出在與Far Cry測試平台相同的情況下,3DMark03的測試分數,以供各位玩家參考。(還沒Run Far Cry就已經看到3DMark 03下的成績比對,看來X800 XT略遜一籌)

nVIDIA 6800 UltraV.S.ATi X800 XT




在正式測試之前,必須要先說明的是,Far Cry 1.2支援的Shader Model 3.0,是包含在DirectX9.0c裡,因此玩家們如果要以Shader Model 3.0執行Far Cry的話,除了必須把Far Cry升級到1.2版外,也必須下載DirectX9.0c,才能親身體驗Shader Model 3.0的威力。  而這次的測試是以batch檔執行的方式,一次跑四個場景,測試每個場景的平均FPS數值。比較特別的是,因為遊戲在首次執行新場景時,必須先載入場景資料,所以每一個場景都會連續跑兩遍,所有的測試結果也都是採用同場景的第二次測試數據,以資公平。這次測試的四個場景,分別是室內場景的Regulator和Volcano,以及室外場景的Research和Training,各自有不同的光影和貼圖需求,因此測試結果也有其差異性。  這次測試所使用的平台配備,以及四個測試場景的截圖,則分別表列如下:
CPU
Intel Pentium 4 550XE 3.4GHz(LGA775、2MB L3 Cache)
Mainboard
Gigabyte 8ANXP-D(i925X)
Memory
Corsair DDR2-533 512MB*2=1GB
H.D
WD360 10,000RPM 8M S-ATA
O.S and Patch
WinXP SP2、DirectX 9.0c
Driver
nVIDIA Forceware 61.80、ATi Catalyst 4.7





測試結果  在看測試數據之前,我們先來看一下,在遊戲解析度設定為1600X1200、Anti-aliasing(AA)為4X以及Anisotropic filtering level(AF)為8,並且把遊戲內定的所有畫質相關選項都調成Very High的最佳情況下,兩張頂級顯示卡的截圖比較。  不過正如之前所提到的,Shader Model 3.0在畫面品質方面的增益並不太多,況且在兩張頂級顯示卡的超高顯示能力一催之下,畫質的表現幾乎都沒什麼差別,一樣都是漂亮到不行,因此這次測試的重點,並不在於畫面的品質,而是在效能增進的差異。


6800 Ultra X800 XT


6800 Ultra X800 XT  
另外,再來看看這次造成Far Cry 1.2版被撤回的罪魁禍首─以X800 XT執行時所發生的貼圖錯誤。小編在測試期間,如果是實際進行遊戲的話,這種貼圖錯誤的情況,確實是滿常發生的,但是如果以batch檔進行測試的話,並沒有發現貼圖錯誤的情形。






























沒有留言: