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(); }