天天看點

Direct9到Direct10 --- 玩的就是3D圖形

我先讓大家來比較一下Direct9和Direct10在3D圖形上的不同表現:

 下面是DXD9:

Direct9到Direct10 --- 玩的就是3D圖形

下面是DXD10:

Direct9到Direct10 --- 玩的就是3D圖形

我們可以看到天上的雲彩更逼真了,而水的處理簡直就是傳神,跟真的一樣啊!!

下面是DXD9:

Direct9到Direct10 --- 玩的就是3D圖形

下面是DXD10:

Direct9到Direct10 --- 玩的就是3D圖形

是不是很爽呢?!哈哈

下面是DXD9:

Direct9到Direct10 --- 玩的就是3D圖形

下面是DXD10:

Direct9到Direct10 --- 玩的就是3D圖形

Wow~~像真的一樣耶!

哎~~啥也不說了,學好計算機圖形學是關鍵啊!

下面就介紹Direct10的新特性:

=======================================

DX10技術解析!沒有DX10就沒有新電腦

● G80,全球首片硬體DirectX10 GPU

    從2006年11月8日算起,這天全球圖形技術領袖NVIDIA釋出全球首款支援DirectX10、代号為G80的GeFrce 8800系列顯示核心,算來已經有近半年時間。4月17日,NVIDIA公司又釋出了基于GeForce 8800新一代核心架構的中端産品,分别是GeForce 8600GTS、GeForce 8600GT、GeForce 8500GT,釋出即上市。這延續了NVIDIA在近幾代産品的一貫作風。産品的釋出日就是産品的同步上市時期,也就是說,今天,你就可以在市場上通過零售方式買到NVIDIA正式宣布的以上三款完整硬體支援DirectX10 GPU的顯示卡産品。06年被AMD收購的ATI的支援DirectX10 API的R600,由于一再推遲釋出,已經落後NVIDIA新的産品程序至少半年時間,在晶片技術領域,18個月是整整一代産品的周期,而6個月以上的時間差,意味着失去了整整“半代”産品的節奏。不過,從一些放風式的“特别透露”出來的消息聲稱:AMD的R600産品也将在未來的2個月内面市。

    無論是GeForce 8600GTS、GeForce 8600GT、GeoForce 8500GT釋出即上市的“實力派”作風;還是傳說中的R600面市前做的那樣,通過放消息預熱市場的“偶像派”做法;不管怎樣,确定一定以及肯定:一個新時代的到來,即個人電腦圖形處理技術已經跨入了DirectX10時代,也可以稱之為vista的GPU時代。因為隻有微軟的作業系統統治了個人電腦93%以上的市場佔有率,而新的微軟作業系統vista替代舊版作業系統也是不可遏制的潮流,并且,隻要是vista電腦,就意味着最先進的API——DirectX10,它對新的硬體與軟體程式設計提出脫胎換骨的要求。使得GPU在個人電腦的重要性中,加大了權重,越來越有趕超CPU的趨勢,對GPU性能要求也提到了新的高度,這一切,就是為了滿足使用者日益對操作界面更人性化、更大便利性的要求。

Direct9到Direct10 --- 玩的就是3D圖形

新上市的Geforce 8600GTS

已經上市的全新硬體架構的G8X系列将會改變目前的局面,掀開新一代GPU技術發展的序幕。GeForce 8X00系列完全基于微軟DirectX 10 API開發,帶來前所未有的設計,融合了統一着色架構、Shader Model 4.0等先進技術。正是由于最新的vista上市,宣布了新的作業系統時代,而vista的最新API——DirectX10決定了電腦的最新應用和最新功能,基于這個層面上,隻有顯示卡是完全硬體支援DirectX10這一本質特征,決定了你所使用個人電腦是否是真正意義上的“新電腦”。

