青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

戰(zhàn)魂小筑

討論群:309800774 知乎關(guān)注:http://zhihu.com/people/sunicdavy 開源項目:https://github.com/davyxu

   :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
  257 隨筆 :: 0 文章 :: 506 評論 :: 0 Trackbacks

偶然一次查看RenderMonkey例子中的Particle System.rfx 的 FireParticleSystem 中發(fā)現(xiàn)了一種提高DX9渲染效率的設(shè)計方法

image

這里僅列出Vertex Shader參考:

 

   1:  float4x4 view_proj_matrix: register(c0);
   2:  float4x4 view_matrix: register(c4);
   3:  float time_0_X: register(c8);
   4:  float4 particleSystemPosition: register(c9);
   5:  float particleSystemShape: register(c10);
   6:  float particleSpread: register(c11);
   7:  float particleSpeed: register(c12);
   8:  float particleSystemHeight: register(c13);
   9:  float particleSize: register(c14);
  10:  // The model for the particle system consists of a hundred quads.
  11:  // These quads are simple (-1,-1) to (1,1) quads where each quad
  12:  // has a z ranging from 0 to 1. The z will be used to differenciate
  13:  // between different particles
  14:   
  15:  struct VS_OUTPUT {
  16:     float4 Pos: POSITION;
  17:     float2 texCoord: TEXCOORD0;
  18:     float color: TEXCOORD1;
  19:  };
  20:   
  21:  VS_OUTPUT main(float4 Pos: POSITION){
  22:     VS_OUTPUT Out;
  23:   
  24:     // Loop particles
  25:     float t = frac(Pos.z + particleSpeed * time_0_X);
  26:     // Determine the shape of the system
  27:     float s = pow(t, particleSystemShape);
  28:   
  29:     float3 pos;
  30:     // Spread particles in a semi-random fashion
  31:     pos.x = particleSpread * s * cos(62 * Pos.z);
  32:     pos.z = particleSpread * s * sin(163 * Pos.z);
  33:     // Particles goes up
  34:     pos.y = particleSystemHeight * t;
  35:   
  36:     // Billboard the quads.
  37:     // The view matrix gives us our right and up vectors.
  38:     pos += particleSize * (Pos.x * view_matrix[0] + Pos.y * view_matrix[1]);
  39:     // And put the system into place
  40:     pos += particleSystemPosition;
  41:   
  42:     Out.Pos = mul(view_proj_matrix, float4(pos, 1));
  43:     Out.texCoord = Pos.xy;
  44:     Out.color = 1 - t;
  45:   
  46:     return Out;
  47:  }

由于RenderMonkey本身只能使用Shader,而不能進行任何CPU方的算法設(shè)計,因此要實現(xiàn)一個例子系統(tǒng),只能使用另外的方法,這個例子就是使用純Shader來實現(xiàn)了一個粒子系統(tǒng)的效果。

注意第31,32行中出現(xiàn)的Pos.z,這是本例子最有參考價值的地方。如果把Particles這個模型引用的QuadArray.3ds用MAX打開你就能發(fā)現(xiàn),這其實是一個多層疊出來的片, 每個片的間隔就是Pos.z。讓我們來整理下渲染出例子的整個流程:

由QuadArray.3ds提供Vertex數(shù)據(jù),也就是VertexBuffer.片狀的VB數(shù)據(jù)被送入管線,然后由上面的VertexShader程序,通過Pos.z將他們切開,控制這些片的頂點重塑例子的外觀。最后的PS只是簡單的將光柵化后的像素點根據(jù)紋理采樣顯示出來。

2008年時,我曾經(jīng)根據(jù)這個原理,設(shè)計了一套粒子系統(tǒng),原理與這個差不多,只不過VB是由Constant設(shè)置進來,在DX10/11以上就叫ConstantBuffer。測試了下,傳統(tǒng)的粒子系統(tǒng),在我的本子上大約只能跑60多幀,但是這個不鎖定VB的粒子系統(tǒng)卻可以跑300多幀。

最近決定使用這個技術(shù)優(yōu)化下我的引擎中繪制線段及片的系統(tǒng),以下是VertexShader的代碼:

#define VERTEX_COUNT 80
 
float4 PositionBuffer[VERTEX_COUNT];
float2 UVBuffer[VERTEX_COUNT];
float4 ColorBuffer[VERTEX_COUNT];
 
