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

戰(zhàn)魂小筑

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

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

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

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,而不能進(jìn)行任何CPU方的算法設(shè)計(jì),因此要實(shí)現(xiàn)一個(gè)例子系統(tǒng),只能使用另外的方法,這個(gè)例子就是使用純Shader來實(shí)現(xiàn)了一個(gè)粒子系統(tǒng)的效果。

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

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

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

最近決定使用這個(gè)技術(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 ];
}

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

DX9因?yàn)椴婚_源,我們并不了解下面3種繪制方式的性能差異:

1. Constant發(fā)送

2. 鎖定VB發(fā)送

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

 

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

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

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

評(píng)論

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

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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麻豆的观看方式| 亚洲欧美影音先锋| 欧美亚州韩日在线看免费版国语版| 裸体女人亚洲精品一区| 美女图片一区二区| 欧美激情一区二区三区| 欧美日韩一区二区三区在线| 欧美香蕉大胸在线视频观看| 国产精品婷婷午夜在线观看| 韩国一区电影| 日韩午夜av在线| 欧美一区2区三区4区公司二百| 久久免费观看视频| 亚洲国产精品成人va在线观看| 免费欧美在线| 99在线精品观看| 欧美一区二区三区久久精品茉莉花 | 最近中文字幕日韩精品| 99pao成人国产永久免费视频| 99国产精品久久久| 久久精品国产77777蜜臀| 另类欧美日韩国产在线| 亚洲电影网站| 午夜精品亚洲一区二区三区嫩草| 麻豆视频一区二区| 国产精品久久久久久久久搜平片| 精品不卡一区二区三区| 亚洲婷婷在线| 女同一区二区| 午夜精品久久久久久99热软件| 久久综合狠狠综合久久综合88 | 亚洲七七久久综合桃花剧情介绍| 亚洲视频播放| 欧美a级一区二区| 国产精品自拍在线| 99国产精品99久久久久久| 久久婷婷影院| 日韩午夜av在线| 亚洲福利电影| 野花国产精品入口| 欧美怡红院视频| 欧美大片免费观看| 国内精品一区二区三区| 亚洲尤物精选| 最新亚洲视频| 久久久亚洲人| 国产一区二区三区四区三区四 | 日韩亚洲欧美成人| 美女精品在线| 亚洲国产黄色片| 免费在线成人av| 久久这里有精品15一区二区三区| 国内成+人亚洲| 亚洲激情小视频| 亚洲女同在线| 亚洲精品影视| 免费久久99精品国产| 国产亚洲精品资源在线26u| 亚洲小说欧美另类婷婷| 亚洲国产经典视频| 久久久国产91| 精品不卡视频| 欧美成人激情视频免费观看| 久久精品在线| 在线观看日韩欧美| 男人天堂欧美日韩| 欧美插天视频在线播放| 亚洲精品久久久久久久久久久久久 | 99精品国产高清一区二区| 亚洲第一区在线观看| 美女视频黄免费的久久| 亚洲国产精品久久91精品| 欧美国产91| 欧美另类极品videosbest最新版本 | 亚洲精品日韩激情在线电影| 欧美另类在线播放| 中日韩美女免费视频网站在线观看| 亚洲欧洲日韩女同| 国产精品久久久久久久久久久久久 | 日韩亚洲欧美成人一区| 亚洲精品美女免费| 国产精自产拍久久久久久| 国产精品久久久久一区二区三区共 | 欧美电影资源| 欧美极品在线播放| 亚洲综合视频在线| 欧美一区二区视频在线观看| 亚洲激情六月丁香| 一区二区三区国产精品| 韩国在线视频一区| 亚洲免费观看视频| 国产欧美精品国产国产专区| 你懂的国产精品| 欧美三区美女| 欧美jizz19性欧美| 欧美视频在线观看免费| 美腿丝袜亚洲色图| 欧美午夜无遮挡| 免费欧美高清视频| 国产精品一区视频网站| 欧美激情精品久久久久久黑人| 欧美午夜免费影院| 欧美成人一区在线| 国产伦精品一区二区三| 亚洲高清不卡在线观看| 国产美女精品免费电影| 亚洲国产精品免费| 黑人一区二区三区四区五区| 99国产精品| 亚洲三级网站| 久久精品国产精品| 午夜日本精品| 欧美精选一区| 欧美电影打屁股sp| 国产亚洲欧美日韩在线一区| 日韩一区二区精品在线观看| 亚洲国产精品久久久久婷婷884 | 亚洲欧美日韩天堂| 欧美另类视频在线| 欧美黄色精品| 在线观看亚洲| 欧美一区二区三区四区在线观看| 中文日韩在线视频| 欧美激情中文字幕一区二区| 噜噜噜91成人网| 国产亚洲激情视频在线| 亚洲天堂免费观看| 亚洲在线电影| 国产精品久久久久秋霞鲁丝| 一区二区三区精品视频在线观看 | 亚洲美女中文字幕| 麻豆精品在线视频| 欧美v日韩v国产v| 亚洲高清一区二| 免费在线观看精品| 亚洲国产一区二区在线| 亚洲国产日韩精品| 免费欧美在线视频| 欧美日韩不卡在线| 亚洲伦理精品| 欧美国产日韩精品免费观看| 免费看av成人| 91久久久亚洲精品| 欧美成人精品在线| 亚洲韩国精品一区| 亚洲午夜高清视频| 国产精品欧美久久| 亚洲欧美日韩在线不卡| 久久av资源网站| 狠狠色丁香婷婷综合| 久久久久久伊人| 欧美激情黄色片| 亚洲视频导航| 国产精品资源| 久久亚洲国产成人| 亚洲国产精品www| 亚洲综合国产精品| 国内精品亚洲| 欧美日韩国语| 欧美一区二区三区免费观看| 欧美电影电视剧在线观看| 亚洲精品一区二区三区99| 国产精品久久久久久久久免费| 欧美亚洲一区在线| 亚洲国产天堂久久综合网| 亚洲午夜久久久| 激情欧美一区二区三区| 欧美精品福利| 欧美在线高清视频| 日韩西西人体444www| 久久国产欧美日韩精品| 亚洲日本欧美在线| 国产日韩欧美中文在线播放| 欧美—级在线免费片| 亚洲欧美日韩国产综合在线 | 免费成人av在线| 中文精品一区二区三区| 激情综合网址| 国产精品久久| 欧美精品黄色| 久久亚洲捆绑美女| 亚洲视频在线观看| 亚洲福利一区| 久久久久久穴| 亚洲伊人观看| 99热在这里有精品免费| 激情综合色综合久久| 国产精品乱看| 欧美日韩成人在线观看| 免费观看不卡av| 久久精品国产视频| 亚洲一区999| 亚洲免费观看| 亚洲国产欧美在线 | 99在线精品观看| 亚洲福利在线视频| 欧美成人一区二区在线| 久久色中文字幕| 久久国产精品高清| 欧美一区二区三区视频在线|