笔记

景深原理

● 指相机对焦点前后相对清晰的成像范围,是一段三维空间
● 针对相机成像产生的概念,肉眼也有类似的效果

景深遇到的问题

因为是基于深度图的实现,如果是半透明物体,则没有深度,要如何解决
个人思路:那首先得提取这个半透明物体,通过 alpha通道 / urp控制渲染顺序,识别出这个物体,然后再进行模糊与原图的混合来得到结果

实现思路


高级景深效果思路拓展

颜色泄露问题

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

解决方法:
扩散滤波,将每个像素点的颜色扩散到这个像素点的模糊圈范围中,动态改变模糊圈的大小:
聚焦区域以外的像素有大的模糊圈,聚焦区域内的,模糊圈直径小于一个像素,就不会扩散

模糊不连续缺陷

焦点在背景区域时,前景会有一种截断的现象。
原因:背景的光圈为0,前景区域大于0

解决方法:
做前景和背景的一个区分
然后把前景的模糊单独拿出来计算,制作一个mask,再与背景融合(也即过渡阶段,不要用0,1来选择前景或背景)

散景的模糊(Bokeh)

● 摄影学中,景深指的是虚焦造成了光点模糊的质量
● 散景在背景为高光的情况最为显著,如夜景灯光,镜面反射等
● 原因:高光区域亮度相对于场景的其它物体要亮的多,一般会超出拍摄时设定的成像范围,造成强度值的溢出截断;所以在景深渲染时,需要特殊处理,以补偿这些亮度过大的区域

解决方法:
在背景滤波的基础上,用点函数来模拟3d效果,因为光源在不同参属下成像效果也是不一样的。
单色光源在不同参数下的成像:

远景滤波上做了修改的公式:

作业

实现景深效果


代码:

Shader "post/dof"
{Properties{_MainTex ("Texture", 2D) = "white" {}_Dof ("Dof", 2D) = "black" {}}SubShader{CGINCLUDE#include "UnityCG.cginc"sampler2D _CameraDepthTexture;sampler2D _MainTex;half4 _MainTex_TexelSize;sampler2D _Dof;float4 _BlurDir;float _Focus;float _NearScale;float _FarScale;struct v2fVert { float4 pos : SV_POSITION;half2 uv :TEXCOORD0;half4 uvNear[3]: TEXCOORD1;};v2fVert vertBlur(appdata_img v) {v2fVert o;o.pos = UnityObjectToClipPos(v.vertex);o.uv = v.texcoord;_BlurDir.xy *= _MainTex_TexelSize.xy;o.uvNear[0] = v.texcoord.xyxy + _BlurDir.xyxy * float4(1,1,-1,-1);o.uvNear[1] = v.texcoord.xyxy + _BlurDir.xyxy * float4(1,1,-1,-1) * 2.0;o.uvNear[2] = v.texcoord.xyxy + _BlurDir.xyxy * float4(1,1,-1,-1) * 3.0;return o;}fixed4 fragBlur(v2fVert i) : SV_Target {float weight[4] = {0.4, 0.15, 0.1, 0.05};fixed3 sum = tex2D(_MainTex, i.uv).rgb * weight[0];for (int it = 0; it < 3; it++) {sum += tex2D(_MainTex, i.uvNear[it].xy).rgb * weight[it+1];sum += tex2D(_MainTex, i.uvNear[it].zw).rgb * weight[it+1];}return fixed4(sum, 1.0);}struct v2fDof {float4 pos : SV_POSITION;half4 uv : TEXCOORD0;};v2fDof vertDof(appdata_img v){v2fDof o;o.pos = UnityObjectToClipPos(v.vertex);o.uv.xy = v.texcoord;o.uv.zw = v.texcoord;#if UNITY_UV_STARTS_AT_TOPif (_MainTex_TexelSize.y < 0.0)o.uv.w =  1.0 - o.uv.w;#endifreturn o;}fixed4 fragDof(v2fDof i) : SV_Target{fixed4 blurCol = tex2D(_Dof, i.uv.zw);fixed4 originCol = tex2D(_MainTex, i.uv.xy);float depth = SAMPLE_DEPTH_TEXTURE(_CameraDepthTexture, i.uv);depth = Linear01Depth(depth);fixed4 finalCol = depth > _Focus ? (lerp(blurCol, originCol, 1.0f-clamp((depth - _Focus) * _NearScale,0,1)  )) : blurCol;finalCol = depth < _Focus ? (lerp(blurCol, originCol, 1.0f-clamp((_Focus - depth) * _FarScale,0,1)  )) : blurCol;return finalCol;}ENDCGZTest Always Cull Off ZWrite OffPass{CGPROGRAM  #pragma vertex vertBlur #pragma fragment fragBlur  ENDCG  }Pass {CGPROGRAM#pragma vertex vertDof#pragma fragment fragDofENDCG}}FallBack Off
}

分析官方后处理插件PPS中的景深实现

PPS V2 地址

  1. 通过 Pass CoCCalculation 用一张贴图记录 焦点与 深度的关系
  2. 选一种种模糊方法,得到模糊的贴图
  3. 通过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

【技美百人计划】图形 4.5 Dof景深基础相关推荐

  1. 【技美百人计划】美术 2.2 模型基础

    笔记 基本建模流程 贴图 SP:偏向于机械.金属,常用于游戏领域 mary:适合于人物.幻想生物,比如龙.人物皮肤.龙鳞,适用于影视领域 离线渲染: ● 阿诺德:无偏渲染器,较适合人物 ● vary: ...

  2. 技美 百人计划 (图形)1.1渲染流程

    技美 百人计划 (图形) 图形 1.1 渲染流水管线2.1数学基础 很早之前就有关注百人计划这个系列的课程,也跟着看到了2.几的教学但是一直没有写笔记,最近看到百人计划已经快更新完毕了,决定从头看一遍 ...

  3. 技美 百人计划 2.1色彩空间

    技美 百人计划 2.1色彩空间 2.1色彩空间 色彩发送器 色彩的认知 光源是出生点,光源发射出光线,光线通过直射反射折射等路径最终进入人眼.但人眼接收到光线后,人眼的细胞产生了一系列化学反应,由此把 ...

  4. 【技美百人计划】图形 4.4 抗锯齿概论

    笔记 锯齿是怎么产生的 左图:想要的效果 右图:表现的效果 抗锯齿分类 ● 前向渲染: SSAA.MSAA.CSAA.RGSS等 ● 延迟渲染: FXAA.MLAA.SMAA等 ● 时域上的抗锯齿: ...

  5. 【技美百人计划】图形 4.2 SSAO算法 屏幕空间环境光遮蔽(&HBAO)

    笔记 SSAO介绍 AO 环境光遮蔽,AmbientOcclusion.一种模拟光线到达物体的能力和粗略的全局方法. SSAO 屏幕环境光遮蔽,Screen Space Ambient Occlusi ...

  6. 【技美百人计划】图形 4.3 实时阴影介绍

    笔记 先讲两个概念 软阴影.硬阴影 硬阴影: ● 应用于点光源 ● 对于每一个像素,只需要检查该像素和光源之间是否有遮挡物存在即可,因此这种和像素一对一的可见性函数结果可以如同表面颜色一样,被存储在一 ...

  7. 【技美百人计划】美术 1.1.3 角色设计精要

    笔记 角色设计流程 设计流程: 角色设计流程: 确定角色关键词 ● 了解角色并找到那些让角色独一无二的关键词 ● 如这些角色的重要标识:世界观.背景.能力.职业.性格.喜好 EXP 小美: 设计之初: ...

  8. 【技美百人计划】美术 1.1 美术理论基础

    笔记 光影 光影:物体呈现在人们眼前的时候,不同的受光面其明暗变化以及物体的影子 黑白灰 & 明暗五调子 黑白灰: 受光面为亮形成白,背光面为暗形成黑,其他的过渡为灰色 明暗五调子: ● 高光 ...

  9. 【技美百人计划】美术 2.5 模型常见问题及规范

    笔记 布线的合理性(卡线优化) ● 在次世代流程中,对高模的布线没有那么严格.因为高模只是为了获得一张高精度的法线贴图,使低模能够有一个假的信息去做视觉欺骗 ● 为了方便低模去绑定动画.去蒙皮,所以需 ...

最新文章

  1. linux改组ID号会对数据库有影响么,truncate操作导致DATA_OBJECT_ID改变
  2. C++ virtual笔试
  3. Verify the Developer App certificate for your account is trusted on your device.
  4. MOSS字段编辑权限控制方案(2)-添加管理链接
  5. 组态软件开发(zz)
  6. Linux 7 关闭、禁用防火墙服务
  7. 数据结构专题(二):2.3链表插入元素,尾插法
  8. Oracle ORA-06861: 文字与格式字符串不匹配 记录两次无助的遭遇:存储过程直接执行正常,java调用存储过程则报错
  9. 浅析移动互联浪潮之由来
  10. MODIS数据下载——订单模式下载tif影像
  11. 计算机科学导论论文文章,计算机科学导论论文参考文献集 计算机科学导论论文参考文献数量是多少...
  12. 使用go进行人脸识别活体检测
  13. 基于auto.js的安卓抢购软件---淘宝抢购小助手(不完善,仅供参考)
  14. 关于C语言中数组输入与打印
  15. 贪心——国际象棋锦标赛
  16. html小吃制作,最简单易学的12种小吃的做法|小吃|简单易学
  17. 文献(5): 单细胞转录组揭示人类纤维化皮肤病中成纤维细胞的异质性
  18. C++——计算x的n次幂
  19. 001-猫眼排行榜前100电影爬取【爬虫】【Python】
  20. dubbo-monitor装配、 监控中心 配置过程

热门文章

  1. 2019年数学最高奖揭晓:首位女性阿贝尔奖得主,一个有人情味、卓尔不凡的数学家...
  2. 电脑版微信累积文件缓存清理小方法
  3. 七个星期中的七个数据库– Hbase第二天
  4. VScode 插件live preview无法显示背景图片/图片
  5. mysql8找不到bir_beetlsql.adoc
  6. 运算放大器的共模抑制比CMRR
  7. 如果报了前端培训班,还是学不会怎么办?
  8. 大学物理·第6章静电场中的导体与电介质
  9. [bzoj5507] [洛谷P5305] [gzoi2019]旧词
  10. 最新测绘资质的办理方案