Shader "Hidden/DepthFog" { Properties { _MainTex ("Texture", 2D) = "white" {} } SubShader { // No culling or depth Cull Off ZWrite Off ZTest Always Pass { CGPROGRAM #pragma vertex vert #pragma fragment frag #include "UnityCG.cginc" struct appdata { float4 vertex : POSITION; float2 uv : TEXCOORD0; }; struct v2f { float2 uv : TEXCOORD0; float4 vertex : SV_POSITION; }; v2f vert (appdata v) { v2f o; o.vertex = UnityObjectToClipPos(v.vertex); o.uv = v.uv; return o; } sampler2D _MainTex; sampler2D _CameraDepthTexture; float _StartDistance,_EndDistance,_Height; fixed4 _FogCol; float4x4 _InvVP; fixed4 frag (v2f i) : SV_Target { fixed4 col = tex2D(_MainTex, i.uv); float depth = SAMPLE_DEPTH_TEXTURE(_CameraDepthTexture, i.uv); float4 proj = float4(i.uv.xy*2-1, depth, 1); float4 worldPos = mul(_InvVP, proj); worldPos.xyz /= worldPos.w; float ditance = length(worldPos.xyz - _WorldSpaceCameraPos.xyz); fixed fogFactor = smoothstep(_StartDistance, _EndDistance, ditance); fixed fogFactorHeigh = 1 - smoothstep(0, _Height, worldPos.y); fogFactor *= fogFactorHeigh; fixed3 finalCol = lerp(col.rgb, _FogCol, fogFactor* _FogCol.a); return fixed4(finalCol,1); } ENDCG } } }