● vista系統的Direct10 API有何優勢?

  1、統一着色器架構

    此前的顯示卡都采用象素着色器跟頂點着色器分離的架構,這種架構不允許GPU同時處理象素跟頂點着色。比如說顯示卡在進行頂點着色的時候象素着色器單元就變成閑置,浪費了資源而且還形成了不必要的性能瓶頸。特别是現在分離式架構的GPU 的PS資源都要遠高于VS,在這種狀況下瓶頸的負擔無疑是雪上加霜。實際上這種情況我們在遊戲裡就經常碰到。而在采用了統一着色器架構的GPU以及運作于DX10的系統中,顯示卡可以同時對頂點、幾何以及象素着色進行處理,而不必等待逐個分别進行。這也使得資源得以合理配置設定,保證整個架構高效運作。

Direct9到Direct10 --- 玩的就是3D圖形

雖然目前隻有NVIDIA的G8X采用了統一着色器架構。統一着色器架構還會令GPU更加适合處理通用化任務,這是由于一方面程式員無需再為不同的着色器單元編寫不同的執行單元,也不必去顧慮不同着色器之間存在的差異,所對應的接口以及操作方式全部融為一體,進而使負責的開發流程得到一定程度上的簡化。另一方面是由于shader單元的統一化使得任何通用計算程式都将在統一着色器架構的GPU上發揮它的所有計算資源,不存在我們上面提到的分離架構造成的着色器單元閑置問題。此外,統一架構的帶來的執行單元和配套資源上的共享化也讓之前分離架構上存在通用化計算問題迎刃而解。是以,遊戲裡像實體模拟、運動模拟以及其它原本不适合GPU計算的任務如今都可以交給GPU來做。GPU強大的性能使得那些原本無法達成的任務,比如流體運動模拟,得以在遊戲中實作。這也極大了減低了系統對CPU的依賴性,原來給CPU的工作,讓GPU執行通用化操作,而現代高速GPU的通用操作性能已經超過了高速CPU的性能,極大提高了系統的整體運算效率。

  2、Geometry Shader(幾何着色器)功能

    對于DirectX 9和DirectX 10的差別, DirectX 10将利用DirectX 10來克服他們使用DirectX 9所面臨的傳統限制。例如,geometry shader(幾何着色器)功能将使得遊戲可以加速遊戲的數學運算性能,諸如在GPU上進行實體運算。

    在過去的DX9中,Vertex Shader每一次運作隻能處理一個頂點的資料,并且每次隻能輸出一個頂點的結果。在整個遊戲場景中,繪制的幾何圖形的任務量非常龐大,如果僅僅依靠Vertex Shader單一來完成,效率會極其低下。而更緻命的是VS無法單獨生成或重組多邊形,是以在以往隻有VS跟PS的GPU中,生成一個模型往往需要CPU的“大力支援”。

Direct9到Direct10 --- 玩的就是3D圖形

DX10中的Geometry Shader改變了這點。它的作用就是對每個Vertex資料臨近的資料進行Vertex函數處理。這種函數處理可以快速的把模型類似的頂點結合起來進行運算。雖然其操作不會象Vertex Shader那樣的進行完整的幾何轉換操作,隻是處理器單個頂點的相關函數操作,但是這種操作卻可以确定整個模型的實體形狀,這将大大加速處理器速度。基于此特性,Geometry Shader可以根據頂點的資訊來批量處理幾何圖形,對Vertex附近的資料進行函數處理,快速繪制出新的多邊形。然後再通過steam out将這些結果傳遞給其他Shader或buffer,使得CPU可以從原本複雜龐大的多邊形運算中解放出來。現在可以讓GPU直接處理細微的粒狀效果,如煙霧和爆炸效果等(在這之前這一任務通常交由CPU來完成)。而由于GS的性能要比CPU高出許多,同屏下能夠渲染的粒子數量也就更多,是以可以預計煙霧跟爆炸的效果會比以往更為震撼。你可以期待GPU進行更多的遊戲運算,這樣将産生更多動态的場景,而減少資料交換資訊意味着場景具有更複雜的幾何和多樣性。而遊戲将更加漂亮,因為它們将有更加複雜的模型,更加細緻的物體,或者說同一螢幕上更多的物體,而由于結合了更加複雜的實體,視覺效果将更加複雜,更加真實。例如流動的水,微風吹拂的葉子,這些都将是互動的。當你在樹林中行走時,被碰到的樹枝将分到兩邊,而在戰鬥場景中穿行将有煙霧彌散效果,所有這些結果将更加真實,并呈現出更加愉悅的遊戲體驗。

