深度紋理(DEPTHTEXTURE)盟劫,一般而言,我們做霧效(FOG),屏幕后期處理(POST-PROCESS)等等需要用到物體離攝像機(jī)的距離作為計算涣仿。那么這些離攝像機(jī)遠(yuǎn)近的信息,我們把渲染出的一張離攝像機(jī)遠(yuǎn)近的深度圖信息稱為深度紋理示惊。
Unity在URP(SRP)中主要是在RenderPipeline里面的DepthTexture復(fù)選框開啟好港,也可以在攝像機(jī)里覆蓋RenderPipeline的設(shè)置。開啟后可在shader中使用_CameraDepthTexture獲得米罚。
sampler2D _CameraDepthTexture;
float depth = tex2D(_CameraDepthTexture, i.uv).r;
col = float4(depth, depth, depth, 1 );
景深模糊算法原理:
1.計算模糊钧汹,通過偏移UV/增加混合顏色計算參數(shù)方式,獲取多張模糊程度不一的貼圖录择。
2.根據(jù)深度紋理拔莱,來混合計算类嗤,離得遠(yuǎn)的參與最模糊計算,小于焦點距離的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));