DirectX11.jpg 

還沒玩過啥支援 DirectX 10 的 game,(ex:Crysis、World in Conflict)

支援 DirectX 10.1 的 game 好像只有刺客教條,(Assassin's Creed)

這會兒…  DirectX 11 倒是出來了。 (我家電腦舊呀,又沒錢敗顯卡…

 

七月底左右,M$ 在 GameFest 2008 大會上公佈了一些 DirectX 11 的技術細節,

在 M$ 的官方網站上也有一些相關的文檔(投影片、錄音檔)可供下載。

Introduction to the Direct3D 11 Graphics Pipeline

Direct3D 11 Tessellation

Direct3D 11 Compute Shader —More Generality for Advanced Techniques

 

其實在之前,DirectX 本來就是 1~2 年間就更新一次,

從 DirectX9~Direct10 歷經了六年反而是比較少見的,

而 DirectX11 離 DirectX 10 也差不多有兩年了吧~

(只是 DirectX 10 的 Game 少見而以,其實推出也兩年了)

在這,我們來分享一下 DirectX 11 究竟有什麼特色。

 

DirectX8 的時候,顯示晶片開始具有可程式性,(Shader)

意指不是死死的執行硬體寫死的功能,而具有類似cpu的運算能力,

到了 DirectX9,可程式性更高,其語法類似 C 語言,是成熟的 API,

DirectX10 其實比較像總整理,去除了許多舊有的毛病,

然而真正新增的只有 geometry shader,因此在畫面上提升的有限,

而現在的 DirectX 11,則是真正做了一些比較大幅度的改變,

例如 MultiThreading、Tessellation、與 Computer Shader。

 

首先,雖然多核系統已普遍,然而直到 DirectX 10 都還是單執行緒,

而 DirectX 11 則提供了 API 層面的多執行緒,(MultiThreading)

像以往由於檔案存取與繪圖指令共用同一個執行緒,因此可能在載入畫面時,

造成某些物件已載入,某些還沒出現的 Lag 現象,

現在,透過將檔案載入分離成另一個執行緒,可以讓程式設計更容易掌握繪圖成像的時間點,

另外,primary 與 secondary device 的設計,

可以讓…例如一個專門畫背景石頭的執行緒,將所需的資源做預先存取,

讓 CPU 可以透過多執行緒加快對 DirectX 的處理,減少 overhead,

而使得遊戲的效能比較不會受到 CPU 瓶頸的限制。

 

再來,就是 tessellation 多邊型生成的可能性。

以往的遊戲特效都是以像素特效為主,而少有多邊型特效,

這是因為 GPU 無法自己生成多邊型,

如果一個物件要改變形狀,必需從記憶體載入新的多邊型座標再成像,

對一個精細的模型而言,這就相當費時與費空間;

DirectX 10 雖然加入了 geometry shader 而能生成多邊型,

但這傾向多邊型的細部調整,例如快速的由物件外形做出影子特效;

若是要大量、快速的產生新的多邊型…,我們終於在 DirectX 11 看到希望。

DirectX 11 的 pipeline 新加入三個單元來實現tessellation,

分別是:Hull Shader、Tessellator、Domain Shader。

 

首先還是照往常載入多邊型物件,接著,

透過 Hull Shader 可以載入控制點資料(control point),

透過這些控制點、就像我們在 3D 建模或 photoshop特效裡一樣,

可以生成貝茲(bezier curve)、NURB 之類的平滑曲線,

等透過 Hull Shader 調整完控制點,會將資料傳給 Tessellator,

告訴 Tessellator 在哪邊、需要生成多少數量的點,

讓 Tessellator 在原有的多邊形上,再擴增新的頂點或曲面,

最後,透過 Domain Shader,將這些平面上的點,

轉換成 3D 流程中的空間頂點,就可以做到以往從來做不到的,

讓 GPU 自行產生如貝茲曲面的多邊形資料。

 

雖然透過載入少量的控制點,可以大幅減少生成多邊型所需的資源,

然而在初期內,受限於 Triangle setup 固定功能單元的性能,

應該還無法產生大量的多邊型,

比較可預期的,是無限 LOD (level of detail) 的實現,

即場景由遠而近,可以透過控制點無限的將場景的細節提升,

有別於現在是透過製做數個不同 level 細節的物件,視場景距離選擇載入,

以後可以透過調整控制點,來無限的逼近越來越多的細節,

而遠的時候,物件多細節低;近的時候,物件少細節高,仍具有相同的triangle數,

因此不會受現於 Triangle setup 的瓶頸。

 

最後,是 Computer Shader ,也就是近期火熱的 GPGPU 的實現。

GPGPU 指 General Purpose GPU,即透過 GPU 來做 CPU 的運算,

讓非3D程式,也能利用 GPU 的強大平行處理能力與浮點運算能力,

(例如 Photoshop CS4 就能透過 GPU 加速)

以往的程式設計師,若是想利用 GPU 來運算,

因為 GPU 的 API 是為了 3D 而設計,輸入的是材質,輸出的是圖像,

因此程設師必需將資料包裝成材質,透過支援的運算方式,小心避免被破壞性的最佳化,

再解讀得到的畫面還原成所需的資料,

而新加入的 Computer Shader ,則支援各種型式的資料,

且可以隨時寫入輸出,而不受繪圖流程的限制,

並支援雙倍精確度,以確保科學運算的結果。

這對未來的應用程式、或是遊戲的物理引擎,都提供了很大的發展空間。

 

此外,DirectX 11 還有提出 HDR 浮點數運算的 BC6 壓縮格式,

或是 Dynamic shader linkage …等小修改,

以上,就是對 DirectX 11 的介紹與分享。

arrow
arrow
    全站熱搜

    LiWeCan 發表在 痞客邦 留言(2) 人氣()