PrepassOutput RenderPrepass(RenderGraph renderGraph, RenderGraphMutableResource sssBuffer, CullingResults cullingResults, HDCamera hdCamera) { m_IsDepthBufferCopyValid = false; var result = new PrepassOutput(); result.gbuffer = m_GBufferOutput; result.dbuffer = m_DBufferOutput; bool msaa = hdCamera.frameSettings.IsEnabled(FrameSettingsField.MSAA); bool clearMotionVectors = hdCamera.camera.cameraType == CameraType.SceneView && !CoreUtils.AreAnimatedMaterialsEnabled(hdCamera.camera); // TODO: See how to clean this. Some buffers are created outside, some inside functions... result.motionVectorsBuffer = CreateMotionVectorBuffer(renderGraph, msaa, clearMotionVectors); result.depthBuffer = CreateDepthBuffer(renderGraph, msaa); RenderOcclusionMeshes(renderGraph, hdCamera, result.depthBuffer); StartSinglePass(renderGraph, hdCamera); bool renderMotionVectorAfterGBuffer = RenderDepthPrepass(renderGraph, cullingResults, hdCamera, ref result); if (!renderMotionVectorAfterGBuffer) { // If objects motion vectors are enabled, this will render the objects with motion vector into the target buffers (in addition to the depth) // Note: An object with motion vector must not be render in the prepass otherwise we can have motion vector write that should have been rejected RenderObjectsMotionVectors(renderGraph, cullingResults, hdCamera, result); } ResolveStencilBufferIfNeeded(renderGraph, hdCamera, ref result); // At this point in forward all objects have been rendered to the prepass (depth/normal/motion vectors) so we can resolve them ResolvePrepassBuffers(renderGraph, hdCamera, ref result); RenderDecals(renderGraph, hdCamera, ref result, cullingResults); RenderGBuffer(renderGraph, sssBuffer, ref result, cullingResults, hdCamera); // In both forward and deferred, everything opaque should have been rendered at this point so we can safely copy the depth buffer for later processing. GenerateDepthPyramid(renderGraph, hdCamera, ref result); if (renderMotionVectorAfterGBuffer) { // See the call RenderObjectsMotionVectors() above and comment RenderObjectsMotionVectors(renderGraph, cullingResults, hdCamera, result); } RenderCameraMotionVectors(renderGraph, hdCamera, result.depthPyramidTexture, result.resolvedMotionVectorsBuffer); result.stencilBuffer = msaa ? result.resolvedStencilBuffer : result.depthBuffer; StopSinglePass(renderGraph, hdCamera); return(result); }
PrepassOutput RenderPrepass(RenderGraph renderGraph, RenderGraphMutableResource sssBuffer, CullingResults cullingResults, HDCamera hdCamera) { m_IsDepthBufferCopyValid = false; var result = new PrepassOutput(); result.gbuffer = m_GBufferOutput; result.dbuffer = m_DBufferOutput; bool msaa = hdCamera.frameSettings.IsEnabled(FrameSettingsField.MSAA); bool clearMotionVectors = hdCamera.camera.cameraType == CameraType.SceneView && !CoreUtils.AreAnimatedMaterialsEnabled(hdCamera.camera); // TODO: See how to clean this. Some buffers are created outside, some inside functions... result.motionVectorsBuffer = CreateMotionVectorBuffer(renderGraph, msaa, clearMotionVectors); result.depthBuffer = CreateDepthBuffer(renderGraph, msaa); RenderXROcclusionMeshes(renderGraph, hdCamera, result.depthBuffer); using (new XRSinglePassScope(renderGraph, hdCamera)) { // TODO RENDERGRAPH //// Bind the custom color/depth before the first custom pass //if (hdCamera.frameSettings.IsEnabled(FrameSettingsField.CustomPass)) //{ // if (m_CustomPassColorBuffer.IsValueCreated) // cmd.SetGlobalTexture(HDShaderIDs._CustomColorTexture, m_CustomPassColorBuffer.Value); // if (m_CustomPassDepthBuffer.IsValueCreated) // cmd.SetGlobalTexture(HDShaderIDs._CustomDepthTexture, m_CustomPassDepthBuffer.Value); //} //RenderCustomPass(renderContext, cmd, hdCamera, customPassCullingResults, CustomPassInjectionPoint.BeforeRendering); bool renderMotionVectorAfterGBuffer = RenderDepthPrepass(renderGraph, cullingResults, hdCamera, ref result); if (!renderMotionVectorAfterGBuffer) { // If objects motion vectors are enabled, this will render the objects with motion vector into the target buffers (in addition to the depth) // Note: An object with motion vector must not be render in the prepass otherwise we can have motion vector write that should have been rejected RenderObjectsMotionVectors(renderGraph, cullingResults, hdCamera, result); } // TODO RENDERGRAPH //PreRenderSky(hdCamera, cmd); // At this point in forward all objects have been rendered to the prepass (depth/normal/motion vectors) so we can resolve them ResolvePrepassBuffers(renderGraph, hdCamera, ref result); RenderDecals(renderGraph, hdCamera, ref result, cullingResults); RenderGBuffer(renderGraph, sssBuffer, ref result, cullingResults, hdCamera); // TODO RENDERGRAPH //// After Depth and Normals/roughness including decals //RenderCustomPass(renderContext, cmd, hdCamera, customPassCullingResults, CustomPassInjectionPoint.AfterOpaqueDepthAndNormal); // In both forward and deferred, everything opaque should have been rendered at this point so we can safely copy the depth buffer for later processing. GenerateDepthPyramid(renderGraph, hdCamera, ref result); // TODO RENDERGRAPH //// 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(cmd, hdCamera); if (renderMotionVectorAfterGBuffer) { // See the call RenderObjectsMotionVectors() above and comment RenderObjectsMotionVectors(renderGraph, cullingResults, hdCamera, result); } RenderCameraMotionVectors(renderGraph, hdCamera, result.depthPyramidTexture, result.resolvedMotionVectorsBuffer); // TODO RENDERGRAPH //RenderTransparencyOverdraw(cullingResults, hdCamera, renderContext, cmd); ResolveStencilBufferIfNeeded(renderGraph, hdCamera, ref result); } return(result); }
LightingOutput RenderDeferredLighting(RenderGraph renderGraph, HDCamera hdCamera, RenderGraphMutableResource colorBuffer, RenderGraphResource depthStencilBuffer, RenderGraphResource depthPyramidTexture, in LightingBuffers lightingBuffers,
void RenderSubsurfaceScattering(RenderGraph renderGraph, HDCamera hdCamera, RenderGraphMutableResource colorBuffer, in LightingBuffers lightingBuffers, RenderGraphResource depthStencilBuffer, RenderGraphResource depthTexture)