游戏开发论坛

 找回密码
 立即注册
搜索
查看: 12894|回复: 15

real-Time Glow

[复制链接]

17

主题

454

帖子

470

积分

中级会员

Rank: 3Rank: 3

积分
470
发表于 2005-3-7 22:35:00 | 显示全部楼层 |阅读模式
Real-Time Glow

   所谓的glow,就是在一个对象旁边出现一些光晕.通常一个自身能发光或者相对场景中其它比较暗的物体来说,都会产生这种现象的。而且,这些对象看起来都会比自身更加亮一些.
 其实要产生glow很简单.我在这里简单的描述一下:


  1:按通常的模式渲染场景.


  2:只渲染带有glow效果的物体.这时候,我们把它渲染到一张纹理里去,这张纹理可以比viewPort小.渲染的时候,我们不再使用diffuse信息,而是使用glow信息.比如一个人物,我们可能希望他脸部带的glow重一些.而其他地方小一些.一个大楼的话,亮着灯的地方有glow.而其他的地方没有.我们可以把这些信息保存在普通的diffuse纹理里(用diffuse本身,或者alpha通道)也可以采用专用的glow信息纹理.渲染完成这个纹理后,纹理里保存的是有glow物体才屏幕上的额外亮度信息.


 3:对2中的纹理做blur,沿x-y方向做一定程度的模糊.使本来只在物体的上的glow信息向两边扩散.当然,也可以在渲染2的时候,把物体沿法线方向拉伸.(我两种方法都用了).

 4:最后把经过步骤3处理后的纹理贴到屏幕上,也就是把glow信息加回到场景中.用add的方式应用纹理.


   详细的real-time glow,见GPU Gems

Example



xheartblue-2005

59

主题

1104

帖子

1199

积分

金牌会员

Rank: 6Rank: 6

积分
1199
发表于 2005-3-8 11:42:00 | 显示全部楼层

Re:real-Time Glow

唉,没有PS,做glow真是麻烦啊。。。
我也一直在想基于低端显卡glow的方案。。尤其是全局glow
想了个比较笨的方法,首先渲染到贴图,然后在屏幕上建个版,把贴图贴上去。

对只支持两层贴图的显卡,可以每次渲染两张贴图,渲染三次。
第一次渲染一层贴图的原图,alpha为1
第二次渲染把第一层贴图坐标往左下移动一些,第二层贴图坐标往右上移动一些,开alphablend,再渲染一次
第三次渲染把第一层贴图坐标往左下再移一些,第二层贴图坐标往右上再多移一些,开更小一点的alphablend,再渲染一次

理论上经过这三次pass应该可以出比较好的类似hdr的效果。

最近被分派着把以前的代码整理优化到引擎里,于是没时间把想法实现。

其实我还想过一个方法,即类似于阴影矩阵的东西,在人物身上建一个billboard,然后把人物往法线方向放大,压到这个billboard上,然后拉伸的贴上光晕贴图,也许也能出光晕的效果。。

6

主题

444

帖子

457

积分

中级会员

Rank: 3Rank: 3

积分
457
发表于 2005-3-8 14:37:00 | 显示全部楼层

Re:real-Time Glow

pre-shader硬件实现的glare,bloom等效果
http://www.ati.com/developer/sdk/RADEONSDK/Html/Samples/Direct3D/RADEONLightGlare.html
支持shdaer硬件
http://www.humus.ca/index.php?page=3D&ID=32

59

主题

1104

帖子

1199

积分

金牌会员

Rank: 6Rank: 6

积分
1199
发表于 2005-3-8 17:08:00 | 显示全部楼层

Re:real-Time Glow

硬件支持的话就好办多了,毕竟目前支持ps的显卡还并不是网吧的主流。。。-。-
针对MMX440来说,连硬件VS都不支持。

6

主题

444

帖子

457

积分

中级会员

Rank: 3Rank: 3

积分
457
发表于 2005-3-8 17:19:00 | 显示全部楼层

Re:real-Time Glow

不支持有不支持的解决办法,比如我上面第一个网址,就是用DX7实现bloom。
不过一般来说,对于pre-DX8硬件,其本身的填充率就很成问题,而任何方法都会比较耗费填充率,所以增加bloom等效果究竟是否有实际意义是一个疑问。

15

主题

1268

帖子

1268

积分

金牌会员

Rank: 6Rank: 6

积分
1268
发表于 2005-3-8 18:31:00 | 显示全部楼层

Re:real-Time Glow

缩小到1/4x,再做tarkey上述的操作,再放大到屏幕大小,这样速度快,实际上用ps时也是这样做的(至少微软的例子是)

6

主题

444

帖子

457

积分

中级会员

Rank: 3Rank: 3

积分
457
发表于 2005-3-8 18:34:00 | 显示全部楼层

Re:real-Time Glow

down sample的作用主要是扩大blur范围……

15

主题

1268

帖子

1268

积分

金牌会员

Rank: 6Rank: 6

积分
1268
发表于 2005-3-8 18:37:00 | 显示全部楼层

Re:real-Time Glow

这是一方面,你反过来想,就是因为填充速度不够嘛,才用这种方法扩充blur范围

1万

主题

1万

帖子

2万

积分

管理员

中级会员

Rank: 9Rank: 9Rank: 9

积分
20686
发表于 2005-3-9 09:46:00 | 显示全部楼层

Re: real-Time Glow

pic
sf_20053994636.jpg

1万

主题

1万

帖子

2万

积分

管理员

中级会员

Rank: 9Rank: 9Rank: 9

积分
20686
发表于 2005-3-9 09:47:00 | 显示全部楼层

Re: real-Time Glow

rar

sf_20053994725.rar

5.42 KB, 下载次数:

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-12-25 03:00

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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