自学内容网 自学内容网

技术美术百人计划 | 《4.5 DOF景深算法》笔记

1. 景深定义

景深(Depth of Field,DOF),是指在摄影机镜头或其他成像器前沿能够取得清晰图像的成像所测定的被摄物体前后距离范围。镜头光圈、镜头焦距、及焦平面到拍摄物的距离是影响景深的重要因素。在聚焦完成后,焦点前后的范围内所呈现的清晰图像的距离,这一前一后的范围,便叫做景深。

在镜头前方(焦点的前、后)有一段一定长度的空间,当被摄物体位于这段空间内时,其在底片上的成像恰位于同一个弥散圆之间。被摄体所在的这段空间的长度,就叫景深。换言之,在这段空间内的被摄体,其呈现在底片面的影像模糊度,都在容许弥散圆的限定范围内,这段空间的长度就是景深。

2. 景深原理

原文链接:光学成像原理之景深(Depth of Field)-CSDN博客

理解景深原理前,我们必须明白一件事:当我们对焦时,其实只有一个平面是真正合焦的。这个平面与像平面(可以简单理解为胶片或者传感器平面)平行。凡是在这个平面之前或者之后的都不是合焦状态。合焦平面上物体某点发出不同角度的光在像平面成像都汇聚于一点,而非合焦物体的某点发出不同角度的光会落在像平面不同点上,形成一个模糊圆,这个圆术语叫做弥散圆(circle of confusion)。

所以没有对上焦的东西,在底片上看起来就是模糊的。如果拍的是一个灯泡的话,就会看起来像是一个圈。

下面看看弥散圆和对焦距离的关系,非合焦平面1距离合焦平面较远,其在像平面弥散圆越大,而非合焦平面2距离合焦平面较近,像平面上弥散圆较小。因此离合焦平面得越近,弥散圆就越小。

如果弥散圆小到人眼无法鉴别(或者说弥散圆直径小于传感器像元的大小),模糊圆可被视为点的成像,看起来就和对上焦的东西一样清晰,此无法分辨的弥散圆称为容许弥散圆(permission circle of confusion)。在被摄物体(对焦点或合焦平面)前后纵深,有一段距离,其影像在像平面的模糊程度肉眼无法分辨,比较清晰,都在容许弥散圆限定范围内,它们之间距离称为景深。

景深的作用:

  • 选择性的突出或者强调画面中的一部分,例如某个物体或者某个人物,吸引观察者的注意力到画面中清晰对焦的部分,而忽略其他的模糊部分的细节。
  • 强调所拍摄场景的深度,增加画面的层次立体感。
  • 艺术意境的表达。摄影师可以利用景深效果,营造出虚幻、梦境、或者神奇等意境。
  • 表示主观的视线。在电影学中,通过调节浅景深的镜头,使之对焦在不同位置上,来表示某个人的主观视线的转移。
  • 交代人物之间的关系。在电影学中,通过景深聚焦位置的变化,来表达前景和背景人物之间的关系。

3. 实现

景深是在后处理阶段完成的

实现思路:

总体思路:左边为颜色纹理,右边是深度纹理,对颜色进行模糊,对深度纹理进行处理,选择不同的部分,其中越黑代表越远,则越模糊,然后将两张图合并。

1.获取相机的深度纹理

  • Pass0:高斯模糊
  • Pass1:选择性模糊景深之外的,并且合并原始图和模糊图

2. 执行后处理的脚本,依次执行Pass0和Pass1

其他可参考:

景深 (catlikecoding.com)

译文:景深效果(译) - 阿坤的博客 | AK's Blog (ak-techartist.github.io)

GitHub - csdjk/LearnUnityShader: 记录学习Unity Shader过程中实现过的一些Demo。

4. 改进

4.1. 远近景分开处理

分别对近景和远景进行分开处理,使用不同滤波核。

景深渲染中出现的三种情况的示意图以及相对应的滤波核

(a) : p 点在背景区域 (b) : p 点在前景区域 (c) : p 点在聚焦区域

4.2. 解决颜色泄露

颜色泄露:模糊的颜色夹杂着前景的颜色

可以使用扩散滤波解决这个问题。扩散滤波的基本思想:

  • 将每个像素点的颜色扩散到该像素点的模糊圈范围中。
    • 这样由于聚焦区域以外的像素有较大的模糊圈而被模糊了,如下图的q,p在q的模糊范围之内,所以被模糊了
    • 而聚焦区域的模糊圈直径小于一个像素,所以颜色不会替换,而保持清晰,如下图的q'

扩散滤波后的结果

5. 模拟散景Bokeh

散景(ボケ:bokeh)一词源于日语,形容模糊不清的样子,一般表示在景深较浅的摄影成像中,落在景深以外的画面,会有逐渐产生松散模糊的效果。散景效果有可能因为摄影技巧或光圈孔形状的不同,而产生各有差异的效果。例如镜头本身的光圈叶片数不同(所形成的光圈孔形状不同),会让圆形散景呈现不同的多角形变化。此外,反射式镜头焦外的散景,会呈现独有的甜甜圈形状。散景容易出现在高光中,如模糊的灯泡。

但由于高光区域要比其他区域亮的多,一般会超出拍摄时成像的响应范围,造成强度值的溢出阶段,所以在这种情况需要特殊处理来补偿亮度过大的区域。

我们在背景滤波的基础之上,可以用点函数来模拟散景。由于光源在不同参数下成像的效果也不一样,所以也会使用不同的点函数。

参考:A Life of a Bokeh - SIGGRAPH 2018.pptx | 由 Box 提供支持


原文地址:https://blog.csdn.net/qq_53352162/article/details/142349944

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!