@@ -403,6 +403,7 @@ class RenderSSRPassData
403
403
public bool usePBRAlgo ;
404
404
public bool accumNeedClear ;
405
405
public bool previousAccumNeedClear ;
406
+ public bool validColorPyramid ;
406
407
407
408
public int width , height , viewCount ;
408
409
@@ -511,6 +512,7 @@ TextureHandle RenderSSR(RenderGraph renderGraph,
511
512
passData . accumNeedClear = usePBRAlgo ;
512
513
passData . previousAccumNeedClear = usePBRAlgo && ( hdCamera . currentSSRAlgorithm == ScreenSpaceReflectionAlgorithm . Approximation || hdCamera . isFirstFrame || hdCamera . resetPostProcessingHistory ) ;
513
514
hdCamera . currentSSRAlgorithm = volumeSettings . usedAlgorithm . value ; // Store for next frame comparison
515
+ passData . validColorPyramid = hdCamera . colorPyramidHistoryValidFrames > 1 ;
514
516
515
517
passData . depthBuffer = builder . ReadTexture ( prepassOutput . depthBuffer ) ;
516
518
passData . depthPyramid = builder . ReadTexture ( prepassOutput . depthPyramidTexture ) ;
@@ -603,22 +605,30 @@ TextureHandle RenderSSR(RenderGraph renderGraph,
603
605
604
606
if ( data . usePBRAlgo )
605
607
{
606
- using ( new ProfilingScope ( ctx . cmd , ProfilingSampler . Get ( HDProfileId . SsrAccumulate ) ) )
608
+ if ( ! data . validColorPyramid )
607
609
{
608
- ctx . cmd . SetComputeTextureParam ( cs , data . accumulateKernel , HDShaderIDs . _DepthTexture , data . depthBuffer ) ;
609
- ctx . cmd . SetComputeTextureParam ( cs , data . accumulateKernel , HDShaderIDs . _CameraDepthTexture , data . depthPyramid ) ;
610
- ctx . cmd . SetComputeTextureParam ( cs , data . accumulateKernel , HDShaderIDs . _NormalBufferTexture , data . normalBuffer ) ;
611
- ctx . cmd . SetComputeTextureParam ( cs , data . accumulateKernel , HDShaderIDs . _ColorPyramidTexture , data . colorPyramid ) ;
612
- ctx . cmd . SetComputeTextureParam ( cs , data . accumulateKernel , HDShaderIDs . _SsrHitPointTexture , data . hitPointsTexture ) ;
613
- ctx . cmd . SetComputeTextureParam ( cs , data . accumulateKernel , HDShaderIDs . _SSRAccumTexture , data . ssrAccum ) ;
614
- ctx . cmd . SetComputeTextureParam ( cs , data . accumulateKernel , HDShaderIDs . _SsrLightingTextureRW , data . lightingTexture ) ;
615
- ctx . cmd . SetComputeTextureParam ( cs , data . accumulateKernel , HDShaderIDs . _SsrAccumPrev , data . ssrAccumPrev ) ;
616
- ctx . cmd . SetComputeTextureParam ( cs , data . accumulateKernel , HDShaderIDs . _SsrClearCoatMaskTexture , data . clearCoatMask ) ;
617
- ctx . cmd . SetComputeTextureParam ( cs , data . accumulateKernel , HDShaderIDs . _CameraMotionVectorsTexture , data . motionVectorsBuffer ) ;
618
-
619
- ConstantBuffer . Push ( ctx . cmd , data . cb , cs , HDShaderIDs . _ShaderVariablesScreenSpaceReflection ) ;
620
-
621
- ctx . cmd . DispatchCompute ( cs , data . accumulateKernel , HDUtils . DivRoundUp ( data . width , 8 ) , HDUtils . DivRoundUp ( data . height , 8 ) , data . viewCount ) ;
610
+ CoreUtils . SetRenderTarget ( ctx . cmd , data . ssrAccum , ClearFlag . Color , Color . clear ) ;
611
+ CoreUtils . SetRenderTarget ( ctx . cmd , data . ssrAccumPrev , ClearFlag . Color , Color . clear ) ;
612
+ }
613
+ else
614
+ {
615
+ using ( new ProfilingScope ( ctx . cmd , ProfilingSampler . Get ( HDProfileId . SsrAccumulate ) ) )
616
+ {
617
+ ctx . cmd . SetComputeTextureParam ( cs , data . accumulateKernel , HDShaderIDs . _DepthTexture , data . depthBuffer ) ;
618
+ ctx . cmd . SetComputeTextureParam ( cs , data . accumulateKernel , HDShaderIDs . _CameraDepthTexture , data . depthPyramid ) ;
619
+ ctx . cmd . SetComputeTextureParam ( cs , data . accumulateKernel , HDShaderIDs . _NormalBufferTexture , data . normalBuffer ) ;
620
+ ctx . cmd . SetComputeTextureParam ( cs , data . accumulateKernel , HDShaderIDs . _ColorPyramidTexture , data . colorPyramid ) ;
621
+ ctx . cmd . SetComputeTextureParam ( cs , data . accumulateKernel , HDShaderIDs . _SsrHitPointTexture , data . hitPointsTexture ) ;
622
+ ctx . cmd . SetComputeTextureParam ( cs , data . accumulateKernel , HDShaderIDs . _SSRAccumTexture , data . ssrAccum ) ;
623
+ ctx . cmd . SetComputeTextureParam ( cs , data . accumulateKernel , HDShaderIDs . _SsrLightingTextureRW , data . lightingTexture ) ;
624
+ ctx . cmd . SetComputeTextureParam ( cs , data . accumulateKernel , HDShaderIDs . _SsrAccumPrev , data . ssrAccumPrev ) ;
625
+ ctx . cmd . SetComputeTextureParam ( cs , data . accumulateKernel , HDShaderIDs . _SsrClearCoatMaskTexture , data . clearCoatMask ) ;
626
+ ctx . cmd . SetComputeTextureParam ( cs , data . accumulateKernel , HDShaderIDs . _CameraMotionVectorsTexture , data . motionVectorsBuffer ) ;
627
+
628
+ ConstantBuffer . Push ( ctx . cmd , data . cb , cs , HDShaderIDs . _ShaderVariablesScreenSpaceReflection ) ;
629
+
630
+ ctx . cmd . DispatchCompute ( cs , data . accumulateKernel , HDUtils . DivRoundUp ( data . width , 8 ) , HDUtils . DivRoundUp ( data . height , 8 ) , data . viewCount ) ;
631
+ }
622
632
}
623
633
}
624
634
} ) ;
@@ -639,8 +649,13 @@ TextureHandle RenderSSR(RenderGraph renderGraph,
639
649
if ( ! hdCamera . colorPyramidHistoryIsValid )
640
650
{
641
651
hdCamera . colorPyramidHistoryIsValid = true ; // For the next frame...
652
+ hdCamera . colorPyramidHistoryValidFrames = 0 ;
642
653
result = renderGraph . defaultResources . blackTextureXR ;
643
654
}
655
+ else
656
+ {
657
+ hdCamera . colorPyramidHistoryValidFrames ++ ;
658
+ }
644
659
}
645
660
646
661
PushFullScreenDebugTexture ( renderGraph , result , transparent ? FullScreenDebugMode . TransparentScreenSpaceReflections : FullScreenDebugMode . ScreenSpaceReflections ) ;
0 commit comments