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

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

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

               一般在光柵化之前的瓶頸稱作”transform bound”, 三角形設置處理后的瓶頸稱作”fill bound”定位瓶頸的辦法:
            • 1.改變幀緩沖或者渲染目標(Render Target)的顏色深度(16 到 32 位), 如果幀速改變了, 那么瓶頸應該在幀緩沖(RenderTarget)的填充率上。
            • 2.否則試試改變貼圖大小和貼圖過濾設置, 如果幀速變了,那么瓶頸應該是在貼圖這里。
            • 3.否則改變分辨率.如果幀速改變了, 那么改變一下pixel shader的指令數(shù)量, 如果幀速變了, 那么瓶頸應該就是pixel shader. 否則瓶頸就在光柵化過程中。
            • 4.否則, 改變頂點格式的大小, 如果幀速改變了, 那么瓶頸應該在顯卡帶寬上。
            • 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內存中向顯存?zhèn)魉蛿?shù)據(jù). 這樣也可以使用靜態(tài)VB了。
            • 5.堅決避免使用Draw**UP一族的函數(shù)來繪制多邊形。
            • 6.在設計程序之前好好規(guī)劃一下顯卡內存的使用, 確保framebuffer, 貼圖, 靜態(tài)VB能夠正好放入顯卡的本地內存中。
            • 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更新, 使用NOOVERWRITE來添加.盡量不要使用不帶參數(shù)的lock調用(0)。
            • 11.盡量減少lock的次數(shù), 有些東西并不一定非要每一幀都更新VB, 比如人物動畫一般每秒鐘更新30次VB基本上就夠了。
            • 12.如果是因為需要繪制的頂點數(shù)據(jù)太多了可以考慮使用LOD, 但是現(xiàn)在的顯卡的繪制能力都很強勁, 所以需要權衡一下LOD是否能夠帶來相應的好處, 如果過分的強化LOD很可能將瓶頸轉移到CPU這邊。
            • 13.避免過多的頂點計算,比如過多的光源, 過于復雜的光照計算(復雜的光照模型), 紋理自動生成的開啟也會增加頂點的計算量. 如果貼圖坐標變換矩陣不是單位矩陣, 也會造成頂點計算量的增加, 所以如果紋理變換已經(jīng)結束, 記得要將紋理變換矩陣設為單位矩陣同時調整貼圖坐標。
            • 14.避免Vertex shader指令數(shù)量太多或者分支過多, 盡量減少vertex shader的長度和復雜程度. 盡量使用swizzling代替mov。
            • 15.如果圖象質量方面的計算(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)內存中取的。
            • 20.只要可能就用16位色的貼圖, 如環(huán)境貼圖或者shadow map.它們用32位色的貼圖實在是浪費。
            • 21.考慮使用DXT 貼圖壓縮。
            • 22.如果可能,使用簡單的貼圖過濾或者mip map, 除非必要否則盡量不要使用三線過濾和各項異性過濾. light map 和 環(huán)境貼圖基本上都不需要使用它們。
            • 23.只有真正需要修改的貼圖才使用Dynamic, 并且使用DISCRAD和WRITEONLY來lock。
            • 24.太多的幀緩沖讀寫可以考慮關閉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)內存中。
            • 33.堅決不要在渲染循環(huán)中調用創(chuàng)建資源。
            • 34.按照shader和貼圖分組后再渲染.先按照shaders分組再按貼圖。
            • 35.Color Stencil Z buffer盡量在一次Clear調用中清除。
            • 36.一個Vertex buffer 的大小在2M-4M之間最好。

            posted on 2009-09-01 01:32 RedLight 閱讀(596) 評論(0)  編輯 收藏 引用 所屬分類: 3D渲染技術

            <2008年4月>
            303112345
            6789101112
            13141516171819
            20212223242526
            27282930123
            45678910

            導航

            統(tǒng)計

            公告


            Name: Galen
            QQ: 88104725

            常用鏈接

            留言簿(3)

            隨筆分類

            隨筆檔案

            相冊

            My Friend

            搜索

            最新評論

            閱讀排行榜

            評論排行榜

            久久久久久久综合日本| 久久97精品久久久久久久不卡| 久久久一本精品99久久精品88| 久久亚洲AV成人无码软件 | 伊人久久综合热线大杳蕉下载| 国产精品久久亚洲不卡动漫| 久久99精品久久久久久秒播| 日韩va亚洲va欧美va久久| 亚洲va中文字幕无码久久不卡| 人妻精品久久久久中文字幕一冢本| 91久久精一区二区三区大全| 伊人久久大香线蕉影院95| 久久人人爽人人爽人人片AV麻烦| 丁香狠狠色婷婷久久综合| 久久无码AV一区二区三区| 欧美激情精品久久久久| 久久天天躁狠狠躁夜夜2020一| 亚洲国产精品久久66| 亚洲色欲久久久综合网| 色综合久久中文字幕综合网| 青草影院天堂男人久久| 一级做a爱片久久毛片| 青草影院天堂男人久久| 国产精品日韩欧美久久综合| 伊人久久综合热线大杳蕉下载| 一本大道久久a久久精品综合| 好久久免费视频高清| 久久精品亚洲精品国产欧美| 人人狠狠综合久久亚洲高清| 久久久久人妻一区二区三区| 久久精品亚洲日本波多野结衣 | 久久综合五月丁香久久激情| 久久一区二区三区99| 国产精品久久久久久吹潮| 久久综合九色综合欧美狠狠| 久久精品国产一区二区| 日韩精品无码久久久久久| 色8激情欧美成人久久综合电| 亚洲精品无码久久千人斩| 久久国产精品无码网站| 狠狠色丁香久久婷婷综|