Directx发展史
DirectX發展史及DirectX10.0
如果說PC用戶不會不認識Windows操作系統的話,那么游戲用戶也不會不知道DirectX的大名。想必大家都還記得1996年時微軟隨紅色警戒、FIFA96等經典游戲一起發行的DirectX3.0吧,當時DirectX是以GameSDK的軟件開發工具包形式出現的。但是誰也沒有想到的時,經過幾年的發展,DirectX竟然成為Windows操作系統極其重要的一部分,也是微軟牽制眾多硬件廠商的致命法寶。DirectX整合了Direct3D接口,使得3DFX苦心經營多年的Glide3D接口灰飛煙滅。微軟在退出OpenGL組織之后,Direct3D也以迅雷不及掩耳之勢成為3D接口的絕對主流。對于顯示芯片廠商和游戲廠商而言,遵循DirectXAPI已經成為默認的一道死命令,而如今我們更是進入了DirectX 10時代。
?
1.?????DirectX——硬件廠商的競技舞臺
?
在DirectX普及之前,大多數的游戲都是在DOS下開發的,因為DOS可以直接訪問硬件,開發人員幾乎無需考慮各種硬件平臺對游戲的兼容性。但是Windows將很多系統的底層訪問權限都保護起來,一時間,很多開發人員都難以適應。微軟清醒地意識到,如果不能全面打開Windows下的娛樂市場,那么Windows始終取代不了經典的DOS。為此,他們提出了HAL(Hardware Abstraction Layer,硬件提取)和HEL(Hardware Emulation Layer,硬件模擬)兩項標準。
?
硬件提取可以讓開發人員在編程時絲毫不用考慮硬件的特性,因為它實現了各種硬件的基本接口,真正做到了硬件平臺無關性。這點是非常重要的,與目前很熱門的 JAVA語言有異曲同工之妙。其實在HAL之前,微軟也曾提倡過GDI和MCI,但是相對而言HAL無疑更加先進,讓人容易接受。HEL的硬件模擬功能讓Windows下的游戲跨上了一個新臺階,因為即使我們沒有3D加速卡,也可以用過模擬的方式來實現偽3D,這可比平淡無奇的2D畫面要好看多了。
?
以目前的眼光來看,似乎HAL和DEL都沒什么大不了,但是它們確確實實地幫助DirectX站穩腳跟,為以后的蓬勃發展打下堅實的基礎。當然僅僅有這些還是遠遠不夠的,隨后的DirectX中,微軟更是掌握了硬件廠商的命脈。3DFX的倒下固然有nVIDIA崛起的因素,但是另外一大因素應該是3DFX與微軟的對立。眾所周知,Glide3D是3DFX引以為傲的3D加速接口,當時的確比微軟的Direct3D要先進不少。但是由于3DFX死抱著專利,不肯全面開放,因此引起了微軟強烈的不滿。呵呵,想想Netscape吧,3DFX和他的下場一樣。當時大家都說Lunix性能怎么怎么好,因為Voodoo2在這款操作系統略誦蠶uake3比Windows下快很多。但是大家有沒有想過,這到底是為什么?難道是龐大的Windows還不如Lunix嗎?絕對不是。從3DFX倒閉后狀告Microsoft后,我們才知道,原來微軟在DirectX中對3DFX動了手腳。其實我說這些無非是想讓大家重視DirectX,因為任何游戲相關的硬件廠商要是被微軟拋棄,那么其后果是不堪設想的。
?
回顧歷代DirectX API
?
DirectX經歷了多個版本,從最早的DirectX到最新的DirectX 10,每一個版本的出現都會導致一大批支持該新版本DirectX的新游戲出現。但是真正讓DirectX開始引人矚目的版本是6.0,這也是3D游戲真正進入發展高峰的時期。
?
1.?????DirectX 6.0時代
?
當時主要代表顯卡是nVIDIA的Riva TNT系列以及3DFX的Voodoo3系列。DirectX 6.0的特色在于可以渲染出高分辨率下的32位色的3D效果,這也是當時GPU所最為追求的功能。然而堅持采用16位色彩渲染并且排斥AGP總線技術的Voodoo3系列敗下陣來,而nVIDIA一開始就使用先進的AGP總線結構與32位色彩渲染,高規格與新技術奠定新的王朝。
?
除了高分辨率渲染,DirectX 6.0的另外一大特色便是支持標準紋理壓縮算法,微軟公司從S3公司(先已經被VIA收購)取得S3TC授權并將其加入DirectX 6.0。對于當時的3D游戲而言,如何提紋理效果是一件很頭疼的事情,因為與之相配套的3D顯卡在性能上無法滿足大量紋理的需求,此時使用壓縮技術自然是一條捷徑
?
2.?????DirectX 7.0時代
?
DirectX 7.0的發布又一次把顯卡市場進行重新整合,DirectX 7.0最大的特色就是支持T&L,中文名稱是“坐標轉換和光源”,這也成就了nVIDIA GeForce 256與ATI Radeon 256的輝煌,令3DFX徹底退出市場競爭。換句話說,擁有T&L的顯卡,在配合使用DirectX 7.0之后,即使沒有高速的CPU,同樣獲得相對流暢的速度表現。但是,直到今日,部分集成顯卡還是沒有硬件T&L單元,完全依靠CPU來模擬。
?
3.?????DirectX 8.0時代
?
DirectX 8.0又一次引領了一場顯卡革命,它首次引入了“像素渲染”概念,同時具備頂點渲染引擎Vertex Shader與頂點渲染引擎Pixel Shader,反映在特效上就是動態光影效果。通過Vertex Shader和Pixel Shader的渲染,可以很容易的營造出真實的水面動態波紋光影效果,從而令3D游戲畫面質量得到史無前例的提高。然而DirectX 8.0的普及之路并不順暢,這與巨大的成本壓力有著很大關系。nVIDIA的Geforce3 Ti系列遲遲未能在主流市場普及,而后續升級到DirectX 8.1的Geforce4 Ti4200以及Radeon 8500系列也在成本上差強人意。從2001年年初發布DirectX 8.0開始,這項技術直到2003年年末才得到普及!
?
4.?????DirectX 9.0時代
?
其主要特色在于提升了Vertex Shader和Pixel Shader的版本,從而展現出更為強大的性能。DirectX 9.0中還包含了NURBS和Displacement Mapping(置換式貼圖)這兩項關鍵的技術。NURBS在3Dmax中是很常見的,但是運用到3D游戲后,我們所看到的畫面將更加接近真實。簡單地說,NURBS就是專門做曲面物體的一種造型方法,可以用它做出各種復雜的曲面造型和表現特殊的效果,如人的皮膚,面貌或流線型的跑車等。而Displacement Mapping技術借助在平面的多邊形上加上一些數據,可以幫材質加上深淺高低的輪廓視覺效果。總體而言,DirectX9.0是對于DirectX 8.1版本的補充,出現這一現象是因為3D顯卡技術的發展滯后于DirectX接口。
?
從技術角度來看,DirectX 9.0c相對于DirectX 9.0b還是有著很多的變化,不過Microsoft對于版本提升相當謹慎,因此很多用戶都將DirectX 9.0c稱作為準DirectX 10。在DirectX 9.0c架構中,最終要的改進便是引入3.0版本的Pixel/Vertex Shader,并且支持ATI的3Dc紋理壓縮技術和nVIDIA主導的HDR技術。
?
驚人的巨變:解析DirectX 10
?
1.?????繼續加強Shader功能
?
很多用戶都在抱怨3D游戲中的畫面總是難以呈現出如同電影般的渲染效果,而此時的罪魁禍首不僅僅是顯卡和CPU,本身的渲染方式也是造成低效率的重要原因。在DirectX 10時代,所有的顯卡GPU管線將會被賦予更加完善的Shader功能運算。以我們最近經常看到的ShaderModel 3.0為例,這僅僅在部分場景才能展現出效果,游戲開發商也不敢大量應用。而當Direct X10要求所有的GPU管線加上豐富的Shader功能運算之后,所謂的Shader將不再是顯卡的一些特殊功能,而是一項基本功能,而且貼圖效果也將得到極大的改善。
?
毫無疑問,這將令市場上所有遵循DirectX 10 API標準而設計的顯卡甚至集成顯卡有著強大的Shader運算能力。一旦擁有如此強大的“群眾基礎”,游戲開發商也就敢于大量使用這些3D特效。與此同時,微軟還增加的DirectX的可編程語法結構,令各種特效的運用更加簡易實現,這對于提高3D游戲畫面效果將會有巨大的共享。除此以外,Direct X10還支持Shader Model 4.0,意味著它的渲染效果將會進一步提升。事實上,DirectX 10對于畫質方面的其它貢獻也有不少,其中“Geometry Shader”(幾何著色)便是最顯著的一點。通過引入新的渲染模型,開發人員可以利用整體多邊形渲染加速圖形運算,新著色模式將大幅提高很多3D立體作圖功能效率,還將允許GPU獨立于CPU外完成數據循環工作,使系統完全脫離CPU束縛。
?
2.?????微軟推行統一渲染架構
?
對于微軟這樣的業界巨頭而言,掌握應用接口是頭等大事。當年,并不“聽話”的3DFX在推行Glide3D接口方面一意孤行,接過被微軟所倡導的Direct3D接口徹底取代。即便是強大的OpenGL組織,微軟也可以以退出并力推Direct3D來正面對抗,并且在民用市場取得壓倒性的優勢。而現在,DirectX 10顯然也希望結束DirectX 9時代的尷尬。
?
微軟在DirectX 9中引入的了2.0/2.X/3.0三個版本的Vertex Shader(頂點著色引擎)以及Pixel Shader(像素著色引擎)。這看似是技術的推進,其實是微軟在為nVIDIA和ATI兩強搭建競爭舞臺,而且其中的內耗直接導致技術普及速度減緩,并且利用率降低,更令軟件開發商畏首畏尾。而進入DirectX 10時代之后,微軟渴望使用統一渲染架構來引領群雄。
?
所謂統一渲染架構,大家可以直觀地理解為將Vertex Shader、Pixel Shader以及DirectX 10所引入的GeometryShader統一封裝。此時,顯卡中的GPU將不會開辟獨立的管線,而是所有的運算單元都可以任意處理任何一種Shader運算。譬如,在《上古卷軸4埋沒》這款游戲中,對于Vertex Shader的要求非常高,而此時大量顯卡的Pixel Shader處于閑置狀態,Vertex Shader又不堪重負。在微軟的統一渲染架構下,既然所有的運算單元都可以處理任何一種運算,那么就能有效避免這種不合理的分配現象。
?
可是,統一渲染架構真的要普及還為時尚早。一方面,nVIDIA并不買賬,而ATI也對此不“感冒”。此外,即便是微軟今后強迫普及統一渲染架構,這也需要顯卡GPU廠商進行新的研發。目前主流GPU都已經在兩年前進入研發階段,所以采用統一渲染架構幾乎是不可能的,甚至連DirectX 10的執行效率都無法得到保障。當然,我們并非否認微軟統一渲染架構的技術領先性,而是得客觀承認當前的現狀。
?
3.?????理解流水線真正概念:PixelShader+TMU+ROP
?
在討論顯卡GPU的流水線之前,我們想先讓大家了解一下3D游戲的制作過程,這對于理解后續的流水線概念將有很大的幫助。事實上,3D游戲初期的開發就好象一部電影:游戲策劃、劇本撰寫、角色圈定等等,在確定主角的造型風格之后,制作廠商將把原畫交給3D建模部門。至此,3D工作正式開始,此時需要處理紋理,后期混合等等,具體的工作內容就是構造頂點、幾何變換(Transform)、光照(Lighting)、設定(Setup)、光柵化(Rasterize)等。
?
對于傳統的圖形芯片,以上的一些工作全部由CPU代為執行。到了3D時代,GPU作為圖形處理單元開始承擔更多的工作,因此我們也開始接觸紋理貼圖、像素渲染等概念。然而時至今日,GPU已經發展得更為全面,其所謂的流水線作為一個完全的處理單元而存在,幾乎每一款GPU都內置了多個流水線。
?
不過值得指出的是,不同時代對于流水線的定義完全不相同。如今我們對于一條流水線定義是“PixelShader(像素著色器)+TMU(紋理單元)+ROP(光柵化引擎,ATI將其稱為Render Back End)。從功能上簡單的說,Pixel Shader完成像素處理,TMU負責紋理渲染,而ROP則負責像素的最終輸出,因此,一條完整的傳統流水線意味著在一個時鐘周期完成1個Pixel Shader運算,輸出1個紋理和1個像素。以GeForce 6600LE為例,一塊傳統的4流水線構架顯卡(4X1)在一個時鐘周期內完成4個Pixel Shader運算,輸出4個紋理和4個像素。
?
在3D游戲工作時,其實Pixel Shader、TMU以及ROP部分都非常重要。讓我們回想一下當年《FIFA98》等老一代3D游戲,當時三角形生成能力是最為看重的,基本沒有應用到紋理貼圖與像素著色,真正的工作部分是被成為頂點生成器的單元,而且也可以由CPU來模擬執行。但是發展到DirectX 6與DirectX 7時期,大量3D游戲開始追求更加豐富真實的表面效果,此時貼圖技術則迅速普及,如何提供強大的紋理填充率成為關鍵。至于DirectX8之后的時代,像素處理則異軍突起并且展現出令人驚艷的畫質。相對而言,ROP的概念比較難理解,這實際上是像素結果輸出處理器負責像素的最終輸出,執行像素讀/寫操作、Z-buffer檢查、色彩混合、抗鋸齒操作等。
?
4.?????DirectX 10核心:追求像素渲染
?
進入DirectX 9時代以后,PixelShader技術開始應用得十分普遍,此時顯卡能否提供更多的像素渲染管線成為關鍵因素。當然,造成GPU開始追求更多像素渲染管線的因素絕不僅僅是3D游戲普及化應用Pixel Shader,Pixel Shader本身版本的提升也是一個重要原因。單流水線內置一條像素渲染管線在DirectX8游戲橫行的時代是比較合理的,因為DirectX8的Pixel Shader1.3允許的著色器程序比較短,此時單流水線內的多個像素渲染管線無法發揮并行工作的優勢。然而DirectX9時代的Pixel Shader 2.0/3.0則全然不同,更長的著色器程序指令讓多個像素渲染管線有了用武之地。
?
當然,我們也并非單純否定TMU紋理填充單元的作用。但是也應該清楚地意識到,隨著紋理壓縮以及Z緩存技術的不斷成熟,再加上顯存帶寬越來越出色,TMU逐漸擺脫了性能瓶頸,此時自然也就無需在單流水線中集成多個TMU單元。而與此同時,ROP也在數量上足以滿足GPU的需求,因此也沒有隨著像素渲染管線數量的遞增而不斷增長。
?
按照ATI和nVIDIA對于未來3D游戲技術的預測,今后像素渲染將會越來越得到重用。在2001年剛剛出現具備像素著色器的顯卡時,當時游戲的像素著色器程序中算術指令和紋理指令數量的比例在1:1左右,打這以后,算術指令的數量呈顯著增加之勢。在2007年,游戲中每個像素的平均著色器程序指令數目是30條,算術指令和紋理指令數量平均比率達到了5:1,也就是說現在的像素著色器程序中,平均每5條算術指令才會出現一條貼圖指令,而這樣的算術指令數量急劇增長趨勢仍將繼續保持下去。
?
寫在最后:DirectX 10最終受益者是誰?
?
DirectX已經成為3D技術競爭的舞臺,任何一項先進的硬件技術都必須在DirectX API的支持下才能發揮威力。從未來的發展趨勢來看,伴隨著DirectX的成熟,3D游戲對于硬件的利用效果將會很快提高,屆時真正的電影級游戲效果或許就真的離我們不遠了。在整個DirectX10時代,其實并沒有哪一個受害方,因為即便是nVIDIA和ATI,不斷的產品更新依然會給他們帶來巨大的利潤,而Microsoft永遠是干著保賺不賠的大買賣,讓Windows Vista的強勢地位更加鞏固。對于消費者而言,DirectX 10時代將會看到更加出色的3D渲染效果,只不過我們又得升級顯卡了。
總結
以上是生活随笔為你收集整理的Directx发展史的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: javascript按照期望的顺序给对象
- 下一篇: GDI与DirectX对比