游戏开发论坛

 找回密码
 立即注册
搜索
查看: 3562|回复: 7

带AlphaBlend的物体一定要最后画吗?那是不是还要自己写

[复制链接]

19

主题

42

帖子

44

积分

注册会员

Rank: 2

积分
44
发表于 2008-7-14 17:42:00 | 显示全部楼层 |阅读模式
比如说一个大规模场景,里面有很多半透明的玻璃~~,我们知道物体做alphablend之前,被物体遮挡的物体必须先画 ,否则不能混合进来。。。但是如果物体很多,镜头一直再变,那算法怎么写啊。。。一般游戏中是怎么解决这种问题的啊??
急!!~~

10

主题

173

帖子

178

积分

注册会员

Rank: 2

积分
178
发表于 2008-7-14 18:33:00 | 显示全部楼层

Re:带AlphaBlend的物体一定要最后画吗?那是不是还要自己写

排序。
就是按照渲染状态进行排序就可以了,不需要按照物体的远近顺序排序。
这样做效率似乎也好些。

201

主题

1437

帖子

1963

积分

金牌会员

Rank: 6Rank: 6

积分
1963
QQ
发表于 2008-7-14 20:51:00 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

119

主题

1367

帖子

1393

积分

金牌会员

Rank: 6Rank: 6

积分
1393
发表于 2008-7-14 22:59:00 | 显示全部楼层

Re:带AlphaBlend的物体一定要最后画吗?那是不是还要自己写

http://www.azure.com.cn/article.asp?id=352
这个方法比较好,基本上是终级优化方案了
合成一下vertexbuffer,一次DP渲染效率高,并且排序基本都省了

34

主题

629

帖子

629

积分

高级会员

Rank: 4

积分
629
发表于 2008-7-15 00:37:00 | 显示全部楼层

Re:带AlphaBlend的物体一定要最后画吗?那是不是还要自己写

http://developer.nvidia.com/object/order_independent_transparency.html

180

主题

3511

帖子

3520

积分

论坛元老

Rank: 8Rank: 8

积分
3520
发表于 2008-7-15 02:09:00 | 显示全部楼层

Re:带AlphaBlend的物体一定要最后画吗?那是不是还要自己写

大家看看这个方法如何?
如果当前透明物体遮住老物体,则
glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);

如果当前透明物体被老物体遮住,则
glBlendFunc(GL_ONE_MINUS_DST_ALPHA,GL_DST_ALPHA);
就是当前透明物体颜色*老物体的透光度,加上老物体颜色*老物体的ALPHA。

可行吗?

121

主题

2029

帖子

2034

积分

金牌会员

Rank: 6Rank: 6

积分
2034
QQ
发表于 2008-7-15 14:13:00 | 显示全部楼层

Re:带AlphaBlend的物体一定要最后画吗?那是不是还要自己写

楼上的方法不可行,因为多层叠加出来的关系是错的。

5楼的链接用的是Depth Peeling,但是这种方法对现代硬件不那么友好。

如果是局部的透明可以考虑用Alpha 2 Coverage来搞;
老硬件就只能排序。

29

主题

157

帖子

163

积分

注册会员

Rank: 2

积分
163
发表于 2008-7-16 13:49:00 | 显示全部楼层

Re:带AlphaBlend的物体一定要最后画吗?那是不是还要自己写

如何想要得到很好的效果,最好是最后画,至于排序也没有想象中的那么恐怖。
首先在组织场景的时候,将带alpha blend的物体单独存储在一个表里,先绘制其他物体,在处理该表中的物体。然后只给带alpha blend的物体排序即可,一般在做视锥剔除的时候会得到一个副产品——物体到摄像机的距离。(无论是使用那种视锥剔除方法都会得到类似的数据), 使用该距离对物体排序即可。

排序时的主要消耗,是在数据的比较和定位上,可以使用折半查找法来优化此过程。如果懒得自己写算法,可以直接使用stl的multimap来进行排序,绘制的时候遍历multimap即可。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-21 23:53

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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