技术美术百人计划学习笔记(图形4.5 DOF景深算法)
什么是景深
景深的原理:离散圈
景深的作用
选择性的突出或者强调画面中的一部分,例如某个物体或者某个人物,吸引观察者的注意力到画面中清晰对焦的部分,而忽略其他的模糊部分的细节。
强调所拍摄场景的深度,增加画面的层次立体感。
艺术意境的表达。摄影师可以利用景深效果,营造出虚幻、梦境、或者神奇等意境。表示主观的视线。
在电影学中,通过调节浅景深的镜头,使之对焦在不同位置上,来表示某个人的主观视线的转移,交代人物之间的关系。在电影学中,通过景深聚焦位置的变化,来表达前景和背景人物之间的关系。
景深的制作
制作思路
截取景深区域
【深度图获取】
先获取深度图,如果需要让远裁剪面不影响实际的景深效果,则需要对读取深度图后的深度值进行处理:乘上ProjectionParams.z
depth = Linear01Depth(tex2D(_CameraDepthTexture, i.uv)) * _ProjectionParams.z; |
【通过深度值提取景深范围】
定义一个_FocusDistance和一个_DepthOfDield,景深的范围就是[_FocusDistance - _DepthOfField, _FocusDistance + _DepthOfField]
通过景深值与深度值进行比较可获得景深的模糊区域遮罩
if(depth < focusNear) |
模糊处理与贴图合并
与高斯模糊、bloom效果制作相似
高级景深效果思路拓展
- (a) p在背景区域
- (b) p在前景区域
- © p在聚焦区域
不同区域可以使用不同滤波,甚至使用不同滤波方法
颜色泄露缺陷
在对后处理的对焦区域之外进行模糊处理的过程中,将模糊的背景色叠加在聚焦区域之上,或者前景聚焦区域的颜色混合到了模糊背景之中(类似于Bloom的“扩散”效果)
为了解决这个问题,可以使用扩散滤波
原理是将每个像素点的颜色扩散到这个像素点的模糊圈范围中,这样由于聚焦区域以外的像素有大量的模糊圈,所以被模糊了;而聚焦区域的模糊圈直径小于一个像素,所以颜色就不会扩散,保持清晰
模糊的不连续缺陷
产生原因是焦点的像素为零,而前景区域大于0
解决方法:单独取出前景和后景进行区分,把前景进行单独的模糊处理,然后再和背景进行融合
散景的模拟(Bokeh)
焦外成像
在背景滤波的基础上可以通过点函数来模拟散景效果
UE在18年的景深效果
https://epicgames.ent.box.com/s/s86j70iamxvsuu6j35pilypficznec04