Direct9到Direct10 --- 玩的就是3D圖形

3、運算效率更高

    DirectX 10另一個最令人注目的改進就是可以為API節省計算開銷(API overhead)。所謂API overhead就是遊戲在處理畫面上的每一個物體(object)時(比如人物、岩石等等),都需要先将這些object傳送至API,然後再由API傳給驅動程式,而這個過程都需要CPU做出處理。當 Object 越多(每一幀畫面通常超過幾百個),對CPU的負擔就越重,所需要消耗的處理時間就越長進而構成瓶頸。而之前DirectX 9就存在API overhead太大造成CPU資源占用率過高的弊病,因為DirectX 9每使用一個object都需要CPU為其做資源确認。

    而全新的DirectX 10針對這方面作出了改善,采用了全新設計改良的ValidATIon機制。現在隻有在該object生成時,才需要CPU做确認,此後在使用Object時就不需要再次确認了,進而大幅降低CPU的負擔。簡而言之就是DirectX 10可以有效減少CPU處理3D物體的時間,是以現在每一幀畫面可以擁有更豐富的3D物體(無論是樹木、貼圖還是人物)。而CPU被釋放出來的空餘資源還可以讓制作者用于其它諸如實體、人物運動以及AI等方面的計算。DirectX 10還帶有一個真正的整數指令集,可以盡可能完成更多的尋址計算,更多的資料打包和解包;當然這些功能并不會創造出一些新的畫面特效,但它允許開發人員在GPU中高效的完成更為智能、複雜的渲染工作!

Direct9到Direct10 --- 玩的就是3D圖形

此外,HDR(高動态範圍渲染)方面,由于DirectX 10硬體支援RGBE,是以HDR紋理不再需要特别解碼處理也能實作,HDRAA也得以輕松實作。另外DX10還支援兩種全新的HDR模式,一款是 R 11G 11B10 ,采用 11-Bit 紅色和綠色、 10Bit 藍色,另一款是采用 5Bit 共享加每種顔色以 9Bit 作尾數運算,以上兩款HDR模式在HDR品質上和标準的FP16幾乎沒有差别,但卻能有效減少資源損耗及顯存帶寬占用率,進而消除了以往HDR的瓶頸。另一方面, DirectX 10 還支援更高精度的FP32 HDR(每通道32bit,是以也有人美其名曰:128bit HDR),随時為玩家提供更高品質的 HDR 效果做好準備。

