alpha blend产生白色边缘

sunrisefe 2009-11-12 11:49:43
采用alpha blend,将四边形模型表示树叶,怎么blend后会有白色边缘呢,如下图所示,视点距离越远白色边缘越严重,怎么才能消息白色边缘。alpha blend设置如下:
AlphaBlendEnable = true;
AlphaTestEnable = false;
SeparateAlphaBlendEnable = true;
SrcBlend = SRCALPHA;
DestBlend = INVSRCALPHA;
SrcBlendAlpha = ONE;
DestBlendAlpha = INVSRCALPHA;
融合后的树叶
[img=http://b28.photo.store.qq.com/http_imgload.cgi?/rurl4_b=1b718b3be555acf251d8a74b64ff766e665d68bbb6302c3231a17d75ceb10fb7bb61bd4876a2680eaea0e4c0e03d221be937ff9d29f5472b7f4f5c9df2cff5354d1b47dcb24b4e37011c6ea298d48786577d5b8f&a=28&b=28 ]地址:http://b28.photo.store.qq.com/http_imgload.cgi?/rurl4_b=1b718b3be555acf251d8a74b64ff766e665d68bbb6302c3231a17d75ceb10fb7bb61bd4876a2680eaea0e4c0e03d221be937ff9d29f5472b7f4f5c9df2cff5354d1b47dcb24b4e37011c6ea298d48786577d5b8f&a=28&b=28[/img]

原树叶文件为tga或png格式时,绘制结果都一样。不知道怎么上传tga的文件上来。
融合后的树叶
...全文
295 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
soilwork 2009-11-14
  • 打赏
  • 举报
回复
http://blogs.msdn.com/shawnhar/archive/2009/11/02/texture-filtering-alpha-cutouts.aspx
云风 2009-11-13
  • 打赏
  • 举报
回复
用photoshop把边缘去掉试试
xingzhe2001 2009-11-13
  • 打赏
  • 举报
回复
用photoshop
sunrisefe 2009-11-13
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 xingzhe2001 的回复:]
在远处的时候,贴图缩小相当于对alpha做线性filter的时候相当于对一个范围内的alpha作了平均,采样到的平均后的alpha可能小于150,所以就不会画出来了。但是如果alpharef太低,树叶可能有白边。

解决方法,修改树叶贴图,让树叶alpha为0的部分为绿色。

修改树叶贴图,对树叶边缘作alpha的模糊,降低alpharef的值
    或者不模糊,保持alpharef的值,将alpha为0的值提高到 150*2-(树叶部分的alpha),可能这个值是45。
[/Quote]
怎么修改alpha通道呢
xingzhe2001 2009-11-13
  • 打赏
  • 举报
回复
在远处的时候,贴图缩小相当于对alpha做线性filter的时候相当于对一个范围内的alpha作了平均,采样到的平均后的alpha可能小于150,所以就不会画出来了。但是如果alpharef太低,树叶可能有白边。

解决方法,修改树叶贴图,让树叶alpha为0的部分为绿色。

修改树叶贴图,对树叶边缘作alpha的模糊,降低alpharef的值
或者不模糊,保持alpharef的值,将alpha为0的值提高到 150*2-(树叶部分的alpha),可能这个值是45。
sunrisefe 2009-11-13
  • 打赏
  • 举报
回复
ZEnable = TRUE;
ZWriteEnable = TRUE;
CullMode = NONE;
AlphaBlendEnable = FALSE;
AlphaTestEnable = TRUE;
AlphaRef = 150;
AlphaFunc = GREATER;
xingzhe2001 2009-11-13
  • 打赏
  • 举报
回复
alpha test 的ref value设得多少?
sunrisefe 2009-11-13
  • 打赏
  • 举报
回复
采用alpha test时,视点由近及远的效果如图:
http://hi.baidu.com/pursuingwch/album/item/96f2c7e8e122ec11b90e2d52.html
sunrisefe 2009-11-13
  • 打赏
  • 举报
回复
采用alpha test时,视点距离近的时候能看到树叶,当距离远的时候就只能看到树枝了,为什么呢。
sunrisefe 2009-11-12
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 luoya263547560 的回复:]
透明图片格式最好用BMP的,JPG的可能会出现类似问题,我以前也遇到过,换成BMP效果就好些了
[/Quote] bmp中不包含alpha,怎么blend呢?
luoya263547560 2009-11-12
  • 打赏
  • 举报
回复
透明图片格式最好用BMP的,JPG的可能会出现类似问题,我以前也遇到过,换成BMP效果就好些了
sunrisefe 2009-11-12
  • 打赏
  • 举报
回复
alpha blend后的效果图:
原来的树叶图片:


sunrisefe 2009-11-12
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 zhangci226 的回复:]
也有可能是你带alpha通道的图片有问题,都检查一下
[/Quote]
怎么检索图片是否有问题呢,我在DirectX Texture Tool中查看了是有alpha channel,文件格式是A8R8G8B8,alpha通道中叶子形状是白色的,其它是黑色的。
xingzhe2001 2009-11-12
  • 打赏
  • 举报
回复
qq空间里的图看不到,你在别处上传下
sunrisefe 2009-11-12
  • 打赏
  • 举报
回复
修改了,还是一样的效果:(
张赐 2009-11-12
  • 打赏
  • 举报
回复
也有可能是你带alpha通道的图片有问题,都检查一下
xingzhe2001 2009-11-12
  • 打赏
  • 举报
回复
这样看看

AlphaBlendEnable = true;
AlphaTestEnable = false;
SeparateAlphaBlendEnable = false;
SrcBlend = SRCALPHA;
DestBlend = INVSRCALPHA;
xingzhe2001 2009-11-12
  • 打赏
  • 举报
回复
关于树木的渲染参考这个贴
http://topic.csdn.net/u/20090820/13/523261fc-5793-465b-bdc5-8ebbb87394fb.html

这是效果,,可以看到边缘很好,而且不用排序
xingzhe2001 2009-11-12
  • 打赏
  • 举报
回复
而且你最好用alpha test画树叶,不要用alpha blend, alpha blend还要进行排序。
xingzhe2001 2009-11-12
  • 打赏
  • 举报
回复
远的时候由于帖图会缩小,像素和alpha经过采样后已经走样很大了,尤其alpha更明显,你可以把你的树叶的alpha为0的地方都贴上绿色,这样就看不出来了
加载更多回复(1)

8,303

社区成员

发帖
与我相关
我的任务
社区描述
游戏开发相关内容讨论专区
社区管理员
  • 游戏开发
  • 呆呆敲代码的小Y
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