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

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>
            乱中年女人伦av一区二区| 欧美jizzhd精品欧美喷水| 久久一区二区三区四区五区| 黄色亚洲大片免费在线观看| 久久蜜桃精品| 久久久久国产精品一区| 欧美日韩在线影院| 亚洲精品国产精品国自产在线 | 亚洲欧洲精品一区二区| 裸体歌舞表演一区二区| 亚洲精品一二三区| 一区二区精品在线观看| 亚洲欧洲另类| 久久se精品一区二区| 国内自拍视频一区二区三区 | 亚洲一区精品电影| 国产日韩欧美中文| 久久亚洲欧美国产精品乐播| 久久大香伊蕉在人线观看热2| 国产一区二区视频在线观看| 久久亚洲精选| 免费观看国产成人| 亚洲午夜视频| 久久精品亚洲精品| 一区二区三区国产精华| 欧美一区二区三区四区高清 | 国产精品99久久久久久www| 欧美一区免费视频| 99精品热视频只有精品10| 亚洲网站在线播放| 亚洲国产精品999| 亚洲一区精品在线| 日韩图片一区| 久久av一区二区| 亚洲欧美在线另类| 欧美高清日韩| 久久精品国产99| 欧美日韩一区二区精品| 另类欧美日韩国产在线| 欧美天天在线| 亚洲激情校园春色| 亚洲国产1区| 午夜精品免费视频| 亚洲免费av网站| 久久天天躁狠狠躁夜夜av| 欧美在线亚洲综合一区| 欧美视频一区二区三区…| 国产精品欧美日韩一区| 香蕉久久a毛片| 欧美日韩免费一区二区三区| 乱人伦精品视频在线观看| 国产精品国产自产拍高清av王其| 亚洲高清视频一区| 激情亚洲成人| 欧美亚洲专区| 亚洲欧美日韩国产成人| 欧美日韩国产电影| 亚洲电影专区| 亚洲国产精品va在线看黑人动漫 | 亚洲视频一二| 一本色道久久综合狠狠躁篇怎么玩| 美女视频网站黄色亚洲| 免费久久99精品国产| 国产一区二区三区在线观看精品 | 亚洲国产高清高潮精品美女| 曰韩精品一区二区| 久久成人av少妇免费| 欧美一级二区| 欧美亚洲成人精品| 一区二区免费在线播放| 亚洲婷婷在线| 欧美视频不卡| 制服丝袜激情欧洲亚洲| 亚洲天堂成人在线视频| 欧美日韩免费高清| a91a精品视频在线观看| 亚洲视频欧美视频| 欧美日韩中文另类| 一区二区三区四区五区精品视频| 一区二区动漫| 国产精品久久久久久久app| 亚洲一区二区三区免费在线观看| 香蕉视频成人在线观看| 欧美亚州在线观看| 亚洲一区二区三区午夜| 欧美在线一二三四区| 狠狠干综合网| 欧美a级片网| 日韩系列欧美系列| 欧美专区第一页| 国产无一区二区| 久久国产成人| 亚洲国产精品999| 在线视频一区二区| 国产精品一卡二| 久久都是精品| 亚洲精品国产品国语在线app| 亚洲一区bb| 韩国在线视频一区| 欧美国产精品| 亚洲欧美国产精品桃花| 久久久午夜精品| 日韩视频欧美视频| 国产精品一区视频网站| 久久人人97超碰精品888| 亚洲激情黄色| 久久精彩视频| 在线观看视频一区二区| 亚洲精品美女在线| 亚洲在线第一页| 国产日韩一区二区三区在线播放 | 欧美日韩精品三区| 亚洲欧美视频在线| 毛片基地黄久久久久久天堂 | 亚洲精品欧洲| 欧美在线黄色| 日韩视频国产视频| 国产日韩欧美综合| 欧美久久久久| 久久精品一区四区| 一区二区三区久久网| 欧美1区3d| 久久精品亚洲一区| 一区二区欧美在线| 在线电影欧美日韩一区二区私密| 欧美日韩卡一卡二| 久久人人看视频| 亚洲在线免费视频| 亚洲国产午夜| 老司机精品导航| 欧美一区二区三区视频免费播放| 亚洲人成网站色ww在线| 国产亚洲成av人片在线观看桃 | 久热国产精品| 亚洲欧美日韩国产一区| 亚洲精品欧美极品| 欧美h视频在线| 久久久久久久久一区二区| 亚洲午夜影视影院在线观看| 亚洲激情第一区| 狠狠色狠狠色综合系列| 国产精品亚洲精品| 欧美日韩在线观看一区二区| 欧美成人激情视频免费观看| 久久黄色级2电影| 亚洲欧美激情精品一区二区| 在线亚洲观看| 一区二区三区日韩欧美| 亚洲精品欧美一区二区三区| 亚洲第一二三四五区| 欧美成人一品| 欧美va天堂| 蜜臀av性久久久久蜜臀aⅴ四虎| 亚洲日本久久| 国产精品久久久久久五月尺| 麻豆精品网站| 欧美国产日韩一区二区三区| 久久综合亚州| 欧美不卡视频| 亚洲福利视频专区| 亚洲国产岛国毛片在线| 欧美国产精品va在线观看| 麻豆久久久9性大片| 老司机成人在线视频| 免费在线日韩av| 欧美顶级大胆免费视频| 欧美大成色www永久网站婷| 男男成人高潮片免费网站| 久久综合伊人77777蜜臀| 乱码第一页成人| 欧美激情欧美激情在线五月| 亚洲国产女人aaa毛片在线| 亚洲激情视频在线观看| 亚洲精品一线二线三线无人区| 亚洲人成网站影音先锋播放| 亚洲激情网址| 欧美成人免费网站| 国产亚洲va综合人人澡精品| 国产日韩视频一区二区三区| 国内精品久久久久影院色 | 久久亚洲综合色| 欧美成人综合| 99精品久久| 亚洲中字黄色| 国产精品欧美日韩一区| 久久露脸国产精品| 欧美日本高清视频| 国产主播在线一区| 亚洲一区二区不卡免费| 免费亚洲电影在线| 亚洲影音一区| 欧美精品色综合| 国内视频精品| 亚洲一区二区少妇| 欧美高清视频| 欧美在线视频不卡| 国产精品成人一区| 亚洲精品日韩欧美| 久久这里只有| 亚洲自拍偷拍福利|