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

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>
            欧美午夜影院| 欧美在线视频在线播放完整版免费观看 | 亚洲狼人精品一区二区三区| 久久国产精品久久久久久电车 | 久久综合999| 欧美一区二区三区男人的天堂| 久久亚洲精品网站| 久久精品一区二区三区不卡| 国一区二区在线观看| 久久五月天婷婷| 久久久久久久一区| 亚洲高清免费视频| 亚洲国产精品一区二区久| 免费欧美在线| 亚洲毛片av| 9色精品在线| 国产精品久久久久久久9999| 香蕉精品999视频一区二区| 亚洲免费在线| 禁断一区二区三区在线| 免费亚洲网站| 欧美精品成人一区二区在线观看 | 国产啪精品视频| 亚洲网站在线| aa日韩免费精品视频一| 欧美日韩国产精品 | 国产精品高潮久久| 久久久精品视频成人| 麻豆成人综合网| 99国产欧美久久久精品| 亚洲视频在线一区| 黄页网站一区| 亚洲精品久久久久中文字幕欢迎你| 国产精品99免视看9| 久久精品视频免费观看| 蜜臀99久久精品久久久久久软件| 一区二区三区导航| 亚洲一区二区三区三| 亚洲伦理自拍| 欧美一级久久| 日韩视频免费在线观看| 午夜精品亚洲| 亚洲另类在线一区| 久久不射2019中文字幕| 一本一本a久久| 久久精品99国产精品日本| 一本色道久久88精品综合| 欧美一区视频| 亚洲手机在线| 噜噜噜91成人网| 久久成人免费网| 欧美日韩免费在线观看| 免费在线欧美黄色| 蜜桃av一区二区| 欧美日韩在线播放| 亚洲嫩草精品久久| 欧美成人69| 久久久亚洲精品一区二区三区| 欧美日韩一区二区高清| 国产精品久久一区二区三区| 亚洲欧洲一区| 国产人成精品一区二区三| 亚洲国产欧美一区| 在线成人中文字幕| 午夜性色一区二区三区免费视频| 一本一本a久久| 欧美精品一区二区三区在线播放| 久久嫩草精品久久久久| 国产欧美二区| 亚洲一区二区网站| 午夜久久久久| 欧美激情成人在线| 亚洲国产精品女人久久久| 亚洲大片一区二区三区| 久久久国产成人精品| 久久国产一区| 国产偷久久久精品专区| 亚洲一区在线直播| 久久国产精品久久w女人spa| 国产精品亚洲综合久久| 中文日韩欧美| 久久国产精品高清| 国产视频久久久久| 午夜在线一区| 久久一区二区三区av| 国内精品久久久久影院色 | 99视频在线精品国自产拍免费观看| 久久综合给合| 亚洲国产精品成人综合色在线婷婷| 亚洲电影免费观看高清完整版在线| 久久久亚洲成人| 欧美国产亚洲另类动漫| 日韩视频免费观看| 国产精品日韩欧美大师| 午夜亚洲福利在线老司机| 久久精品人人爽| 樱花yy私人影院亚洲| 欧美激情视频一区二区三区不卡| 亚洲精品中文字幕在线| 亚洲欧美卡通另类91av| 久久亚洲影音av资源网| 91久久久久久久久久久久久| 在线看欧美视频| 久久欧美肥婆一二区| 蜜臀av国产精品久久久久| 1024欧美极品| 久久尤物电影视频在线观看| 亚洲高清色综合| 亚洲黄色天堂| 国产精品国产三级国产专区53 | 老司机67194精品线观看| 亚洲精品偷拍| 久久久久免费观看| 日韩视频中文字幕| 国产日韩欧美一区二区| 欧美精品激情| 国产视频一区二区在线观看| 欧美—级a级欧美特级ar全黄| 欧美伊人久久大香线蕉综合69| 亚洲精品日韩一| 女人天堂亚洲aⅴ在线观看| 在线观看欧美亚洲| 狠狠综合久久av一区二区老牛| 欧美日本久久| 亚洲精品影院| 最新中文字幕一区二区三区| 久久久999精品| 亚洲影视在线| 亚洲精品资源美女情侣酒店| 国产一区二区三区直播精品电影 | 老牛影视一区二区三区| 亚洲深夜福利视频| 精品成人久久| 欧美日韩国产综合网 | 99精品久久久| 亚洲人成网站精品片在线观看| 久久久久九九九九| 香蕉乱码成人久久天堂爱免费 | 国产精品播放| 欧美日本久久| 欧美理论电影网| 久久综合国产精品| 久久国产欧美日韩精品| 亚洲女爱视频在线| 一区二区三区欧美日韩| 亚洲激情视频网| 欧美国产日韩在线观看| 欧美成人a视频| 免费精品视频| 亚洲影院免费| 洋洋av久久久久久久一区| 亚洲国产欧美一区二区三区久久| 国产偷国产偷亚洲高清97cao | 久久精品国产久精国产爱| 午夜伦欧美伦电影理论片| 亚洲性图久久| 亚洲男人第一av网站| 亚洲欧美国产一区二区三区| 中文欧美日韩| 亚洲一本大道在线| 亚洲一区二区精品在线| 午夜精品国产精品大乳美女| 亚洲一区二区三区高清| 亚洲一区视频| 欧美一区二区视频免费观看 | 亚洲第一级黄色片| 亚洲国产另类精品专区| 亚洲青涩在线| 一区二区三区四区五区视频| 99视频精品| 亚洲精品国精品久久99热一 | 亚洲欧美日韩一区二区三区在线观看| 中国成人在线视频| 性感少妇一区| 久久免费一区| 久久久久久精| 麻豆国产精品777777在线| 亚洲韩国一区二区三区| 日韩一级不卡| 欧美在线3区| 欧美成人一区二区| 久久久久久日产精品| 欧美人与性禽动交情品| 国产精品一区二区在线观看网站| 国产亚洲一区在线播放| 欧美成人一区在线| 久久免费国产| 亚洲欧洲在线视频| 亚洲综合色丁香婷婷六月图片| 香蕉尹人综合在线观看| 欧美在线播放| 欧美色道久久88综合亚洲精品| 国精品一区二区三区| 999在线观看精品免费不卡网站| 性欧美18~19sex高清播放| 午夜欧美精品| 欧美xart系列高清| 中文在线不卡视频| 欧美顶级艳妇交换群宴| 国产日韩欧美在线一区|