Real-Time Glow
原出处: http://xreal.51.net/Game/realtimeglow.htm
所谓的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
以下是我用renderMonkey渲染的例子
http://xreal.51.net/Download/RTGlow.rar
http://xreal.51.net/Game/glow/glow1.jpg
http://xreal.51.net/Game/glow/glow2.jpg
http://xreal.51.net/Game/glow/glow3.jpg
xheartblue-2005-3-7