float4x4 Transform;
 
void Main(
    in float InIndex : TEXCOORD0,
    out float4 OutPosition : POSITION,
    out float2 OutTexCoord : TEXCOORD1,
    out float4 OutColor : COLOR0
    )
{
    OutPosition = mul( PositionBuffer[ InIndex ] , Transform );
    OutColor = ColorBuffer[ InIndex ];
    OutTexCoord = UVBuffer[ InIndex ];
}

這里有個細節(jié)需要注意。從最初分析看來,多邊形的構(gòu)造都是由Constant輸入,并由VS代碼構(gòu)造,在VB中的數(shù)據(jù)好像只需要一個Index就夠了。但是實際測試下來發(fā)現(xiàn),這樣是錯誤的,還是必須在頂點定義中添加繪制的基本元素,例如位置和紋理坐標。

DX9因為不開源,我們并不了解下面3種繪制方式的性能差異:

1. Constant發(fā)送

2. 鎖定VB發(fā)送

3. DrawPrimitiveUP系列使用系統(tǒng)內(nèi)建緩沖渲染

 

經(jīng)過測試發(fā)現(xiàn),DrawPrimitive在數(shù)據(jù)量小時,比鎖定VB快些,而Constant發(fā)送方式?jīng)]有DrawPrimitiveUP快。

因此,使用Constant發(fā)送多邊形數(shù)據(jù)進行構(gòu)造的方法在量小且固定的情況下對于性能提升是很有幫助的,但大量的頂點及變化的數(shù)據(jù)還是必須使用傳統(tǒng)的方法。

posted on 2010-07-27 14:46 戰(zhàn)魂小筑 閱讀(2262) 評論(1)  編輯 收藏 引用 所屬分類: 渲染 Shader 引擎

評論

