static void Drawer_SectionAsyncComputeSettings(SerializedFrameSettings serialized, Editor owner, bool withOverride) { var area = GetFrameSettingSectionContent(2, serialized, owner); area.Draw(withOverride); }
static void Drawer_SectionLightLoopSettings(SerializedFrameSettings serialized, Editor owner, bool withOverride) { var area = GetFrameSettingSectionContent(3, serialized, owner); area.Draw(withOverride); }
static internal void Drawer_SectionRenderingSettings(SerializedFrameSettings serialized, Editor owner, bool withOverride) { bool isGUIenabled = GUI.enabled; FrameSettings?defaultFrameSettings = GetDefaultFrameSettingsFor(owner); var area = OverridableFrameSettingsArea.GetGroupContent(0, defaultFrameSettings, serialized); area.AmmendInfo(FrameSettingsField.DepthPrepassWithDeferredRendering, ignoreDependencies: true); area.AmmendInfo(FrameSettingsField.ClearGBuffers, ignoreDependencies: true); area.AmmendInfo(FrameSettingsField.MSAAMode, ignoreDependencies: true); area.AmmendInfo( FrameSettingsField.MSAAMode, overridedDefaultValue: defaultFrameSettings?.msaaMode ?? MSAAMode.FromHDRPAsset, customGetter: () => serialized.msaaMode.GetEnumValue <MSAAMode>(), customSetter: v => serialized.msaaMode.SetEnumValue((MSAAMode)v), hasMixedValues: serialized.msaaMode.hasMultipleDifferentValues ); area.AmmendInfo(FrameSettingsField.AlphaToMask, ignoreDependencies: true); area.AmmendInfo(FrameSettingsField.DecalLayers, ignoreDependencies: true); area.AmmendInfo(FrameSettingsField.ObjectMotionVectors, ignoreDependencies: true); area.AmmendInfo(FrameSettingsField.TransparentsWriteMotionVector, ignoreDependencies: true); var isEditingCamera = owner is HDCameraEditor; area.AmmendInfo(FrameSettingsField.Postprocess, overrideable: () => isEditingCamera); var hdrpAsset = GetHDRPAssetFor(owner); RenderPipelineSettings qualityLevelSettings = hdrpAsset?.currentPlatformRenderPipelineSettings ?? default; area.AmmendInfo( FrameSettingsField.LODBiasMode, overridedDefaultValue: LODBiasMode.FromQualitySettings, customGetter: () => serialized.lodBiasMode.GetEnumValue <LODBiasMode>(), customSetter: v => serialized.lodBiasMode.SetEnumValue((LODBiasMode)v), hasMixedValues: serialized.lodBiasMode.hasMultipleDifferentValues ); area.AmmendInfo(FrameSettingsField.LODBiasQualityLevel, overridedDefaultValue: ScalableLevel3ForFrameSettingsUIOnly.Low, customGetter: () => (ScalableLevel3ForFrameSettingsUIOnly)serialized.lodBiasQualityLevel.intValue, customSetter: v => serialized.lodBiasQualityLevel.intValue = (int)v, overrideable: () => serialized.lodBiasMode.GetEnumValue <LODBiasMode>() != LODBiasMode.OverrideQualitySettings, ignoreDependencies: true, hasMixedValues: serialized.lodBiasQualityLevel.hasMultipleDifferentValues); area.AmmendInfo(FrameSettingsField.LODBias, overridedDefaultValue: hdrpAsset ? qualityLevelSettings.lodBias[serialized.lodBiasQualityLevel.intValue] : 0, customGetter: () => serialized.lodBias.floatValue, customSetter: v => serialized.lodBias.floatValue = (float)v, overrideable: () => serialized.lodBiasMode.GetEnumValue <LODBiasMode>() != LODBiasMode.FromQualitySettings, ignoreDependencies: true, labelOverride: serialized.lodBiasMode.GetEnumValue <LODBiasMode>() == LODBiasMode.ScaleQualitySettings ? "Scale Factor" : "LOD Bias", hasMixedValues: serialized.lodBias.hasMultipleDifferentValues); area.AmmendInfo( FrameSettingsField.MaximumLODLevelMode, overridedDefaultValue: MaximumLODLevelMode.FromQualitySettings, customGetter: () => serialized.maximumLODLevelMode.GetEnumValue <MaximumLODLevelMode>(), customSetter: v => serialized.maximumLODLevelMode.SetEnumValue((MaximumLODLevelMode)v), hasMixedValues: serialized.maximumLODLevelMode.hasMultipleDifferentValues ); area.AmmendInfo(FrameSettingsField.MaximumLODLevelQualityLevel, overridedDefaultValue: ScalableLevel3ForFrameSettingsUIOnly.Low, customGetter: () => (ScalableLevel3ForFrameSettingsUIOnly)serialized.maximumLODLevelQualityLevel.intValue, customSetter: v => serialized.maximumLODLevelQualityLevel.intValue = (int)v, overrideable: () => serialized.maximumLODLevelMode.GetEnumValue <MaximumLODLevelMode>() != MaximumLODLevelMode.OverrideQualitySettings, ignoreDependencies: true, hasMixedValues: serialized.maximumLODLevelQualityLevel.hasMultipleDifferentValues); area.AmmendInfo(FrameSettingsField.MaximumLODLevel, overridedDefaultValue: hdrpAsset ? qualityLevelSettings.maximumLODLevel[serialized.maximumLODLevelQualityLevel.intValue] : 0, customGetter: () => serialized.maximumLODLevel.intValue, customSetter: v => serialized.maximumLODLevel.intValue = (int)v, overrideable: () => serialized.maximumLODLevelMode.GetEnumValue <MaximumLODLevelMode>() != MaximumLODLevelMode.FromQualitySettings, ignoreDependencies: true, labelOverride: serialized.maximumLODLevelMode.GetEnumValue <MaximumLODLevelMode>() == MaximumLODLevelMode.OffsetQualitySettings ? "Offset Factor" : "Maximum LOD Level", hasMixedValues: serialized.maximumLODLevel.hasMultipleDifferentValues); area.AmmendInfo(FrameSettingsField.MaterialQualityLevel, overridedDefaultValue: defaultFrameSettings?.materialQuality.Into() ?? MaterialQualityMode.Medium, customGetter: () => ((MaterialQuality)serialized.materialQuality.intValue).Into(), customSetter: v => serialized.materialQuality.intValue = (int)((MaterialQualityMode)v).Into(), hasMixedValues: serialized.materialQuality.hasMultipleDifferentValues ); area.Draw(withOverride); GUI.enabled = isGUIenabled; }
static void Drawer_SectionRenderingSettings(SerializedFrameSettings serialized, Editor owner, bool withOverride) { RenderPipelineSettings hdrpSettings = GetHDRPAssetFor(owner).currentPlatformRenderPipelineSettings; FrameSettings defaultFrameSettings = GetDefaultFrameSettingsFor(owner); var area = OverridableFrameSettingsArea.GetGroupContent(0, defaultFrameSettings, serialized); var frameSettingType = owner is IDefaultFrameSettingsType getType?getType.GetFrameSettingsType() : FrameSettingsRenderType.Camera; LitShaderMode defaultShaderLitMode; switch (hdrpSettings.supportedLitShaderMode) { case RenderPipelineSettings.SupportedLitShaderMode.ForwardOnly: defaultShaderLitMode = LitShaderMode.Forward; break; case RenderPipelineSettings.SupportedLitShaderMode.DeferredOnly: defaultShaderLitMode = LitShaderMode.Deferred; break; case RenderPipelineSettings.SupportedLitShaderMode.Both: defaultShaderLitMode = defaultFrameSettings.litShaderMode; break; default: throw new System.ArgumentOutOfRangeException("Unknown ShaderLitMode"); } area.AmmendInfo(FrameSettingsField.LitShaderMode, overrideable: () => hdrpSettings.supportedLitShaderMode == RenderPipelineSettings.SupportedLitShaderMode.Both, overridedDefaultValue: defaultShaderLitMode); bool hdrpAssetSupportForward = hdrpSettings.supportedLitShaderMode != RenderPipelineSettings.SupportedLitShaderMode.DeferredOnly; bool hdrpAssetSupportDeferred = hdrpSettings.supportedLitShaderMode != RenderPipelineSettings.SupportedLitShaderMode.ForwardOnly; bool frameSettingsOverrideToForward = serialized.GetOverrides(FrameSettingsField.LitShaderMode) && serialized.litShaderMode == LitShaderMode.Forward; bool frameSettingsOverrideToDeferred = serialized.GetOverrides(FrameSettingsField.LitShaderMode) && serialized.litShaderMode == LitShaderMode.Deferred; bool defaultForwardUsed = !serialized.GetOverrides(FrameSettingsField.LitShaderMode) && defaultShaderLitMode == LitShaderMode.Forward; bool defaultDefferedUsed = !serialized.GetOverrides(FrameSettingsField.LitShaderMode) && defaultShaderLitMode == LitShaderMode.Deferred; bool msaaEnablable = hdrpAssetSupportForward && hdrpSettings.supportMSAA && (frameSettingsOverrideToForward || defaultForwardUsed); bool depthPrepassEnablable = hdrpAssetSupportDeferred && (defaultDefferedUsed || frameSettingsOverrideToDeferred); 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"); } }); 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 || defaultDefferedUsed); default: throw new System.ArgumentOutOfRangeException("Unknown ShaderLitMode"); } }); area.AmmendInfo(FrameSettingsField.RayTracing, overrideable: () => hdrpSettings.supportRayTracing); area.AmmendInfo(FrameSettingsField.MotionVectors, overrideable: () => hdrpSettings.supportMotionVectors); area.AmmendInfo(FrameSettingsField.ObjectMotionVectors, overrideable: () => hdrpSettings.supportMotionVectors); area.AmmendInfo(FrameSettingsField.TransparentsWriteMotionVector, overrideable: () => hdrpSettings.supportMotionVectors); area.AmmendInfo(FrameSettingsField.Decals, overrideable: () => hdrpSettings.supportDecals); area.AmmendInfo(FrameSettingsField.DecalLayers, overrideable: () => hdrpSettings.supportDecalLayers); area.AmmendInfo(FrameSettingsField.Distortion, overrideable: () => hdrpSettings.supportDistortion); area.AmmendInfo(FrameSettingsField.Postprocess, overrideable: () => (frameSettingType != FrameSettingsRenderType.CustomOrBakedReflection && frameSettingType != FrameSettingsRenderType.RealtimeReflection)); area.AmmendInfo( FrameSettingsField.LODBiasMode, overridedDefaultValue: LODBiasMode.FromQualitySettings, customGetter: () => serialized.lodBiasMode.GetEnumValue <LODBiasMode>(), customSetter: v => serialized.lodBiasMode.SetEnumValue((LODBiasMode)v), hasMixedValues: serialized.lodBiasMode.hasMultipleDifferentValues ); area.AmmendInfo(FrameSettingsField.LODBiasQualityLevel, overridedDefaultValue: ScalableLevel3ForFrameSettingsUIOnly.Low, customGetter: () => (ScalableLevel3ForFrameSettingsUIOnly)serialized.lodBiasQualityLevel.intValue, customSetter: v => serialized.lodBiasQualityLevel.intValue = (int)v, customOverrideable: () => serialized.lodBiasMode.GetEnumValue <LODBiasMode>() != LODBiasMode.OverrideQualitySettings, hasMixedValues: serialized.lodBiasQualityLevel.hasMultipleDifferentValues); area.AmmendInfo(FrameSettingsField.LODBias, overridedDefaultValue: QualitySettings.lodBias, customGetter: () => serialized.lodBias.floatValue, customSetter: v => serialized.lodBias.floatValue = (float)v, customOverrideable: () => serialized.lodBiasMode.GetEnumValue <LODBiasMode>() != LODBiasMode.FromQualitySettings, labelOverride: serialized.lodBiasMode.GetEnumValue <LODBiasMode>() == LODBiasMode.ScaleQualitySettings ? "Scale Factor" : "LOD Bias", hasMixedValues: serialized.lodBias.hasMultipleDifferentValues); area.AmmendInfo( FrameSettingsField.MaximumLODLevelMode, overridedDefaultValue: MaximumLODLevelMode.FromQualitySettings, customGetter: () => serialized.maximumLODLevelMode.GetEnumValue <MaximumLODLevelMode>(), customSetter: v => serialized.maximumLODLevelMode.SetEnumValue((MaximumLODLevelMode)v), hasMixedValues: serialized.maximumLODLevelMode.hasMultipleDifferentValues ); area.AmmendInfo(FrameSettingsField.MaximumLODLevelQualityLevel, overridedDefaultValue: ScalableLevel3ForFrameSettingsUIOnly.Low, customGetter: () => (ScalableLevel3ForFrameSettingsUIOnly)serialized.maximumLODLevelQualityLevel.intValue, customSetter: v => serialized.maximumLODLevelQualityLevel.intValue = (int)v, customOverrideable: () => serialized.maximumLODLevelMode.GetEnumValue <MaximumLODLevelMode>() != MaximumLODLevelMode.OverrideQualitySettings, hasMixedValues: serialized.maximumLODLevelQualityLevel.hasMultipleDifferentValues); area.AmmendInfo(FrameSettingsField.MaximumLODLevel, overridedDefaultValue: QualitySettings.maximumLODLevel, customGetter: () => serialized.maximumLODLevel.intValue, customSetter: v => serialized.maximumLODLevel.intValue = (int)v, customOverrideable: () => serialized.maximumLODLevelMode.GetEnumValue <MaximumLODLevelMode>() != MaximumLODLevelMode.FromQualitySettings, labelOverride: serialized.maximumLODLevelMode.GetEnumValue <MaximumLODLevelMode>() == MaximumLODLevelMode.OffsetQualitySettings ? "Offset Factor" : "Maximum LOD Level", hasMixedValues: serialized.maximumLODLevel.hasMultipleDifferentValues); area.AmmendInfo(FrameSettingsField.MaterialQualityLevel, overridedDefaultValue: defaultFrameSettings.materialQuality.Into(), customGetter: () => ((MaterialQuality)serialized.materialQuality.intValue).Into(), customSetter: v => serialized.materialQuality.intValue = (int)((MaterialQualityMode)v).Into(), hasMixedValues: serialized.materialQuality.hasMultipleDifferentValues ); area.Draw(withOverride); }
public static OverridableFrameSettingsArea GetGroupContent(int groupIndex, FrameSettings defaultFrameSettings, SerializedFrameSettings serializedFrameSettings) { if (!attributesGroup.ContainsKey(groupIndex) || attributesGroup[groupIndex] == null) { attributesGroup[groupIndex] = attributes?.Where(pair => pair.Value?.group == groupIndex)?.OrderBy(pair => pair.Value.orderInGroup); } if (!attributesGroup.ContainsKey(groupIndex)) { throw new ArgumentException("Unknown groupIndex"); } var area = new OverridableFrameSettingsArea(attributesGroup[groupIndex].Count(), defaultFrameSettings, serializedFrameSettings); foreach (var field in attributesGroup[groupIndex]) { area.Add(field.Key); } return(area); }
public OverridableFrameSettingsArea(int capacity, FrameSettings defaultFrameSettings, SerializedFrameSettings serializedFrameSettings) { fields = new List <Field>(capacity); this.defaultFrameSettings = defaultFrameSettings; this.serializedFrameSettings = serializedFrameSettings; }
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 { value = defaultFrameSettings.IsEnabled(field); } return(value ^ negative); }
public SerializedHDCamera(SerializedObject serializedObject) { this.serializedObject = serializedObject; projectionMatrixMode = serializedObject.FindProperty("m_projectionMatrixMode"); var additionals = CoreEditorUtils.GetAdditionalData <HDAdditionalCameraData>(serializedObject.targetObjects, HDAdditionalCameraData.InitDefaultHDAdditionalCameraData); serializedAdditionalDataObject = new SerializedObject(additionals); var hideFlags = serializedAdditionalDataObject.FindProperty("m_ObjectHideFlags"); // We don't hide additional camera data anymore on UX team request. To be compatible with already author scene we force to be visible if ((hideFlags.intValue & (int)HideFlags.HideInInspector) > 0) { hideFlags.intValue = (int)HideFlags.None; } serializedAdditionalDataObject.ApplyModifiedProperties(); // Common properties dithering = serializedAdditionalDataObject.Find((HDAdditionalCameraData d) => d.dithering); stopNaNs = serializedAdditionalDataObject.Find((HDAdditionalCameraData d) => d.stopNaNs); allowDynamicResolution = serializedAdditionalDataObject.Find((HDAdditionalCameraData d) => d.allowDynamicResolution); volumeLayerMask = serializedAdditionalDataObject.Find((HDAdditionalCameraData d) => d.volumeLayerMask); clearDepth = serializedAdditionalDataObject.Find((HDAdditionalCameraData d) => d.clearDepth); antialiasing = serializedAdditionalDataObject.Find((HDAdditionalCameraData d) => d.antialiasing); // HDRP specific properties iso = serializedAdditionalDataObject.FindProperty("physicalParameters.m_Iso"); shutterSpeed = serializedAdditionalDataObject.FindProperty("physicalParameters.m_ShutterSpeed"); aperture = serializedAdditionalDataObject.FindProperty("physicalParameters.m_Aperture"); bladeCount = serializedAdditionalDataObject.FindProperty("physicalParameters.m_BladeCount"); curvature = serializedAdditionalDataObject.FindProperty("physicalParameters.m_Curvature"); barrelClipping = serializedAdditionalDataObject.FindProperty("physicalParameters.m_BarrelClipping"); anamorphism = serializedAdditionalDataObject.FindProperty("physicalParameters.m_Anamorphism"); exposureTarget = serializedAdditionalDataObject.Find((HDAdditionalCameraData d) => d.exposureTarget); SMAAQuality = serializedAdditionalDataObject.Find((HDAdditionalCameraData d) => d.SMAAQuality); taaSharpenStrength = serializedAdditionalDataObject.Find((HDAdditionalCameraData d) => d.taaSharpenStrength); taaQualityLevel = serializedAdditionalDataObject.Find((HDAdditionalCameraData d) => d.TAAQuality); taaHistorySharpening = serializedAdditionalDataObject.Find((HDAdditionalCameraData d) => d.taaHistorySharpening); taaAntiFlicker = serializedAdditionalDataObject.Find((HDAdditionalCameraData d) => d.taaAntiFlicker); taaMotionVectorRejection = serializedAdditionalDataObject.Find((HDAdditionalCameraData d) => d.taaMotionVectorRejection); taaAntiRinging = serializedAdditionalDataObject.Find((HDAdditionalCameraData d) => d.taaAntiHistoryRinging); taaQualityLevel = serializedAdditionalDataObject.Find((HDAdditionalCameraData d) => d.TAAQuality); clearColorMode = serializedAdditionalDataObject.Find((HDAdditionalCameraData d) => d.clearColorMode); backgroundColorHDR = serializedAdditionalDataObject.Find((HDAdditionalCameraData d) => d.backgroundColorHDR); xrRendering = serializedAdditionalDataObject.Find((HDAdditionalCameraData d) => d.xrRendering); passThrough = serializedAdditionalDataObject.Find((HDAdditionalCameraData d) => d.fullscreenPassthrough); customRenderingSettings = serializedAdditionalDataObject.Find((HDAdditionalCameraData d) => d.customRenderingSettings); volumeAnchorOverride = serializedAdditionalDataObject.Find((HDAdditionalCameraData d) => d.volumeAnchorOverride); probeLayerMask = serializedAdditionalDataObject.Find((HDAdditionalCameraData d) => d.probeLayerMask); frameSettings = new SerializedFrameSettings( serializedAdditionalDataObject.FindProperty("m_RenderingPathCustomFrameSettings"), serializedAdditionalDataObject.Find((HDAdditionalCameraData d) => d.renderingPathCustomFrameSettingsOverrideMask) ); baseCameraSettings = new CameraEditor.Settings(serializedObject); baseCameraSettings.OnEnable(); }
static void Drawer_SectionRenderingSettings(SerializedFrameSettings serialized, Editor owner, bool withOverride) { RenderPipelineSettings hdrpSettings = GetHDRPAssetFor(owner).currentPlatformRenderPipelineSettings; FrameSettings defaultFrameSettings = GetDefaultFrameSettingsFor(owner); var area = OverridableFrameSettingsArea.GetGroupContent(0, defaultFrameSettings, serialized); LitShaderMode defaultShaderLitMode; switch (hdrpSettings.supportedLitShaderMode) { case RenderPipelineSettings.SupportedLitShaderMode.ForwardOnly: defaultShaderLitMode = LitShaderMode.Forward; break; case RenderPipelineSettings.SupportedLitShaderMode.DeferredOnly: defaultShaderLitMode = LitShaderMode.Deferred; break; case RenderPipelineSettings.SupportedLitShaderMode.Both: defaultShaderLitMode = defaultFrameSettings.litShaderMode; break; default: throw new System.ArgumentOutOfRangeException("Unknown ShaderLitMode"); } area.AmmendInfo(FrameSettingsField.LitShaderMode, overrideable: () => hdrpSettings.supportedLitShaderMode == RenderPipelineSettings.SupportedLitShaderMode.Both, overridedDefaultValue: defaultShaderLitMode); bool hdrpAssetSupportForward = hdrpSettings.supportedLitShaderMode != RenderPipelineSettings.SupportedLitShaderMode.DeferredOnly; bool hdrpAssetSupportDeferred = hdrpSettings.supportedLitShaderMode != RenderPipelineSettings.SupportedLitShaderMode.ForwardOnly; bool frameSettingsOverrideToForward = serialized.GetOverrides(FrameSettingsField.LitShaderMode) && serialized.litShaderMode == LitShaderMode.Forward; bool frameSettingsOverrideToDeferred = serialized.GetOverrides(FrameSettingsField.LitShaderMode) && serialized.litShaderMode == LitShaderMode.Deferred; bool defaultForwardUsed = !serialized.GetOverrides(FrameSettingsField.LitShaderMode) && defaultShaderLitMode == LitShaderMode.Forward; bool defaultDefferedUsed = !serialized.GetOverrides(FrameSettingsField.LitShaderMode) && defaultShaderLitMode == LitShaderMode.Deferred; bool msaaEnablable = hdrpAssetSupportForward && hdrpSettings.supportMSAA && (frameSettingsOverrideToForward || defaultForwardUsed); bool depthPrepassEnablable = hdrpAssetSupportDeferred && (defaultDefferedUsed || frameSettingsOverrideToDeferred); 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"); } }); 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 || defaultDefferedUsed); default: throw new System.ArgumentOutOfRangeException("Unknown ShaderLitMode"); } }); area.AmmendInfo(FrameSettingsField.RayTracing, overrideable: () => hdrpSettings.supportRayTracing); area.AmmendInfo(FrameSettingsField.MotionVectors, overrideable: () => hdrpSettings.supportMotionVectors); area.AmmendInfo(FrameSettingsField.ObjectMotionVectors, overrideable: () => hdrpSettings.supportMotionVectors); area.AmmendInfo(FrameSettingsField.Decals, overrideable: () => hdrpSettings.supportDecals); area.AmmendInfo(FrameSettingsField.Distortion, overrideable: () => hdrpSettings.supportDistortion); area.AmmendInfo( FrameSettingsField.LODBiasMode, overridedDefaultValue: LODBiasMode.FromQualitySettings, customGetter: () => (LODBiasMode)serialized.lodBiasMode.enumValueIndex, customSetter: v => serialized.lodBiasMode.enumValueIndex = (int)v ); area.AmmendInfo(FrameSettingsField.LODBiasQualityLevel, overridedDefaultValue: ScalableSetting.Level.Low, customGetter: () => (ScalableSetting.Level)serialized.lodBiasQualityLevel.enumValueIndex, customSetter: v => serialized.lodBiasQualityLevel.enumValueIndex = (int)v, customOverrideable: () => serialized.lodBiasMode.enumValueIndex != (int)LODBiasMode.OverrideQualitySettings); area.AmmendInfo(FrameSettingsField.LODBias, overridedDefaultValue: QualitySettings.lodBias, customGetter: () => serialized.lodBias.floatValue, customSetter: v => serialized.lodBias.floatValue = (float)v, customOverrideable: () => serialized.lodBiasMode.enumValueIndex != (int)LODBiasMode.FromQualitySettings, labelOverride: serialized.lodBiasMode.enumValueIndex == (int)LODBiasMode.ScaleQualitySettings ? "Scale Factor" : "LOD Bias"); area.AmmendInfo( FrameSettingsField.MaximumLODLevelMode, overridedDefaultValue: MaximumLODLevelMode.FromQualitySettings, customGetter: () => (MaximumLODLevelMode)serialized.maximumLODLevelMode.enumValueIndex, customSetter: v => serialized.maximumLODLevelMode.enumValueIndex = (int)v ); area.AmmendInfo(FrameSettingsField.MaximumLODLevelQualityLevel, overridedDefaultValue: ScalableSetting.Level.Low, customGetter: () => (ScalableSetting.Level)serialized.maximumLODLevelQualityLevel.enumValueIndex, customSetter: v => serialized.maximumLODLevelQualityLevel.enumValueIndex = (int)v, customOverrideable: () => serialized.maximumLODLevelMode.enumValueIndex != (int)MaximumLODLevelMode.OverrideQualitySettings); area.AmmendInfo(FrameSettingsField.MaximumLODLevel, overridedDefaultValue: QualitySettings.maximumLODLevel, customGetter: () => serialized.maximumLODLevel.intValue, customSetter: v => serialized.maximumLODLevel.intValue = (int)v, customOverrideable: () => serialized.maximumLODLevelMode.enumValueIndex != (int)MaximumLODLevelMode.FromQualitySettings, labelOverride: serialized.maximumLODLevelMode.enumValueIndex == (int)MaximumLODLevelMode.OffsetQualitySettings ? "Offset Factor" : "Maximum LOD Level"); area.AmmendInfo(FrameSettingsField.MaterialQualityLevel, overridedDefaultValue: defaultFrameSettings.materialQuality.Into(), customGetter: () => ((MaterialQuality)serialized.materialQuality.intValue).Into(), customSetter: v => serialized.materialQuality.intValue = (int)((MaterialQualityMode)v).Into() ); area.Draw(withOverride); }