笔记
Bloom效果描述
发光的区域足够亮,看上去像溢出/扩散到周围的效果
LDR(Low Dynamic Range, 低动态范围)
● 应用于JPG,PNG以及日常生活中的手机显示器,摄像机
● RGB范围在[0, 1]之内
HDR(High Dynamic Range, 高动态范围)
● 应用于HDR、EXR格式图片
● RGB范围在[0, 1]之外
高斯模糊
● 一种图像模糊
● 减少图像噪声、降低细节层次
通过一个高斯函数去定义一个卷积核,得到一个高斯核,然后再利用这个高斯核去对图像进行卷积运算
● 缺点:
切边问题,红色虚线部分超出图像范围,无法进行卷积
处理方法:1. 虚线部分不参与计算 2. 完全不计算该像素点 3.将虚线部分设为0进行卷积计算
卷积过程
计算高斯核
二维高斯核——可分离性(一维高斯核有对称性)
可拆成两个一维高斯核
把原本 N * N * W * H次纹理采样,降至2 * N * W * H
Unity实现Bloom效果
● C#:调用OnRenderImage函数
● Shader:为了方便理解,使用了4个Pass完成Bloom效果。实际可以一个Pass完成
1Pass:设置阈值提取纹理中较亮的区域
2Pass 3Pass:分别的对竖直方向上和水平方向上的高斯模糊
4Pass:将模糊后的图像与原图像进行一个叠加,得到最终的效果
参数:
iteration:迭代次数。越大越模糊
blurSpread:高斯模糊范围。越大越模糊
downSample:下采样次数。出于性能的考虑,去控制渲染纹理的大小。越大渲染纹理越小,需要模糊的像素也就越少
luminanceThreshold:阈值
其它应用
GodRay效果、
基于径向模糊地后处理
配合色调映射(Tonemapping)
较好地保留暗处和亮处的一些细节
作业
实现Bloom效果
如果只想bloom黄光的话,白光不想Bloom太明显的话
改
fixed luminance(fixed4 color){
return 0.3* color.r + 0.7 * color.g - 1 * color.b;
}
反向Bloom(第一步提取较暗部分,第四步相减)
思考如何实现Bloom的mask效果(把某块区域某块内容抹掉)
- 用alpha通道来做,来判断是否需要bloom
- 上文作业中只选取 黄色来Bloom,应该也可以算一种方法
实现径向模糊效果
原理:距离冲击点越远越模糊
实现基于径向模糊的GodRay
原理:径向模糊+Bloom,相对指定点有方向地Bloom