Shader "Fog Volume/RT viewers/RT_Depth" { Properties{ [Toggle(RightEye)] _RightEye ("Right Eye?", Float) = 0 [hideininspector]_MainTex("Base", 2D) = "" {} _Intensity("Intensity", Range(1, 20)) = 1 } SubShader { Tags { "RenderType" = "Opaque" } LOD 100 Pass { CGPROGRAM #pragma multi_compile _ _FOG_LOWRES_RENDERER #pragma vertex vert #pragma fragment frag #pragma multi_compile _ RightEye #include "UnityCG.cginc" float _Intensity; struct appdata { float4 vertex : POSITION; float2 uv : TEXCOORD0; }; struct v2f { float2 uv : TEXCOORD0; float4 vertex : SV_POSITION; }; sampler2D RT_Depth, _MainTex; sampler2D RT_DepthR; float4 RT_Depth_ST, _MainTex_TexelSize, _MainTex_ST; sampler2D _CameraDepthTexture; v2f vert (appdata v) { v2f o; o.vertex = UnityObjectToClipPos(v.vertex); o.uv = v.uv; return o; } fixed4 frag (v2f i) : SV_Target { // sample the texture float Depth = 0; #ifdef RightEye Depth = tex2D(RT_DepthR, i.uv).r; #else Depth = tex2D(RT_Depth, i.uv).r; #endif Depth *= 1000; return 1/Depth*_Intensity; //#if UNITY_REVERSED_Z!=1 // return float4(1, 0, 0, 1); //#else // return float4(0, 1, 0, 1); //#endif //Depth = LinearEyeDepth(Depth); // Depth = 1.0 / (_ZBufferParams.z * Depth + _ZBufferParams.w); //Depth = max(.001, Depth); // //if (Depth < .0001)Depth = 1; //Depth /= _ProjectionParams.w; //Depth *= 1000; //https://docs.unity3d.com/Manual/SL-UnityShaderVariables.html //_ZBufferParams float4 Used to linearize Z buffer values. x is (1-far/near), y is (far/near), z is (x/far) and w is (y/far). half far = 1000; half near = .01; float x, y, z, w; x = 1 - far / near; y = far / near; z = x / far; w = y / far; //Depth = 1/ (z * Depth + w); //if (Depth < .0000001)Depth = 1000; return (1/Depth*_Intensity); //return DecodeFloatRGBA(z)*50; } ENDCG } } }