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