古詩詞大全網 - 成語經典 - Directx 3D的DirectX進化之路

Directx 3D的DirectX進化之路

在directx誕生之初,業界已經有眾多標準,其中有兩個重要的標準:OpenGL和Glide,特別是前者,它被用於圖形、影像服務器,制作電影、科教片等等,隨著技術逐漸成熟,越來越普及,如當時大名鼎鼎的Quake 3遊戲就是基於這個標準的。而當時的DirectX,很多硬件、主流遊戲都不支持它,沒有遊戲、沒有硬件,即使再有好的標準也是沒有意義的,DirectX的魅力壹直沒有的到表現。但是它有微軟的支持推廣,它就有希望。 那麽DirectX的發展,都經歷了哪些版本呢?

DirectX是目前民用市場的主流API

DirectX 1.0:第壹代的DirectX很不成功,推出時眾多的硬件均不支持,當時基本都采用專業圖形API-OpenGL,缺乏硬件的支持成了其流行的最大障礙。DirectX 1.0版本是第壹個可以直接對硬件信息進行讀取的程序,它提供了更為直接的讀取圖形硬件的性能(比如:顯示卡上的塊移動功能)以及基本的聲音和輸入設備功能(函數),使開發的遊戲能實現對二維(2D)圖像進行加速。這時候的DirectX不包括現在所有的3D功能,還處於壹個初級階段。

DirectX 2.0:DirectX 2.0在二維圖形方面做了些改進,增加了壹些動態效果,采用了Direct 3D的技術。這樣DirectX 2.0與DirectX 1.0有了相當大的不同。在DirectX 2.0中,采用了“平滑模擬和RGB模擬”兩種模擬方式對三維(3D)圖像進行加速計算的。DirectX 2.0同時也采用了更加友好的用戶設置程序並更正了應用程序接口的許多問題。從DirectX 2.0開始,整個DirectX的設計架構雛形就已基本完成。

Quake 2

DirectX 3.0:DirectX 3.0的推出是在1997年最後壹個版本的Windows95發布後不久,此時3D遊戲開始深入人心,DirectX也逐漸得到軟硬件廠商的認可,97年時應用程序接口標準***有三個,分別是專業的OpenGL接口,微軟的DirectX D接口和3dfx公司的Glide接口。而那時的3dfx公司是最為強大的顯卡制造商,它的Glide接口自然也受到最廣泛的應用,但隨著3dfx公司被NVIDIA的收購、Voodoo顯卡的衰敗,Glide接口逐漸從人們眼中消失了。

古墓麗影 2

DirectX 5.0:令人奇怪的是,微軟公司並沒有如期推出DirectX 4.0,而是直接將DirectX版本升級到了5.0。此版本對Direct3D做出了很大的改動,加入了霧化效果、Alpha混合等3D特效,使3D遊戲中的空間感和真實感得以增強,還加入了S3的紋理壓縮技術。 同時,DirectX 5.0在其它各組件方面也有加強,在聲卡、遊戲控制器方面均做了改進,支持了更多的設備。因此,DirectX發展到DirectX 5.0才真正走向了成熟。此時的DirectX性能完全不遜色於其它3D API,而且大有後來居上之勢。

極品飛車3

DirectX 6.0:DirectX 6.0推出時,其最大的競爭對手之壹Glide走向了沒落,而DirectX則得到了大多數廠商的認可和支持。DirectX 6.0中加入了雙線性過濾、三線性過濾等優化3D圖像質量的技術,遊戲中的3D技術逐漸走入成熟階段。這個時期具有代表性的產品是NVIDIA Riva TNT2系列。

DirectX 7.0:DirectX 7.0最大的特色就是支持T&L,該技術中文名稱是“坐標轉換和光源”。3D遊戲中的任何壹個物體都有壹個坐標,當此物體運動時,它的坐標發生變化,這指的就是坐標轉換。在T&L問世之前,位置轉換和燈光都需要CPU來計算,CPU速度越快,遊戲表現越流暢。使用了T&L功能後,這兩種效果的計算用顯示卡的GPU來計算,這樣就可以把CPU從繁忙的勞動中解脫出來。換句話說,擁有T&L顯示卡,使用DirectX 7.0,即使沒有高速的CPU,同樣能流暢的跑3D遊戲。 這個時代的代表性產品是GeForce 2系列和GeForce4 MX系列。

Counter-Strike

DirectX 8.0:DirectX 8.0的推出引發了壹場顯卡革命,它首次引入了像素渲染引擎(Vertex Shader)與頂點渲染引擎(Pixel Shader)的概念,反映在特效上就是動態光影效果。同硬件T&L僅僅實現的固定光影轉換相比,VS和PS單元的靈活性更大,它使GPU真正成為了可編程的處理器。這意味著程序員可通過它們實現3D場景構建的難度大大降低。通過VS和PS的渲染,可以很容易的寧造出真實的水面動態波紋光影效果。此時DirectX的權威地位終於建成,代表產品:GeForce4 Ti系列。

