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

3d Game Walkman

3d圖形渲染,網絡引擎 — tonykee's Blog
隨筆 - 45, 文章 - 0, 評論 - 309, 引用 - 0
數據加載中……

能穿透alphatest紋理的shadowmap

這幾天加入了shadowmap影子,著實費了點腦子看起來很簡單的,可這東西牽扯到很多東西,場景要成像的對象都要統一納入深度圖里面渲染一遍,加了很多渲染方面的組織代碼,靜態模型,骨骼模型,等等,都要影子,渲染的方法還略有區別,真是很繁瑣,眼看就要成功了,可煩心事又來了,燈光沒辦法穿透alpha紋理,那些樹葉都是一大片一大片的,根本不透光,場景中為了節約三角形,要做alphatest的紋理比比皆是,如果光線穿不透alpha紋理,那可太糟糕了,在gameres上問了一把,clayman和六水兩位大俠給了我不小的幫助,主要的思路是深度圖是需要做alphatest的,這樣才能被穿透,直接用R32F我試過了,alphatest根本無效,也不知道是不是顯卡太差了,看了一篇文章,
GPU GEM1
http://http.developer.nvidia.com/GPUGems/gpugems_ch12.html
有提到這個算法,可以把R32F轉換為A8R8G8B8即可節約內存又可以提高兼容性,很多顯卡還不支持R32F呢,
這就涉及到一個壓縮和解壓的算法,那篇NV的文章說的太抽象,很不具體,試了很久也不成功。
網上找了一個晚上加一上午的時間,終于找到了答案
http://www.gamedev.net/community/forums/topic.asp?topic_id=442138

這個主題就是討論這個算法的。

其中:
float4 pack(float fDist)
{
    const float4 bitSh = float4(   256*256*256, 256*256,   256,         1);
 const float4 bitMsk = float4(   0,      1.0/256.0,    1.0/256.0,    1.0/256.0);

 float4 comp;
 comp = fDist * bitSh;
 comp = frac(comp);
 comp -= comp.xxyz * bitMsk;
  //我這里稍微該了改,把最后低的精度移到了末尾
 return float4(comp.y, comp.z, comp.w, comp.x);
}


float unpack(sampler ShadowMapS, float2 texcood)
{
  float4 vec = tex2D(ShadowMapS, texcood);
  //我這里稍微該了改,把最后一個精度移到了末尾

  const float4 bitShifts = float4(1.0/(256.0*256.0), 1.0/256.0, 1, 1.0/(256.0*256.0*256.0));
  //return vec.x*1.0/(256.0*256.0*256.0) + vec.y* 1.0/(256.0*256.0) + vec.z*1.0/256.0 + vec.w;
  return dot(vec.xyzw , bitShifts);
}

//以下是shadowmap的拍攝過程

void BuildShadowMapVS(float3 posL : POSITION0,
                      float3 normalL : NORMAL0,
                      float2 tex0    : TEXCOORD0,
                      out float4 posH : POSITION0,
                      out float2 depth : TEXCOORD0,
                      out float2 tex1 : TEXCOORD1
                      )
{
 // Render from light's perspective.
 posH = mul(float4(posL, 1.0f), gLightWVP); 
 // Propagate z- and w-coordinates.
 depth = posH.zw;
 tex1 = tex0;
}

 

float4 BuildShadowMapPS(float2 depth : TEXCOORD0, float2 tex1 : TEXCOORD1) : COLOR
{
 // Each pixel in the shadow map stores the pixel depth from the
 // light source in normalized device coordinates.

 float a = tex2D(TexS, tex1).a;
 float f = clamp(depth.x / depth.y , 0, 1);
    
     float4 val=pack(f);
     if(a < 0.5)
     val.a = 0.0f;
      else
     val.a = 1.0f;
     return val;
}

就是關鍵的float與A8R8G8B8之間的壓縮和解壓的算法,其中
 comp -= comp.xxyz * bitMsk;很難理解,但仔細想一想你就能想明白其中的道理
