diff --git a/com.unity.render-pipelines.high-definition/CHANGELOG.md b/com.unity.render-pipelines.high-definition/CHANGELOG.md index 7e1658c7a3f..37a4880ff32 100644 --- a/com.unity.render-pipelines.high-definition/CHANGELOG.md +++ b/com.unity.render-pipelines.high-definition/CHANGELOG.md @@ -67,6 +67,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. - Fixed nullref when adding a volume component in a Volume profile asset (case 1317156). - Fixed decal normal for double sided materials (case 1312065). - Fixed multiple HDRP Frame Settings panel issues: missing "Refraction" Frame Setting. Fixing ordering of Rough Distortion, it should now be under the Distortion setting. +- Fixed Rough Distortion frame setting not greyed out when Distortion is disabled in HDRP Asset - Fixed issue with automatic exposure settings not updating scene view. - Fixed issue with velocity rejection in post-DoF TAA. Fixing this reduces ghosting (case 1304381). - Fixed missing option to use POM on emissive for tessellated shaders. @@ -75,6 +76,10 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. - Fixed a limit case when the camera is exactly at the lower cloud level (case 1316988). - Fixed the various history buffers being discarded when the fog was enabled/disabled (case 1316072). - Fixed resize IES when already baked in the Atlas 1299233 +- Fixed ability to override AlphaToMask FrameSetting while camera in deferred lit shader mode +- Fixed issue with physically-based DoF computation and transparent materials with depth-writes ON. +- Fixed issue of accessing default frame setting stored in current HDRPAsset instead fo the default HDRPAsset +- Fixed SSGI frame setting not greyed out while SSGI is disabled in HDRP Asset ### Changed - Changed Window/Render Pipeline/HD Render Pipeline Wizard to Window/Rendering/HDRP Wizard diff --git a/com.unity.render-pipelines.high-definition/Editor/RenderPipeline/Settings/FrameSettingsUI.Drawers.cs b/com.unity.render-pipelines.high-definition/Editor/RenderPipeline/Settings/FrameSettingsUI.Drawers.cs index 9c856cf1e03..374f1d2b39e 100644 --- a/com.unity.render-pipelines.high-definition/Editor/RenderPipeline/Settings/FrameSettingsUI.Drawers.cs +++ b/com.unity.render-pipelines.high-definition/Editor/RenderPipeline/Settings/FrameSettingsUI.Drawers.cs @@ -135,7 +135,8 @@ static HDRenderPipelineAsset GetHDRPAssetFor(Editor owner) static FrameSettings GetDefaultFrameSettingsFor(Editor owner) { - HDRenderPipelineAsset hdrpAsset = GetHDRPAssetFor(owner); + HDRenderPipelineAsset hdrpAsset = HDRenderPipeline.defaultAsset; + return owner is IDefaultFrameSettingsType getType ? hdrpAsset.GetDefaultFrameSettings(getType.GetFrameSettingsType()) : hdrpAsset.GetDefaultFrameSettings(FrameSettingsRenderType.Camera); @@ -183,59 +184,26 @@ static void Drawer_SectionRenderingSettings(SerializedFrameSettings serialized, bool msaaEnablable = hdrpSettings.supportMSAA && ((hdrpAssetSupportForward && (frameSettingsOverrideToForward || defaultForwardUsed)) || hdrpAssetIsForward) && !hdrpSettings.supportRayTracing; area.AmmendInfo(FrameSettingsField.MSAA, overrideable: () => msaaEnablable, - overridedDefaultValue: msaaEnablable && defaultFrameSettings.IsEnabled(FrameSettingsField.MSAA), - customOverrideable: () => - { - switch (hdrpSettings.supportedLitShaderMode) - { - case RenderPipelineSettings.SupportedLitShaderMode.ForwardOnly: - return false; //negative dependency - case RenderPipelineSettings.SupportedLitShaderMode.DeferredOnly: - return true; //negative dependency - case RenderPipelineSettings.SupportedLitShaderMode.Both: - return !(frameSettingsOverrideToForward || defaultForwardUsed); //negative dependency - default: - throw new System.ArgumentOutOfRangeException("Unknown ShaderLitMode"); - } - }); + ignoreDependencies: true, + overridedDefaultValue: msaaEnablable && defaultFrameSettings.IsEnabled(FrameSettingsField.MSAA)); + + bool msaaIsOff = (msaaEnablable && serialized.GetOverrides(FrameSettingsField.MSAA)) ? !(serialized.IsEnabled(FrameSettingsField.MSAA) ?? false) : !defaultFrameSettings.IsEnabled(FrameSettingsField.MSAA); + area.AmmendInfo(FrameSettingsField.AlphaToMask, + overrideable: () => msaaEnablable && !msaaIsOff, + ignoreDependencies: true, + overridedDefaultValue: msaaEnablable && defaultFrameSettings.IsEnabled(FrameSettingsField.AlphaToMask) && !msaaIsOff); bool depthPrepassEnablable = (hdrpAssetSupportDeferred && (defaultDeferredUsed || frameSettingsOverrideToDeferred)) || (hdrpAssetIsDeferred); area.AmmendInfo(FrameSettingsField.DepthPrepassWithDeferredRendering, overrideable: () => depthPrepassEnablable, - overridedDefaultValue: depthPrepassEnablable && defaultFrameSettings.IsEnabled(FrameSettingsField.DepthPrepassWithDeferredRendering), - customOverrideable: () => - { - switch (hdrpSettings.supportedLitShaderMode) - { - case RenderPipelineSettings.SupportedLitShaderMode.ForwardOnly: - return false; - case RenderPipelineSettings.SupportedLitShaderMode.DeferredOnly: - return true; - case RenderPipelineSettings.SupportedLitShaderMode.Both: - return frameSettingsOverrideToDeferred || defaultDeferredUsed; - default: - throw new System.ArgumentOutOfRangeException("Unknown ShaderLitMode"); - } - }); + ignoreDependencies: true, + overridedDefaultValue: depthPrepassEnablable && defaultFrameSettings.IsEnabled(FrameSettingsField.DepthPrepassWithDeferredRendering)); bool clearGBufferEnablable = (hdrpAssetSupportDeferred && (defaultDeferredUsed || frameSettingsOverrideToDeferred)) || (hdrpAssetIsDeferred); area.AmmendInfo(FrameSettingsField.ClearGBuffers, overrideable: () => clearGBufferEnablable, - overridedDefaultValue: clearGBufferEnablable && defaultFrameSettings.IsEnabled(FrameSettingsField.ClearGBuffers), - customOverrideable: () => - { - switch (hdrpSettings.supportedLitShaderMode) - { - case RenderPipelineSettings.SupportedLitShaderMode.ForwardOnly: - return false; - case RenderPipelineSettings.SupportedLitShaderMode.DeferredOnly: - return true; - case RenderPipelineSettings.SupportedLitShaderMode.Both: - return frameSettingsOverrideToDeferred || defaultDeferredUsed; - default: - throw new System.ArgumentOutOfRangeException("Unknown ShaderLitMode"); - } - }); + ignoreDependencies: true, + overridedDefaultValue: clearGBufferEnablable && defaultFrameSettings.IsEnabled(FrameSettingsField.ClearGBuffers)); area.AmmendInfo(FrameSettingsField.RayTracing, overrideable: () => hdrpSettings.supportRayTracing); #if !ENABLE_VIRTUALTEXTURES @@ -247,6 +215,7 @@ static void Drawer_SectionRenderingSettings(SerializedFrameSettings serialized, area.AmmendInfo(FrameSettingsField.Decals, overrideable: () => hdrpSettings.supportDecals); area.AmmendInfo(FrameSettingsField.DecalLayers, overrideable: () => hdrpSettings.supportDecalLayers); area.AmmendInfo(FrameSettingsField.Distortion, overrideable: () => hdrpSettings.supportDistortion); + area.AmmendInfo(FrameSettingsField.RoughDistortion, overrideable: () => hdrpSettings.supportDistortion); area.AmmendInfo(FrameSettingsField.Postprocess, overrideable: () => (frameSettingType != FrameSettingsRenderType.CustomOrBakedReflection && frameSettingType != FrameSettingsRenderType.RealtimeReflection)); @@ -262,14 +231,16 @@ static void Drawer_SectionRenderingSettings(SerializedFrameSettings serialized, overridedDefaultValue: ScalableLevel3ForFrameSettingsUIOnly.Low, customGetter: () => (ScalableLevel3ForFrameSettingsUIOnly)serialized.lodBiasQualityLevel.intValue, customSetter: v => serialized.lodBiasQualityLevel.intValue = (int)v, - customOverrideable: () => serialized.lodBiasMode.GetEnumValue() != LODBiasMode.OverrideQualitySettings, + overrideable: () => serialized.lodBiasMode.GetEnumValue() != LODBiasMode.OverrideQualitySettings, + ignoreDependencies: true, hasMixedValues: serialized.lodBiasQualityLevel.hasMultipleDifferentValues); area.AmmendInfo(FrameSettingsField.LODBias, overridedDefaultValue: hdrpSettings.lodBias[serialized.lodBiasQualityLevel.intValue], customGetter: () => serialized.lodBias.floatValue, customSetter: v => serialized.lodBias.floatValue = (float)v, - customOverrideable: () => serialized.lodBiasMode.GetEnumValue() != LODBiasMode.FromQualitySettings, + overrideable: () => serialized.lodBiasMode.GetEnumValue() != LODBiasMode.FromQualitySettings, + ignoreDependencies: true, labelOverride: serialized.lodBiasMode.GetEnumValue() == LODBiasMode.ScaleQualitySettings ? "Scale Factor" : "LOD Bias", hasMixedValues: serialized.lodBias.hasMultipleDifferentValues); @@ -284,14 +255,16 @@ static void Drawer_SectionRenderingSettings(SerializedFrameSettings serialized, overridedDefaultValue: ScalableLevel3ForFrameSettingsUIOnly.Low, customGetter: () => (ScalableLevel3ForFrameSettingsUIOnly)serialized.maximumLODLevelQualityLevel.intValue, customSetter: v => serialized.maximumLODLevelQualityLevel.intValue = (int)v, - customOverrideable: () => serialized.maximumLODLevelMode.GetEnumValue() != MaximumLODLevelMode.OverrideQualitySettings, + overrideable: () => serialized.maximumLODLevelMode.GetEnumValue() != MaximumLODLevelMode.OverrideQualitySettings, + ignoreDependencies: true, hasMixedValues: serialized.maximumLODLevelQualityLevel.hasMultipleDifferentValues); area.AmmendInfo(FrameSettingsField.MaximumLODLevel, overridedDefaultValue: hdrpSettings.maximumLODLevel[serialized.maximumLODLevelQualityLevel.intValue], customGetter: () => serialized.maximumLODLevel.intValue, customSetter: v => serialized.maximumLODLevel.intValue = (int)v, - customOverrideable: () => serialized.maximumLODLevelMode.GetEnumValue() != MaximumLODLevelMode.FromQualitySettings, + overrideable: () => serialized.maximumLODLevelMode.GetEnumValue() != MaximumLODLevelMode.FromQualitySettings, + ignoreDependencies: true, labelOverride: serialized.maximumLODLevelMode.GetEnumValue() == MaximumLODLevelMode.OffsetQualitySettings ? "Offset Factor" : "Maximum LOD Level", hasMixedValues: serialized.maximumLODLevel.hasMultipleDifferentValues); @@ -323,6 +296,7 @@ static void Drawer_SectionLightingSettings(SerializedFrameSettings serialized, E area.AmmendInfo(FrameSettingsField.SSR, overrideable: () => hdrpSettings.supportSSR); area.AmmendInfo(FrameSettingsField.TransparentSSR, overrideable: () => (hdrpSettings.supportSSR && hdrpSettings.supportSSRTransparent)); area.AmmendInfo(FrameSettingsField.SSAO, overrideable: () => hdrpSettings.supportSSAO); + area.AmmendInfo(FrameSettingsField.SSGI, overrideable: () => hdrpSettings.supportSSGI); area.AmmendInfo(FrameSettingsField.VolumetricClouds, overrideable: () => hdrpSettings.supportVolumetricClouds); // SSS @@ -336,26 +310,29 @@ static void Drawer_SectionLightingSettings(SerializedFrameSettings serialized, E overridedDefaultValue: SssQualityMode.FromQualitySettings, customGetter: () => serialized.sssQualityMode.GetEnumValue(), customSetter: v => serialized.sssQualityMode.SetEnumValue((SssQualityMode)v), - customOverrideable: () => hdrpSettings.supportSubsurfaceScattering + overrideable: () => hdrpSettings.supportSubsurfaceScattering && (serialized.IsEnabled(FrameSettingsField.SubsurfaceScattering) ?? false), + ignoreDependencies: true, hasMixedValues: serialized.sssQualityMode.hasMultipleDifferentValues ); area.AmmendInfo(FrameSettingsField.SssQualityLevel, overridedDefaultValue: ScalableLevel3ForFrameSettingsUIOnly.Low, customGetter: () => (ScalableLevel3ForFrameSettingsUIOnly)serialized.sssQualityLevel.intValue, // 3 levels customSetter: v => serialized.sssQualityLevel.intValue = Math.Max(0, Math.Min((int)v, 2)), // Levels 0-2 - customOverrideable: () => hdrpSettings.supportSubsurfaceScattering + overrideable: () => hdrpSettings.supportSubsurfaceScattering && (serialized.IsEnabled(FrameSettingsField.SubsurfaceScattering) ?? false) && (serialized.sssQualityMode.GetEnumValue() == SssQualityMode.FromQualitySettings), + ignoreDependencies: true, hasMixedValues: serialized.sssQualityLevel.hasMultipleDifferentValues ); area.AmmendInfo(FrameSettingsField.SssCustomSampleBudget, overridedDefaultValue: (int)DefaultSssSampleBudgetForQualityLevel.Low, customGetter: () => serialized.sssCustomSampleBudget.intValue, customSetter: v => serialized.sssCustomSampleBudget.intValue = Math.Max(1, Math.Min((int)v, (int)DefaultSssSampleBudgetForQualityLevel.Max)), - customOverrideable: () => hdrpSettings.supportSubsurfaceScattering + overrideable: () => hdrpSettings.supportSubsurfaceScattering && (serialized.IsEnabled(FrameSettingsField.SubsurfaceScattering) ?? false) && (serialized.sssQualityMode.GetEnumValue() != SssQualityMode.FromQualitySettings), + ignoreDependencies: true, hasMixedValues: serialized.sssCustomSampleBudget.hasMultipleDifferentValues ); diff --git a/com.unity.render-pipelines.high-definition/Editor/RenderPipeline/Settings/OverridableFrameSettingsArea.cs b/com.unity.render-pipelines.high-definition/Editor/RenderPipeline/Settings/OverridableFrameSettingsArea.cs index 5d4fe2acc5e..43a566f3cb2 100644 --- a/com.unity.render-pipelines.high-definition/Editor/RenderPipeline/Settings/OverridableFrameSettingsArea.cs +++ b/com.unity.render-pipelines.high-definition/Editor/RenderPipeline/Settings/OverridableFrameSettingsArea.cs @@ -42,7 +42,7 @@ private struct Field { public FrameSettingsField field; public Func overrideable; - public Func customOverrideable; + public bool ignoreDependencies; public Func customGetter; public Action customSetter; public object overridedDefaultValue; @@ -60,7 +60,7 @@ public bool IsOverrideableWithDependencies(SerializedFrameSettings serialized, F FrameSettingsFieldAttribute attribute = attributes[field]; bool locallyOverrideable = overrideable == null || overrideable(); FrameSettingsField[] dependencies = attribute.dependencies; - if (dependencies == null || !locallyOverrideable) + if (dependencies == null || ignoreDependencies || !locallyOverrideable) return locallyOverrideable; bool dependenciesOverrideable = true; @@ -96,7 +96,7 @@ public static OverridableFrameSettingsArea GetGroupContent(int groupIndex, Frame return area; } - public void AmmendInfo(FrameSettingsField field, Func overrideable = null, Func customGetter = null, Action customSetter = null, object overridedDefaultValue = null, Func customOverrideable = null, string labelOverride = null, bool hasMixedValues = false) + public void AmmendInfo(FrameSettingsField field, Func overrideable = null, bool ignoreDependencies = false, Func customGetter = null, Action customSetter = null, object overridedDefaultValue = null, string labelOverride = null, bool hasMixedValues = false) { var matchIndex = fields.FindIndex(f => f.field == field); @@ -106,8 +106,7 @@ public void AmmendInfo(FrameSettingsField field, Func overrideable = null, var match = fields[matchIndex]; if (overrideable != null) match.overrideable = overrideable; - if (customOverrideable != null) - match.customOverrideable = customOverrideable; + match.ignoreDependencies = ignoreDependencies; if (customGetter != null) match.customGetter = customGetter; if (customSetter != null) @@ -123,9 +122,6 @@ public void AmmendInfo(FrameSettingsField field, Func overrideable = null, static bool EvaluateBoolWithOverride(FrameSettingsField field, Field forField, FrameSettings defaultFrameSettings, SerializedFrameSettings serializedFrameSettings, bool negative) { bool value; - if (forField.customOverrideable != null) - return forField.customOverrideable() ^ negative; - if (serializedFrameSettings.GetOverrides(field)) value = serializedFrameSettings.IsEnabled(field) ?? false; else diff --git a/com.unity.render-pipelines.high-definition/Runtime/PostProcessing/PostProcessSystem.RenderGraph.cs b/com.unity.render-pipelines.high-definition/Runtime/PostProcessing/PostProcessSystem.RenderGraph.cs index 80020d87690..7012272a35f 100644 --- a/com.unity.render-pipelines.high-definition/Runtime/PostProcessing/PostProcessSystem.RenderGraph.cs +++ b/com.unity.render-pipelines.high-definition/Runtime/PostProcessing/PostProcessSystem.RenderGraph.cs @@ -1059,7 +1059,7 @@ TextureHandle DepthOfFieldPass(RenderGraph renderGraph, HDCamera hdCamera, Textu builder.SetRenderFunc( (DepthofFieldData data, RenderGraphContext ctx) => { - DoPhysicallyBasedDepthOfField(data.parameters, ctx.cmd, data.source, data.destination, data.fullresCoC, data.prevCoC, data.nextCoC, data.motionVecTexture, data.pingFarRGB, data.taaEnabled); + DoPhysicallyBasedDepthOfField(data.parameters, ctx.cmd, data.source, data.destination, data.fullresCoC, data.prevCoC, data.nextCoC, data.motionVecTexture, data.pingFarRGB, data.depthBuffer, data.taaEnabled); }); source = passData.destination; diff --git a/com.unity.render-pipelines.high-definition/Runtime/PostProcessing/PostProcessSystem.cs b/com.unity.render-pipelines.high-definition/Runtime/PostProcessing/PostProcessSystem.cs index b49b9bf322c..d9d83a38f75 100644 --- a/com.unity.render-pipelines.high-definition/Runtime/PostProcessing/PostProcessSystem.cs +++ b/com.unity.render-pipelines.high-definition/Runtime/PostProcessing/PostProcessSystem.cs @@ -1421,7 +1421,7 @@ static void GetMipMapDimensions(RTHandle texture, int lod, out int width, out in } } - static void DoPhysicallyBasedDepthOfField(in DepthOfFieldParameters dofParameters, CommandBuffer cmd, RTHandle source, RTHandle destination, RTHandle fullresCoC, RTHandle prevCoCHistory, RTHandle nextCoCHistory, RTHandle motionVecTexture, RTHandle sourcePyramid, bool taaEnabled) + static void DoPhysicallyBasedDepthOfField(in DepthOfFieldParameters dofParameters, CommandBuffer cmd, RTHandle source, RTHandle destination, RTHandle fullresCoC, RTHandle prevCoCHistory, RTHandle nextCoCHistory, RTHandle motionVecTexture, RTHandle sourcePyramid, RTHandle depthBuffer, bool taaEnabled) { float scale = 1f / (float)dofParameters.resolution; int targetWidth = Mathf.RoundToInt(dofParameters.camera.actualWidth * scale); @@ -1471,6 +1471,7 @@ static void DoPhysicallyBasedDepthOfField(in DepthOfFieldParameters dofParameter cmd.SetComputeVectorParam(cs, HDShaderIDs._Params2, new Vector4(dofParameters.nearMaxBlur, dofParameters.farMaxBlur, 0, 0)); } + cmd.SetComputeTextureParam(cs, kernel, HDShaderIDs._CameraDepthTexture, depthBuffer); cmd.SetComputeTextureParam(cs, kernel, HDShaderIDs._OutputTexture, fullresCoC); cmd.DispatchCompute(cs, kernel, (dofParameters.camera.actualWidth + 7) / 8, (dofParameters.camera.actualHeight + 7) / 8, dofParameters.camera.viewCount); diff --git a/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/Raytracing/Shaders/RaytracingIntersection.hlsl b/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/Raytracing/Shaders/RaytracingIntersection.hlsl index a644452386c..45d9569c4bd 100644 --- a/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/Raytracing/Shaders/RaytracingIntersection.hlsl +++ b/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/Raytracing/Shaders/RaytracingIntersection.hlsl @@ -2,7 +2,7 @@ #define UNITY_RAYTRACING_INTERSECTION_INCLUDED // Engine includes -#include "UnityRaytracingMeshUtils.cginc" +#include "UnityRayTracingMeshUtils.cginc" // Raycone structure that defines the stateof the ray struct RayCone 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 4ed0c3a5d1e..14a38522bea 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 @@ -103,7 +103,7 @@ public enum FrameSettingsField [FrameSettingsField(0, displayedName: "MSAA within Forward", negativeDependencies: new[] { LitShaderMode }, customOrderInGroup: 3, tooltip: "When enabled, Cameras using these Frame Settings calculate MSAA when they render the Scene. Set Lit Shader Mode to Forward to access this option.")] MSAA = 31, /// When enabled, Cameras using these Frame Settings use Alpha To Mask. Activate MSAA to access this option. - [FrameSettingsField(0, displayedName: "Alpha To Mask", positiveDependencies: new[] { MSAA }, customOrderInGroup: 3, tooltip: "When enabled, Cameras using these Frame Settings use Alpha To Mask. Activate MSAA to access this option.")] + [FrameSettingsField(0, displayedName: "Alpha To Mask", negativeDependencies: new[] { LitShaderMode }, positiveDependencies: new[] { MSAA }, customOrderInGroup: 3, tooltip: "When enabled, Cameras using these Frame Settings use Alpha To Mask. Activate MSAA to access this option.")] AlphaToMask = 56, /// When enabled, Cameras using these Frame Settings render opaque GameObjects. [FrameSettingsField(0, autoName: OpaqueObjects, customOrderInGroup: 4, tooltip: "When enabled, Cameras using these Frame Settings render opaque GameObjects.")]