diff --git a/com.unity.render-pipelines.high-definition/CHANGELOG.md b/com.unity.render-pipelines.high-definition/CHANGELOG.md index d733df638cf..4f3460bf493 100644 --- a/com.unity.render-pipelines.high-definition/CHANGELOG.md +++ b/com.unity.render-pipelines.high-definition/CHANGELOG.md @@ -19,6 +19,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. - Volume parameter of type Cubemap can now accept Cubemap render textures and custom render textures. - Removed the superior clamping value for the recursive rendering max ray length. - Removed the superior clamping value for the ray tracing light cluster size. +- Now reflection probes cannot have SSAO, SSGI, SSR, ray tracing effects or volumetric reprojection. ## [10.3.0] - 2020-12-01 diff --git a/com.unity.render-pipelines.high-definition/Documentation~/Override-Ambient-Occlusion.md b/com.unity.render-pipelines.high-definition/Documentation~/Override-Ambient-Occlusion.md index b82cb756437..108a952bb0e 100644 --- a/com.unity.render-pipelines.high-definition/Documentation~/Override-Ambient-Occlusion.md +++ b/com.unity.render-pipelines.high-definition/Documentation~/Override-Ambient-Occlusion.md @@ -74,3 +74,4 @@ The properties visible in the Inspector change depending on whether or not you e ### Screen-space ambient occlusion A screen-space effect only processes what is on the screen at a given point in time. This means that objects outside of the field of view cannot visually occlude objects in the view. You can sometimes see this on the edges of the screen. +When rendering [Reflection Probes](Reflection-Probe.md) screen space ambient occlusion is not supported. \ No newline at end of file diff --git a/com.unity.render-pipelines.high-definition/Documentation~/Override-Screen-Space-GI.md b/com.unity.render-pipelines.high-definition/Documentation~/Override-Screen-Space-GI.md index 1f33e1045f9..eb9e1344ed8 100644 --- a/com.unity.render-pipelines.high-definition/Documentation~/Override-Screen-Space-GI.md +++ b/com.unity.render-pipelines.high-definition/Documentation~/Override-Screen-Space-GI.md @@ -70,3 +70,4 @@ The properties visible in the Inspector change depending on whether or not you e ### Ray-traced global illumination Currently, ray tracing in HDRP does not support [decals](decal.md). This means that ray-traced global illumination does not affect decals in your Scene. +When rendering [Reflection Probes](Reflection-Probe.md) screen space global illumination is not supported. \ No newline at end of file diff --git a/com.unity.render-pipelines.high-definition/Documentation~/Ray-Tracing-Getting-Started.md b/com.unity.render-pipelines.high-definition/Documentation~/Ray-Tracing-Getting-Started.md index e44b00db389..75295dd7393 100644 --- a/com.unity.render-pipelines.high-definition/Documentation~/Ray-Tracing-Getting-Started.md +++ b/com.unity.render-pipelines.high-definition/Documentation~/Ray-Tracing-Getting-Started.md @@ -219,6 +219,7 @@ HDRP ray tracing in Unity 2020.2 has the following limitations: - Does not support MSAA. - For renderers that have [LODs](https://docs.unity3d.com/2019.3/Documentation/Manual/LevelOfDetail.html), the ray tracing acceleration structure only includes the highest level LOD and ignores the lower LODs. - Does not support [Graphics.DrawMesh](https://docs.unity3d.com/ScriptReference/Graphics.DrawMesh.html). +- Ray tracing is not supported when rendering [Reflection Probes](Reflection-Probe.md). ## Unsupported features of path tracing diff --git a/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/Settings/FrameSettings.cs b/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/Settings/FrameSettings.cs index 0896dc0db4a..b5f172cc712 100644 --- a/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/Settings/FrameSettings.cs +++ b/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/Settings/FrameSettings.cs @@ -737,6 +737,7 @@ internal static void Sanitize(ref FrameSettings sanitizedFrameSettings, Camera c bool reflectionPlanar = GeometryUtils.IsProjectionMatrixOblique(camera.projectionMatrix); bool preview = HDUtils.IsRegularPreviewCamera(camera); bool sceneViewFog = CoreUtils.IsSceneViewFogEnabled(camera); + bool temporalAccumulationAllowed = (!reflection || (reflection && reflectionPlanar)); switch (renderPipelineSettings.supportedLitShaderMode) { @@ -756,7 +757,8 @@ internal static void Sanitize(ref FrameSettings sanitizedFrameSettings, Camera c sanitizedFrameSettings.bitDatas[(int)FrameSettingsField.ContactShadows] &= !preview; sanitizedFrameSettings.bitDatas[(int)FrameSettingsField.ScreenSpaceShadows] &= renderPipelineSettings.hdShadowInitParams.supportScreenSpaceShadows && sanitizedFrameSettings.bitDatas[(int)FrameSettingsField.OpaqueObjects]; bool pipelineSupportsRayTracing = HDRenderPipeline.GatherRayTracingSupport(renderPipelineSettings); - bool rayTracingActive = sanitizedFrameSettings.bitDatas[(int)FrameSettingsField.RayTracing] &= pipelineSupportsRayTracing && !preview; + // Ray tracing effects are not allowed on reflection probes due to the accumulation process. + bool rayTracingActive = sanitizedFrameSettings.bitDatas[(int)FrameSettingsField.RayTracing] &= pipelineSupportsRayTracing && !preview && temporalAccumulationAllowed; //MSAA only supported in forward // TODO: The work will be implemented piecemeal to support all passes @@ -764,11 +766,12 @@ internal static void Sanitize(ref FrameSettings sanitizedFrameSettings, Camera c sanitizedFrameSettings.bitDatas[(int)FrameSettingsField.AlphaToMask] &= msaa; // No recursive reflections - bool ssr = sanitizedFrameSettings.bitDatas[(int)FrameSettingsField.SSR] &= renderPipelineSettings.supportSSR && !msaa && !preview; + bool ssr = sanitizedFrameSettings.bitDatas[(int)FrameSettingsField.SSR] &= renderPipelineSettings.supportSSR && !msaa && !preview && temporalAccumulationAllowed; sanitizedFrameSettings.bitDatas[(int)FrameSettingsField.TransparentSSR] &= ssr && renderPipelineSettings.supportSSRTransparent && sanitizedFrameSettings.bitDatas[(int)FrameSettingsField.TransparentObjects]; sanitizedFrameSettings.bitDatas[(int)FrameSettingsField.Refraction] &= !preview; - sanitizedFrameSettings.bitDatas[(int)FrameSettingsField.SSAO] &= renderPipelineSettings.supportSSAO && !preview && sanitizedFrameSettings.bitDatas[(int)FrameSettingsField.OpaqueObjects]; - sanitizedFrameSettings.bitDatas[(int)FrameSettingsField.SSGI] &= renderPipelineSettings.supportSSGI && !preview && sanitizedFrameSettings.bitDatas[(int)FrameSettingsField.OpaqueObjects]; + // Because the camera is shared between the faces of the reflection probes, we cannot allow effects that rely on the accumulation process + sanitizedFrameSettings.bitDatas[(int)FrameSettingsField.SSAO] &= renderPipelineSettings.supportSSAO && !preview && sanitizedFrameSettings.bitDatas[(int)FrameSettingsField.OpaqueObjects] && temporalAccumulationAllowed; + sanitizedFrameSettings.bitDatas[(int)FrameSettingsField.SSGI] &= renderPipelineSettings.supportSSGI && !preview && sanitizedFrameSettings.bitDatas[(int)FrameSettingsField.OpaqueObjects] && temporalAccumulationAllowed; sanitizedFrameSettings.bitDatas[(int)FrameSettingsField.SubsurfaceScattering] &= renderPipelineSettings.supportSubsurfaceScattering; // We must take care of the scene view fog flags in the editor @@ -776,7 +779,7 @@ internal static void Sanitize(ref FrameSettings sanitizedFrameSettings, Camera c // Volumetric are disabled if there is no atmospheric scattering sanitizedFrameSettings.bitDatas[(int)FrameSettingsField.Volumetrics] &= renderPipelineSettings.supportVolumetrics && atmosphericScattering; //&& !preview induced by atmospheric scattering - sanitizedFrameSettings.bitDatas[(int)FrameSettingsField.ReprojectionForVolumetrics] &= !preview; + sanitizedFrameSettings.bitDatas[(int)FrameSettingsField.ReprojectionForVolumetrics] &= !preview && temporalAccumulationAllowed; sanitizedFrameSettings.bitDatas[(int)FrameSettingsField.LightLayers] &= renderPipelineSettings.supportLightLayers && !preview; // We allow the user to enable exposure control on planar reflections, but not on reflection probes.