# re: DirectX 9高效渲染之利用Constant構(gòu)建渲染數(shù)據(jù) 2012-10-24 22:46 王月
Constant怎么發(fā)送?  回復(fù)  更多評論
  

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            亚洲精品永久免费| 欧美在线视频免费播放| 欧美日韩一区二区在线观看| 欧美国内亚洲| 欧美日韩在线亚洲一区蜜芽| 国产精品高潮视频| 国产视频丨精品|在线观看| 欧美精品一区二区三区一线天视频| 久热国产精品视频| 欧美日韩成人一区| 国产精品久久久久婷婷| 国内精品伊人久久久久av一坑| 伊人成人在线| 日韩一区二区精品葵司在线| 欧美亚洲午夜视频在线观看| 久久久久久午夜| 亚洲精品影院在线观看| 午夜精品视频在线| 欧美 日韩 国产在线 | 久久激情久久| 美女视频网站黄色亚洲| 91久久在线播放| 亚洲一品av免费观看| 久久久久国产一区二区三区四区 | 久久精品主播| 亚洲精品孕妇| 久久久久久免费| 欧美日韩一卡| 亚洲成人在线网站| 亚洲深夜福利视频| 欧美黑人一区二区三区| 亚洲欧美精品| 欧美日韩大片| 亚洲国产成人av| 欧美精品乱码久久久久久按摩| 国产精品高潮呻吟久久av无限 | 久久综合久久综合久久| 国产精品国产三级国产普通话99| 精品999在线播放| 亚洲一区二区三区在线观看视频| 另类激情亚洲| 久久精品国产99国产精品| 国产精品v欧美精品∨日韩| 亚洲精华国产欧美| 久久亚洲春色中文字幕久久久| 亚洲视频久久| 欧美三级小说| 亚洲视频你懂的| 最新国产成人在线观看| 狂野欧美一区| 在线激情影院一区| 牛牛影视久久网| 久久精品亚洲| 精品69视频一区二区三区| 欧美一区观看| 亚洲自拍电影| 国产无一区二区| 久久国产精品久久久久久久久久| 亚洲一二三级电影| 国产精品高潮呻吟久久av无限| 99国内精品久久| 9i看片成人免费高清| 欧美午夜大胆人体| 亚洲欧美日韩国产一区二区三区 | 在线播放视频一区| 久久视频一区| 久久亚洲精品网站| 亚洲二区精品| 亚洲国产美女| 欧美视频一区在线观看| 亚洲欧美日韩精品久久久| 中文精品在线| 国产午夜精品久久久久久免费视| 欧美一区二区三区精品| 欧美在线视频观看| 在线观看视频免费一区二区三区| 美女精品在线观看| 欧美成人午夜77777| 亚洲网站在线看| 欧美一级专区| 亚洲激情电影在线| av72成人在线| 国语精品一区| 亚洲精品乱码久久久久久久久| 国产精品高精视频免费| 另类尿喷潮videofree | 91久久极品少妇xxxxⅹ软件| 亚洲国产清纯| 国产精品一区免费视频| 亚洲精品国产视频| 亚洲片区在线| 国产精品白丝黑袜喷水久久久 | 日韩亚洲在线观看| 国产亚洲精品aa午夜观看| 欧美阿v一级看视频| 欧美特黄一级| 欧美大片在线观看一区| 欧美视频一区二区在线观看| 久久久久久免费| 欧美v亚洲v综合ⅴ国产v| 亚洲一区欧美二区| 老司机凹凸av亚洲导航| 午夜在线观看欧美| 欧美激情综合五月色丁香| 欧美在线地址| 欧美三级午夜理伦三级中文幕| 久久国产黑丝| 欧美日本精品| 免费一区视频| 国产精品三级久久久久久电影| 欧美激情综合色| 国产一区二区在线观看免费| 亚洲精品少妇30p| 在线观看欧美黄色| 亚洲欧美久久| 中文av字幕一区| 免费久久99精品国产自在现线 | 99精品99| 亚洲国产精品一区二区第一页| 中文国产成人精品久久一| 亚洲九九精品| 蜜臀久久久99精品久久久久久| 久久av一区二区三区漫画| 欧美日韩无遮挡| 亚洲精品久久嫩草网站秘色| 亚洲国产一区二区视频| 久久久久久久久久久久久久一区 | 亚洲综合不卡| 亚洲一级片在线观看| 欧美精品色综合| 亚洲国产电影| 亚洲精品资源| 欧美精品自拍| 亚洲伦理精品| 亚洲一区二区三区免费视频| 欧美日韩精品一本二本三本| 亚洲欧洲一区二区在线播放| 亚洲精品视频在线| 欧美激情一区二区久久久| 亚洲国产日韩欧美在线99| 亚洲人成人99网站| 欧美精品v日韩精品v国产精品| 亚洲国产欧美不卡在线观看| 亚洲看片免费| 欧美无乱码久久久免费午夜一区 | 欧美黑人在线观看| 亚洲国产日韩欧美综合久久| 99精品99| 国产精品激情偷乱一区二区∴| 亚洲一区美女视频在线观看免费| 国产亚洲精品成人av久久ww| 欧美在线电影| 欧美激情二区三区| 在线视频亚洲一区| 国产精品自拍视频| 久久美女性网| 亚洲片国产一区一级在线观看| 在线视频中文亚洲| 国产欧美日韩视频在线观看| 欧美在线观看视频一区二区三区 | 亚洲视频一区| 久久久噜噜噜久噜久久| 亚洲高清在线| 欧美视频一区在线| 欧美在线免费视频| 亚洲国产精品一区二区第一页| 野花国产精品入口| 国产一区二区三区成人欧美日韩在线观看 | 欧美在线高清视频| 91久久精品一区二区三区| 亚洲欧美国产精品桃花| 一区二区三区在线视频观看| 欧美激情91| 久久久成人网| 亚洲网站视频福利| 亚洲电影免费在线| 久久久久久久综合狠狠综合| 91久久久久久| 国产综合网站| 国产精品电影观看| 欧美大片免费看| 欧美一区二区三区免费看| 亚洲人体偷拍| 久热精品视频在线免费观看| 亚洲小视频在线观看| 亚洲国产精品成人综合色在线婷婷 | 亚洲精品日韩综合观看成人91| 国产伦理一区| 欧美午夜激情在线| 欧美好骚综合网| 久久久久综合一区二区三区| 亚洲一区二区三区777| 亚洲国产精品久久久久婷婷老年| 欧美中文字幕| 午夜欧美精品久久久久久久| 日韩小视频在线观看| 亚洲激情在线| 亚洲日本中文字幕| 亚洲成人在线网站| 一区二区在线观看视频|