這個是可以轉換了,但里面還有更為關鍵的東西,還要把A8的alpha信息加進去,不然還是不能做影子的alpha測試,根據六水兄的提議,我也忽略了256*256*256末尾的精度,加入了成像紋理的alpha信息,這樣最終實現了光線對alpha紋理的穿透,還真是不容易,發圖出來鑒賞一下這兩天的成果:

posted on 2008-05-27 15:57 李侃 閱讀(3103) 評論(8)  編輯 收藏 引用 所屬分類: 前臺客戶端

評論

# re: 能穿透alphatest紋理的shadowmap  回復  更多評論   

高,實在是高!!

請問你學3d多久了
2008-05-27 16:05 | xiao7cn

# re: 能穿透alphatest紋理的shadowmap  回復  更多評論   

原來gameres上的問題是你問的啊。
2008-05-27 16:13 | 空明流轉

# re: 能穿透alphatest紋理的shadowmap  回復  更多評論   

時間不算長,沒記錯的話,應該是22個月吧
2008-05-27 16:17 | 李侃

# re: 能穿透alphatest紋理的shadowmap  回復  更多評論   

渲染方面學的不好,見笑了。
2008-05-27 16:20 | 李侃

# re: 能穿透alphatest紋理的shadowmap  回復  更多評論   

才知道你的昵稱就是tonykee。
2008-05-27 17:50 | 空明流轉

# re: 能穿透alphatest紋理的shadowmap  回復  更多評論   

厲害是個牛人
2008-05-28 16:06 | 盛大推廣員

# re: 能穿透alphatest紋理的shadowmap  回復  更多評論   

在PS里用紋理的Alpha來clip就可以了,連Alpha通道都不用占用。
2008-12-16 21:36 | 藍色比特

# re: 能穿透alphatest紋理的shadowmap  回復  更多評論   

