之前写每个物体的材质球控制屏幕bloom效果,由于性能问题,换了另外一种实现方式
部分泛光的功能,这个是之前写的,不过性能不行,如果简单的游戏还可以,如果大场景的话就不行了
原理分析
我这边就研究崩坏3编译过的源码,下面是分析崩坏bloom效果实现
1.我看崩坏编译过的源码基本所有shader都会有一个_BloomFactor,这个用于控制泛光强度,用于存储输入屏幕那张图的alpha通道上
2.泛光强弱图:通过source的rendertexture的alpha乘以source的RGB,就得到一张泛光强弱图
3.泛光图:根据泛光的亮度阈值来获取一张那些地方需要发光的图
4.泛光图模糊:按照泛光图4个大小依次递半的(1/4,1/8,1/16,1/32)尺寸的rendertexture来进行高斯模糊,得到的四张图进行叠加
5.最终效果图:原图+泛光模糊图
PS:最近遇到一个问题就是点光源(顶点模式除外),影响rendertexture的alpha通道(会使alpha通道变大)
之前的方案是alpha值越大就越亮,加了点光源,本来暗的东西都变亮,所以为了解决点光源问题,我们就反过来写,alpha值为1就没有bloom效果,就是alpha越小就越亮,mask图就是越黑越亮</