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

            麒麟子

            ~~

            導航

            <2010年4月>
            28293031123
            45678910
            11121314151617
            18192021222324
            2526272829301
            2345678

            統(tǒng)計

            常用鏈接

            留言簿(12)

            隨筆分類

            隨筆檔案

            Friends

            WebSites

            積分與排名

            最新隨筆

            最新評論

            閱讀排行榜

            評論排行榜

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

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

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

              

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

               8.頂點在頂點緩沖中的順序盡量符合繪制的順序, 考慮使用strips來代替list。

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

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

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

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

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

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

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

               16.盡量按照front – back的順序來繪制。

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

               18.如果可能, 盡量使用vertex shader來代替pixel shader.將計算從逐象素變成逐頂點。

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

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

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

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

               23.只有真正需要修改的貼圖才使用Dynamic, 并且使用DISCRAD和WR99vEONLY來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. 他們本來就是一塊緩沖。

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

               30.盡量使用shader來代替Fixed Pipeline。

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

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

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

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

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

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

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

            久久婷婷五月综合成人D啪| 久久亚洲综合色一区二区三区| 久久精品国产亚洲AV不卡| 日本加勒比久久精品| 亚洲午夜久久久影院| 国产亚洲欧美成人久久片| 日韩欧美亚洲综合久久影院Ds | 久久人妻AV中文字幕| 婷婷五月深深久久精品| 99精品久久久久久久婷婷| 久久免费看黄a级毛片| 国产精品青草久久久久婷婷| 久久WWW免费人成—看片| 亚洲欧美日韩久久精品第一区| 久久国产精品99久久久久久老狼 | 亚洲AV无码1区2区久久| 久久久久久国产a免费观看不卡| 午夜精品久久久久久久| 久久久久国产| 国内精品伊人久久久久影院对白| 无码人妻精品一区二区三区久久久 | 久久久久人妻一区精品果冻| 精品久久久久久亚洲精品| 亚洲国产成人久久综合野外| 中文字幕亚洲综合久久| 精品免费久久久久久久| 人妻少妇久久中文字幕一区二区 | 久久精品国产99国产精品导航 | 久久国产亚洲高清观看| 亚洲精品无码久久久久久| 亚洲另类欧美综合久久图片区| 国产午夜精品久久久久九九| 91精品国产综合久久婷婷| 久久精品人成免费| 久久强奷乱码老熟女网站| 久久精品一本到99热免费| 欧美精品九九99久久在观看| 亚洲国产天堂久久久久久| 欧美久久天天综合香蕉伊| 久久亚洲精品国产精品婷婷| 久久人人爽人人爽人人片AV不|