深度纹理(DEPTHTEXTURE),一般而言,我们做雾效(FOG),屏幕后期处理(POST-PROCESS)等等需要用到物体离摄像机的距离作为计算。那么这些离摄像机远近的信息,我们把渲染出的一张离摄像机远近的深度图信息称为深度纹理。
Unity在URP(SRP)中主要是在RenderPipeline里面的DepthTexture复选框开启,也可以在摄像机里覆盖RenderPipeline的设置。开启后可在shader中使用_CameraDepthTexture获得。
sampler2D _CameraDepthTexture;
float depth = tex2D(_CameraDepthTexture, i.uv).r;
col = float4(depth, depth, depth, 1 );
景深模糊算法原理:
1.计算模糊,通过偏移UV/增加混合颜色计算参数方式,获取多张模糊程度不一的贴图。
2.根据深度纹理,来混合计算,离得远的参与最模糊计算,小于焦点距离的focalDistance的直接为最清晰的图。
fixed4 final = (depth <= _focalDistance) ? MainTex : lerp(MainTex, BlurTex, clamp((depth - _focalDistance) * _farBlurScale, 0, 1));
final = (depth > _focalDistance) ? final : lerp( MainTex, BlurTex, clamp((_focalDistance - depth) * _nearBlurScale, 0, 1));
网友评论