● G80,純正的GPGPU血統!

    從R300到NV40,再到現在最新的G80,每一代旗艦GPU的半導體都大大超過了同期的頂級CPU,也在挑戰其同時代半導體工藝的極限。随着GPU性能的提升,近年來GPU用于通用計算(General Purpose GPU)及其相關方面的問題成為一個十分熱門的話題。GPGPU指的是利用圖形卡來進行一般意義上的計算,而不是單純的繪制。以NV40為代表的可程式設計GPU釋出後,GPGPU進入了一個高速發展的全新時代。相比固定的流水線,目前硬體的可程式設計頂點和片段單元不管是運算精度,支援的指令數還是寄存器個數都有了很大提高,更重要的是基于Shader Model 3.0版本頂點和片段着色器版本的硬體開始支援動态流控制的循環和分支還有子函數操作。比如,現在的片段着色程式最多允許同時通路16個獨立的紋理,支援長度不受限制的指令數,寄存器個數也大大提高。而且提供了32位浮點精度的運算和存儲格式,對于通用計算來說,這就很容易做出更為複雜的運算。盡管GPGPU前途一片光明,但挑戰與機遇永遠是并存的,目前GPGPU所面臨的問題也非常的多。

    首先是目前的圖形硬體還存在很大的局限性。GPU畢竟是為了圖形渲染而生,其通用性離真正的通用處理器還有很大一段距離。比如,在DX9硬體上,Vetxe Shader和Pixel Shader總共的指令數被制在1024(512+512)條指令,(片段着色器)Pixel Shader最多隻能同時通路16個紋理,進行分支和循環操作的開銷也比大。此外,片段着色程式雖然支援R16F的浮點類型資料格式,但缺乏其他類型的支援,限制了通用運算的多樣性,而且R16F這種單精度的IEEE格式對于通常所用的工程計算而言精度還是低了點。由于每個shader程式最多帶32個Temp寄存器,指令數也受到限制,是以在很多通用計算程式的編寫中不得不采用multi-pass來完成一些複雜的運算,這樣就降低了性能。由于整個GPU隻能通過頂點紋理來讀取資料,通過渲染到紋理來寫入資料,對于顯存沒有任何間接寫指令,輸出位址隻能由光栅化引擎決定,不能由程式改變,無法進行任意的讀寫操作,是以必須将計算的中間結果儲存以避免多次讀寫,這又無形中降低了GPU的通用運算性能。另外在硬體上如果采用浮點運算,則不能利用硬體本身的顔色混合操作,也不能進行mipmap的自動運算,這些也妨礙了GPU在通用計算上的應用。不過,支援DirectX 10的G8X系統的的出現,将讓這些問題迎刃而解。

Direct9到Direct10 --- 玩的就是3D圖形

NVIDIA方面,新一代G8X圖形核心采用了先進的統一渲染架構,擁有多達128個流處理器,引入幾何着色器功能……這一切簡直就是專為GPGPU運算而生!為了最大程度的發揮幾何着色器的威力,G80還專門設定了一個名為流輸出層(Stream Output State)的部件來配合它使用。這個層的功能是将Vertex Shader和Pixel Shader處理完成的資料輸出給使用者,由使用者進行處理後再回報給流水線繼續處理。它可以直接讀寫本地顯存。我們可以通過Stream Out把GPU拆成兩段,隻利用前面的一段幾何運算單元。對某些科學研究,也可以通過stream out來利用GPU的數學運算能力,等于在CPU之外又平白多得了一個數學協處理器。我們可以這樣了解G80圖形核心的幾何着色器和Stream Out單元:GS提供了改變圖形數量的能力,Stream out提供了硬體Multi-pass的支援。可以預見,今後圍繞這些全新的功能,又會有一批新的GPU通用計算程式出台。

    基于目前的G8X架構,NVIDIA現在已經有了一個針對GPGPU的解決方案,被稱作Compute Unified Device Architecture,簡稱CUDA。CUDA是一個完整的解決方案,包含了API、C編譯器等,能夠利用G80的片内L1 Cache共享資料,使資料不必經過記憶體-顯存的反複傳輸,shader之間甚至可以互相通信。對資料的存儲也不再限制于以往GPGPU的紋理方式,存取更加靈活,可以充分利用stream out特性。以上幾點都将大大提高GPGPU應用的效率。例如,在遊戲中我們可以使用CUDA來讓GPU承擔整個實體計算,而玩家将會獲得另他們感到驚奇的性能和視覺效果。另外,用于産品開發和巨量資料分析的商業軟體也可以通過它來使用一台工作站或者伺服器完成以前需要大規模的計算系統才能完成的工作。這一技術突破使得客戶可以任何地方進行實時分析與決策。同時,一些以前需要很先進的計算技術來達到的強大計算能力的科學應用程式,也不再受限在計算密度上;使用CUDA的計算可以在現有的空間裡為平台提供更強大的計算性能。

在正式釋出了基于G80核心的Quadro專業3D顯示卡之後,目前NVIDIA正在醞釀一款全新的流處理加速卡,主攻圖像加速、科學計算等GPGPU運算領域……

繼續閱讀