還沒玩過啥支援 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 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 的介紹與分享。
留言列表