diff --git a/com.unity.render-pipelines.high-definition/CHANGELOG.md b/com.unity.render-pipelines.high-definition/CHANGELOG.md index 8894bdd2505..d5526efa0ee 100644 --- a/com.unity.render-pipelines.high-definition/CHANGELOG.md +++ b/com.unity.render-pipelines.high-definition/CHANGELOG.md @@ -11,6 +11,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. - Added UV manipulation for Decals (edit mode). - Added color and intensity customization for Decals. - Added a history rejection criterion based on if the pixel was moving in world space (case 1302392). +- Added the default quality settings to the HDRP asset for RTAO, RTR and RTGI (case 1304370). ### Fixed diff --git a/com.unity.render-pipelines.high-definition/Editor/RenderPipeline/HDRenderPipelineUI.Skin.cs b/com.unity.render-pipelines.high-definition/Editor/RenderPipeline/HDRenderPipelineUI.Skin.cs index 60c9efe25b8..7f87546e022 100644 --- a/com.unity.render-pipelines.high-definition/Editor/RenderPipeline/HDRenderPipelineUI.Skin.cs +++ b/com.unity.render-pipelines.high-definition/Editor/RenderPipeline/HDRenderPipelineUI.Skin.cs @@ -64,6 +64,7 @@ public class GeneralSection public static readonly GUIContent dofPhysicallyBased = EditorGUIUtility.TrTextContent("Physically Based"); public static readonly GUIContent maxSamplesQuality = EditorGUIUtility.TrTextContent("Max Samples"); + // SSAO public static readonly GUIContent SSAOQualitySettingSubTitle = EditorGUIUtility.TrTextContent("Screen Space Ambient Occlusion"); public static readonly GUIContent AOStepCount = EditorGUIUtility.TrTextContent("Step Count"); public static readonly GUIContent AOFullRes = EditorGUIUtility.TrTextContent("Full Resolution"); @@ -71,12 +72,42 @@ public class GeneralSection public static readonly GUIContent AODirectionCount = EditorGUIUtility.TrTextContent("Direction Count"); public static readonly GUIContent AOBilateralUpsample = EditorGUIUtility.TrTextContent("Bilateral Upsample"); + // RTAO + public static readonly GUIContent RTAOQualitySettingSubTitle = EditorGUIUtility.TrTextContent("Ray Traced Ambient Occlusion"); + public static readonly GUIContent RTAORayLength = EditorGUIUtility.TrTextContent("Max Ray Length"); + public static readonly GUIContent RTAOSampleCount = EditorGUIUtility.TrTextContent("Sample Count"); + public static readonly GUIContent RTAODenoise = EditorGUIUtility.TrTextContent("Denoise"); + public static readonly GUIContent RTAODenoiserRadius = EditorGUIUtility.TrTextContent("Denoiser Radius"); + public static readonly GUIContent contactShadowsSettingsSubTitle = EditorGUIUtility.TrTextContent("Contact Shadows"); public static readonly GUIContent contactShadowsSampleCount = EditorGUIUtility.TrTextContent("Sample Count"); public static readonly GUIContent SSRSettingsSubTitle = EditorGUIUtility.TrTextContent("Screen Space Reflection"); public static readonly GUIContent SSRMaxRaySteps = EditorGUIUtility.TrTextContent("Max Ray Steps"); + // RTR + public static readonly GUIContent RTRSettingsSubTitle = EditorGUIUtility.TrTextContent("Ray Traced Reflections (Performance)"); + public static readonly GUIContent RTRMinSmoothness = EditorGUIUtility.TrTextContent("Minimum Smoothness"); + public static readonly GUIContent RTRSmoothnessFadeStart = EditorGUIUtility.TrTextContent("Smoothness Fade Start"); + public static readonly GUIContent RTRRayLength = EditorGUIUtility.TrTextContent("Max Ray Length"); + public static readonly GUIContent RTRClampValue = EditorGUIUtility.TrTextContent("Clamp Value"); + public static readonly GUIContent RTRFullResolution = EditorGUIUtility.TrTextContent("Full Resolution"); + public static readonly GUIContent RTRDenoise = EditorGUIUtility.TrTextContent("Denoise"); + public static readonly GUIContent RTRDenoiserRadius = EditorGUIUtility.TrTextContent("Denoiser Radius"); + public static readonly GUIContent RTRSmoothDenoising = EditorGUIUtility.TrTextContent("Affect Smooth Surfaces"); + + // RTGI + public static readonly GUIContent RTGISettingsSubTitle = EditorGUIUtility.TrTextContent("Ray Traced Global Illumination (Performance)"); + public static readonly GUIContent RTGIRayLength = EditorGUIUtility.TrTextContent("Max Ray Length"); + public static readonly GUIContent RTGIClampValue = EditorGUIUtility.TrTextContent("Clamp Value"); + public static readonly GUIContent RTGIFullResolution = EditorGUIUtility.TrTextContent("Full Resolution"); + public static readonly GUIContent RTGIUpScaleRadius = EditorGUIUtility.TrTextContent("Upscale Radius"); + public static readonly GUIContent RTGIDenoise = EditorGUIUtility.TrTextContent("Denoise"); + public static readonly GUIContent RTGIHalfResDenoise = EditorGUIUtility.TrTextContent("Half Resolution Denoiser"); + public static readonly GUIContent RTGIDenoiserRadius = EditorGUIUtility.TrTextContent("Denoiser Radius"); + public static readonly GUIContent RTGISecondDenoise = EditorGUIUtility.TrTextContent("Second Denoiser Pass"); + + // Fog public static readonly GUIContent FogSettingsSubTitle = EditorGUIUtility.TrTextContent("Volumetric Fog"); public static readonly GUIContent FogSettingsBudget = EditorGUIUtility.TrTextContent("Volumetric Fog Budget"); public static readonly GUIContent FogSettingsRatio = EditorGUIUtility.TrTextContent("Volumetric Fog Ratio"); diff --git a/com.unity.render-pipelines.high-definition/Editor/RenderPipeline/HDRenderPipelineUI.cs b/com.unity.render-pipelines.high-definition/Editor/RenderPipeline/HDRenderPipelineUI.cs index cb3b9be9310..2cfff073660 100644 --- a/com.unity.render-pipelines.high-definition/Editor/RenderPipeline/HDRenderPipelineUI.cs +++ b/com.unity.render-pipelines.high-definition/Editor/RenderPipeline/HDRenderPipelineUI.cs @@ -43,7 +43,10 @@ enum Expandable VirtualTexturing = 1 << 27, FogQuality = 1 << 28, Volumetric = 1 << 29, - ProbeVolume = 1 << 30 + ProbeVolume = 1 << 30, + RTAOQuality = 1 << 31, + RTRQuality = 1 << 32, + RTGIQuality = 1 << 33 } static readonly ExpandedState k_ExpandedState = new ExpandedState(Expandable.CameraFrameSettings | Expandable.General, "HDRP"); @@ -92,9 +95,12 @@ static HDRenderPipelineUI() ), CED.FoldoutGroup(Styles.lightingQualitySettings, Expandable.LightingQuality, k_ExpandedState, CED.FoldoutGroup(Styles.SSAOQualitySettingSubTitle, Expandable.SSAOQuality, k_ExpandedState, FoldoutOption.Indent | FoldoutOption.SubFoldout | FoldoutOption.NoSpaceAtEnd, Drawer_SectionSSAOQualitySettings), + CED.FoldoutGroup(Styles.RTAOQualitySettingSubTitle, Expandable.RTAOQuality, k_ExpandedState, FoldoutOption.Indent | FoldoutOption.SubFoldout | FoldoutOption.NoSpaceAtEnd, Drawer_SectionRTAOQualitySettings), CED.FoldoutGroup(Styles.contactShadowsSettingsSubTitle, Expandable.ContactShadowQuality, k_ExpandedState, FoldoutOption.Indent | FoldoutOption.SubFoldout | FoldoutOption.NoSpaceAtEnd, Drawer_SectionContactShadowQualitySettings), CED.FoldoutGroup(Styles.SSRSettingsSubTitle, Expandable.SSRQuality, k_ExpandedState, FoldoutOption.Indent | FoldoutOption.SubFoldout | FoldoutOption.NoSpaceAtEnd, Drawer_SectionSSRQualitySettings), - CED.FoldoutGroup(Styles.FogSettingsSubTitle, Expandable.FogQuality, k_ExpandedState, FoldoutOption.Indent | FoldoutOption.SubFoldout | FoldoutOption.NoSpaceAtEnd, Drawer_SectionFogQualitySettings) + CED.FoldoutGroup(Styles.RTRSettingsSubTitle, Expandable.RTRQuality, k_ExpandedState, FoldoutOption.Indent | FoldoutOption.SubFoldout | FoldoutOption.NoSpaceAtEnd, Drawer_SectionRTRQualitySettings), + CED.FoldoutGroup(Styles.FogSettingsSubTitle, Expandable.FogQuality, k_ExpandedState, FoldoutOption.Indent | FoldoutOption.SubFoldout | FoldoutOption.NoSpaceAtEnd, Drawer_SectionFogQualitySettings), + CED.FoldoutGroup(Styles.RTGISettingsSubTitle, Expandable.RTGIQuality, k_ExpandedState, FoldoutOption.Indent | FoldoutOption.SubFoldout | FoldoutOption.NoSpaceAtEnd, Drawer_SectionRTGIQualitySettings) ), CED.FoldoutGroup(Styles.materialSectionTitle, Expandable.Material, k_ExpandedState, Drawer_SectionMaterialUnsorted), CED.FoldoutGroup(Styles.postProcessSectionTitle, Expandable.PostProcess, k_ExpandedState, Drawer_SectionPostProcessSettings), @@ -721,6 +727,13 @@ static void Drawer_SectionDepthOfFieldQualitySettings(SerializedHDRenderPipeline static private bool m_ShowMotionBlurMediumQualitySection = false; static private bool m_ShowMotionBlurHighQualitySection = false; + static void DrawMotionBlurQualitySetting(SerializedHDRenderPipelineAsset serialized, int tier) + { + ++EditorGUI.indentLevel; + EditorGUILayout.PropertyField(serialized.renderPipelineSettings.postProcessQualitySettings.MotionBlurSampleCount.GetArrayElementAtIndex(tier), Styles.sampleCountQuality); + --EditorGUI.indentLevel; + } + static void Drawer_SectionMotionBlurQualitySettings(SerializedHDRenderPipelineAsset serialized, Editor owner) { m_ShowMotionBlurLowQualitySection = EditorGUILayout.Foldout(m_ShowMotionBlurLowQualitySection, Styles.lowQualityContent, true); @@ -728,21 +741,21 @@ static void Drawer_SectionMotionBlurQualitySettings(SerializedHDRenderPipelineAs if (m_ShowMotionBlurLowQualitySection) { int quality = (int)ScalableSettingLevelParameter.Level.Low; - EditorGUILayout.PropertyField(serialized.renderPipelineSettings.postProcessQualitySettings.MotionBlurSampleCount.GetArrayElementAtIndex(quality), Styles.sampleCountQuality); + DrawMotionBlurQualitySetting(serialized, quality); } m_ShowMotionBlurMediumQualitySection = EditorGUILayout.Foldout(m_ShowMotionBlurMediumQualitySection, Styles.mediumQualityContent, true); CheckFoldoutClick(GUILayoutUtility.GetLastRect(), ref m_ShowMotionBlurMediumQualitySection); if (m_ShowMotionBlurMediumQualitySection) { int quality = (int)ScalableSettingLevelParameter.Level.Medium; - EditorGUILayout.PropertyField(serialized.renderPipelineSettings.postProcessQualitySettings.MotionBlurSampleCount.GetArrayElementAtIndex(quality), Styles.sampleCountQuality); + DrawMotionBlurQualitySetting(serialized, quality); } m_ShowMotionBlurHighQualitySection = EditorGUILayout.Foldout(m_ShowMotionBlurHighQualitySection, Styles.highQualityContent, true); CheckFoldoutClick(GUILayoutUtility.GetLastRect(), ref m_ShowMotionBlurHighQualitySection); if (m_ShowMotionBlurHighQualitySection) { int quality = (int)ScalableSettingLevelParameter.Level.High; - EditorGUILayout.PropertyField(serialized.renderPipelineSettings.postProcessQualitySettings.MotionBlurSampleCount.GetArrayElementAtIndex(quality), Styles.sampleCountQuality); + DrawMotionBlurQualitySetting(serialized, quality); } } @@ -752,9 +765,11 @@ static void Drawer_SectionMotionBlurQualitySettings(SerializedHDRenderPipelineAs static void DrawBloomQualitySetting(SerializedHDRenderPipelineAsset serialized, int tier) { + ++EditorGUI.indentLevel; EditorGUILayout.PropertyField(serialized.renderPipelineSettings.postProcessQualitySettings.BloomRes.GetArrayElementAtIndex(tier), Styles.resolutionQuality); EditorGUILayout.PropertyField(serialized.renderPipelineSettings.postProcessQualitySettings.BloomHighPrefilteringQuality.GetArrayElementAtIndex(tier), Styles.highQualityPrefiltering); EditorGUILayout.PropertyField(serialized.renderPipelineSettings.postProcessQualitySettings.BloomHighFilteringQuality.GetArrayElementAtIndex(tier), Styles.highQualityFiltering); + --EditorGUI.indentLevel; } static void Drawer_SectionBloomQualitySettings(SerializedHDRenderPipelineAsset serialized, Editor owner) @@ -786,6 +801,13 @@ static void Drawer_SectionBloomQualitySettings(SerializedHDRenderPipelineAsset s static private bool m_ShowChromaticAberrationMediumQualitySection = false; static private bool m_ShowChromaticAberrationHighQualitySection = false; + static void DrawChromaticAberrationQualitySetting(SerializedHDRenderPipelineAsset serialized, int tier) + { + ++EditorGUI.indentLevel; + EditorGUILayout.PropertyField(serialized.renderPipelineSettings.postProcessQualitySettings.ChromaticAbMaxSamples.GetArrayElementAtIndex(tier), Styles.maxSamplesQuality); + --EditorGUI.indentLevel; + } + static void Drawer_SectionChromaticAberrationQualitySettings(SerializedHDRenderPipelineAsset serialized, Editor owner) { m_ShowChromaticAberrationLowQualitySection = EditorGUILayout.Foldout(m_ShowChromaticAberrationLowQualitySection, Styles.lowQualityContent, true); @@ -793,35 +815,43 @@ static void Drawer_SectionChromaticAberrationQualitySettings(SerializedHDRenderP if (m_ShowChromaticAberrationLowQualitySection) { int quality = (int)ScalableSettingLevelParameter.Level.Low; - EditorGUILayout.PropertyField(serialized.renderPipelineSettings.postProcessQualitySettings.ChromaticAbMaxSamples.GetArrayElementAtIndex(quality), Styles.maxSamplesQuality); + DrawChromaticAberrationQualitySetting(serialized, quality); } m_ShowChromaticAberrationMediumQualitySection = EditorGUILayout.Foldout(m_ShowChromaticAberrationMediumQualitySection, Styles.mediumQualityContent, true); CheckFoldoutClick(GUILayoutUtility.GetLastRect(), ref m_ShowChromaticAberrationMediumQualitySection); if (m_ShowChromaticAberrationMediumQualitySection) { int quality = (int)ScalableSettingLevelParameter.Level.Medium; - EditorGUILayout.PropertyField(serialized.renderPipelineSettings.postProcessQualitySettings.ChromaticAbMaxSamples.GetArrayElementAtIndex(quality), Styles.maxSamplesQuality); + DrawChromaticAberrationQualitySetting(serialized, quality); } m_ShowChromaticAberrationHighQualitySection = EditorGUILayout.Foldout(m_ShowChromaticAberrationHighQualitySection, Styles.highQualityContent, true); CheckFoldoutClick(GUILayoutUtility.GetLastRect(), ref m_ShowChromaticAberrationHighQualitySection); if (m_ShowChromaticAberrationHighQualitySection) { int quality = (int)ScalableSettingLevelParameter.Level.High; - EditorGUILayout.PropertyField(serialized.renderPipelineSettings.postProcessQualitySettings.ChromaticAbMaxSamples.GetArrayElementAtIndex(quality), Styles.maxSamplesQuality); + DrawChromaticAberrationQualitySetting(serialized, quality); } } - static private bool m_ShowAOLowQualitySection = false; - static private bool m_ShowAOMediumQualitySection = false; - static private bool m_ShowAOHighQualitySection = false; - static void DrawAOQualitySetting(SerializedHDRenderPipelineAsset serialized, int tier) { + ++EditorGUI.indentLevel; EditorGUILayout.PropertyField(serialized.renderPipelineSettings.lightingQualitySettings.AOStepCount.GetArrayElementAtIndex(tier), Styles.AOStepCount); EditorGUILayout.PropertyField(serialized.renderPipelineSettings.lightingQualitySettings.AOFullRes.GetArrayElementAtIndex(tier), Styles.AOFullRes); EditorGUILayout.PropertyField(serialized.renderPipelineSettings.lightingQualitySettings.AOMaximumRadiusPixels.GetArrayElementAtIndex(tier), Styles.AOMaxRadiusInPixels); EditorGUILayout.PropertyField(serialized.renderPipelineSettings.lightingQualitySettings.AODirectionCount.GetArrayElementAtIndex(tier), Styles.AODirectionCount); EditorGUILayout.PropertyField(serialized.renderPipelineSettings.lightingQualitySettings.AOBilateralUpsample.GetArrayElementAtIndex(tier), Styles.AOBilateralUpsample); + --EditorGUI.indentLevel; + } + + static void DrawRTAOQualitySetting(SerializedHDRenderPipelineAsset serialized, int tier) + { + ++EditorGUI.indentLevel; + EditorGUILayout.PropertyField(serialized.renderPipelineSettings.lightingQualitySettings.RTAORayLength.GetArrayElementAtIndex(tier), Styles.RTAORayLength); + EditorGUILayout.PropertyField(serialized.renderPipelineSettings.lightingQualitySettings.RTAOSampleCount.GetArrayElementAtIndex(tier), Styles.RTAOSampleCount); + EditorGUILayout.PropertyField(serialized.renderPipelineSettings.lightingQualitySettings.RTAODenoise.GetArrayElementAtIndex(tier), Styles.RTAODenoise); + EditorGUILayout.PropertyField(serialized.renderPipelineSettings.lightingQualitySettings.RTAODenoiserRadius.GetArrayElementAtIndex(tier), Styles.RTAODenoiserRadius); + --EditorGUI.indentLevel; } static void CheckFoldoutClick(Rect foldoutRect, ref bool foldoutFlag) @@ -836,6 +866,10 @@ static void CheckFoldoutClick(Rect foldoutRect, ref bool foldoutFlag) } } + static private bool m_ShowAOLowQualitySection = false; + static private bool m_ShowAOMediumQualitySection = false; + static private bool m_ShowAOHighQualitySection = false; + static void Drawer_SectionSSAOQualitySettings(SerializedHDRenderPipelineAsset serialized, Editor owner) { m_ShowAOLowQualitySection = EditorGUILayout.Foldout(m_ShowAOLowQualitySection, Styles.lowQualityContent); @@ -863,10 +897,48 @@ static void Drawer_SectionSSAOQualitySettings(SerializedHDRenderPipelineAsset se } } + static private bool m_ShowRTAOLowQualitySection = false; + static private bool m_ShowRTAOMediumQualitySection = false; + static private bool m_ShowRTAOHighQualitySection = false; + + static void Drawer_SectionRTAOQualitySettings(SerializedHDRenderPipelineAsset serialized, Editor owner) + { + m_ShowRTAOLowQualitySection = EditorGUILayout.Foldout(m_ShowRTAOLowQualitySection, Styles.lowQualityContent); + CheckFoldoutClick(GUILayoutUtility.GetLastRect(), ref m_ShowRTAOLowQualitySection); + if (m_ShowRTAOLowQualitySection) + { + int quality = (int)ScalableSettingLevelParameter.Level.Low; + DrawRTAOQualitySetting(serialized, quality); + } + + m_ShowRTAOMediumQualitySection = EditorGUILayout.Foldout(m_ShowRTAOMediumQualitySection, Styles.mediumQualityContent); + CheckFoldoutClick(GUILayoutUtility.GetLastRect(), ref m_ShowRTAOMediumQualitySection); + if (m_ShowRTAOMediumQualitySection) + { + int quality = (int)ScalableSettingLevelParameter.Level.Medium; + DrawRTAOQualitySetting(serialized, quality); + } + + m_ShowRTAOHighQualitySection = EditorGUILayout.Foldout(m_ShowRTAOHighQualitySection, Styles.highQualityContent); + CheckFoldoutClick(GUILayoutUtility.GetLastRect(), ref m_ShowRTAOHighQualitySection); + if (m_ShowRTAOHighQualitySection) + { + int quality = (int)ScalableSettingLevelParameter.Level.High; + DrawRTAOQualitySetting(serialized, quality); + } + } + static private bool m_ShowContactShadowLowQualitySection = false; static private bool m_ShowContactShadowMediumQualitySection = false; static private bool m_ShowContactShadowHighQualitySection = false; + static void DrawContactShadowQualitySetting(SerializedHDRenderPipelineAsset serialized, int tier) + { + ++EditorGUI.indentLevel; + EditorGUILayout.PropertyField(serialized.renderPipelineSettings.lightingQualitySettings.ContactShadowSampleCount.GetArrayElementAtIndex(tier), Styles.contactShadowsSampleCount); + --EditorGUI.indentLevel; + } + static void Drawer_SectionContactShadowQualitySettings(SerializedHDRenderPipelineAsset serialized, Editor owner) { m_ShowContactShadowLowQualitySection = EditorGUILayout.Foldout(m_ShowContactShadowLowQualitySection, Styles.lowQualityContent); @@ -874,7 +946,7 @@ static void Drawer_SectionContactShadowQualitySettings(SerializedHDRenderPipelin if (m_ShowContactShadowLowQualitySection) { int quality = (int)ScalableSettingLevelParameter.Level.Low; - EditorGUILayout.PropertyField(serialized.renderPipelineSettings.lightingQualitySettings.ContactShadowSampleCount.GetArrayElementAtIndex(quality), Styles.contactShadowsSampleCount); + DrawContactShadowQualitySetting(serialized, quality); } m_ShowContactShadowMediumQualitySection = EditorGUILayout.Foldout(m_ShowContactShadowMediumQualitySection, Styles.mediumQualityContent); @@ -882,7 +954,7 @@ static void Drawer_SectionContactShadowQualitySettings(SerializedHDRenderPipelin if (m_ShowContactShadowMediumQualitySection) { int quality = (int)ScalableSettingLevelParameter.Level.Medium; - EditorGUILayout.PropertyField(serialized.renderPipelineSettings.lightingQualitySettings.ContactShadowSampleCount.GetArrayElementAtIndex(quality), Styles.contactShadowsSampleCount); + DrawContactShadowQualitySetting(serialized, quality); } m_ShowContactShadowHighQualitySection = EditorGUILayout.Foldout(m_ShowContactShadowHighQualitySection, Styles.highQualityContent); @@ -890,7 +962,7 @@ static void Drawer_SectionContactShadowQualitySettings(SerializedHDRenderPipelin if (m_ShowContactShadowHighQualitySection) { int quality = (int)ScalableSettingLevelParameter.Level.High; - EditorGUILayout.PropertyField(serialized.renderPipelineSettings.lightingQualitySettings.ContactShadowSampleCount.GetArrayElementAtIndex(quality), Styles.contactShadowsSampleCount); + DrawContactShadowQualitySetting(serialized, quality); } } @@ -898,6 +970,13 @@ static void Drawer_SectionContactShadowQualitySettings(SerializedHDRenderPipelin static private bool m_ShowSSRMediumQualitySection = false; static private bool m_ShowSSRHighQualitySection = false; + static void DrawSSRQualitySetting(SerializedHDRenderPipelineAsset serialized, int tier) + { + ++EditorGUI.indentLevel; + EditorGUILayout.PropertyField(serialized.renderPipelineSettings.lightingQualitySettings.SSRMaxRaySteps.GetArrayElementAtIndex(tier), Styles.contactShadowsSampleCount); + --EditorGUI.indentLevel; + } + static void Drawer_SectionSSRQualitySettings(SerializedHDRenderPipelineAsset serialized, Editor owner) { m_ShowSSRLowQualitySection = EditorGUILayout.Foldout(m_ShowSSRLowQualitySection, Styles.lowQualityContent); @@ -905,7 +984,7 @@ static void Drawer_SectionSSRQualitySettings(SerializedHDRenderPipelineAsset ser if (m_ShowSSRLowQualitySection) { int quality = (int)ScalableSettingLevelParameter.Level.Low; - EditorGUILayout.PropertyField(serialized.renderPipelineSettings.lightingQualitySettings.SSRMaxRaySteps.GetArrayElementAtIndex(quality), Styles.contactShadowsSampleCount); + DrawSSRQualitySetting(serialized, quality); } m_ShowSSRMediumQualitySection = EditorGUILayout.Foldout(m_ShowSSRMediumQualitySection, Styles.mediumQualityContent); @@ -913,7 +992,7 @@ static void Drawer_SectionSSRQualitySettings(SerializedHDRenderPipelineAsset ser if (m_ShowSSRMediumQualitySection) { int quality = (int)ScalableSettingLevelParameter.Level.Medium; - EditorGUILayout.PropertyField(serialized.renderPipelineSettings.lightingQualitySettings.SSRMaxRaySteps.GetArrayElementAtIndex(quality), Styles.contactShadowsSampleCount); + DrawSSRQualitySetting(serialized, quality); } m_ShowSSRHighQualitySection = EditorGUILayout.Foldout(m_ShowSSRHighQualitySection, Styles.highQualityContent); @@ -921,7 +1000,52 @@ static void Drawer_SectionSSRQualitySettings(SerializedHDRenderPipelineAsset ser if (m_ShowSSRHighQualitySection) { int quality = (int)ScalableSettingLevelParameter.Level.High; - EditorGUILayout.PropertyField(serialized.renderPipelineSettings.lightingQualitySettings.SSRMaxRaySteps.GetArrayElementAtIndex(quality), Styles.contactShadowsSampleCount); + DrawSSRQualitySetting(serialized, quality); + } + } + + static private bool m_ShowRTRLowQualitySection = false; + static private bool m_ShowRTRMediumQualitySection = false; + static private bool m_ShowRTRHighQualitySection = false; + + static void DrawRTRQualitySetting(SerializedHDRenderPipelineAsset serialized, int tier) + { + ++EditorGUI.indentLevel; + EditorGUILayout.PropertyField(serialized.renderPipelineSettings.lightingQualitySettings.RTRMinSmoothness.GetArrayElementAtIndex(tier), Styles.RTRMinSmoothness); + EditorGUILayout.PropertyField(serialized.renderPipelineSettings.lightingQualitySettings.RTRSmoothnessFadeStart.GetArrayElementAtIndex(tier), Styles.RTRSmoothnessFadeStart); + EditorGUILayout.PropertyField(serialized.renderPipelineSettings.lightingQualitySettings.RTRRayLength.GetArrayElementAtIndex(tier), Styles.RTRRayLength); + EditorGUILayout.PropertyField(serialized.renderPipelineSettings.lightingQualitySettings.RTRClampValue.GetArrayElementAtIndex(tier), Styles.RTRClampValue); + EditorGUILayout.PropertyField(serialized.renderPipelineSettings.lightingQualitySettings.RTRFullResolution.GetArrayElementAtIndex(tier), Styles.RTRFullResolution); + EditorGUILayout.PropertyField(serialized.renderPipelineSettings.lightingQualitySettings.RTRDenoise.GetArrayElementAtIndex(tier), Styles.RTRDenoise); + EditorGUILayout.PropertyField(serialized.renderPipelineSettings.lightingQualitySettings.RTRDenoiserRadius.GetArrayElementAtIndex(tier), Styles.RTRDenoiserRadius); + EditorGUILayout.PropertyField(serialized.renderPipelineSettings.lightingQualitySettings.RTRSmoothDenoising.GetArrayElementAtIndex(tier), Styles.RTRSmoothDenoising); + --EditorGUI.indentLevel; + } + + static void Drawer_SectionRTRQualitySettings(SerializedHDRenderPipelineAsset serialized, Editor owner) + { + m_ShowRTRLowQualitySection = EditorGUILayout.Foldout(m_ShowRTRLowQualitySection, Styles.lowQualityContent); + CheckFoldoutClick(GUILayoutUtility.GetLastRect(), ref m_ShowRTRLowQualitySection); + if (m_ShowRTRLowQualitySection) + { + int quality = (int)ScalableSettingLevelParameter.Level.Low; + DrawRTRQualitySetting(serialized, quality); + } + + m_ShowRTRMediumQualitySection = EditorGUILayout.Foldout(m_ShowRTRMediumQualitySection, Styles.mediumQualityContent); + CheckFoldoutClick(GUILayoutUtility.GetLastRect(), ref m_ShowRTRMediumQualitySection); + if (m_ShowRTRMediumQualitySection) + { + int quality = (int)ScalableSettingLevelParameter.Level.Medium; + DrawRTRQualitySetting(serialized, quality); + } + + m_ShowRTRHighQualitySection = EditorGUILayout.Foldout(m_ShowRTRHighQualitySection, Styles.highQualityContent); + CheckFoldoutClick(GUILayoutUtility.GetLastRect(), ref m_ShowRTRHighQualitySection); + if (m_ShowRTRHighQualitySection) + { + int quality = (int)ScalableSettingLevelParameter.Level.High; + DrawRTRQualitySetting(serialized, quality); } } @@ -929,6 +1053,18 @@ static void Drawer_SectionSSRQualitySettings(SerializedHDRenderPipelineAsset ser static private bool m_ShowFogMediumQualitySection = false; static private bool m_ShowFogHighQualitySection = false; + static void DrawVolumetricFogQualitySetting(SerializedHDRenderPipelineAsset serialized, int tier) + { + ++EditorGUI.indentLevel; + var budget = serialized.renderPipelineSettings.lightingQualitySettings.VolumetricFogBudget.GetArrayElementAtIndex(tier); + EditorGUILayout.PropertyField(budget, Styles.FogSettingsBudget); + budget.floatValue = Mathf.Clamp(budget.floatValue, 0.0f, 1.0f); + var ratio = serialized.renderPipelineSettings.lightingQualitySettings.VolumetricFogRatio.GetArrayElementAtIndex(tier); + EditorGUILayout.PropertyField(ratio, Styles.FogSettingsRatio); + ratio.floatValue = Mathf.Clamp(ratio.floatValue, 0.0f, 1.0f); + --EditorGUI.indentLevel; + } + static void Drawer_SectionFogQualitySettings(SerializedHDRenderPipelineAsset serialized, Editor owner) { m_ShowFogLowQualitySection = EditorGUILayout.Foldout(m_ShowFogLowQualitySection, Styles.lowQualityContent); @@ -936,12 +1072,7 @@ static void Drawer_SectionFogQualitySettings(SerializedHDRenderPipelineAsset ser if (m_ShowFogLowQualitySection) { int quality = (int)ScalableSettingLevelParameter.Level.Low; - var budget = serialized.renderPipelineSettings.lightingQualitySettings.VolumetricFogBudget.GetArrayElementAtIndex(quality); - EditorGUILayout.PropertyField(budget, Styles.FogSettingsBudget); - budget.floatValue = Mathf.Clamp(budget.floatValue, 0.0f, 1.0f); - var ratio = serialized.renderPipelineSettings.lightingQualitySettings.VolumetricFogRatio.GetArrayElementAtIndex(quality); - EditorGUILayout.PropertyField(ratio, Styles.FogSettingsRatio); - ratio.floatValue = Mathf.Clamp(ratio.floatValue, 0.0f, 1.0f); + DrawVolumetricFogQualitySetting(serialized, quality); } m_ShowFogMediumQualitySection = EditorGUILayout.Foldout(m_ShowFogMediumQualitySection, Styles.mediumQualityContent); @@ -949,12 +1080,7 @@ static void Drawer_SectionFogQualitySettings(SerializedHDRenderPipelineAsset ser if (m_ShowFogMediumQualitySection) { int quality = (int)ScalableSettingLevelParameter.Level.Medium; - var budget = serialized.renderPipelineSettings.lightingQualitySettings.VolumetricFogBudget.GetArrayElementAtIndex(quality); - EditorGUILayout.PropertyField(budget, Styles.FogSettingsBudget); - budget.floatValue = Mathf.Clamp(budget.floatValue, 0.0f, 1.0f); - var ratio = serialized.renderPipelineSettings.lightingQualitySettings.VolumetricFogRatio.GetArrayElementAtIndex(quality); - EditorGUILayout.PropertyField(ratio, Styles.FogSettingsRatio); - ratio.floatValue = Mathf.Clamp(ratio.floatValue, 0.0f, 1.0f); + DrawVolumetricFogQualitySetting(serialized, quality); } m_ShowFogHighQualitySection = EditorGUILayout.Foldout(m_ShowFogHighQualitySection, Styles.highQualityContent); @@ -962,12 +1088,52 @@ static void Drawer_SectionFogQualitySettings(SerializedHDRenderPipelineAsset ser if (m_ShowFogHighQualitySection) { int quality = (int)ScalableSettingLevelParameter.Level.High; - var budget = serialized.renderPipelineSettings.lightingQualitySettings.VolumetricFogBudget.GetArrayElementAtIndex(quality); - EditorGUILayout.PropertyField(budget, Styles.FogSettingsBudget); - budget.floatValue = Mathf.Clamp(budget.floatValue, 0.0f, 1.0f); - var ratio = serialized.renderPipelineSettings.lightingQualitySettings.VolumetricFogRatio.GetArrayElementAtIndex(quality); - EditorGUILayout.PropertyField(ratio, Styles.FogSettingsRatio); - ratio.floatValue = Mathf.Clamp(ratio.floatValue, 0.0f, 1.0f); + DrawVolumetricFogQualitySetting(serialized, quality); + } + } + + static private bool m_ShowRTGILowQualitySection = false; + static private bool m_ShowRTGIMediumQualitySection = false; + static private bool m_ShowRTGIHighQualitySection = false; + + static void DrawRTGIQualitySetting(SerializedHDRenderPipelineAsset serialized, int tier) + { + ++EditorGUI.indentLevel; + EditorGUILayout.PropertyField(serialized.renderPipelineSettings.lightingQualitySettings.RTGIRayLength.GetArrayElementAtIndex(tier), Styles.RTGIRayLength); + EditorGUILayout.PropertyField(serialized.renderPipelineSettings.lightingQualitySettings.RTGIClampValue.GetArrayElementAtIndex(tier), Styles.RTGIClampValue); + EditorGUILayout.PropertyField(serialized.renderPipelineSettings.lightingQualitySettings.RTGIFullResolution.GetArrayElementAtIndex(tier), Styles.RTGIFullResolution); + EditorGUILayout.PropertyField(serialized.renderPipelineSettings.lightingQualitySettings.RTGIUpScaleRadius.GetArrayElementAtIndex(tier), Styles.RTGIUpScaleRadius); + EditorGUILayout.PropertyField(serialized.renderPipelineSettings.lightingQualitySettings.RTGIDenoise.GetArrayElementAtIndex(tier), Styles.RTGIDenoise); + EditorGUILayout.PropertyField(serialized.renderPipelineSettings.lightingQualitySettings.RTGIHalfResDenoise.GetArrayElementAtIndex(tier), Styles.RTGIHalfResDenoise); + EditorGUILayout.PropertyField(serialized.renderPipelineSettings.lightingQualitySettings.RTGIDenoiserRadius.GetArrayElementAtIndex(tier), Styles.RTGIDenoiserRadius); + EditorGUILayout.PropertyField(serialized.renderPipelineSettings.lightingQualitySettings.RTGISecondDenoise.GetArrayElementAtIndex(tier), Styles.RTGISecondDenoise); + --EditorGUI.indentLevel; + } + + static void Drawer_SectionRTGIQualitySettings(SerializedHDRenderPipelineAsset serialized, Editor owner) + { + m_ShowRTGILowQualitySection = EditorGUILayout.Foldout(m_ShowRTGILowQualitySection, Styles.lowQualityContent); + CheckFoldoutClick(GUILayoutUtility.GetLastRect(), ref m_ShowRTGILowQualitySection); + if (m_ShowRTGILowQualitySection) + { + int quality = (int)ScalableSettingLevelParameter.Level.Low; + DrawRTGIQualitySetting(serialized, quality); + } + + m_ShowRTGIMediumQualitySection = EditorGUILayout.Foldout(m_ShowRTGIMediumQualitySection, Styles.mediumQualityContent); + CheckFoldoutClick(GUILayoutUtility.GetLastRect(), ref m_ShowRTGIMediumQualitySection); + if (m_ShowRTGIMediumQualitySection) + { + int quality = (int)ScalableSettingLevelParameter.Level.Medium; + DrawRTGIQualitySetting(serialized, quality); + } + + m_ShowRTGIHighQualitySection = EditorGUILayout.Foldout(m_ShowRTGIHighQualitySection, Styles.highQualityContent); + CheckFoldoutClick(GUILayoutUtility.GetLastRect(), ref m_ShowRTGIHighQualitySection); + if (m_ShowRTGIHighQualitySection) + { + int quality = (int)ScalableSettingLevelParameter.Level.High; + DrawRTGIQualitySetting(serialized, quality); } } diff --git a/com.unity.render-pipelines.high-definition/Editor/RenderPipeline/Settings/SerializedLightingQualitySettings.cs b/com.unity.render-pipelines.high-definition/Editor/RenderPipeline/Settings/SerializedLightingQualitySettings.cs index 1844d13fbcb..a484827a0c5 100644 --- a/com.unity.render-pipelines.high-definition/Editor/RenderPipeline/Settings/SerializedLightingQualitySettings.cs +++ b/com.unity.render-pipelines.high-definition/Editor/RenderPipeline/Settings/SerializedLightingQualitySettings.cs @@ -14,12 +14,38 @@ class SerializedLightingQualitySettings public SerializedProperty AODirectionCount; public SerializedProperty AOBilateralUpsample; + // Ray Traced Ambient Occlusion + public SerializedProperty RTAORayLength; + public SerializedProperty RTAOSampleCount; + public SerializedProperty RTAODenoise; + public SerializedProperty RTAODenoiserRadius; + // Contact Shadows public SerializedProperty ContactShadowSampleCount; // SSR public SerializedProperty SSRMaxRaySteps; + // Ray Traced reflections + public SerializedProperty RTRMinSmoothness; + public SerializedProperty RTRSmoothnessFadeStart; + public SerializedProperty RTRRayLength; + public SerializedProperty RTRClampValue; + public SerializedProperty RTRFullResolution; + public SerializedProperty RTRDenoise; + public SerializedProperty RTRDenoiserRadius; + public SerializedProperty RTRSmoothDenoising; + + // Ray Traced Global Illumination + public SerializedProperty RTGIRayLength; + public SerializedProperty RTGIFullResolution; + public SerializedProperty RTGIClampValue; + public SerializedProperty RTGIUpScaleRadius; + public SerializedProperty RTGIDenoise; + public SerializedProperty RTGIHalfResDenoise; + public SerializedProperty RTGIDenoiserRadius; + public SerializedProperty RTGISecondDenoise; + // Fog public SerializedProperty VolumetricFogBudget; public SerializedProperty VolumetricFogRatio; @@ -35,12 +61,38 @@ public SerializedLightingQualitySettings(SerializedProperty root) AODirectionCount = root.Find((GlobalLightingQualitySettings s) => s.AODirectionCount); AOBilateralUpsample = root.Find((GlobalLightingQualitySettings s) => s.AOBilateralUpsample); + // RTAO + RTAORayLength = root.Find((GlobalLightingQualitySettings s) => s.RTAORayLength); + RTAOSampleCount = root.Find((GlobalLightingQualitySettings s) => s.RTAOSampleCount); + RTAODenoise = root.Find((GlobalLightingQualitySettings s) => s.RTAODenoise); + RTAODenoiserRadius = root.Find((GlobalLightingQualitySettings s) => s.RTAODenoiserRadius); + // Contact Shadows ContactShadowSampleCount = root.Find((GlobalLightingQualitySettings s) => s.ContactShadowSampleCount); // SSR SSRMaxRaySteps = root.Find((GlobalLightingQualitySettings s) => s.SSRMaxRaySteps); + // Ray Traced reflections + RTRMinSmoothness = root.Find((GlobalLightingQualitySettings s) => s.RTRMinSmoothness); + RTRSmoothnessFadeStart = root.Find((GlobalLightingQualitySettings s) => s.RTRSmoothnessFadeStart); + RTRRayLength = root.Find((GlobalLightingQualitySettings s) => s.RTRRayLength); + RTRClampValue = root.Find((GlobalLightingQualitySettings s) => s.RTRClampValue); + RTRFullResolution = root.Find((GlobalLightingQualitySettings s) => s.RTRFullResolution); + RTRDenoise = root.Find((GlobalLightingQualitySettings s) => s.RTRDenoise); + RTRDenoiserRadius = root.Find((GlobalLightingQualitySettings s) => s.RTRDenoiserRadius); + RTRSmoothDenoising = root.Find((GlobalLightingQualitySettings s) => s.RTRSmoothDenoising); + + // Ray Traced Global Illumination + RTGIRayLength = root.Find((GlobalLightingQualitySettings s) => s.RTGIRayLength); + RTGIFullResolution = root.Find((GlobalLightingQualitySettings s) => s.RTGIFullResolution); + RTGIClampValue = root.Find((GlobalLightingQualitySettings s) => s.RTGIClampValue); + RTGIUpScaleRadius = root.Find((GlobalLightingQualitySettings s) => s.RTGIUpScaleRadius); + RTGIDenoise = root.Find((GlobalLightingQualitySettings s) => s.RTGIDenoise); + RTGIHalfResDenoise = root.Find((GlobalLightingQualitySettings s) => s.RTGIHalfResDenoise); + RTGIDenoiserRadius = root.Find((GlobalLightingQualitySettings s) => s.RTGIDenoiserRadius); + RTGISecondDenoise = root.Find((GlobalLightingQualitySettings s) => s.RTGISecondDenoise); + // Fog VolumetricFogBudget = root.Find((GlobalLightingQualitySettings s) => s.Fog_Budget); VolumetricFogRatio = root.Find((GlobalLightingQualitySettings s) => s.Fog_DepthRatio); diff --git a/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/GlobalLightingQualitySettings.cs b/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/GlobalLightingQualitySettings.cs index 1c8f2f15d20..7fc9f7cdc9b 100644 --- a/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/GlobalLightingQualitySettings.cs +++ b/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/GlobalLightingQualitySettings.cs @@ -219,8 +219,6 @@ internal GlobalLightingQualitySettings() public float[] RTGIDenoiserRadius = new float[s_QualitySettingCount]; /// Flag that enables the second denoising pass. public bool[] RTGISecondDenoise = new bool[s_QualitySettingCount]; - /// Flag that defines the radius of the second denoiser. - public float[] RTGISecondDenoiserRadius = new float[s_QualitySettingCount]; // Ray Traced Reflections /// Controls the minimal smoothness.