コード例 #1
0
    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;
    }
コード例 #2
0
    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();
        }
    }