極品飛車6

DirectX 9.0:2002年底,微軟正式發布DirectX9.0,DirectX 9中PS單元的渲染精度已達到浮點精度,傳統的硬件T&L單元也被取消。全新的VertexShader(頂點著色引擎)編程將比以前復雜得多,新的VertexShader標準增加了流程控制,更多的常量,每個程序的著色指令增加到了1024條。另外,DX9增加對浮點數據的處理功能,以前只能對整數進行處理,突破了以前限制PC圖形圖象質量在數學上的精度障礙,它的每條渲染流水線都升級為128位浮點顏色,讓遊戲程序設計師們更容易更輕松的創造出更漂亮的效果,讓程序員編程更容易。

那麽,即將從幕後走想臺前的新壹代DirectX 10又將給我們帶來什麽呢? ·DirectX 10技術詳解上

1、統壹渲染架構

相對於其他方面的技術革新,微軟在Shader Model 4.0中引入的統壹著色架構才是DX10最大的看點。我們都知道,微軟在directx 9中引入的了2.0/2.X/3.0三個版本的Vertex Shader(頂點著色引擎)以及Pixel Shader(像素著色引擎)。其中支持2.0版的著色引擎是DirectX 9的GPU的最低標準,而當前主流的顯卡已經都硬件支持加入了擁有更多高級處理功能的3.0版本著色引擎。不過,即便是DirectX9.0c,對於功能相仿的Vertex Shader、Pixel Shader來說,目前圖形芯片廠商仍需要在GPU中劃分兩個區域來存放Vertex Shader陣列和Pixel Shader貼圖流水線。這無疑是壹種資源冗余,而且這也加重GPU的設計難度及成本。當Direct X10把渲染流程更細分為Vertex Shader、Geometry Shader及Pixel Shader,這個情況將會更為明顯。那麽,有沒有可能把這兩者整合在壹起呢?答案就是肯定的!

統壹渲染架構是壹項極具創新意義的作法。要知道,在很多時候如果我們處理的壹個場景註意是以Pixel Shader計算為主,Vertex Shader計算僅占壹小部分的時候,如果采用分離Shader設計的顯示核心,就可能存在Vertex Shader計算單元空閑,但Pixel Shader單元過渡計算的現象。同樣的也可能存在Pixel Shader數據比較少,但Vertex Shader計算數據過多的問題。這就往往造成了壹方面著色單元閑置,另壹方著色單元資源緊缺的情況。

統壹渲染架構能更有效地利用顯卡資源

比如在《上古卷軸4:湮沒》中,7900GTX在1600×1200+HDR的環境下,FPS僅為14~50幀左右。這是因為獨立渲染的草叢或者樹葉是由龐大數量的多邊形構成,對GPU的頂點渲染提出了嚴酷的要求,相對來說並不需要太多像素操作,如此壹來大規模的像素渲染被閑置而頂點模塊處於不堪重負狀態。而統壹渲染架構則可以幫我們解決硬件資源上的限制----妳能夠不受限制地使用紋理資源,並可以使用任意長度的著色指令,如果能夠將閑置的像素單元用來處理頂點,那麽遊戲速度就不會如此可憐了!此外,統壹渲染架構將令GPU的角色由單純為Game Rendering提升至Game Computing的理念,Unified Shading引擎設計更適合異類運算工作(Heterogeneous Computing),例如Physics運算、影像編碼運算等,讓顯卡的應用範疇大幅提升。

2、虛擬顯存技術

眾所周知,在286/386時代,人們為了利用更多的內存,發明了虛擬尋址技術,今天,這項技術被用到顯存身上,將如同當年般震撼,徹底地把顯存的利用帶到了全新的層次。以往,GPU采用直接內存調用法則,無論是紋理、頂點、多邊形、光影,都需要占用顯存空間,這些數據的運算量越大,占據的空間也越多。為了避免每次都需要重新計算,人們想到了MIP-MAP紋理映射的方法。當時,紋理貼圖的尺寸很小、3D場景亦沒有這麽復雜,MIP-MAP能夠顯著地減少GPU計算量和顯存的占用。然而,隨著3D遊戲復雜性的增加,僅靠顯存已經無法存儲這些數據,不得不開發出AGP總線,利用部分內存作為AGP顯存,來暫時存儲紋理和頂點數據、補充顯存容量的不足。但別說以前的AGP 8X,即使是今天帶寬更大的PCI Express X16,亦遠遠不能與顯存帶寬相比。更為嚴重的問題是,為了同步處理,GPU會降低顯存的工作速度,使之與顯卡顯存順利傳輸,所以壹旦動用顯存,系統速度會大為下降。從這方面看,在遊戲中提升紋理調節的時候,必須註意自己的顯存容量,比如妳要玩FarCry、戰地1942、等遊戲,沒有256MB顯存,就別想把畫質設置到最高,否則會大大地影響遊戲速度。

