• <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>

            麒麟子

            ~~

            導(dǎo)航

            <2010年1月>
            272829303112
            3456789
            10111213141516
            17181920212223
            24252627282930
            31123456

            統(tǒng)計(jì)

            常用鏈接

            留言簿(12)

            隨筆分類

            隨筆檔案

            Friends

            WebSites

            積分與排名

            最新隨筆

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

            優(yōu)化3D圖形渲染通道負(fù)載

            優(yōu)化3D圖形渲染通道負(fù)載

            http://www.itjiaocheng.com/jiaocheng/pingmiansheji/AutoCAD/texiaojiqiao/2009/0520/23435.html

              

            一般來(lái)說(shuō), 定位渲染通道瓶頸的方法就是改變渲染通道每個(gè)步驟的工作量, 如果吞吐量也改變了, 那個(gè)步驟就是瓶頸.。找到了瓶頸就要想辦法消除瓶頸, 可以減少該步驟的工作量, 增加其他步驟的工作量。

               一般在光柵化之前的瓶頸稱作”transform bound”, 三角形設(shè)置處理后的瓶頸稱作”fill bound”定位瓶頸的辦法:

               1.改變幀緩沖或者渲染目標(biāo)(Render Target)的顏色深度(16 到32 位), 如果幀速改變了, 那么瓶頸應(yīng)該在幀緩沖(RenderTarget)的填充率上。

               2.否則試試改變貼圖大小和貼圖過(guò)濾設(shè)置, 如果幀速變了,那么瓶頸應(yīng)該是在貼圖這里。

               3.否則改變分辨率.如果幀速改變了, 那么改變一下pixel shader的指令數(shù)量, 如果幀速變了, 那么瓶頸應(yīng)該就是pixel shader. 否則瓶頸就在光柵化過(guò)程中。

               4.否則, 改變頂點(diǎn)格式的大小, 如果幀速改變了, 那么瓶頸應(yīng)該在顯卡帶寬上。

               5.如果以上都不是, 那么瓶頸就在CPU這一邊。

               優(yōu)化方法36條:

               1.盡量減少無(wú)用的頂點(diǎn)數(shù)據(jù), 比如貼圖坐標(biāo), 如果有Object使用2組有的使用1組, 那么不 要將他們放在一個(gè)vertex buffer中, 這樣可以減少傳輸?shù)臄?shù)據(jù)量。

               2.使用多個(gè)streamsource, 比如SkinMesh渲染, 可以把頂點(diǎn)坐標(biāo)和法線這些每一幀都要修改的數(shù)據(jù)放在一個(gè)動(dòng)態(tài)VB中, 其它不需要修改的(如貼圖坐標(biāo))放到一個(gè)靜態(tài)VB中, 這樣就減少了數(shù)據(jù)傳輸量。

               3.盡量使用16位的索引緩沖,避免32位的. 一方面浪費(fèi)帶寬, 一方面也不是所有的顯卡都支持32位的索引緩沖。

               4.可以考慮使用vertex shader來(lái)計(jì)算靜態(tài)VB中的數(shù)據(jù).比如SkinMesh的頂點(diǎn)可以放到vectex shader中計(jì)算, 這樣就可以避免每一幀都從AGP內(nèi)存中向顯存?zhèn)魉蛿?shù)據(jù). 這樣也可以使用靜態(tài)VB了。

               5.堅(jiān)決避免使用Draw**UP一族的函數(shù)來(lái)繪制多邊形。

               6.在設(shè)計(jì)程序之前好好規(guī)劃一下顯卡內(nèi)存的使用, 確保framebuffer, 貼圖, 靜態(tài)VB能夠正好放入顯卡的本地內(nèi)存中。

               7.盡量使頂點(diǎn)格式大小是32字節(jié)的倍數(shù).可以考慮使用壓縮過(guò)的頂點(diǎn)格式然后用vertex shader去解. 或者留下冗余的部分, 使頂點(diǎn)大小剛好使32字節(jié)的倍數(shù)。

               8.頂點(diǎn)在頂點(diǎn)緩沖中的順序盡量符合繪制的順序, 考慮使用strips來(lái)代替list。

               9.如果可能盡量多的使用static vertex buffer代替dynamic vertex buffer。

               10.動(dòng)態(tài)VB使用DISCARD參數(shù)來(lái)lock更新, 使用NOOVERWR99vE來(lái)添加.盡量不要使用不帶參數(shù)的lock調(diào)用(0)。

               11.盡量減少lock的次數(shù), 有些東西并不一定非要每一幀都更新VB, 比如人物動(dòng)畫一般每秒鐘更新30次VB基本上就夠了。

               12.如果是因?yàn)樾枰L制的頂點(diǎn)數(shù)據(jù)太多了可以考慮使用LOD, 但是現(xiàn)在的顯卡的繪制能力都很強(qiáng)勁, 所以需要權(quán)衡一下LOD是否能夠帶來(lái)相應(yīng)的好處, 如果過(guò)分的強(qiáng)化LOD很可能將瓶頸轉(zhuǎn)移到CPU這邊。

               13.避免過(guò)多的頂點(diǎn)計(jì)算,比如過(guò)多的光源, 過(guò)于復(fù)雜的光照計(jì)算(復(fù)雜的光照模型), 紋理自動(dòng)生成的開(kāi)啟也會(huì)增加頂點(diǎn)的計(jì)算量. 如果貼圖坐標(biāo)變換矩陣不是單位矩陣, 也會(huì)造成頂點(diǎn)計(jì)算量的增加, 所以如果紋理變換已經(jīng)結(jié)束, 記得要將紋理變換矩陣設(shè)為單位矩陣同時(shí)調(diào)整貼圖坐標(biāo)。

               14.避免Vertex shader指令數(shù)量太多或者分支過(guò)多, 盡量減少vertex shader的長(zhǎng)度和復(fù)雜程度. 盡量使用swizzling代替mov。

               15.如果圖象質(zhì)量方面的計(jì)算(pixel shader)范圍很大, 并且很復(fù)雜, 可以考慮試試全屏反走樣。說(shuō)不定更快。

               16.盡量按照f(shuō)ront – back的順序來(lái)繪制。

               17.在shader中判斷Z值可以避免繪制不可見(jiàn)的象素, 但是nvidia建議簡(jiǎn)單的shader不要這么做.(Don't do this in a simple shader)。

               18.如果可能, 盡量使用vertex shader來(lái)代替pixel shader.將計(jì)算從逐象素變成逐頂點(diǎn)。

               19.盡量降低貼圖的大小.過(guò)大的貼圖可能造成貼圖cache過(guò)載, 從而導(dǎo)致貼圖cache命中降低.過(guò)大的貼圖會(huì)導(dǎo)致顯存過(guò)載, 這時(shí)候貼圖是從系統(tǒng)內(nèi)存中取的。

               20.只要可能就用16位色的貼圖, 如環(huán)境貼圖或者shadow map.它們用32位色的貼圖實(shí)在是浪費(fèi)。

               21.考慮使用DXT 貼圖壓縮。

               22.如果可能,使用簡(jiǎn)單的貼圖過(guò)濾或者mip map, 除非必要否則盡量不要使用三線過(guò)濾和各項(xiàng)異性過(guò)濾. light map 和環(huán)境貼圖基本上都不需要使用它們。

               23.只有真正需要修改的貼圖才使用Dynamic, 并且使用DISCRAD和WR99vEONLY來(lái)lock。

               24.太多的幀緩沖讀寫可以考慮關(guān)閉Z-Writes如有些多pass的渲染中的后續(xù)pass或者粒子系統(tǒng)等半透明幾何物體(如果可以)。

               25.可能的話盡量使用alpha test代替alpha blending。

               26.如果不需要stencil buffer就盡量使用16位的Z buffer。

               27.減小RenderTarget 貼圖的大小, 如shadow map 環(huán)境貼圖. 可能根本不需要那么大效果就很好。

               28.Stencil 和Z buffer 盡量一起clear. 他們本來(lái)就是一塊緩沖。

               29.盡量減少渲染狀態(tài)的切換, 盡量一次畫盡可能多的多邊形。(根據(jù)顯卡性能決定最多畫多少, 不過(guò)一般再多也不會(huì)多到哪里去。 除非你根本不需要貼圖和渲染狀態(tài)的切換)。

               30.盡量使用shader來(lái)代替Fixed Pipeline。

               31.盡量使用shader來(lái)實(shí)現(xiàn)來(lái)取代Multipass渲染效果。

               32.盡量?jī)?yōu)先先建立重要的資源, 如Render target, shaders, 貼圖, VB, IB等等.以免顯存過(guò)載的時(shí)候它們被創(chuàng)建到系統(tǒng)內(nèi)存中。

               33.堅(jiān)決不要在渲染循環(huán)中調(diào)用創(chuàng)建資源。

               34.按照shader和貼圖分組后再渲染.先按照shaders分組再按貼圖。

               35.Color Stencil Z buffer盡量在一次Clear調(diào)用中清除。

               36.一個(gè)Vertex buffer 的大小在2M-4M之間最好。(中國(guó)軟件)

            posted on 2010-01-29 13:43 麒麟子 閱讀(1276) 評(píng)論(0)  編輯 收藏 引用 所屬分類: GPU and Graphic

            久久精品中文字幕久久| 久久久亚洲精品蜜桃臀| 亚洲色婷婷综合久久| 亚洲日本va中文字幕久久| 久久婷婷五月综合色高清| 99久久免费国产精品热| 欧洲性大片xxxxx久久久| 亚洲国产精品无码久久SM| 日本三级久久网| 大香伊人久久精品一区二区 | 久久久久久久亚洲Av无码| 久久精品国产69国产精品亚洲| 欧美色综合久久久久久 | 久久久久亚洲?V成人无码| 久久AV无码精品人妻糸列| 久久美女网站免费| 久久精品人人做人人爽电影| 国产精品熟女福利久久AV| 国产精品一区二区久久国产 | 精品久久久久香蕉网| 亚洲伊人久久综合中文成人网| 国产精品久久一区二区三区| 亚洲一区精品伊人久久伊人| 狠狠久久综合伊人不卡| 欧美一区二区三区久久综合| 亚洲午夜无码AV毛片久久| 国内精品伊人久久久久网站| 久久亚洲精品中文字幕三区| 久久久精品人妻一区二区三区蜜桃| 久久成人小视频| 久久精品国产亚洲7777| 亚洲av日韩精品久久久久久a| 区久久AAA片69亚洲| 区亚洲欧美一级久久精品亚洲精品成人网久久久久| 久久国产精品99精品国产| 欧美亚洲色综久久精品国产| 日本久久久久亚洲中字幕| 亚洲中文字幕久久精品无码APP| 香蕉99久久国产综合精品宅男自| 久久精品国产一区二区三区| 久久久精品国产亚洲成人满18免费网站 |