[全屏后处理]Bloom泛光
2019-08-02 本文已影响0人
想变的很强的日向彻
前言
1.计算机硬件
Unity中颜色值的范围是[0, 255],也就是说, 无论是亮度还是暗度都有个限定值,而这往往和真实世界不符,加入把灯的光线亮度值设置为1,那么要强烈的晃眼的太阳光的值要比1高的多得多,但是毕竟计算机的表示范围是有限的。
2.人眼的特点
我们从一个很亮的场景转换到一个很暗的场景的过程中,开始转换到暗场景时好像什么的也看不清了,然后人眼的瞳孔不断适应和调节大小,我们慢慢的又能看清暗场景中的东西了
目的
说了半天,Bloom的核心,我们是想达到一个什么样的效果呢?简单来说就是想让亮的地方更亮,从而使得画面看起来更加真实,好像亮的地方的光溢出来,也对暗的地方的物体产生了影响。
思路
1.采样全屏图像,适当降低RT分辨率和采样率(减小开销)
2.设置一个亮度阈值,将低于此阈值的像素剔除掉,生成一张高于此阈值的RT,存储为RT_High, shader中saturate(color - _colorThreshold)
3.分别对新生成的RT_High进行横向和纵向的模糊(我这里采用的高斯模糊),并存储为RT_new
4.在shader的片元着色器中将原图像和RT_new按一定的比例混合生成最终的RT并渲染到屏幕中
5.记得释放声明的RT内存