因此,微軟根據虛擬內存管理方法將在DirectX 10中引入虛擬顯存技術。它可以很好的解決以上所提到的問題,所有的紋理、著色等都分成“小塊”數據即使在低速總線上也能流暢傳輸。例如,壹個4KB大小的頁面相當於壹個32×32×32bit大小的紋理貼圖,這樣大小的紋理貼圖已經可以滿足需要,這樣在需要紋理渲染時系統就不需要傳輸太多頁面就可以完成相應的工作,而做到這壹切幾乎不會損失性能。

G80的Video Memory執行示意圖

而且將虛擬顯存技術與著色引擎搭配也是壹個很具創新性的想法。在顯存中,著色器指令是被當作壹個抽象的數據塊進行處理的,系統並不理會“數據塊”能否裝得進GPU的指令流水線,壹旦著色器被載入,它就會在每個頂點以及象素上操作、直至卸載。因此要想完成更長的著色器指令就需要增加GPU的指令執行管數或利用自動多路形式將指令劃分成若幹個可管理的小塊。由於GPU的指令執行管數在設計之時就固定好,如果要增加執行管數無疑需要重新設計及增加晶體管數,顯然第壹種方法並不太實用。因此第二種方法較為實用,而這也與我們所提到的虛擬顯存系統實際是壹樣的。為了適應著色器指令的執行應用,虛擬顯存被劃分為許多相對獨立的頁面。假定圖形處理單元當中設置的指令執行管道可以執行整個頁面所包含的指令,那麽我們的著色器操作就可以建立起壹套流水線式的運作機制,加載壹個頁面,然後運行,停止下來之後再加載壹個新的頁面,然後運行,如此反覆指導全部包含指令的頁面被加載到處理器當中,此間,執行管道的作用與處理器的L1 Cache相當類似,而整個運作流程和處理器的可以說是壹致的。

通過虛擬顯存技術,著色指令的長度將可以不受指令執行管數的限制,存儲系統可以存放的圖象紋理可以更多,尋址的方式變得輕松簡單,於是我們的DirectX10技術就實現了可用資源“不受限制”的強大功能。當然了,資源的“不受限制”還是受到硬件實際可用資源的限制。指令太長的話,GPU就需要多次加載指令頁面,這樣也會造成性能大幅度下降;如果紋理數據太多,需要用到系統內存、甚至是硬盤空間進行存儲的話,那麽整個圖形子系統的性能也會下降。針對這個問題,微軟為資源限制定了兩個門限:只要不超過第壹個限定,系統都能夠工作;而超過第二個限定時,系統就不能夠正常工作(在640×480分辨率下,fps值不足10)。其實,此前已經有廠商使用了虛擬顯存技術,3Dlab的專業級顯卡野貓WildCat VP就能調度16GB虛擬顯存,16GB哦,在主流顯存不過256MB的時代,這是多麽振奮人心的事情。很明顯當妳能完全使用全部16GB時,相信系統瓶頸問題已經不在此了。 ·DirectX 10技術詳解中

3、整數指令集

除了統壹渲染架構和虛擬顯存,DX10還有不少改進之處,其中最重要的莫過於整數指令集。也許妳會覺得奇怪,整數指令集不是所有計算的基礎嗎?對於CPU而言,這是沒錯的,但別忘記了,當然為何引入浮點處理器和多媒體指令集,原因是圖形運算需要大量的浮點指令。浮點是不精確數據類型,當尋值數據與紋理數據不符合的時候,可以采用近似值和多個數據計算的內插值來代替,對圖形最終畫面沒有影響,此類速度也比整數要快。因此,GPU的基礎恰好與CPU相反,是以浮點指令為主的。目前,著色器所處理的所有東西都需要依靠浮點運算所完成(除了靜態分支預測試運算之外)。

在大多數的圖像處理上來說,這種處理方式是沒有問題的。但進行動態分支預測或非內插式內存搜索時(比如對頂點緩存器進行定位索引時),這種浮點運算處理方式就存在很大的問題。而DX10中引入整數運算將有許多好處,比如進行動態/靜態分支預測、頂點緩存定位、通用內存尋址方面,浮點是無法進行精確計算的。

4、直接存取像素著色幀緩存

現在的渲染模式,主要是實時渲染,每種渲染工作都是實時完成的,中間無法打斷,如果我們想為圖像增加數字分級、色彩校正或顏色調節等工作,只能重新進行壹次計算,對整體工作造成了延時。事實上,當妳讀取渲染中圖象的紋理數據,大多數的GPU和驅動程序都可以工作。但這屬於非法操作(沒有經過定義),這樣的操作隨時可能被中斷,而開發人員通常不會使用這項功能。