弱弱問下
這樣應該是spot light吧,如果是平行光怎么辦...
2009-02-05 21:02 | dongch007
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            亚洲精品美女91| 欧美一区亚洲| 亚洲高清色综合| 欧美不卡三区| 亚洲免费av电影| 亚洲最新合集| 国产精品亚洲美女av网站| 亚洲免费影视第一页| 午夜一区不卡| 亚洲人成免费| 中文在线一区| 狠狠色狠色综合曰曰| 欧美r片在线| 欧美日韩国产综合视频在线观看中文 | 久久在线免费| 免费观看在线综合| 夜夜嗨av色综合久久久综合网| 久久9热精品视频| 国产自产在线视频一区| 亚洲电影在线看| 欧美午夜一区二区| 另类激情亚洲| 欧美午夜电影在线| 蜜臀av性久久久久蜜臀aⅴ| 久久亚洲精品中文字幕冲田杏梨| 欧美日韩一区在线播放| 午夜精品一区二区三区在线播放| 欧美国产成人精品| 国产精品成人观看视频免费| 久久亚洲午夜电影| 国产精品r级在线| 免费人成精品欧美精品| 国产精品裸体一区二区三区| 麻豆久久婷婷| 国产欧美日韩精品一区 | 欧美日韩国产小视频| 午夜精品久久久久久久99热浪潮| 亚洲国产日韩美| 国产伦精品一区| 亚洲欧洲精品一区二区| 伊人精品久久久久7777| 亚洲一区二区高清| 一本色道久久88精品综合| 久久大香伊蕉在人线观看热2| 国产精品久久久久久久久久久久 | 欧美激情视频在线播放| 亚洲男人的天堂在线aⅴ视频| 日韩视频―中文字幕| 在线观看国产成人av片| 亚洲免费在线看| 99视频精品全部免费在线| 久久久精品日韩| 久久久久久亚洲精品中文字幕 | 欧美成人一区二免费视频软件| 狠狠久久婷婷| 99精品视频免费全部在线| 亚洲国产精品免费| 久久久久久久久久久久久久一区| 在线激情影院一区| 欧美一区二区三区免费在线看| 国产一区二区精品久久91| 夜夜嗨网站十八久久| 亚洲狼人精品一区二区三区| 老司机久久99久久精品播放免费 | 欧美日韩免费观看一区| 亚洲第一网站免费视频| 亚洲国产精品久久久久秋霞不卡| 欧美成人精品在线播放| 国产日韩欧美一二三区| 香蕉久久精品日日躁夜夜躁| 欧美在线视频观看| 国产亚洲精品一区二555| 欧美一区二区三区在线看| 久久久国产亚洲精品| 国内外成人免费视频| 久久精品首页| 欧美黄色成人网| 欧美日韩三区| 亚洲欧美成人综合| 久久久久久久网站| 在线观看中文字幕不卡| 欧美激情精品久久久六区热门| 99综合在线| 欧美三级在线视频| 午夜欧美大尺度福利影院在线看 | 欧美视频精品在线观看| 亚洲色图自拍| 久久婷婷成人综合色| 亚洲激情成人网| 欧美视频一区二区| 一区二区三区日韩欧美| 新67194成人永久网站| 黄色在线成人| 欧美久久九九| 欧美在线视屏| 亚洲精品影视在线观看| 久久福利影视| 日韩一区二区久久| 国产女主播一区二区三区| 久久久噜噜噜久久狠狠50岁| 亚洲美女av网站| 久久久久青草大香线综合精品| 欧美午夜在线一二页| 午夜亚洲性色福利视频| 亚洲国产日韩综合一区| 欧美一区二区在线观看| 日韩亚洲欧美精品| 国内精品久久久久久久影视麻豆 | 欧美在线视频网站| 亚洲人成久久| 国内精品亚洲| 国产精品夜夜嗨| 欧美刺激午夜性久久久久久久| 久久免费高清视频| 国产精品99久久久久久久久久久久| 久色成人在线| 亚洲欧美一区二区三区久久| 亚洲日本久久| 免费一级欧美片在线播放| 亚洲在线国产日韩欧美| 亚洲黄色在线| 亚洲电影观看| 在线播放不卡| 国内偷自视频区视频综合| 国产精品久久7| 欧美日韩国产三区| 欧美激情一级片一区二区| 久热精品视频在线观看| 欧美中文日韩| 羞羞视频在线观看欧美| 一二三四社区欧美黄| 亚洲人线精品午夜| 亚洲第一狼人社区| 欧美韩日一区| 亚洲福利在线视频| 欧美成人一区二区三区片免费| 亚洲国产毛片完整版 | 99精品99| 亚洲欧洲精品一区二区三区| 亚洲第一主播视频| 久久久免费观看视频| 久久精品亚洲国产奇米99| 午夜视频一区在线观看| 欧美一区二区网站| 欧美有码在线视频| 久久九九99视频| 久久久久久久综合狠狠综合| 久久九九99| 欧美aaa级| 亚洲精品日韩久久| 日韩亚洲在线观看| 一本一本久久a久久精品综合麻豆| 国产精品久久久久久亚洲毛片 | 久久综合久久综合久久综合| 久久亚洲精品一区二区| 久久久噜久噜久久综合| 米奇777在线欧美播放| 欧美高清在线视频观看不卡| 亚洲高清在线| 夜夜嗨av一区二区三区四区| 亚洲制服欧美中文字幕中文字幕| 免费久久99精品国产自| 亚洲高清视频在线| 一区二区日本视频| 午夜一区在线| 久色成人在线| 欧美视频精品在线| 国内成+人亚洲| 99成人在线| 欧美一级片在线播放| 美日韩精品免费| 亚洲激情专区| 午夜在线不卡| 久久综合一区| 国产精品视频xxx| 在线日本成人| 亚洲欧美激情精品一区二区| 久久精品国产亚洲a| 最新国产成人在线观看| 午夜精品久久久久久久白皮肤| 亚洲三级视频| 午夜久久资源| 欧美日韩一区视频| 在线成人激情黄色| 亚洲一区二区三区乱码aⅴ蜜桃女| 在线观看日韩一区| 亚洲午夜精品福利| 久久亚洲精品中文字幕冲田杏梨 | 激情婷婷亚洲| 亚洲调教视频在线观看| 久久久久久久久久久久久久一区| 亚洲欧美久久久久一区二区三区| 亚洲黄色一区| 久久精品国产亚洲一区二区三区 | 91久久久久久| 久久激情综合网| 亚洲精品美女| 欧美sm极限捆绑bd| 国内外成人免费激情在线视频| 国产综合久久久久影院|