游戏开发论坛

 找回密码
 立即注册
搜索
123
返回列表 发新帖
楼主: tonykee

shadowmap怎么才能透射alpha透明贴图?

[复制链接]

59

主题

984

帖子

1200

积分

金牌会员

Rank: 6Rank: 6

积分
1200
发表于 2008-5-25 00:34:00 | 显示全部楼层

Re:shadowmap怎么才能透射alpha透明贴图?

When we use integer textures, we need to pack the squared distance value and write it into the color channel. How can we pack a floating-point number into an integer texture? Here are two ways:
1.
Out.r = SquaredDistance * 2^0
Out.g = SquaredDistance * 2^8
Out.b = SquaredDistance * 2^16
Out.a = SquaredDistance * 2^24
float4 vPack = {1.0f, 256.0f, 65536.0, 16777216.0f};
return vPack * dot(vLight, vLight);Out.r = floor(fDepth) / 256.0;

2.
Out.g = frac(fDepth);
float fDepth = dot(vLight, vLight);
return float(floor(fDepth) / 256.0, frac(fDepth),frac(fDepth), frac(fDepth));

By writing frac(fDepth) into the green and alpha channels, we save this pixel shader instruction (otherwise, we need an additional instruction to fill these channels):

mov r2.gba, r0.g  // r0.g contains frac(fDepth)
Method 1 is computationally cheaper, but the second one gives you higher precision.

---gpu gems chapter 12
http://http.developer.nvidia.com/GPUGems/gpugems_ch12.html

119

主题

1367

帖子

1393

积分

金牌会员

Rank: 6Rank: 6

积分
1393
 楼主| 发表于 2008-5-25 00:34:00 | 显示全部楼层

Re:shadowmap怎么才能透射alpha透明贴图?

哇,不是吧,就这么简单??
我去试试,太晚了,明天试。
各位也早些休息吧。注意身体啊。

121

主题

2029

帖子

2034

积分

金牌会员

Rank: 6Rank: 6

积分
2034
QQ
发表于 2008-5-25 11:39:00 | 显示全部楼层

Re:shadowmap怎么才能透射alpha透明贴图?

texkill之所以慢,是因为一旦texkill之后early z culling就没法用了。

-----------检讨。其实我是想说别的来着。。。此话基本上是错误的。texkill和alpha test差不多。之所以影响early z culling,是因为break z compressing的关系,新显卡未知。感谢kypck和某位称我教主的筒子。

34

主题

629

帖子

629

积分

高级会员

Rank: 4

积分
629
发表于 2008-5-25 12:52:00 | 显示全部楼层

Re:shadowmap怎么才能透射alpha透明贴图?

1。alphatest跟texkill一样,会关掉earlyZ
2。不是所有target都支持D3DUSAGE_QUERY_POSTPIXELSHADER_BLENDING

1

主题

149

帖子

149

积分

注册会员

Rank: 2

积分
149
QQ
发表于 2008-5-25 13:20:00 | 显示全部楼层

Re: Re:shadowmap怎么才能透射alpha透明贴图?

lingjingqiu: Re:shadowmap怎么才能透射alpha透明贴图?

texkill之所以慢,是因为一旦texkill之后early z culling就没法用了。


空明,你也成教父了 [em2]

119

主题

1367

帖子

1393

积分

金牌会员

Rank: 6Rank: 6

积分
1393
 楼主| 发表于 2008-5-26 16:50:00 | 显示全部楼层

Re:shadowmap怎么才能透射alpha透明贴图?

觉着这个办法简单点,可我还是没做出来
device.RenderState.AlphaTestEnable = true;
device.RenderState.AlphaFunction = CompareFunction.Greater;
device.RenderState.ReferenceAlpha = 0;

//shader code
const bool enableAlphaTest;
float4 ShadowMapPS(VertexShaderOutput IN) : COLOR0
{
   float alpha = 1.0;
   if(enableAlphaTest)
       alpha = tex2D(ColorSampler,IN.texCoord).a;
    return float4(IN.depth, IN.depth, IN.depth, alpha);
}

clayman 如果不压缩
D3DXCreateRenderToSurface(gd3dDevice, mWidth, mHeight, mTexFormat, mUseDepthBuffer, mDepthFormat, &mRTS)
里面的mTexFormat和mDepthFormat分别用什么方式啊?和纹理以及深度格式有关系吗?

119

主题

1367

帖子

1393

积分

金牌会员

Rank: 6Rank: 6

积分
1393
 楼主| 发表于 2008-5-27 11:02:00 | 显示全部楼层

Re:shadowmap怎么才能透射alpha透明贴图?

float4 encode(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 comp;
}


float decode(sampler ShadowMapS, float2 texcood)
{
  float4 vec = tex2D(ShadowMapS, texcood);

  const float4 bitShifts = float4(1.0/(256.0*256.0*256.0), 1.0/(256.0*256.0), 1.0/256.0, 1);
  return dot(vec.xyzw , bitShifts);
}
我找到一个算法,是可以的,已经能从实现 float<-> A8R8G8B8互转了
comp -= comp.xxyz * bitMsk;
这句看不太懂,所以不知道alpha信息怎么加?试了好一会儿也不行,shader学的不太好

121

主题

2029

帖子

2034

积分

金牌会员

Rank: 6Rank: 6

积分
2034
QQ
发表于 2008-5-27 16:36:00 | 显示全部楼层

Re: Re: Re:shadowmap怎么才能透射alpha透明贴图?

六水: Re: Re:shadowmap怎么才能透射alpha透明贴图?



空明,你也成教父了 [em2]

弄错了,sorry,写z会影响culling。

不过后来问了kypck,他说
-----------early z culling是建立在z compression上的,而alpha test会break z compression。
昨天昏头了,我检讨。

1

主题

103

帖子

119

积分

注册会员

Rank: 2

积分
119
发表于 2008-5-28 14:44:00 | 显示全部楼层

Re: Re: Re: Re:shadowmap怎么才能透射alpha透明贴图?

lingjingqiu: Re: Re: Re:shadowmap怎么才能透射alpha透明贴图?


弄错了,sorry,写z会影响culling。

不过后来问了kypck,他说
-----------early z culling是建立在z ...


kypck这样的人也被你当作了师傅?当年他说要在技术上“秒杀”我,结果至今一个游戏没有做出来过,关于阴影问题,我的TV3D 6.5引擎已经可以处理得很好了,当然包括楼主说的这种情况,不过抱歉的说具体技术是核心机密,在我申请专利前是不会公开的。

119

主题

1367

帖子

1393

积分

金牌会员

Rank: 6Rank: 6

积分
1393
 楼主| 发表于 2008-5-28 14:54:00 | 显示全部楼层

Re:shadowmap怎么才能透射alpha透明贴图?

有了clayman和六水两位大侠的帮助,已经搞定了,谢谢关注。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-22 09:24

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表