笔记

景深原理

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

景深遇到的问题

因为是基于深度图的实现,如果是半透明物体,则没有深度,要如何解决
个人思路:那首先得提取这个半透明物体,通过 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. 剁馅机器人图片_黄金手撕面包培训图片信得过的工艺利润高
  2. 高通平台msm8909 LK 实现LCD 兼容
  3. 快醒醒,一大波最新 AI 论文加开源代码来袭!
  4. SecureCRTPortable - 破解
  5. 组合体视图的画图步骤_(完整版)组合体视图画法教案
  6. 文件下载的java代码_文件下载java代码实现
  7. Android音视频【十一】视频混音
  8. Vim 的几个彩蛋。。
  9. php 压缩 解压文件,PHP 实现文件压缩解压操作的方法
  10. CUDA+CUDNN下载地址
  11. 萌新之php一句话木马(上传漏洞)
  12. [转载]Ext.form.BasicForm getValues()和getFie_-Chaz-_新浪博客
  13. F5 GTM DNS 知识点和实验 4 -智能DNS基础
  14. 基于python的opencv计算机视觉基础知识及例程代码【视觉入门看这一篇就够了】
  15. 主板各种插针接口与机箱(电源)的接法
  16. CNN原理及模型参数
  17. 西安到底需不需要互联网?
  18. 基于jsp+servlet+mysql的酒店管理系统(附源码)
  19. 利用GAE+WallProxy-plugins搭建个人代理服务器
  20. nodjs和php哪个有前景_浅谈nodejs和php

热门文章

  1. 【刚刚开源!】超级优秀地解决Python人工智能计算慢问题(附源码+长期更新+必会)
  2. 【python向日葵】愿我们的生活像向日葵一样灿烂~~~
  3. 关于dev的treelist的表头 获取集合 bands 或者 columns 来设置标题换行
  4. 作为程序员,你一定要知道的十大经典排序算法!(详细解析)
  5. 介绍一下芯片的VIA pillar
  6. 一个猜灯谜的游戏(求解)
  7. 我为什么要写博客,写博客的意义是什么??
  8. 幻影显示连接不到服务器,幻影纹章怎么进不去 无法连接服务器及解决方案
  9. 新浪微博如何设置半年可见?需要会员权限吗?
  10. unicode编码范围: