From a10eea6e4ce647061813519d5b0ea496f29495b9 Mon Sep 17 00:00:00 2001
From: leonard Wu <364452445@qq.com>
Date: 星期四, 09 八月 2018 09:47:08 +0800
Subject: [PATCH] 同步最新svn内容

---
 Assets/Plugins/PostProcessing/Runtime/Components/ScreenSpaceReflectionComponent.cs |  478 +++++++++++++++++++++++++++++-----------------------------
 1 files changed, 239 insertions(+), 239 deletions(-)

diff --git a/Assets/Plugins/PostProcessing/Runtime/Components/ScreenSpaceReflectionComponent.cs b/Assets/Plugins/PostProcessing/Runtime/Components/ScreenSpaceReflectionComponent.cs
index 7411f85..7c6b40c 100644
--- a/Assets/Plugins/PostProcessing/Runtime/Components/ScreenSpaceReflectionComponent.cs
+++ b/Assets/Plugins/PostProcessing/Runtime/Components/ScreenSpaceReflectionComponent.cs
@@ -1,239 +1,239 @@
-using UnityEngine.Rendering;
-
-namespace UnityEngine.PostProcessing
-{
-    using SSRResolution = ScreenSpaceReflectionModel.SSRResolution;
-    using SSRReflectionBlendType = ScreenSpaceReflectionModel.SSRReflectionBlendType;
-
-    public sealed class ScreenSpaceReflectionComponent : PostProcessingComponentCommandBuffer<ScreenSpaceReflectionModel>
-    {
-        static class Uniforms
-        {
-            internal static readonly int _RayStepSize                = Shader.PropertyToID("_RayStepSize");
-            internal static readonly int _AdditiveReflection         = Shader.PropertyToID("_AdditiveReflection");
-            internal static readonly int _BilateralUpsampling        = Shader.PropertyToID("_BilateralUpsampling");
-            internal static readonly int _TreatBackfaceHitAsMiss     = Shader.PropertyToID("_TreatBackfaceHitAsMiss");
-            internal static readonly int _AllowBackwardsRays         = Shader.PropertyToID("_AllowBackwardsRays");
-            internal static readonly int _TraceBehindObjects         = Shader.PropertyToID("_TraceBehindObjects");
-            internal static readonly int _MaxSteps                   = Shader.PropertyToID("_MaxSteps");
-            internal static readonly int _FullResolutionFiltering    = Shader.PropertyToID("_FullResolutionFiltering");
-            internal static readonly int _HalfResolution             = Shader.PropertyToID("_HalfResolution");
-            internal static readonly int _HighlightSuppression       = Shader.PropertyToID("_HighlightSuppression");
-            internal static readonly int _PixelsPerMeterAtOneMeter   = Shader.PropertyToID("_PixelsPerMeterAtOneMeter");
-            internal static readonly int _ScreenEdgeFading           = Shader.PropertyToID("_ScreenEdgeFading");
-            internal static readonly int _ReflectionBlur             = Shader.PropertyToID("_ReflectionBlur");
-            internal static readonly int _MaxRayTraceDistance        = Shader.PropertyToID("_MaxRayTraceDistance");
-            internal static readonly int _FadeDistance               = Shader.PropertyToID("_FadeDistance");
-            internal static readonly int _LayerThickness             = Shader.PropertyToID("_LayerThickness");
-            internal static readonly int _SSRMultiplier              = Shader.PropertyToID("_SSRMultiplier");
-            internal static readonly int _FresnelFade                = Shader.PropertyToID("_FresnelFade");
-            internal static readonly int _FresnelFadePower           = Shader.PropertyToID("_FresnelFadePower");
-            internal static readonly int _ReflectionBufferSize       = Shader.PropertyToID("_ReflectionBufferSize");
-            internal static readonly int _ScreenSize                 = Shader.PropertyToID("_ScreenSize");
-            internal static readonly int _InvScreenSize              = Shader.PropertyToID("_InvScreenSize");
-            internal static readonly int _ProjInfo                   = Shader.PropertyToID("_ProjInfo");
-            internal static readonly int _CameraClipInfo             = Shader.PropertyToID("_CameraClipInfo");
-            internal static readonly int _ProjectToPixelMatrix       = Shader.PropertyToID("_ProjectToPixelMatrix");
-            internal static readonly int _WorldToCameraMatrix        = Shader.PropertyToID("_WorldToCameraMatrix");
-            internal static readonly int _CameraToWorldMatrix        = Shader.PropertyToID("_CameraToWorldMatrix");
-            internal static readonly int _Axis                       = Shader.PropertyToID("_Axis");
-            internal static readonly int _CurrentMipLevel            = Shader.PropertyToID("_CurrentMipLevel");
-            internal static readonly int _NormalAndRoughnessTexture  = Shader.PropertyToID("_NormalAndRoughnessTexture");
-            internal static readonly int _HitPointTexture            = Shader.PropertyToID("_HitPointTexture");
-            internal static readonly int _BlurTexture                = Shader.PropertyToID("_BlurTexture");
-            internal static readonly int _FilteredReflections        = Shader.PropertyToID("_FilteredReflections");
-            internal static readonly int _FinalReflectionTexture     = Shader.PropertyToID("_FinalReflectionTexture");
-            internal static readonly int _TempTexture                = Shader.PropertyToID("_TempTexture");
-        }
-
-        // Unexposed variables
-        bool k_HighlightSuppression = false;
-        bool k_TraceBehindObjects = true;
-        bool k_TreatBackfaceHitAsMiss = false;
-        bool k_BilateralUpsample = true;
-
-        enum PassIndex
-        {
-            RayTraceStep = 0,
-            CompositeFinal = 1,
-            Blur = 2,
-            CompositeSSR = 3,
-            MinMipGeneration = 4,
-            HitPointToReflections = 5,
-            BilateralKeyPack = 6,
-            BlitDepthAsCSZ = 7,
-            PoissonBlur = 8,
-        }
-
-        readonly int[] m_ReflectionTextures = new int[5];
-
-        // Not really needed as SSR only works in deferred right now
-        public override DepthTextureMode GetCameraFlags()
-        {
-            return DepthTextureMode.Depth;
-        }
-
-        public override bool active
-        {
-            get
-            {
-                return model.enabled
-                       && context.isGBufferAvailable
-                       && !context.interrupted;
-            }
-        }
-
-        public override void OnEnable()
-        {
-            m_ReflectionTextures[0] = Shader.PropertyToID("_ReflectionTexture0");
-            m_ReflectionTextures[1] = Shader.PropertyToID("_ReflectionTexture1");
-            m_ReflectionTextures[2] = Shader.PropertyToID("_ReflectionTexture2");
-            m_ReflectionTextures[3] = Shader.PropertyToID("_ReflectionTexture3");
-            m_ReflectionTextures[4] = Shader.PropertyToID("_ReflectionTexture4");
-        }
-
-        public override string GetName()
-        {
-            return "Screen Space Reflection";
-        }
-
-        public override CameraEvent GetCameraEvent()
-        {
-            return CameraEvent.AfterFinalPass;
-        }
-
-        public override void PopulateCommandBuffer(CommandBuffer cb)
-        {
-            var settings = model.settings;
-            var camera = context.camera;
-
-            // Material setup
-            int downsampleAmount = (settings.reflection.reflectionQuality == SSRResolution.High) ? 1 : 2;
-
-            var rtW = context.width / downsampleAmount;
-            var rtH = context.height / downsampleAmount;
-
-            float sWidth = context.width;
-            float sHeight = context.height;
-
-            float sx = sWidth / 2f;
-            float sy = sHeight / 2f;
-
-            var material = context.materialFactory.Get("Hidden/Post FX/Screen Space Reflection");
-
-            material.SetInt(Uniforms._RayStepSize, settings.reflection.stepSize);
-            material.SetInt(Uniforms._AdditiveReflection, settings.reflection.blendType == SSRReflectionBlendType.Additive ? 1 : 0);
-            material.SetInt(Uniforms._BilateralUpsampling, k_BilateralUpsample ? 1 : 0);
-            material.SetInt(Uniforms._TreatBackfaceHitAsMiss, k_TreatBackfaceHitAsMiss ? 1 : 0);
-            material.SetInt(Uniforms._AllowBackwardsRays, settings.reflection.reflectBackfaces ? 1 : 0);
-            material.SetInt(Uniforms._TraceBehindObjects, k_TraceBehindObjects ? 1 : 0);
-            material.SetInt(Uniforms._MaxSteps, settings.reflection.iterationCount);
-            material.SetInt(Uniforms._FullResolutionFiltering, 0);
-            material.SetInt(Uniforms._HalfResolution, (settings.reflection.reflectionQuality != SSRResolution.High) ? 1 : 0);
-            material.SetInt(Uniforms._HighlightSuppression, k_HighlightSuppression ? 1 : 0);
-
-            // The height in pixels of a 1m object if viewed from 1m away.
-            float pixelsPerMeterAtOneMeter = sWidth / (-2f * Mathf.Tan(camera.fieldOfView / 180f * Mathf.PI * 0.5f));
-
-            material.SetFloat(Uniforms._PixelsPerMeterAtOneMeter, pixelsPerMeterAtOneMeter);
-            material.SetFloat(Uniforms._ScreenEdgeFading, settings.screenEdgeMask.intensity);
-            material.SetFloat(Uniforms._ReflectionBlur, settings.reflection.reflectionBlur);
-            material.SetFloat(Uniforms._MaxRayTraceDistance, settings.reflection.maxDistance);
-            material.SetFloat(Uniforms._FadeDistance, settings.intensity.fadeDistance);
-            material.SetFloat(Uniforms._LayerThickness, settings.reflection.widthModifier);
-            material.SetFloat(Uniforms._SSRMultiplier, settings.intensity.reflectionMultiplier);
-            material.SetFloat(Uniforms._FresnelFade, settings.intensity.fresnelFade);
-            material.SetFloat(Uniforms._FresnelFadePower, settings.intensity.fresnelFadePower);
-
-            var P = camera.projectionMatrix;
-            var projInfo = new Vector4(
-                    -2f / (sWidth * P[0]),
-                    -2f / (sHeight * P[5]),
-                    (1f - P[2]) / P[0],
-                    (1f + P[6]) / P[5]
-                    );
-
-            var cameraClipInfo = float.IsPositiveInfinity(camera.farClipPlane) ?
-                new Vector3(camera.nearClipPlane, -1f, 1f) :
-                new Vector3(camera.nearClipPlane * camera.farClipPlane, camera.nearClipPlane - camera.farClipPlane, camera.farClipPlane);
-
-            material.SetVector(Uniforms._ReflectionBufferSize, new Vector2(rtW, rtH));
-            material.SetVector(Uniforms._ScreenSize, new Vector2(sWidth, sHeight));
-            material.SetVector(Uniforms._InvScreenSize, new Vector2(1f / sWidth, 1f / sHeight));
-            material.SetVector(Uniforms._ProjInfo, projInfo); // used for unprojection
-
-            material.SetVector(Uniforms._CameraClipInfo, cameraClipInfo);
-
-            var warpToScreenSpaceMatrix = new Matrix4x4();
-            warpToScreenSpaceMatrix.SetRow(0, new Vector4(sx, 0f, 0f, sx));
-            warpToScreenSpaceMatrix.SetRow(1, new Vector4(0f, sy, 0f, sy));
-            warpToScreenSpaceMatrix.SetRow(2, new Vector4(0f, 0f, 1f, 0f));
-            warpToScreenSpaceMatrix.SetRow(3, new Vector4(0f, 0f, 0f, 1f));
-
-            var projectToPixelMatrix = warpToScreenSpaceMatrix * P;
-
-            material.SetMatrix(Uniforms._ProjectToPixelMatrix, projectToPixelMatrix);
-            material.SetMatrix(Uniforms._WorldToCameraMatrix, camera.worldToCameraMatrix);
-            material.SetMatrix(Uniforms._CameraToWorldMatrix, camera.worldToCameraMatrix.inverse);
-
-            // Command buffer setup
-            var intermediateFormat = context.isHdr ? RenderTextureFormat.ARGBHalf : RenderTextureFormat.ARGB32;
-            const int maxMip = 5;
-
-            var kNormalAndRoughnessTexture = Uniforms._NormalAndRoughnessTexture;
-            var kHitPointTexture = Uniforms._HitPointTexture;
-            var kBlurTexture = Uniforms._BlurTexture;
-            var kFilteredReflections = Uniforms._FilteredReflections;
-            var kFinalReflectionTexture = Uniforms._FinalReflectionTexture;
-            var kTempTexture = Uniforms._TempTexture;
-
-            // RGB: Normals, A: Roughness.
-            // Has the nice benefit of allowing us to control the filtering mode as well.
-            cb.GetTemporaryRT(kNormalAndRoughnessTexture, -1, -1, 0, FilterMode.Point, RenderTextureFormat.ARGB32, RenderTextureReadWrite.Linear);
-
-            cb.GetTemporaryRT(kHitPointTexture, rtW, rtH, 0, FilterMode.Bilinear, RenderTextureFormat.ARGBHalf, RenderTextureReadWrite.Linear);
-
-            for (int i = 0; i < maxMip; ++i)
-            {
-                // We explicitly interpolate during bilateral upsampling.
-                cb.GetTemporaryRT(m_ReflectionTextures[i], rtW >> i, rtH >> i, 0, FilterMode.Bilinear, intermediateFormat);
-            }
-
-            cb.GetTemporaryRT(kFilteredReflections, rtW, rtH, 0, k_BilateralUpsample ? FilterMode.Point : FilterMode.Bilinear, intermediateFormat);
-            cb.GetTemporaryRT(kFinalReflectionTexture, rtW, rtH, 0, FilterMode.Point, intermediateFormat);
-
-            cb.Blit(BuiltinRenderTextureType.CameraTarget, kNormalAndRoughnessTexture, material, (int)PassIndex.BilateralKeyPack);
-            cb.Blit(BuiltinRenderTextureType.CameraTarget, kHitPointTexture, material, (int)PassIndex.RayTraceStep);
-            cb.Blit(BuiltinRenderTextureType.CameraTarget, kFilteredReflections, material, (int)PassIndex.HitPointToReflections);
-            cb.Blit(kFilteredReflections, m_ReflectionTextures[0], material, (int)PassIndex.PoissonBlur);
-
-            for (int i = 1; i < maxMip; ++i)
-            {
-                int inputTex = m_ReflectionTextures[i - 1];
-
-                int lowMip = i;
-
-                cb.GetTemporaryRT(kBlurTexture, rtW >> lowMip, rtH >> lowMip, 0, FilterMode.Bilinear, intermediateFormat);
-                cb.SetGlobalVector(Uniforms._Axis, new Vector4(1.0f, 0.0f, 0.0f, 0.0f));
-                cb.SetGlobalFloat(Uniforms._CurrentMipLevel, i - 1.0f);
-
-                cb.Blit(inputTex, kBlurTexture, material, (int)PassIndex.Blur);
-
-                cb.SetGlobalVector(Uniforms._Axis, new Vector4(0.0f, 1.0f, 0.0f, 0.0f));
-
-                inputTex = m_ReflectionTextures[i];
-                cb.Blit(kBlurTexture, inputTex, material, (int)PassIndex.Blur);
-                cb.ReleaseTemporaryRT(kBlurTexture);
-            }
-
-            cb.Blit(m_ReflectionTextures[0], kFinalReflectionTexture, material, (int)PassIndex.CompositeSSR);
-
-            cb.GetTemporaryRT(kTempTexture, camera.pixelWidth, camera.pixelHeight, 0, FilterMode.Bilinear, intermediateFormat);
-
-            cb.Blit(BuiltinRenderTextureType.CameraTarget, kTempTexture, material, (int)PassIndex.CompositeFinal);
-            cb.Blit(kTempTexture, BuiltinRenderTextureType.CameraTarget);
-
-            cb.ReleaseTemporaryRT(kTempTexture);
-        }
-    }
-}
+using UnityEngine.Rendering;
+
+namespace UnityEngine.PostProcessing
+{
+    using SSRResolution = ScreenSpaceReflectionModel.SSRResolution;
+    using SSRReflectionBlendType = ScreenSpaceReflectionModel.SSRReflectionBlendType;
+
+    public sealed class ScreenSpaceReflectionComponent : PostProcessingComponentCommandBuffer<ScreenSpaceReflectionModel>
+    {
+        static class Uniforms
+        {
+            internal static readonly int _RayStepSize                = Shader.PropertyToID("_RayStepSize");
+            internal static readonly int _AdditiveReflection         = Shader.PropertyToID("_AdditiveReflection");
+            internal static readonly int _BilateralUpsampling        = Shader.PropertyToID("_BilateralUpsampling");
+            internal static readonly int _TreatBackfaceHitAsMiss     = Shader.PropertyToID("_TreatBackfaceHitAsMiss");
+            internal static readonly int _AllowBackwardsRays         = Shader.PropertyToID("_AllowBackwardsRays");
+            internal static readonly int _TraceBehindObjects         = Shader.PropertyToID("_TraceBehindObjects");
+            internal static readonly int _MaxSteps                   = Shader.PropertyToID("_MaxSteps");
+            internal static readonly int _FullResolutionFiltering    = Shader.PropertyToID("_FullResolutionFiltering");
+            internal static readonly int _HalfResolution             = Shader.PropertyToID("_HalfResolution");
+            internal static readonly int _HighlightSuppression       = Shader.PropertyToID("_HighlightSuppression");
+            internal static readonly int _PixelsPerMeterAtOneMeter   = Shader.PropertyToID("_PixelsPerMeterAtOneMeter");
+            internal static readonly int _ScreenEdgeFading           = Shader.PropertyToID("_ScreenEdgeFading");
+            internal static readonly int _ReflectionBlur             = Shader.PropertyToID("_ReflectionBlur");
+            internal static readonly int _MaxRayTraceDistance        = Shader.PropertyToID("_MaxRayTraceDistance");
+            internal static readonly int _FadeDistance               = Shader.PropertyToID("_FadeDistance");
+            internal static readonly int _LayerThickness             = Shader.PropertyToID("_LayerThickness");
+            internal static readonly int _SSRMultiplier              = Shader.PropertyToID("_SSRMultiplier");
+            internal static readonly int _FresnelFade                = Shader.PropertyToID("_FresnelFade");
+            internal static readonly int _FresnelFadePower           = Shader.PropertyToID("_FresnelFadePower");
+            internal static readonly int _ReflectionBufferSize       = Shader.PropertyToID("_ReflectionBufferSize");
+            internal static readonly int _ScreenSize                 = Shader.PropertyToID("_ScreenSize");
+            internal static readonly int _InvScreenSize              = Shader.PropertyToID("_InvScreenSize");
+            internal static readonly int _ProjInfo                   = Shader.PropertyToID("_ProjInfo");
+            internal static readonly int _CameraClipInfo             = Shader.PropertyToID("_CameraClipInfo");
+            internal static readonly int _ProjectToPixelMatrix       = Shader.PropertyToID("_ProjectToPixelMatrix");
+            internal static readonly int _WorldToCameraMatrix        = Shader.PropertyToID("_WorldToCameraMatrix");
+            internal static readonly int _CameraToWorldMatrix        = Shader.PropertyToID("_CameraToWorldMatrix");
+            internal static readonly int _Axis                       = Shader.PropertyToID("_Axis");
+            internal static readonly int _CurrentMipLevel            = Shader.PropertyToID("_CurrentMipLevel");
+            internal static readonly int _NormalAndRoughnessTexture  = Shader.PropertyToID("_NormalAndRoughnessTexture");
+            internal static readonly int _HitPointTexture            = Shader.PropertyToID("_HitPointTexture");
+            internal static readonly int _BlurTexture                = Shader.PropertyToID("_BlurTexture");
+            internal static readonly int _FilteredReflections        = Shader.PropertyToID("_FilteredReflections");
+            internal static readonly int _FinalReflectionTexture     = Shader.PropertyToID("_FinalReflectionTexture");
+            internal static readonly int _TempTexture                = Shader.PropertyToID("_TempTexture");
+        }
+
+        // Unexposed variables
+        bool k_HighlightSuppression = false;
+        bool k_TraceBehindObjects = true;
+        bool k_TreatBackfaceHitAsMiss = false;
+        bool k_BilateralUpsample = true;
+
+        enum PassIndex
+        {
+            RayTraceStep = 0,
+            CompositeFinal = 1,
+            Blur = 2,
+            CompositeSSR = 3,
+            MinMipGeneration = 4,
+            HitPointToReflections = 5,
+            BilateralKeyPack = 6,
+            BlitDepthAsCSZ = 7,
+            PoissonBlur = 8,
+        }
+
+        readonly int[] m_ReflectionTextures = new int[5];
+
+        // Not really needed as SSR only works in deferred right now
+        public override DepthTextureMode GetCameraFlags()
+        {
+            return DepthTextureMode.Depth;
+        }
+
+        public override bool active
+        {
+            get
+            {
+                return model.enabled
+                       && context.isGBufferAvailable
+                       && !context.interrupted;
+            }
+        }
+
+        public override void OnEnable()
+        {
+            m_ReflectionTextures[0] = Shader.PropertyToID("_ReflectionTexture0");
+            m_ReflectionTextures[1] = Shader.PropertyToID("_ReflectionTexture1");
+            m_ReflectionTextures[2] = Shader.PropertyToID("_ReflectionTexture2");
+            m_ReflectionTextures[3] = Shader.PropertyToID("_ReflectionTexture3");
+            m_ReflectionTextures[4] = Shader.PropertyToID("_ReflectionTexture4");
+        }
+
+        public override string GetName()
+        {
+            return "Screen Space Reflection";
+        }
+
+        public override CameraEvent GetCameraEvent()
+        {
+            return CameraEvent.AfterFinalPass;
+        }
+
+        public override void PopulateCommandBuffer(CommandBuffer cb)
+        {
+            var settings = model.settings;
+            var camera = context.camera;
+
+            // Material setup
+            int downsampleAmount = (settings.reflection.reflectionQuality == SSRResolution.High) ? 1 : 2;
+
+            var rtW = context.width / downsampleAmount;
+            var rtH = context.height / downsampleAmount;
+
+            float sWidth = context.width;
+            float sHeight = context.height;
+
+            float sx = sWidth / 2f;
+            float sy = sHeight / 2f;
+
+            var material = context.materialFactory.Get("Hidden/Post FX/Screen Space Reflection");
+
+            material.SetInt(Uniforms._RayStepSize, settings.reflection.stepSize);
+            material.SetInt(Uniforms._AdditiveReflection, settings.reflection.blendType == SSRReflectionBlendType.Additive ? 1 : 0);
+            material.SetInt(Uniforms._BilateralUpsampling, k_BilateralUpsample ? 1 : 0);
+            material.SetInt(Uniforms._TreatBackfaceHitAsMiss, k_TreatBackfaceHitAsMiss ? 1 : 0);
+            material.SetInt(Uniforms._AllowBackwardsRays, settings.reflection.reflectBackfaces ? 1 : 0);
+            material.SetInt(Uniforms._TraceBehindObjects, k_TraceBehindObjects ? 1 : 0);
+            material.SetInt(Uniforms._MaxSteps, settings.reflection.iterationCount);
+            material.SetInt(Uniforms._FullResolutionFiltering, 0);
+            material.SetInt(Uniforms._HalfResolution, (settings.reflection.reflectionQuality != SSRResolution.High) ? 1 : 0);
+            material.SetInt(Uniforms._HighlightSuppression, k_HighlightSuppression ? 1 : 0);
+
+            // The height in pixels of a 1m object if viewed from 1m away.
+            float pixelsPerMeterAtOneMeter = sWidth / (-2f * Mathf.Tan(camera.fieldOfView / 180f * Mathf.PI * 0.5f));
+
+            material.SetFloat(Uniforms._PixelsPerMeterAtOneMeter, pixelsPerMeterAtOneMeter);
+            material.SetFloat(Uniforms._ScreenEdgeFading, settings.screenEdgeMask.intensity);
+            material.SetFloat(Uniforms._ReflectionBlur, settings.reflection.reflectionBlur);
+            material.SetFloat(Uniforms._MaxRayTraceDistance, settings.reflection.maxDistance);
+            material.SetFloat(Uniforms._FadeDistance, settings.intensity.fadeDistance);
+            material.SetFloat(Uniforms._LayerThickness, settings.reflection.widthModifier);
+            material.SetFloat(Uniforms._SSRMultiplier, settings.intensity.reflectionMultiplier);
+            material.SetFloat(Uniforms._FresnelFade, settings.intensity.fresnelFade);
+            material.SetFloat(Uniforms._FresnelFadePower, settings.intensity.fresnelFadePower);
+
+            var P = camera.projectionMatrix;
+            var projInfo = new Vector4(
+                    -2f / (sWidth * P[0]),
+                    -2f / (sHeight * P[5]),
+                    (1f - P[2]) / P[0],
+                    (1f + P[6]) / P[5]
+                    );
+
+            var cameraClipInfo = float.IsPositiveInfinity(camera.farClipPlane) ?
+                new Vector3(camera.nearClipPlane, -1f, 1f) :
+                new Vector3(camera.nearClipPlane * camera.farClipPlane, camera.nearClipPlane - camera.farClipPlane, camera.farClipPlane);
+
+            material.SetVector(Uniforms._ReflectionBufferSize, new Vector2(rtW, rtH));
+            material.SetVector(Uniforms._ScreenSize, new Vector2(sWidth, sHeight));
+            material.SetVector(Uniforms._InvScreenSize, new Vector2(1f / sWidth, 1f / sHeight));
+            material.SetVector(Uniforms._ProjInfo, projInfo); // used for unprojection
+
+            material.SetVector(Uniforms._CameraClipInfo, cameraClipInfo);
+
+            var warpToScreenSpaceMatrix = new Matrix4x4();
+            warpToScreenSpaceMatrix.SetRow(0, new Vector4(sx, 0f, 0f, sx));
+            warpToScreenSpaceMatrix.SetRow(1, new Vector4(0f, sy, 0f, sy));
+            warpToScreenSpaceMatrix.SetRow(2, new Vector4(0f, 0f, 1f, 0f));
+            warpToScreenSpaceMatrix.SetRow(3, new Vector4(0f, 0f, 0f, 1f));
+
+            var projectToPixelMatrix = warpToScreenSpaceMatrix * P;
+
+            material.SetMatrix(Uniforms._ProjectToPixelMatrix, projectToPixelMatrix);
+            material.SetMatrix(Uniforms._WorldToCameraMatrix, camera.worldToCameraMatrix);
+            material.SetMatrix(Uniforms._CameraToWorldMatrix, camera.worldToCameraMatrix.inverse);
+
+            // Command buffer setup
+            var intermediateFormat = context.isHdr ? RenderTextureFormat.ARGBHalf : RenderTextureFormat.ARGB32;
+            const int maxMip = 5;
+
+            var kNormalAndRoughnessTexture = Uniforms._NormalAndRoughnessTexture;
+            var kHitPointTexture = Uniforms._HitPointTexture;
+            var kBlurTexture = Uniforms._BlurTexture;
+            var kFilteredReflections = Uniforms._FilteredReflections;
+            var kFinalReflectionTexture = Uniforms._FinalReflectionTexture;
+            var kTempTexture = Uniforms._TempTexture;
+
+            // RGB: Normals, A: Roughness.
+            // Has the nice benefit of allowing us to control the filtering mode as well.
+            cb.GetTemporaryRT(kNormalAndRoughnessTexture, -1, -1, 0, FilterMode.Point, RenderTextureFormat.ARGB32, RenderTextureReadWrite.Linear);
+
+            cb.GetTemporaryRT(kHitPointTexture, rtW, rtH, 0, FilterMode.Bilinear, RenderTextureFormat.ARGBHalf, RenderTextureReadWrite.Linear);
+
+            for (int i = 0; i < maxMip; ++i)
+            {
+                // We explicitly interpolate during bilateral upsampling.
+                cb.GetTemporaryRT(m_ReflectionTextures[i], rtW >> i, rtH >> i, 0, FilterMode.Bilinear, intermediateFormat);
+            }
+
+            cb.GetTemporaryRT(kFilteredReflections, rtW, rtH, 0, k_BilateralUpsample ? FilterMode.Point : FilterMode.Bilinear, intermediateFormat);
+            cb.GetTemporaryRT(kFinalReflectionTexture, rtW, rtH, 0, FilterMode.Point, intermediateFormat);
+
+            cb.Blit(BuiltinRenderTextureType.CameraTarget, kNormalAndRoughnessTexture, material, (int)PassIndex.BilateralKeyPack);
+            cb.Blit(BuiltinRenderTextureType.CameraTarget, kHitPointTexture, material, (int)PassIndex.RayTraceStep);
+            cb.Blit(BuiltinRenderTextureType.CameraTarget, kFilteredReflections, material, (int)PassIndex.HitPointToReflections);
+            cb.Blit(kFilteredReflections, m_ReflectionTextures[0], material, (int)PassIndex.PoissonBlur);
+
+            for (int i = 1; i < maxMip; ++i)
+            {
+                int inputTex = m_ReflectionTextures[i - 1];
+
+                int lowMip = i;
+
+                cb.GetTemporaryRT(kBlurTexture, rtW >> lowMip, rtH >> lowMip, 0, FilterMode.Bilinear, intermediateFormat);
+                cb.SetGlobalVector(Uniforms._Axis, new Vector4(1.0f, 0.0f, 0.0f, 0.0f));
+                cb.SetGlobalFloat(Uniforms._CurrentMipLevel, i - 1.0f);
+
+                cb.Blit(inputTex, kBlurTexture, material, (int)PassIndex.Blur);
+
+                cb.SetGlobalVector(Uniforms._Axis, new Vector4(0.0f, 1.0f, 0.0f, 0.0f));
+
+                inputTex = m_ReflectionTextures[i];
+                cb.Blit(kBlurTexture, inputTex, material, (int)PassIndex.Blur);
+                cb.ReleaseTemporaryRT(kBlurTexture);
+            }
+
+            cb.Blit(m_ReflectionTextures[0], kFinalReflectionTexture, material, (int)PassIndex.CompositeSSR);
+
+            cb.GetTemporaryRT(kTempTexture, camera.pixelWidth, camera.pixelHeight, 0, FilterMode.Bilinear, intermediateFormat);
+
+            cb.Blit(BuiltinRenderTextureType.CameraTarget, kTempTexture, material, (int)PassIndex.CompositeFinal);
+            cb.Blit(kTempTexture, BuiltinRenderTextureType.CameraTarget);
+
+            cb.ReleaseTemporaryRT(kTempTexture);
+        }
+    }
+}

--
Gitblit v1.8.0