@@ -3878,6 +3878,7 @@ struct RenderSSRParameters
38783878 public ComputeShader ssrCS ;
38793879 public int tracingKernel ;
38803880 public int reprojectionKernel ;
3881+ public bool transparentSSR ;
38813882
38823883 public int width , height , viewCount ;
38833884
@@ -3887,14 +3888,15 @@ struct RenderSSRParameters
38873888 public ShaderVariablesScreenSpaceReflection cb ;
38883889 }
38893890
3890- RenderSSRParameters PrepareSSRParameters ( HDCamera hdCamera , in HDUtils . PackedMipChainInfo depthPyramid )
3891+ RenderSSRParameters PrepareSSRParameters ( HDCamera hdCamera , in HDUtils . PackedMipChainInfo depthPyramid , bool transparentSSR )
38913892 {
38923893 var volumeSettings = hdCamera . volumeStack . GetComponent < ScreenSpaceReflection > ( ) ;
38933894 var parameters = new RenderSSRParameters ( ) ;
38943895
38953896 parameters . ssrCS = m_ScreenSpaceReflectionsCS ;
38963897 parameters . tracingKernel = m_SsrTracingKernel ;
38973898 parameters . reprojectionKernel = m_SsrReprojectionKernel ;
3899+ parameters . transparentSSR = transparentSSR ;
38983900
38993901 parameters . width = hdCamera . actualWidth ;
39003902 parameters . height = hdCamera . actualHeight ;
@@ -3927,6 +3929,7 @@ RenderSSRParameters PrepareSSRParameters(HDCamera hdCamera, in HDUtils.PackedMip
39273929 }
39283930
39293931 static void RenderSSR ( in RenderSSRParameters parameters ,
3932+ RTHandle depthTexture ,
39303933 RTHandle depthPyramid ,
39313934 RTHandle SsrHitPointTexture ,
39323935 RTHandle stencilBuffer ,
@@ -3941,6 +3944,12 @@ static void RenderSSR( in RenderSSRParameters parameters,
39413944 using ( new ProfilingScope ( cmd , ProfilingSampler . Get ( HDProfileId . SsrTracing ) ) )
39423945 {
39433946 // cmd.SetComputeTextureParam(cs, kernel, "_SsrDebugTexture", m_SsrDebugTexture);
3947+ // Bind the non mip chain if we are rendering the transaprent version
3948+ if ( parameters . transparentSSR )
3949+ {
3950+ CoreUtils . SetKeyword ( cmd , "DEPTH_SOURCE_NOT_FROM_MIP_CHAIN" , true ) ;
3951+ cmd . SetComputeTextureParam ( cs , parameters . tracingKernel , HDShaderIDs . _DepthTexture , depthTexture ) ;
3952+ }
39443953 cmd . SetComputeTextureParam ( cs , parameters . tracingKernel , HDShaderIDs . _CameraDepthTexture , depthPyramid ) ;
39453954 cmd . SetComputeTextureParam ( cs , parameters . tracingKernel , HDShaderIDs . _SsrClearCoatMaskTexture , clearCoatMask ) ;
39463955 cmd . SetComputeTextureParam ( cs , parameters . tracingKernel , HDShaderIDs . _SsrHitPointTexture , SsrHitPointTexture ) ;
@@ -3960,6 +3969,9 @@ static void RenderSSR( in RenderSSRParameters parameters,
39603969 ConstantBuffer . Push ( cmd , parameters . cb , cs , HDShaderIDs . _ShaderVariablesScreenSpaceReflection ) ;
39613970
39623971 cmd . DispatchCompute ( cs , parameters . tracingKernel , HDUtils . DivRoundUp ( parameters . width , 8 ) , HDUtils . DivRoundUp ( parameters . height , 8 ) , parameters . viewCount ) ;
3972+
3973+ if ( parameters . transparentSSR )
3974+ CoreUtils . SetKeyword ( cmd , "DEPTH_SOURCE_NOT_FROM_MIP_CHAIN" , false ) ;
39633975 }
39643976
39653977 using ( new ProfilingScope ( cmd , ProfilingSampler . Get ( HDProfileId . SsrReprojection ) ) )
@@ -3997,8 +4009,8 @@ void RenderSSR(HDCamera hdCamera, CommandBuffer cmd, ScriptableRenderContext ren
39974009 // Evaluate the clear coat mask texture based on the lit shader mode
39984010 RTHandle clearCoatMask = hdCamera . frameSettings . litShaderMode == LitShaderMode . Deferred ? m_GbufferManager . GetBuffer ( 2 ) : TextureXR . GetBlackTexture ( ) ;
39994011
4000- var parameters = PrepareSSRParameters ( hdCamera , m_SharedRTManager . GetDepthBufferMipChainInfo ( ) ) ;
4001- RenderSSR ( parameters , m_SharedRTManager . GetDepthTexture ( ) , m_SsrHitPointTexture ,
4012+ var parameters = PrepareSSRParameters ( hdCamera , m_SharedRTManager . GetDepthBufferMipChainInfo ( ) , false ) ;
4013+ RenderSSR ( parameters , m_SharedRTManager . GetDepthStencilBuffer ( ) , m_SharedRTManager . GetDepthTexture ( ) , m_SsrHitPointTexture ,
40024014 m_SharedRTManager . GetStencilBuffer ( hdCamera . frameSettings . IsEnabled ( FrameSettingsField . MSAA ) ) , clearCoatMask , previousColorPyramid ,
40034015 m_SsrLightingTexture , cmd , renderContext ) ;
40044016
@@ -4027,16 +4039,12 @@ void RenderSSRTransparent(HDCamera hdCamera, CommandBuffer cmd, ScriptableRender
40274039 // Clear the SSR lighting buffer (not sure it is required)
40284040 CoreUtils . SetRenderTarget ( cmd , m_SsrLightingTexture , ClearFlag . Color , Color . clear ) ;
40294041 CoreUtils . SetRenderTarget ( cmd , m_SsrHitPointTexture , ClearFlag . Color , Color . clear ) ;
4030-
4031- // Invalid the depth pyramid and regenerate the depth pyramid
4032- m_IsDepthBufferCopyValid = false ;
4033- GenerateDepthPyramid ( hdCamera , cmd , FullScreenDebugMode . DepthPyramid ) ;
40344042 }
40354043
40364044 // Evaluate the screen space reflection for the transparent pixels
40374045 var previousColorPyramid = hdCamera . GetPreviousFrameRT ( ( int ) HDCameraFrameHistoryType . ColorBufferMipChain ) ;
4038- var parameters = PrepareSSRParameters ( hdCamera , m_SharedRTManager . GetDepthBufferMipChainInfo ( ) ) ;
4039- RenderSSR ( parameters , m_SharedRTManager . GetDepthTexture ( ) , m_SsrHitPointTexture , m_SharedRTManager . GetStencilBuffer ( ) , TextureXR . GetBlackTexture ( ) , previousColorPyramid , m_SsrLightingTexture , cmd , renderContext ) ;
4046+ var parameters = PrepareSSRParameters ( hdCamera , m_SharedRTManager . GetDepthBufferMipChainInfo ( ) , true ) ;
4047+ RenderSSR ( parameters , m_SharedRTManager . GetDepthStencilBuffer ( ) , m_SharedRTManager . GetDepthTexture ( ) , m_SsrHitPointTexture , m_SharedRTManager . GetStencilBuffer ( ) , TextureXR . GetBlackTexture ( ) , previousColorPyramid , m_SsrLightingTexture , cmd , renderContext ) ;
40404048
40414049 // If color pyramid was not valid, we bind a black texture
40424050 if ( ! hdCamera . colorPyramidHistoryIsValid )
0 commit comments