【技术美术百人计划】Bloom辉光实现
一、Bloom算法介绍
什么是bloom
辉光效果,模拟摄像机图像效果。让舞台有真实明亮效果

bloom算法:
1.提取原图较量区域(阈值设定亮度)
2.模糊(提取后)图像
3.与原图混合

wiki部分总结:
该效果会在高亮度物体周围产生条纹或羽毛状的光芒,以模糊图像细节。如果物体背光,从第三人称观察,光线会表现得更加真实,并在某种程度上与遮挡物体产生交叠。
在现实世界中,透镜无法完美聚焦是高光的物理成因;理想透镜也会在成像时由于衍射而产生艾里斑通常情况下难以察觉这些不完美的瑕疵,除非有强烈亮光源存在:这时,图像中的亮光部分会渗出其真实边界。
LDR与HDR
LDR(Low Dynamic Range,低动态范围) RGB range in [0,1]
JPG PNG等格式图片

HDR(High Dynamic Range,高动态范围)
RGB range 可超过 [0,1]
这样可以提取更高亮度(超过1)的区域产生bloom效果
HDR、EXR格式图片

wiki部分总结:
现实中,当人由黑暗的地方走到光亮的地方,会眯起眼睛。人在黑暗的地方,为了看清楚对象,瞳孔会放大,以吸收更多光线;当突然走到光亮的地方,瞳孔来不及收缩,所以眯起眼睛,保护视网膜上的视神经。
而电脑无法判断光线明暗,唯有靠HDRR技术模拟这效果——人眼自动适应光线变化的能力。方法是快速将光线渲染得非常光亮,然后将亮度逐渐降低。而HDRR的最终效果是亮处的效果是鲜亮,而黑暗处的效果是能分辨物体的轮廓和深度,而不是以往的一团黑。
HDRR技术的使用场景举例如下:
例一场景: 阳光普照下,水旁有一道墙壁。当阳光由水面反射到墙上,晴朗而明亮的天空会稍微暗一些,这样能有助表现出水面的反光效果。当人们低头看水面,阳光会反射到人眼中,整个画面会非常光亮,并逐渐减弱,因为人眼适应了从水面反射的光。
例二场景: 阳光直射到一块光亮的石头。若你紧盯着它,石头表面的泛光会逐渐淡出,显示出更多细节。
例三场景: 枪支的反射效果。
卷积
数学运算如下:
(请注意Kernel卷积核在运算时实际已经水平旋转180度,比如第一行第二列的“2”两侧的1实际已经颠倒位置,但因为值一样所以没有表现出来,PS:如果仅从获得运算结果的角度下,可以暂时理解为一种步骤)

减少图像噪声、降低细节层次的方法。

高斯核

二维高斯函数特点:可分离性,将二维高斯函数拆成两个一维高斯函数以降低计算量
二维高斯核运算:N N W * H 次纹理采样
两次一维高斯核运算:2 N W * H 次纹理采样

《unity shader入门精要》对应页数:P253-254
二、Bloom算法实现
高斯模糊Bloom算法参考《UnityShader入门精要》关于高斯模糊修改而来
C#代码(置于摄像机上):
Shader代码: