private void RenderScreenSpaceReflection() { ScreenSpaceReflectionBuffer.Clear(); //////Set HierarchicalDepthRT////// ScreenSpaceReflectionBuffer.Blit(BuiltinRenderTextureType.ResolvedDepth, SSR_HierarchicalDepth_RT); for (int i = 1; i < HiZ_MaxLevel; ++i) { ScreenSpaceReflectionBuffer.SetGlobalInt(SSR_HiZ_PrevDepthLevel_ID, i - 1); ScreenSpaceReflectionBuffer.SetRenderTarget(SSR_HierarchicalDepth_BackUp_RT, i); ScreenSpaceReflectionBuffer.DrawMesh(GraphicsUtility.mesh, Matrix4x4.identity, StochasticScreenSpaceReflectionMaterial, 0, RenderPass_HiZ_Depth); ScreenSpaceReflectionBuffer.CopyTexture(SSR_HierarchicalDepth_BackUp_RT, 0, i, SSR_HierarchicalDepth_RT, 0, i); } ScreenSpaceReflectionBuffer.SetGlobalTexture(SSR_HierarchicalDepth_ID, SSR_HierarchicalDepth_RT); //////Set SceneColorRT////// ScreenSpaceReflectionBuffer.SetGlobalTexture(SSR_SceneColor_ID, SSR_SceneColor_RT); ScreenSpaceReflectionBuffer.CopyTexture(BuiltinRenderTextureType.CameraTarget, SSR_SceneColor_RT); //////RayCasting////// ScreenSpaceReflectionBuffer.SetGlobalTexture(SSR_Trace_ID, SSR_TraceMask_RT[0]); ScreenSpaceReflectionBuffer.SetGlobalTexture(SSR_Mask_ID, SSR_TraceMask_RT[1]); if (TraceMethod == TraceApprox.HiZTrace) { ScreenSpaceReflectionBuffer.BlitMRT(SSR_TraceMask_ID, SSR_TraceMask_RT[0], StochasticScreenSpaceReflectionMaterial, (RayNums > 1) ? RenderPass_HiZ3D_MultiSpp : RenderPass_HiZ3D_SingelSpp); } else { ScreenSpaceReflectionBuffer.BlitMRT(SSR_TraceMask_ID, SSR_TraceMask_RT[0], StochasticScreenSpaceReflectionMaterial, (RayNums > 1) ? RenderPass_Linear2D_MultiSPP : RenderPass_Linear2D_SingelSPP); } //////Spatial filter////// ScreenSpaceReflectionBuffer.SetGlobalTexture(SSR_Spatial_ID, SSR_Spatial_RT); ScreenSpaceReflectionBuffer.BlitSRT(SSR_Spatial_RT, StochasticScreenSpaceReflectionMaterial, (RayNums > 1) ? RenderPass_Spatiofilter_MultiSPP : RenderPass_Spatiofilter_SingleSPP); ScreenSpaceReflectionBuffer.CopyTexture(SSR_Spatial_RT, SSR_TemporalCurr_RT); //////Temporal filter////// ScreenSpaceReflectionBuffer.SetGlobalTexture(SSR_TemporalPrev_ID, SSR_TemporalPrev_RT); ScreenSpaceReflectionBuffer.SetGlobalTexture(SSR_TemporalCurr_ID, SSR_TemporalCurr_RT); ScreenSpaceReflectionBuffer.BlitSRT(SSR_TemporalCurr_RT, StochasticScreenSpaceReflectionMaterial, (RayNums > 1) ? RenderPass_Temporalfilter_MultiSpp : RenderPass_Temporalfilter_SingleSPP); ScreenSpaceReflectionBuffer.CopyTexture(SSR_TemporalCurr_RT, SSR_TemporalPrev_RT); //////Combien Reflection////// ScreenSpaceReflectionBuffer.SetGlobalTexture(SSR_CombineScene_ID, SSR_CombineScene_RT); #if UNITY_EDITOR ScreenSpaceReflectionBuffer.BlitSRT(SSR_CombineScene_RT, BuiltinRenderTextureType.CameraTarget, StochasticScreenSpaceReflectionMaterial, (int)DeBugPass); #else ScreenSpaceReflectionBuffer.BlitSRT(SSR_CombineScene_RT, BuiltinRenderTextureType.CameraTarget, StochasticScreenSpaceReflectionMaterial, 9); #endif //////Set Last Frame ViewProjection////// SSR_Prev_ViewProjectionMatrix = SSR_ViewProjectionMatrix; }
private void ReleaseSSRBuffer() { RenderTexture.ReleaseTemporary(SSR_HierarchicalDepth_RT); RenderTexture.ReleaseTemporary(SSR_SceneColor_RT); RenderTexture.ReleaseTemporary(SSR_TraceMask_RT[0]); RenderTexture.ReleaseTemporary(SSR_TraceMask_RT[1]); RenderTexture.ReleaseTemporary(SSR_Spatial_RT); RenderTexture.ReleaseTemporary(SSR_TemporalPrev_RT); RenderTexture.ReleaseTemporary(SSR_TemporalCurr_RT); RenderTexture.ReleaseTemporary(SSR_CombineScene_RT); if (ScreenSpaceReflectionBuffer != null) { ScreenSpaceReflectionBuffer.Dispose(); } }