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

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>
            久久久99国产精品免费| 国外成人在线视频| 亚洲一区二区精品在线观看| 亚洲欧洲一区| 亚洲激情在线| 亚洲午夜高清视频| 欧美一区二区三区在线观看视频 | 99热这里只有成人精品国产| 一区二区日韩伦理片| 亚洲欧美日韩综合aⅴ视频| 欧美一区二区三区在线视频| 麻豆9191精品国产| 国产精品国产自产拍高清av王其 | 亚洲一区二区精品在线观看| 久久成人精品电影| 欧美激情综合色| 亚洲午夜视频在线观看| 久久精品二区三区| 欧美日韩国产免费| 韩国av一区二区| 亚洲在线免费观看| 久久久精品国产一区二区三区| 久久综合久久综合这里只有精品| 欧美精品成人一区二区在线观看 | 久久久久久久综合日本| 欧美日韩精品免费在线观看视频| 国产日韩欧美一二三区| 亚洲人成在线观看| 久久久福利视频| 亚洲免费电影在线观看| 久久久久久久久久码影片| 国产精品久久久久久久7电影| 亚洲电影自拍| 久久久777| 亚洲一二三区在线观看| 欧美激情精品久久久久久免费印度| 国产亚洲精品aa午夜观看| 亚洲一区二区视频在线| 亚洲第一在线综合网站| 久久久国际精品| 国产日产亚洲精品| 午夜精品视频在线观看| 日韩一区二区精品葵司在线| 欧美v日韩v国产v| 伊人久久男人天堂| 久久精品三级| 欧美一级理论片| 国产欧美日韩视频一区二区| 亚洲欧美日韩成人高清在线一区| 亚洲精品视频免费在线观看| 欧美国产在线观看| 日韩手机在线导航| 欧美国产亚洲另类动漫| 麻豆精品视频在线观看| 亚洲黑丝一区二区| 欧美激情91| 免费在线看一区| 亚洲三级视频| 亚洲国产精品黑人久久久| 老司机精品视频一区二区三区| 娇妻被交换粗又大又硬视频欧美| 久久蜜桃av一区精品变态类天堂| 欧美一区二区三区在线视频 | 欧美日韩在线影院| 亚洲免费成人av| 亚洲麻豆视频| 国产精品久久国产精品99gif| 亚洲直播在线一区| 午夜日韩在线| 一区二区三区在线免费播放| 美女精品在线观看| 欧美岛国激情| 亚洲深夜福利视频| 亚洲欧美日韩精品久久| 国产一区二区毛片| 欧美va天堂| 日韩一区二区精品| 欧美午夜不卡在线观看免费 | 久久精品国产视频| 亚洲二区在线| 日韩午夜在线视频| 国产亚洲精品久久久久久| 免费的成人av| 欧美日韩免费观看一区三区| 欧美亚洲三区| 欧美在线网址| 亚洲精品中文字幕有码专区| 亚洲午夜精品久久| 永久91嫩草亚洲精品人人| 亚洲日本激情| 国产在线观看一区| 亚洲日本中文字幕免费在线不卡| 国产精品一级| 亚洲国产精彩中文乱码av在线播放| 欧美激情免费观看| 久久成人亚洲| 欧美日韩123| 久久久夜色精品亚洲| 欧美日韩国产成人在线免费| 久久午夜精品一区二区| 欧美天天在线| 欧美韩国一区| 国产一区二区在线免费观看| 亚洲精品免费观看| 精品二区视频| 亚洲综合日韩| 亚洲网站在线| 欧美国产高潮xxxx1819| 久久久一区二区| 国产精品久久久久久福利一牛影视| 欧美成人中文字幕在线| 国产真实精品久久二三区| 一区二区激情| 正在播放欧美一区| 欧美高清在线| 欧美激情一区二区三区成人| 狠狠色噜噜狠狠色综合久| 国产精品99久久久久久宅男 | 亚洲免费小视频| 一本色道久久99精品综合 | 国产拍揄自揄精品视频麻豆| 亚洲麻豆国产自偷在线| 亚洲人成精品久久久久| 久久久久久久综合狠狠综合| 久久成人一区| 国产精品午夜电影| 亚洲视频电影图片偷拍一区| 一区二区日韩伦理片| 欧美大片在线观看一区| 亚洲国产导航| 亚洲精品偷拍| 欧美精品亚洲| 亚洲人成亚洲人成在线观看图片| 欧美激情精品久久久久久变态| 久久综合色影院| 国产日韩欧美三级| 欧美一区二区三区在线观看| 久久久久久久久一区二区| 国产揄拍国内精品对白| 欧美亚洲一级| 久久麻豆一区二区| 在线观看一区视频| 欧美不卡视频一区发布| 亚洲国产精品免费| 一区二区三区 在线观看视频 | **网站欧美大片在线观看| 久久一区精品| 亚洲激情小视频| 亚洲网站在线观看| 国产麻豆一精品一av一免费| 欧美一区影院| 欧美激情视频免费观看| 99re热这里只有精品视频| 欧美日韩中文字幕精品| 亚洲欧美自拍偷拍| 美日韩精品免费| 日韩视频不卡| 国产毛片精品视频| 久久蜜桃香蕉精品一区二区三区| 欧美高清视频一二三区| 中文网丁香综合网| 国产一区美女| 欧美黄在线观看| 亚洲欧美另类久久久精品2019| 榴莲视频成人在线观看| 99精品久久| 国产亚洲精品bt天堂精选| 免费看成人av| 亚洲欧美美女| 亚洲清纯自拍| 久久手机精品视频| 亚洲小视频在线观看| 国产综合视频| 欧美日韩成人综合| 久久精品视频免费观看| 亚洲国产婷婷香蕉久久久久久| 午夜伦欧美伦电影理论片| 最新亚洲激情| 国产视频一区欧美| 欧美精品97| 久久久夜精品| 亚洲一区二区av电影| 亚洲激情在线观看| 久久亚洲色图| 欧美一区二区高清| 夜夜精品视频| 亚洲国产精品传媒在线观看 | 极品尤物久久久av免费看| 欧美日韩一区二区三区免费看| 久久国产福利| 亚洲一区二区四区| 亚洲免费精彩视频| 亚洲国产精品va在线看黑人| 久久只有精品| 久久国产精品黑丝| 午夜精品久久久久久久99樱桃 | 欧美成人在线影院| 久久免费的精品国产v∧| 先锋影音久久| 亚洲欧美欧美一区二区三区|