• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            永遠(yuǎn)也不完美的程序

            不斷學(xué)習(xí),不斷實(shí)踐,不斷的重構(gòu)……

            常用鏈接

            統(tǒng)計(jì)

            積分與排名

            好友鏈接

            最新評(píng)論

            游戲中各種性能優(yōu)化方法(不斷更新)

            談到游戲中的性能優(yōu)化,說白了就是如何提高幀率和降低內(nèi)存。
            提高幀率的基本原則就是減少DP次數(shù),還有是找出時(shí)間消耗高的程序代碼加以修改。
            但引擎涉及的東西非常多,有時(shí)優(yōu)化要從多方面入手,下面一個(gè)一個(gè)來說明。

            首先是水體渲染的優(yōu)化:
            現(xiàn)在很多游戲的習(xí)慣做法就是把水放在地某個(gè)高度的位置,然后地形在上面,從裁剪的角度來看,只要看得到地形,水是必然會(huì)渲染的,但如果我們看到的地形都是在水的上面,那這樣渲染就太浪費(fèi)了。其實(shí)有個(gè)很簡單的做法,就是把地形的block,當(dāng)然,我們可以把block再細(xì)分成一邏輯上的block,每個(gè)block要記錄是否有地形的頂點(diǎn)在水的下面,有的話,如果這些block要渲染,那水也就渲染,否則水就不渲染。

            地形優(yōu)化:
            四叉樹地形LOD是最基本的優(yōu)化方法了,不過這里要注意一點(diǎn),每個(gè)地塊對(duì)應(yīng)不同LOD加上不同裂縫組合的indexbuffer,如果一開始把所有這些可能存在的indexbuffer都創(chuàng)建出來,那內(nèi)存會(huì)非常大。我的做法是:當(dāng)用到某個(gè)IndexBuffer的時(shí)候才實(shí)時(shí)創(chuàng)建,這樣大大減少了內(nèi)存。因?yàn)橛泻芏喾N情況下的IndexBuffer在實(shí)際情況下是不會(huì)用到的。

            粒子系統(tǒng)的優(yōu)化:
            傳統(tǒng)的粒子系統(tǒng)的做法是在CPU上計(jì)算好粒子的四個(gè)頂點(diǎn)位置然后再填入紋理,現(xiàn)在有種優(yōu)化方案是:定義粒子的頂點(diǎn)格式只有中心點(diǎn)和width,height,在CPU上只計(jì)算實(shí)時(shí)的中心點(diǎn)位置與width和height的大小,然后在GPU上再根據(jù)這些數(shù)據(jù)計(jì)算回粒子的四個(gè)頂點(diǎn)。
            這種優(yōu)化方案可以減少粒子在CPU上的運(yùn)算量,但雖然利用到shader。
            還有是粒子系統(tǒng)要共享VB和IB哦。

            骨骼動(dòng)畫優(yōu)化:
            利用GPU計(jì)算頂點(diǎn)是骨骼動(dòng)畫優(yōu)化的最有效手段,現(xiàn)在很多人的做法是只把骨骼動(dòng)畫的矩陣轉(zhuǎn)到GPU,然后在GPU計(jì)算每個(gè)頂點(diǎn)的位置。這種做法受到了shader寄存器數(shù)量的限制。其實(shí)還有一種做法是把矩陣寫入一個(gè)1行的浮點(diǎn)紋理,試想一下,如果是1X1024的浮點(diǎn)紋理,那可以存1024 / 4 = 256個(gè)矩陣(1個(gè)像素是R32G32B32A32F四個(gè)浮點(diǎn)的紋理),這種方式要求顯卡支持并占一定的帶寬。

            模型渲染優(yōu)化:
            可以利用hardware instancing,LOD等方法。帶骨骼動(dòng)畫的模型,在DX10以上可以實(shí)現(xiàn)骨骼動(dòng)畫instancing。

            場景優(yōu)化:
            現(xiàn)在流行occullsion優(yōu)化,就是把被遮擋的物體不渲染出來,我簡單地說一下這種實(shí)現(xiàn)的原理:
            開一個(gè)RTT,把在視錐范圍內(nèi)的渲染物取AABB,然后把這個(gè)AABB賦一個(gè)顏色(每個(gè)物體的AABB顏色都不一樣),然后渲染的時(shí)候把這個(gè)顏色作為輸出顏色渲染出來。因?yàn)殚_了深度,如果在后面被完全遮擋的物體,那最終這張RTT紋理是不存在這個(gè)物體的顏色,根據(jù)一些方法可以知道這個(gè)紋理是否有這顏色,然后通過這個(gè)顏色索引回該物體,然后把它剔除掉。DX9的occullsion query就是這樣弄。還有Occlusion Culling,我相信原理也是類似這樣。

            陸續(xù)更新中……

            posted on 2013-03-23 16:29 狂爛球 閱讀(2191) 評(píng)論(1)  編輯 收藏 引用 所屬分類: 圖形編程

            評(píng)論

            # re: 游戲中各種性能優(yōu)化方法(不斷更新) 2015-03-12 09:34 痘印多久能消除

            骨骼動(dòng)畫優(yōu)化:
            利用GPU計(jì)算頂點(diǎn)是骨骼動(dòng)畫優(yōu)化的最有效手段,現(xiàn)在很多人的做法是只把骨骼動(dòng)畫的矩陣轉(zhuǎn)到GPU,然后在GPU計(jì)算每個(gè)頂點(diǎn)的位置。這種做法受到了shader寄存器數(shù)量的限制。其實(shí)還有一種做法是把矩陣寫入一個(gè)1行的浮點(diǎn)紋理,試想一下,如果是1X1024的浮點(diǎn)紋理,那可以存1024 / 4 = 256個(gè)矩陣(1個(gè)像素是R32G32B32A32F四個(gè)浮點(diǎn)的紋理),這種方式要求顯卡支持并占一定的帶寬
            這點(diǎn)是學(xué)習(xí)到了,不錯(cuò),贊個(gè)  回復(fù)  更多評(píng)論   

            国产真实乱对白精彩久久| 精品久久久久香蕉网| 国产三级精品久久| 久久久久99这里有精品10 | 久久久一本精品99久久精品88| 97精品久久天干天天天按摩| 狠狠色丁香婷婷久久综合| 久久99久久无码毛片一区二区| 无码人妻久久一区二区三区蜜桃| 波多野结衣中文字幕久久| 久久最近最新中文字幕大全 | 精品久久久无码21p发布| 久久99精品久久久久久不卡| 亚洲AV伊人久久青青草原| 性做久久久久久久| 亚洲国产精品无码久久久秋霞2| 国产亚洲精品自在久久| 亚洲国产成人精品久久久国产成人一区二区三区综 | 97超级碰碰碰碰久久久久| 国产精品久久久亚洲| 久久久久国产精品三级网| 国内精品久久久久久不卡影院| 狠狠色丁香久久婷婷综合蜜芽五月| 2021久久国自产拍精品| 亚洲精品高清国产一线久久| 久久久精品波多野结衣| 99久久精品费精品国产一区二区| 亚洲欧洲日产国码无码久久99| 嫩草影院久久国产精品| 精品久久久久久国产91| 久久99精品久久久久久噜噜| 99久久国产热无码精品免费| 一本一本久久a久久综合精品蜜桃 一本一道久久综合狠狠老 | 国产V亚洲V天堂无码久久久| 久久AV无码精品人妻糸列| 99久久做夜夜爱天天做精品| 色婷婷久久综合中文久久一本| 精品久久久久久国产三级 | 色综合久久中文字幕无码| 亚洲午夜久久久影院| 日韩精品久久久久久免费|