生活随笔
收集整理的這篇文章主要介紹了
【转】3D图形引擎(DX9): FX
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
【轉】3D圖形引擎(DX9): FX
做圖形程序已經很多年了,積累了一些經驗。
來這個論壇也有好幾年了,遇到問題的時候,也會在這里發帖子問,也很感謝大家的回答與幫助,希望能多認識一些朋友,大家多交流、分享。
做這款項目也有蠻多年了,終于上線了,端游,整整6年的時間耗費在這上面,身心疲憊,不過總算是有收獲,上線了,也算給了自己一個交代。這款項目,圖形這塊花了大概3年多,后面2年多基本就是在做管理了,順便改改Bug,增加一些美術提的小需求。這個文檔去年就整理了,但是游戲沒上線,沒有經過驗證,也是沒有心思來處理這事,就放下了。今年產品上線了,7月臺灣版本也要上了,今天在公司整理資源時,發現了這篇文檔,也就來這里發一下帖子。
以下是引擎的相關技術文檔:
?
寫在前面:圖形引擎技術是為游戲服務的,所以它的宗旨是:在目前主流硬件的基礎上做與之相應的功能。所有技術都應該考慮效率,如果在效果與效率兩者之間選擇,那么我的選擇是:效率。 經過幾年的技術積累,工具非常齊全,包括場景編輯器,技能編輯器,關卡編輯器,劇情編輯器等,這些編輯器都應該屬于圖形引擎。尋路系統集成了Google的recast導航網格,物理碰撞系統集成了intel的havok物理引擎。在需要的時候,可以再增加很多的功能,讓畫面更好,讓功能更強。因為美術成本的問題,放棄了NormalMap。
1,DeferredShading,支持無限多盞燈光,在游戲場景中最多時會有幾百盞實時點光源存在,且角色、怪物本身或者法術都可能帶有實時的點光源。如下圖,每一個藍色線框球都是一盞點光源。 2,無縫LOD地形技術,根據視點遠近以及地形起伏坡度判定網格細密程度,在避免畫面突變的情況下,盡量減少三角面的數量。并且在整個地形設計時采用貼圖與地塊分離技術,即地塊的貼圖數量和地塊本身無關,而是與其貼圖格相關,這樣能讓地塊使用無限貼圖,讓美術能制作更加多樣化的地形。
3,真實水體、海洋。倒影、水波、水體邊緣、泡沫、陽光反射等構成了我們真實的水體。也能很方便的制作真實的河流,即把已經制作好的場景導回3dmax中,然后根據其河床,按照規范制作河流模型,再導出給場景編輯器使用,則可制作出有流向的河流。
4,PSSM,把整個視錐分割成幾個部分,最后整合成一個屏幕級別的陰影圖,再貼回場景。在此基礎上,還做了幾個變種,比如根據視距讓陰影生成變頻;對物件分類,增加大陰影圖等,以提升效率。【并且對于點光源,也能使其產生能夠有陰影的錯覺,這樣能方便做室內場景】
5,SSAO,根據屏幕空間的Normal以及Depth圖,生成一張遮蔽圖,再貼回場景,讓場景立體感更強。并且在真實場景中做到了,在移動中肉眼很難感知遮蔽抖動的問題。
6,體積光,太陽光或者強光源通過一些物件的遮罩,出現類似光線的效果。
7,Edge-FXAA,關于抗鋸齒,我們采用的是快速邊緣抗鋸齒的方法,FXAA是Nvidia主推的一種基于圖像的抗鋸齒的方法,在此基礎上我們做了改進,不僅性能得到大幅提升,并且避免了其造成畫面模糊的不好現象。
??
8,濾鏡,讓畫面變得更清晰,參照CryEngine的類似效果。在游戲中一對比就會有很明顯的感覺,下左圖是原始畫面,下右圖是通過濾鏡后的畫面。
9,HDR,提升畫質,下左圖為關閉HDR,下右圖為開啟HDR的效果。
10,植被系統,我們有專門的植被系統,用于大規模鋪設地面的植被,給予場景豐滿的感受,且分等級讓植被顯示,適應于不同機器。當玩家在植被中走過時,植被會被玩家推向兩邊,造成動態植被的感覺。
11,OcclusionCulling,遮擋剪裁,對于大規模場景來說,需要用遮擋剪裁來大幅提升性能。如下圖,把場景分成很多遮擋塊(紫色線框),當一個遮擋塊被場景擋住時,則整個遮擋塊都不會被渲染,甚至更新,這樣能極大提升性能。而這個功能是完全對美術屏蔽的,是引擎內部自動根據美術刷出的場景,以及擺放的物體的綁定盒而自動生成的。而對于角色、怪物來說,我們也給予其一個與之匹配的AABB,讓它參加遮擋剪裁過程,如果當前幀不在視野內,它不會參與更新和渲染,這樣也能極大的提升性能。
12,尋路系統。無縫3D地形的尋路是一個非常麻煩的事情,我們采用了路點+Recast的方式來做,使用Recast生成很多單獨的導航網格,用路點把這些導航網格連接起來,這樣就可以在無縫地形上進行尋路。如下圖,紅色線連接白色路點,這是路點的連通關系;綠色線框是地塊,它會生成導航網格,最終這些紅色連通路點線以及導航網格構成了我們的尋路系統。
13,碰撞系統。我們的碰撞系統采用Intel的havok物理系統,通過對Intel的havok以及Nvidia的Physx兩個物理系統的評估后,Intel的havok是最適合做無縫地形的物理碰撞系統。在大規模物件的場景中,特別是主城中,如果采用老的碰撞box來堆積,對美術來說,這是噩夢,所以為了方便美術制作場景,以及性能上能滿足我們需求,采用havok是很好的選擇。美術可以直接對物體做簡模,和物體一起放到場景中,并不需要其他額外的操作,引擎會自動識別且生成碰撞數據,提供給客戶端使用。
14,區域系統。為了方便策劃編輯區域,定義一些玩法,我們增加了區域系統。在場景我們給予黃色線構成的未填充的方格來確定區域,藍色填充方格的地方為當前使用的區域。策劃可以給予這樣的區域以屬性。
15,三維高度數據系統【服務器使用】。紅色、綠色、藍色等線框分別代表不同的層級,最終會生成一組組的數據提供給服務器使用,使之可以簡單的判定高度層級、阻擋以及做一些邏輯處理。
16,角色Avartar系統,整個角色的身體,除去頭發以及肩膀外,都合并成一個部件,且在貼圖上采用了我們獨特的方法,在貼圖盡量小的基礎上,讓整個畫質更好。如下圖角色,整個角色的貼圖只有一張512*512的Base圖,以及與之配套的Specular圖,并且還有優化空間,比如Specular圖可以減少為256或者128。如下圖,雖然才512的貼圖,但是實際精度并不差。 17,角色動作系統,我們做了3dmax導出插件,使之與引擎匹配識別Bip骨骼,把角色分為上下半身,讓整個角色可以做到完美的上下半身分離,在動作合并的時候,讓玩家可以在移動中戰斗。
18,航拍,能夠把整個地形按照地塊拍照,且能生成大地圖,提供給美術以及客戶端使用。
19,整體場景物件的兩套坐標系系統,因為無縫地形太大,所以坐標會很大,如果用很大的坐標浮點數去shader里面計算頂點位置,可能會造成角色蒙皮的抖動、陰影的抖動等,所以我們采用了雙坐標系系統,即:實際world坐標提供給客戶段使用,而渲染坐標系的零點根據攝像機world坐標在移動,讓渲染坐標系下的參與計算的頂點坐標數據盡量小。
其他,還有很多其他的功能,細節等,比如:DOF、倒影優化、觸發器、物件鏈接、地形高度圖使用、shader合并渲染等小功能、小系統就不一一列出了。 鏈接:http://www.opengpu.org/forum.php?mod=viewthread&tid=18131
總結
以上是生活随笔為你收集整理的【转】3D图形引擎(DX9): FX的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。