DX9時代的解決方案有二,第壹種是使用兩個獨立的紋理,壹個紋理用於正常工作,另壹個備用紋理應付那些附加的計算,此方案的最大問題是必須占用兩倍顯存空間;第二種是在Pixel Shader中通過模擬混合函數的實現以上功能。ATi已經在他們的GPU芯片中加入了類似的做法,他們通過頂點著色引擎來模擬原有的固定頂點處理函數。這樣就意味著GPU設計廠商需要在著色引擎上增加額外的晶體管來實現以上的功能。

DX10則轉向了新思路:使用了像素描影器直接存取幀緩存的方式來部分代替以前的實時渲染,某些情況下,我們可以隨時中斷渲染,加入我們想要的效果,再繼續運算,不對整個渲染過程造成影響,使渲染變得更為靈活和可控。但並不意味著在directx10中進行實時渲染模式就毫無問題,並且廠商可能放棄了對這種技術的支持。那樣這項技術很可能以壹種備選方案出現,如此壹來,程序員可能會忽略這項技術的存在而繼續沿用老方法。 ·DirectX 10技術詳解下

5、增強型圖形鑲嵌技術

在DX8時代,為了提高曲線畫面的真實度,顯卡廠商增引入了高階曲面技術,如:nVidia的RT-Patch和ATi的N-Patch。從本質上看,它們把曲線處理帶入了壹種新紀元,看看現有的真實世界,並不總是以方方正正的多邊形存在的,很多地方都由曲面來構建,才使真實的物體種類更為多樣,很難想像我們有壹個四方頭的時候是怎樣的恐怖。然而,每次的技術進化總是有壹定阻礙,高階曲面在當時未能完善,甚至導致了畫面產生變形。因此不少開發商都這種技術失去了興趣,而圖形芯片廠商最終也放棄對這項技術的硬件支持。直到directx 9引入適應圖形鑲嵌以及置換貼圖技術,這兩項技術再次被人們所關註。高階曲面鑲嵌以及置換貼圖這兩項技術雖然在NVIDIA的GF6/7系列、ATI的X1000系列圖形芯片中得到支持,但當前DirectX技術在支持高階曲面上仍存在壹定問題。

雖然高階曲面未能正式流行,而為它的自適應圖形鑲嵌和置換貼圖兩項獨特的技術卻引起了人們的興趣。自適應圖形鑲嵌可以按照我們的要求,進行不同的紋理鑲嵌,以便取得更佳的視覺效果,將使3D世界進壹步擬真化,可是,它們遇到的最大問題,依然是高階曲面的運算,如何使用最小的運算又不導致畫面破損和變形,是DX10極須解決的問題。DX10的硬件將支持各種通用高階曲面計算:Catmull-Rom曲面、貝賽爾曲線、B-Splines曲線、圓錐曲線,證明高階曲面回歸的時代已經到來,只是要我們去認真地進行優化而己,當然這些也需要圖形芯片進行硬件支持。

6、Physics(物理加速)技術

最近熱門的技術就是物理加速及其應用,物理計算是下壹代遊戲體驗當中的關鍵部分,它將增加遊戲的真實感、沈浸感和帶來更加有趣的體驗。NVIDIA同樣對物理加速非常感興趣,在未來的DX10產品中會加入物理加速的支持。

G80已經能從硬件層面支持物理運算

雖然,物理加速的概念很早之前就已經提出,但時至今日依然處於概念性階段——AGEIA的物理加速卡僅有幾款遊戲能夠支持,而ATI的GPU物理加速才剛剛進行完Demo演示,NVIDIA的SLI物理加速也要等待遊戲廠商采用Havok FX引擎才能夠出臺!推廣進程如此緩慢因為標準的不統壹。AGEIA和Havok兩大陣營的物理加速引擎互不兼容、各自為政,這就使得很多遊戲僅能支持壹種物理引擎,這種情形非常類似於3D時代開荒初期在技術和規範上百花齊放!

這壹現狀有望在DX10推出之後得到改善,有了微軟API的支持,無論哪種物理引擎都擁有發揮的空間,相信將會有更多的遊戲加入更多的物理運算。未來,DX10 GPU將是更趨向化通用型的處理器,也就是說,原本許多交由CPU進行的3D處理會被轉移到GPU上面來,因為強大的GPU比CPU更適合做這些工作,由此遊戲性能會大幅提高。微軟表示,DX10會開放兩個SDK,分別照顧到AGEIA和Havok,其中AGEIA的PPU直接作用於SDK獨立進行物理運算,在Havok引擎的調動下NVIDIA的GPU也可以動態的處理物理運算!