public SerializedHDShadowInitParameters(SerializedProperty root)
        {
            this.root = root;

            directionalShadowMapDepthBits = root.Find((HDShadowInitParameters s) => s.directionalShadowsDepthBits);

            serializedPunctualAtlasInit = new SerializedHDShadowAtlasInitParams
            {
                shadowMapResolution       = root.Find((HDShadowInitParameters s) => s.punctualLightShadowAtlas.shadowAtlasResolution),
                cachedResolution          = root.Find((HDShadowInitParameters s) => s.cachedPunctualLightShadowAtlas),
                shadowMapDepthBits        = root.Find((HDShadowInitParameters s) => s.punctualLightShadowAtlas.shadowAtlasDepthBits),
                useDynamicViewportRescale = root.Find((HDShadowInitParameters s) => s.punctualLightShadowAtlas.useDynamicViewportRescale)
            };

            serializedAreaAtlasInit = new SerializedHDShadowAtlasInitParams
            {
                shadowMapResolution       = root.Find((HDShadowInitParameters s) => s.areaLightShadowAtlas.shadowAtlasResolution),
                cachedResolution          = root.Find((HDShadowInitParameters s) => s.cachedAreaLightShadowAtlas),
                shadowMapDepthBits        = root.Find((HDShadowInitParameters s) => s.areaLightShadowAtlas.shadowAtlasDepthBits),
                useDynamicViewportRescale = root.Find((HDShadowInitParameters s) => s.areaLightShadowAtlas.useDynamicViewportRescale)
            };

            maxShadowRequests = root.Find((HDShadowInitParameters s) => s.maxShadowRequests);

            shadowResolutionDirectional       = new SerializedScalableSetting(root.Find((HDShadowInitParameters s) => s.shadowResolutionDirectional));
            shadowResolutionPunctual          = new SerializedScalableSetting(root.Find((HDShadowInitParameters s) => s.shadowResolutionPunctual));
            shadowResolutionArea              = new SerializedScalableSetting(root.Find((HDShadowInitParameters s) => s.shadowResolutionArea));
            maxDirectionalShadowMapResolution = root.Find((HDShadowInitParameters s) => s.maxDirectionalShadowMapResolution);
            maxPunctualShadowMapResolution    = root.Find((HDShadowInitParameters s) => s.maxPunctualShadowMapResolution);
            maxAreaShadowMapResolution        = root.Find((HDShadowInitParameters s) => s.maxAreaShadowMapResolution);

            shadowFilteringQuality        = root.Find((HDShadowInitParameters s) => s.shadowFilteringQuality);
            supportScreenSpaceShadows     = root.Find((HDShadowInitParameters s) => s.supportScreenSpaceShadows);
            maxScreenSpaceShadowSlots     = root.Find((HDShadowInitParameters s) => s.maxScreenSpaceShadowSlots);
            screenSpaceShadowBufferFormat = root.Find((HDShadowInitParameters s) => s.screenSpaceShadowBufferFormat);
        }
    #pragma warning restore 618

        public SerializedRenderPipelineSettings(SerializedProperty root)
        {
            this.root = root;

            supportShadowMask           = root.Find((RenderPipelineSettings s) => s.supportShadowMask);
            supportSSR                  = root.Find((RenderPipelineSettings s) => s.supportSSR);
            supportSSRTransparent       = root.Find((RenderPipelineSettings s) => s.supportSSRTransparent);
            supportSSAO                 = root.Find((RenderPipelineSettings s) => s.supportSSAO);
            supportSSGI                 = root.Find((RenderPipelineSettings s) => s.supportSSGI);
            supportSubsurfaceScattering = root.Find((RenderPipelineSettings s) => s.supportSubsurfaceScattering);
            sssSampleBudget             = new SerializedScalableSetting(root.Find((RenderPipelineSettings s) => s.sssSampleBudget));
            supportVolumetrics          = root.Find((RenderPipelineSettings s) => s.supportVolumetrics);
            supportLightLayers          = root.Find((RenderPipelineSettings s) => s.supportLightLayers);
            lightLayerName0             = root.Find((RenderPipelineSettings s) => s.lightLayerName0);
            lightLayerName1             = root.Find((RenderPipelineSettings s) => s.lightLayerName1);
            lightLayerName2             = root.Find((RenderPipelineSettings s) => s.lightLayerName2);
            lightLayerName3             = root.Find((RenderPipelineSettings s) => s.lightLayerName3);
            lightLayerName4             = root.Find((RenderPipelineSettings s) => s.lightLayerName4);
            lightLayerName5             = root.Find((RenderPipelineSettings s) => s.lightLayerName5);
            lightLayerName6             = root.Find((RenderPipelineSettings s) => s.lightLayerName6);
            lightLayerName7             = root.Find((RenderPipelineSettings s) => s.lightLayerName7);
            colorBufferFormat           = root.Find((RenderPipelineSettings s) => s.colorBufferFormat);
            customBufferFormat          = root.Find((RenderPipelineSettings s) => s.customBufferFormat);
            supportCustomPass           = root.Find((RenderPipelineSettings s) => s.supportCustomPass);
            supportedLitShaderMode      = root.Find((RenderPipelineSettings s) => s.supportedLitShaderMode);

            supportDecals                   = root.Find((RenderPipelineSettings s) => s.supportDecals);
            supportDecalLayers              = root.Find((RenderPipelineSettings s) => s.supportDecalLayers);
            decalLayerName0                 = root.Find((RenderPipelineSettings s) => s.decalLayerName0);
            decalLayerName1                 = root.Find((RenderPipelineSettings s) => s.decalLayerName1);
            decalLayerName2                 = root.Find((RenderPipelineSettings s) => s.decalLayerName2);
            decalLayerName3                 = root.Find((RenderPipelineSettings s) => s.decalLayerName3);
            decalLayerName4                 = root.Find((RenderPipelineSettings s) => s.decalLayerName4);
            decalLayerName5                 = root.Find((RenderPipelineSettings s) => s.decalLayerName5);
            decalLayerName6                 = root.Find((RenderPipelineSettings s) => s.decalLayerName6);
            decalLayerName7                 = root.Find((RenderPipelineSettings s) => s.decalLayerName7);
            MSAASampleCount                 = root.Find((RenderPipelineSettings s) => s.msaaSampleCount);
            supportMotionVectors            = root.Find((RenderPipelineSettings s) => s.supportMotionVectors);
            supportRuntimeDebugDisplay      = root.Find((RenderPipelineSettings s) => s.supportRuntimeDebugDisplay);
            supportRuntimeAOVAPI            = root.Find((RenderPipelineSettings s) => s.supportRuntimeAOVAPI);
            supportDitheringCrossFade       = root.Find((RenderPipelineSettings s) => s.supportDitheringCrossFade);
            supportTerrainHole              = root.Find((RenderPipelineSettings s) => s.supportTerrainHole);
            supportDistortion               = root.Find((RenderPipelineSettings s) => s.supportDistortion);
            supportTransparentBackface      = root.Find((RenderPipelineSettings s) => s.supportTransparentBackface);
            supportTransparentDepthPrepass  = root.Find((RenderPipelineSettings s) => s.supportTransparentDepthPrepass);
            supportTransparentDepthPostpass = root.Find((RenderPipelineSettings s) => s.supportTransparentDepthPostpass);
            supportProbeVolume              = root.Find((RenderPipelineSettings s) => s.supportProbeVolume);

            supportRayTracing       = root.Find((RenderPipelineSettings s) => s.supportRayTracing);
            supportedRayTracingMode = root.Find((RenderPipelineSettings s) => s.supportedRayTracingMode);

            lightLoopSettings         = new SerializedGlobalLightLoopSettings(root.Find((RenderPipelineSettings s) => s.lightLoopSettings));
            hdShadowInitParams        = new SerializedHDShadowInitParameters(root.Find((RenderPipelineSettings s) => s.hdShadowInitParams));
            decalSettings             = new SerializedGlobalDecalSettings(root.Find((RenderPipelineSettings s) => s.decalSettings));
            postProcessSettings       = new SerializedGlobalPostProcessSettings(root.Find((RenderPipelineSettings s) => s.postProcessSettings));
            dynamicResolutionSettings = new SerializedDynamicResolutionSettings(root.Find((RenderPipelineSettings s) => s.dynamicResolutionSettings));
            lowresTransparentSettings = new SerializedLowResTransparencySettings(root.Find((RenderPipelineSettings s) => s.lowresTransparentSettings));
            xrSettings = new SerializedXRSettings(root.Find((RenderPipelineSettings s) => s.xrSettings));
            postProcessQualitySettings = new SerializedPostProcessingQualitySettings(root.Find((RenderPipelineSettings s) => s.postProcessQualitySettings));
            probeVolumeSettings        = new SerializedGlobalProbeVolumeSettings(root.Find((RenderPipelineSettings s) => s.probeVolumeSettings));

            lightSettings           = new SerializedLightSettings(root.Find((RenderPipelineSettings s) => s.lightSettings));
            lodBias                 = new SerializedScalableSetting(root.Find((RenderPipelineSettings s) => s.lodBias));
            maximumLODLevel         = new SerializedScalableSetting(root.Find((RenderPipelineSettings s) => s.maximumLODLevel));
            lightingQualitySettings = new SerializedLightingQualitySettings(root.Find((RenderPipelineSettings s) => s.lightingQualitySettings));

        #pragma warning disable 618 // Type or member is obsolete
            m_ObsoleteincreaseSssSampleCount = root.Find((RenderPipelineSettings s) => s.m_ObsoleteincreaseSssSampleCount);
        #pragma warning restore 618
        }
 public SerializedLightSettings(SerializedProperty root)
 {
     useContactShadows = new SerializedScalableSetting(root.Find((RenderPipelineSettings.LightSettings s) => s.useContactShadow));
 }
        public static void ValueGUI <T>(this SerializedScalableSetting self, GUIContent label)
        {
            var rect = GUILayoutUtility.GetRect(0, float.Epsilon, 0, EditorGUIUtility.singleLineHeight);

            // Magic Number !!
            rect.x     += 3;
            rect.width -= 6;
            // Magic Number !!

            var contentRect = EditorGUI.PrefixLabel(rect, label);

            EditorGUI.showMixedValue = self.low.hasMultipleDifferentValues ||
                                       self.medium.hasMultipleDifferentValues ||
                                       self.high.hasMultipleDifferentValues;

            if (typeof(T) == typeof(bool))
            {
                GUIContent[] labels = { k_Low, k_Med, k_High };
                bool[]       values =
                {
                    self.low.boolValue,
                    self.medium.boolValue,
                    self.high.boolValue
                };
                EditorGUI.BeginChangeCheck();
                MultiField(contentRect, labels, values);
                if (EditorGUI.EndChangeCheck())
                {
                    self.low.boolValue    = values[0];
                    self.medium.boolValue = values[1];
                    self.high.boolValue   = values[2];
                }
            }
            else if (typeof(T) == typeof(int))
            {
                GUIContent[] labels = { k_ShortLow, k_ShortMed, k_ShortHigh };
                int[]        values =
                {
                    self.low.intValue,
                    self.medium.intValue,
                    self.high.intValue
                };
                EditorGUI.BeginChangeCheck();
                MultiField(contentRect, labels, values);
                if (EditorGUI.EndChangeCheck())
                {
                    self.low.intValue    = values[0];
                    self.medium.intValue = values[1];
                    self.high.intValue   = values[2];
                }
            }
            else if (typeof(T) == typeof(float))
            {
                GUIContent[] labels = { k_ShortLow, k_ShortMed, k_ShortHigh };
                float[]      values =
                {
                    self.low.floatValue,
                    self.medium.floatValue,
                    self.high.floatValue
                };
                EditorGUI.BeginChangeCheck();
                MultiField(contentRect, labels, values);
                if (EditorGUI.EndChangeCheck())
                {
                    self.low.floatValue    = values[0];
                    self.medium.floatValue = values[1];
                    self.high.floatValue   = values[2];
                }
            }

            EditorGUI.showMixedValue = false;
        }