From 2a56ac8d5edc063108d174446a800e4a0e637014 Mon Sep 17 00:00:00 2001 From: AD Date: Sat, 29 May 2021 18:32:39 +0300 Subject: [PATCH 1/2] Update HDRenderPipeline.PostProcess.cs motion vector for custom post processing. while render graph is enabled. --- .../HDRenderPipeline.PostProcess.cs | 21 ++++++++++++------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/HDRenderPipeline.PostProcess.cs b/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/HDRenderPipeline.PostProcess.cs index ad8e099a51c..401bc6e0144 100644 --- a/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/HDRenderPipeline.PostProcess.cs +++ b/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/HDRenderPipeline.PostProcess.cs @@ -449,7 +449,7 @@ TextureHandle RenderPostProcess(RenderGraph renderGraph, SetCurrentResolutionGroup(renderGraph, hdCamera, ResolutionGroup.AfterDynamicResUpscale); } - source = CustomPostProcessPass(renderGraph, hdCamera, source, depthBuffer, normalBuffer, m_GlobalSettings.beforeTAACustomPostProcesses, HDProfileId.CustomPostProcessBeforeTAA); + source = CustomPostProcessPass(renderGraph, hdCamera, source, depthBuffer, normalBuffer, motionVectors, m_GlobalSettings.beforeTAACustomPostProcesses, HDProfileId.CustomPostProcessBeforeTAA); // Temporal anti-aliasing goes first if (m_AntialiasingFS) @@ -464,7 +464,7 @@ TextureHandle RenderPostProcess(RenderGraph renderGraph, } } - source = CustomPostProcessPass(renderGraph, hdCamera, source, depthBuffer, normalBuffer, m_GlobalSettings.beforePostProcessCustomPostProcesses, HDProfileId.CustomPostProcessBeforePP); + source = CustomPostProcessPass(renderGraph, hdCamera, source, depthBuffer, normalBuffer, motionVectors, m_GlobalSettings.beforePostProcessCustomPostProcesses, HDProfileId.CustomPostProcessBeforePP); source = DepthOfFieldPass(renderGraph, hdCamera, depthBuffer, motionVectors, depthBufferMipChain, source); @@ -483,7 +483,7 @@ TextureHandle RenderPostProcess(RenderGraph renderGraph, source = UberPass(renderGraph, hdCamera, logLutOutput, bloomTexture, source); PushFullScreenDebugTexture(renderGraph, source, hdCamera.postProcessRTScales, FullScreenDebugMode.ColorLog); - source = CustomPostProcessPass(renderGraph, hdCamera, source, depthBuffer, normalBuffer, m_GlobalSettings.afterPostProcessCustomPostProcesses, HDProfileId.CustomPostProcessAfterPP); + source = CustomPostProcessPass(renderGraph, hdCamera, source, depthBuffer, normalBuffer, motionVectors, m_GlobalSettings.afterPostProcessCustomPostProcesses, HDProfileId.CustomPostProcessAfterPP); source = LensFlareDataDrivenPass(renderGraph, hdCamera, source); @@ -1222,7 +1222,7 @@ TextureHandle DynamicExposurePass(RenderGraph renderGraph, HDCamera hdCamera, Te #endregion #region Custom Post Process - void DoUserAfterOpaqueAndSky(RenderGraph renderGraph, HDCamera hdCamera, TextureHandle colorBuffer, TextureHandle depthBuffer, TextureHandle normalBuffer) + void DoUserAfterOpaqueAndSky(RenderGraph renderGraph, HDCamera hdCamera, TextureHandle colorBuffer, TextureHandle depthBuffer, TextureHandle normalBuffer,TextureHandle motionVectors) { if (!hdCamera.frameSettings.IsEnabled(FrameSettingsField.CustomPostProcess)) return; @@ -1230,7 +1230,7 @@ void DoUserAfterOpaqueAndSky(RenderGraph renderGraph, HDCamera hdCamera, Texture using (new RenderGraphProfilingScope(renderGraph, ProfilingSampler.Get(HDProfileId.CustomPostProcessAfterOpaqueAndSky))) { TextureHandle source = colorBuffer; - bool needBlitToColorBuffer = DoCustomPostProcess(renderGraph, hdCamera, ref source, depthBuffer, normalBuffer, m_GlobalSettings.beforeTransparentCustomPostProcesses); + bool needBlitToColorBuffer = DoCustomPostProcess(renderGraph, hdCamera, ref source, depthBuffer, normalBuffer, motionVectors, m_GlobalSettings.beforeTransparentCustomPostProcesses); if (needBlitToColorBuffer) { @@ -1245,11 +1245,12 @@ class CustomPostProcessData public TextureHandle destination; public TextureHandle depthBuffer; public TextureHandle normalBuffer; + public TextureHandle motionVecTexture; public HDCamera hdCamera; public CustomPostProcessVolumeComponent customPostProcess; } - bool DoCustomPostProcess(RenderGraph renderGraph, HDCamera hdCamera, ref TextureHandle source, TextureHandle depthBuffer, TextureHandle normalBuffer, List postProcessList) + bool DoCustomPostProcess(RenderGraph renderGraph, HDCamera hdCamera, ref TextureHandle source, TextureHandle depthBuffer, TextureHandle normalBuffer, TextureHandle motionVectors, List postProcessList) { bool customPostProcessExecuted = false; foreach (var typeString in postProcessList) @@ -1276,6 +1277,8 @@ bool DoCustomPostProcess(RenderGraph renderGraph, HDCamera hdCamera, ref Texture // Until we can upgrade CustomPP to be full render graph, we'll always read and bind them globally. passData.depthBuffer = builder.ReadTexture(depthBuffer); passData.normalBuffer = builder.ReadTexture(normalBuffer); + passData.motionVecTexture = builder.ReadTexture(motionVectors); + passData.source = builder.ReadTexture(source); passData.destination = builder.UseColorBuffer(renderGraph.CreateTexture(new TextureDesc(Vector2.one, true, true) @@ -1288,6 +1291,8 @@ bool DoCustomPostProcess(RenderGraph renderGraph, HDCamera hdCamera, ref Texture // Temporary: see comment above ctx.cmd.SetGlobalTexture(HDShaderIDs._CameraDepthTexture, data.depthBuffer); ctx.cmd.SetGlobalTexture(HDShaderIDs._NormalBufferTexture, data.normalBuffer); + ctx.cmd.SetGlobalTexture(HDShaderIDs._CameraMotionVectorsTexture, data.motionVecTexture); + data.customPostProcess.Render(ctx.cmd, data.hdCamera, data.source, data.destination); }); @@ -1303,14 +1308,14 @@ bool DoCustomPostProcess(RenderGraph renderGraph, HDCamera hdCamera, ref Texture return customPostProcessExecuted; } - TextureHandle CustomPostProcessPass(RenderGraph renderGraph, HDCamera hdCamera, TextureHandle source, TextureHandle depthBuffer, TextureHandle normalBuffer, List postProcessList, HDProfileId profileId) + TextureHandle CustomPostProcessPass(RenderGraph renderGraph, HDCamera hdCamera, TextureHandle source, TextureHandle depthBuffer, TextureHandle normalBuffer, TextureHandle motionVectors, List postProcessList, HDProfileId profileId) { if (!hdCamera.frameSettings.IsEnabled(FrameSettingsField.CustomPostProcess)) return source; using (new RenderGraphProfilingScope(renderGraph, ProfilingSampler.Get(profileId))) { - DoCustomPostProcess(renderGraph, hdCamera, ref source, depthBuffer, normalBuffer, postProcessList); + DoCustomPostProcess(renderGraph, hdCamera, ref source, depthBuffer, normalBuffer, motionVectors, postProcessList); } return source; From 639fa23ac22840905c562f2f3d77556b76b1a534 Mon Sep 17 00:00:00 2001 From: AD Date: Sat, 29 May 2021 20:19:44 +0300 Subject: [PATCH 2/2] Update HDRenderPipeline.RenderGraph.cs added render graph "prepassOutput.motionVectorsBuffer" --- .../Runtime/RenderPipeline/HDRenderPipeline.RenderGraph.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/HDRenderPipeline.RenderGraph.cs b/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/HDRenderPipeline.RenderGraph.cs index bdef858a75e..a132e822952 100644 --- a/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/HDRenderPipeline.RenderGraph.cs +++ b/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/HDRenderPipeline.RenderGraph.cs @@ -181,7 +181,7 @@ void RecordRenderGraph(RenderRequest renderRequest, // Send all the geometry graphics buffer to client systems if required (must be done after the pyramid and before the transparent depth pre-pass) SendGeometryGraphicsBuffers(m_RenderGraph, prepassOutput.normalBuffer, prepassOutput.depthPyramidTexture, hdCamera); - DoUserAfterOpaqueAndSky(m_RenderGraph, hdCamera, colorBuffer, prepassOutput.resolvedDepthBuffer, prepassOutput.resolvedNormalBuffer); + DoUserAfterOpaqueAndSky(m_RenderGraph, hdCamera, colorBuffer, prepassOutput.resolvedDepthBuffer, prepassOutput.resolvedNormalBuffer,prepassOutput.resolvedMotionVectorsBuffer); // No need for old stencil values here since from transparent on different features are tagged ClearStencilBuffer(m_RenderGraph, hdCamera, prepassOutput.depthBuffer);