笔记
景深原理
● 指相机对焦点前后相对清晰的成像范围,是一段三维空间。 ● 针对相机成像产生的概念,肉眼也有类似的效果
景深遇到的问题
因为是基于深度图的实现,如果是半透明物体,则没有深度,要如何解决 个人思路:那首先得提取这个半透明物体,通过描边或alpha通道,识别出这个物体,然后再进行模糊与原图的混合来得到结果
实现思路
高级景深效果思路拓展
颜色泄露问题
颜色泄露:模糊的颜色夹杂着前景的颜色 解决方法: 扩散滤波,将每个像素点的颜色扩散到这个像素点的模糊圈范围中,动态改变模糊圈的大小: 聚焦区域以外的像素有大的模糊圈,聚焦区域内的,模糊圈直径小于一个像素,就不会扩散
模糊不连续缺陷
焦点在背景区域时,前景会有一种截断的现象。 原因:背景的光圈为0,前景区域大于0 解决方法: 做前景和背景的一个区分 然后把前景的模糊单独拿出来计算,制作一个mask,再与背景融合(也即过渡阶段,不要用0,1来选择前景或背景)
散景的模糊(Bokeh)
● 摄影学中,景深指的是虚焦造成了光点模糊的质量 ● 散景在背景为高光的情况最为显著,如夜景灯光,镜面反射等 ● 原因:高光区域亮度相对于场景的其它物体要亮的多,一般会超出拍摄时设定的成像范围,造成强度值的溢出截断;所以在景深渲染时,需要特殊处理,以补偿这些亮度过大的区域
解决方法: 在背景滤波的基础上,用点函数来模拟3d效果,因为光源在不同参属下成像效果也是不一样的。 单色光源在不同参数下的成像: 远景滤波上做了修改的公式:
作业
实现景深效果
分析官方后处理插件PPS中的景深实现
PPS V2 地址 https://github.com/Unity-Technologies/PostProcessing
- 通过 Pass CoCCalculation 用一张贴图记录 焦点与 深度的关系
- 选一种种模糊方法,得到模糊的贴图
- 通过Pass Combine,根据1、2两张贴图得到结果
enum Pass
{
CoCCalculation, // 用CoC表示了 焦点与 深度的关系(相当于解耦了:在自己的代码中,将这一步与Combine合并了,如果换了模糊函数,还得重新采样深度图计算)
CoCTemporalFilter, // 与TAA相关
DownsampleAndPrefilter, // 用于降低CoC贴图的大小,减轻带宽
BokehSmallKernel,
BokehMediumKernel,
BokehLargeKernel,
BokehVeryLargeKernel, //考虑不连续问题、散景模糊的、使用不同卷积核大小的扩散滤波
PostFilter, // 简单的均值滤波
Combine, //用CoC贴图,与模糊贴图组合得到结果
DebugOverlay //将CoC贴图可视化
}
参考资料
https://www.bilibili.com/video/BV1dv411u7KA?p=2
|