private void SSR_UpdateVariable(SSRCameraData cameraData, PropertySetEvent setEvent, Camera RenderCamera, ref PipelineCommandData data)
        {
            Vector2Int    CameraSize = new Vector2Int(RenderCamera.pixelWidth, RenderCamera.pixelHeight);
            CommandBuffer buffer     = data.buffer;

            if (cameraData.UpdateCameraSize(CameraSize, (int)RayCastingResolution))
            {
                SSR_UpdateUniformVariable();
            }
            ////////////Set Matrix
#if UNITY_EDITOR
            else if (RunTimeDebugMod)
            {
                SSR_UpdateUniformVariable();
            }
#endif
            buffer.SetGlobalVector(SSR_ScreenSize_ID, new Vector2(CameraSize.x, CameraSize.y));
            buffer.SetGlobalVector(SSR_RayCastSize_ID, new Vector2(CameraSize.x, CameraSize.y) / (int)RayCastingResolution);

            buffer.SetGlobalVector(SSR_Jitter_ID, new Vector4((float)CameraSize.x / 1024, (float)CameraSize.y / 1024, RandomSampler.x, RandomSampler.y));
            Matrix4x4 proj = GL.GetGPUProjectionMatrix(RenderCamera.projectionMatrix, false);
            buffer.SetGlobalMatrix(SSR_ProjectionMatrix_ID, proj);
            buffer.SetGlobalMatrix(SSR_ViewProjectionMatrix_ID, data.vp);
            buffer.SetGlobalMatrix(SSR_InverseProjectionMatrix_ID, proj.inverse);
            buffer.SetGlobalMatrix(SSR_InverseViewProjectionMatrix_ID, data.inverseVP);
            buffer.SetGlobalMatrix(SSR_WorldToCameraMatrix_ID, RenderCamera.worldToCameraMatrix);
            buffer.SetGlobalMatrix(SSR_CameraToWorldMatrix_ID, RenderCamera.cameraToWorldMatrix);
            buffer.SetGlobalMatrix(SSR_LastFrameViewProjectionMatrix_ID, setEvent.lastViewProjection);

            Matrix4x4 warpToScreenSpaceMatrix = Matrix4x4.identity;
            Vector2   HalfCameraSize          = new Vector2(CameraSize.x, CameraSize.y) / 2;
            warpToScreenSpaceMatrix.m00 = HalfCameraSize.x; warpToScreenSpaceMatrix.m03 = HalfCameraSize.x;
            warpToScreenSpaceMatrix.m11 = HalfCameraSize.y; warpToScreenSpaceMatrix.m13 = HalfCameraSize.y;

            Matrix4x4 SSR_ProjectToPixelMatrix = warpToScreenSpaceMatrix * proj;
            buffer.SetGlobalMatrix(SSR_ProjectToPixelMatrix_ID, SSR_ProjectToPixelMatrix);

            Vector4 SSR_ProjInfo = new Vector4
                                       ((-2 / (CameraSize.x * proj[0])),
                                       (-2 / (CameraSize.y * proj[5])),
                                       ((1 - proj[2]) / proj[0]),
                                       ((1 + proj[6]) / proj[5]));
            buffer.SetGlobalVector(SSR_ProjInfo_ID, SSR_ProjInfo);

            Vector3 SSR_ClipInfo = (float.IsPositiveInfinity(RenderCamera.farClipPlane)) ?
                                   new Vector3(RenderCamera.nearClipPlane, -1, 1) :
                                   new Vector3(RenderCamera.nearClipPlane * RenderCamera.farClipPlane, RenderCamera.nearClipPlane - RenderCamera.farClipPlane, RenderCamera.farClipPlane);
            buffer.SetGlobalVector(SSR_CameraClipInfo_ID, SSR_ClipInfo);
        }
        private void SSR_UpdateVariable(SSRCameraData cameraData, Camera RenderCamera, ref PipelineCommandData data, PropertySetEvent proper)
        {
            int           downRes    = downSample ? 2 : 1;
            Vector2Int    CameraSize = new Vector2Int(RenderCamera.pixelWidth, RenderCamera.pixelHeight);
            CommandBuffer buffer     = data.buffer;

            cameraData.UpdateCameraSize(CameraSize, 2);
            buffer.SetGlobalMatrix(ShaderIDs._VP, proper.VP);
            Matrix4x4 proj = GL.GetGPUProjectionMatrix(RenderCamera.projectionMatrix, false);
            Matrix4x4 warpToScreenSpaceMatrix = Matrix4x4.identity;
            Vector2   HalfCameraSize          = new Vector2(CameraSize.x, CameraSize.y) / downRes;

            warpToScreenSpaceMatrix.m00 = HalfCameraSize.x; warpToScreenSpaceMatrix.m03 = HalfCameraSize.x;
            warpToScreenSpaceMatrix.m11 = HalfCameraSize.y; warpToScreenSpaceMatrix.m13 = HalfCameraSize.y;

            Matrix4x4             SSR_ProjectToPixelMatrix = warpToScreenSpaceMatrix * proj;
            NativeArray <SSRData> dataArr = new NativeArray <SSRData>(1, Allocator.Temp, NativeArrayOptions.UninitializedMemory);
            SSRData *ptr = dataArr.Ptr();

            ptr->ScreenFade         = ScreenFade;
            ptr->Thickness          = Thickness;
            ptr->HiZ_RaySteps       = HiZ_RaySteps;
            ptr->HiZ_MaxLevel       = HiZ_MaxLevel;
            ptr->HiZ_StartLevel     = HiZ_StartLevel;
            ptr->HiZ_StopLevel      = HiZ_StopLevel;
            ptr->MaximumBiasAllowed = MaximumAllowedTemporalDepthBias;
            ptr->TemporalWeight     = float2(StaticTemporalWeight, DynamicTemporalWeight);
            ptr->ScreenSize         = float2(CameraSize.x, CameraSize.y);
            ptr->rayCastSize        = float2(CameraSize.x, CameraSize.y) / downRes;
            ptr->projection         = proj;
            ptr->inverseProj        = proj.inverse;
            ptr->viewProjection     = proper.VP;
            ptr->worldToCamera      = RenderCamera.worldToCameraMatrix;
            ptr->cameraToWorld      = RenderCamera.cameraToWorldMatrix;
            ptr->projToPixelMatrix  = SSR_ProjectToPixelMatrix;
            ptr->brdfBias           = brdfBias;
            ptr->inverseLastVP      = propertySetEvent.inverseLastViewProjection;
            ssrDatas.SetData(dataArr);
            buffer.SetGlobalConstantBuffer(ssrDatas, SSRDatas, 0, ssrDatas.stride);
            dataArr.Dispose();
        }