using System; namespace UnityEngine.Rendering.HighDefinition { /// /// Scalable Quality Level Parameter. /// [Serializable] public sealed class ScalableSettingLevelParameter : IntParameter { /// Number of quality levels. public const int LevelCount = 3; /// Quality levels. public enum Level { /// Low Quality. Low, /// Medium Quality. Medium, /// High Quality. High } /// /// Scalable Quality Level Parameter constructor. /// /// Initial quality level. /// Use local override. /// Override state. public ScalableSettingLevelParameter(int level, bool useOverride, bool overrideState = false) : base(useOverride ? LevelCount : (int)level, overrideState) { } internal static int GetScalableSettingLevelParameterValue(int level, bool useOverride) { return useOverride ? LevelCount : (int)level; } /// /// Level and Override. /// public (int level, bool useOverride) levelAndOverride { get => value == LevelCount ? ((int)Level.Low, true) : (value, false); set { var(level, useOverride) = value; this.value = GetScalableSettingLevelParameterValue(level, useOverride); } } } /// /// Post Processing Quality Settings. /// [Serializable] public sealed class GlobalPostProcessingQualitySettings { static int s_QualitySettingCount = ScalableSettingLevelParameter.LevelCount; internal GlobalPostProcessingQualitySettings() { /* Depth of Field */ NearBlurSampleCount[(int)ScalableSettingLevelParameter.Level.Low] = 3; NearBlurSampleCount[(int)ScalableSettingLevelParameter.Level.Medium] = 5; NearBlurSampleCount[(int)ScalableSettingLevelParameter.Level.High] = 8; NearBlurMaxRadius[(int)ScalableSettingLevelParameter.Level.Low] = 2.0f; NearBlurMaxRadius[(int)ScalableSettingLevelParameter.Level.Medium] = 4.0f; NearBlurMaxRadius[(int)ScalableSettingLevelParameter.Level.High] = 7.0f; FarBlurSampleCount[(int)ScalableSettingLevelParameter.Level.Low] = 4; FarBlurSampleCount[(int)ScalableSettingLevelParameter.Level.Medium] = 7; FarBlurSampleCount[(int)ScalableSettingLevelParameter.Level.High] = 14; FarBlurMaxRadius[(int)ScalableSettingLevelParameter.Level.Low] = 5.0f; FarBlurMaxRadius[(int)ScalableSettingLevelParameter.Level.Medium] = 8.0f; FarBlurMaxRadius[(int)ScalableSettingLevelParameter.Level.High] = 13.0f; DoFResolution[(int)ScalableSettingLevelParameter.Level.Low] = DepthOfFieldResolution.Quarter; DoFResolution[(int)ScalableSettingLevelParameter.Level.Medium] = DepthOfFieldResolution.Half; DoFResolution[(int)ScalableSettingLevelParameter.Level.High] = DepthOfFieldResolution.Full; DoFHighQualityFiltering[(int)ScalableSettingLevelParameter.Level.Low] = false; DoFHighQualityFiltering[(int)ScalableSettingLevelParameter.Level.Medium] = true; DoFHighQualityFiltering[(int)ScalableSettingLevelParameter.Level.High] = true; /* Motion Blur */ MotionBlurSampleCount[(int)ScalableSettingLevelParameter.Level.Low] = 4; MotionBlurSampleCount[(int)ScalableSettingLevelParameter.Level.Medium] = 8; MotionBlurSampleCount[(int)ScalableSettingLevelParameter.Level.High] = 12; /* Bloom */ BloomRes[(int)ScalableSettingLevelParameter.Level.Low] = BloomResolution.Quarter; BloomRes[(int)ScalableSettingLevelParameter.Level.Medium] = BloomResolution.Half; BloomRes[(int)ScalableSettingLevelParameter.Level.High] = BloomResolution.Half; BloomHighQualityFiltering[(int)ScalableSettingLevelParameter.Level.Low] = false; BloomHighQualityFiltering[(int)ScalableSettingLevelParameter.Level.Medium] = true; BloomHighQualityFiltering[(int)ScalableSettingLevelParameter.Level.High] = true; BloomHighQualityPrefiltering[(int)ScalableSettingLevelParameter.Level.Low] = false; BloomHighQualityPrefiltering[(int)ScalableSettingLevelParameter.Level.Medium] = false; BloomHighQualityPrefiltering[(int)ScalableSettingLevelParameter.Level.High] = true; /* Chromatic Aberration */ ChromaticAberrationMaxSamples[(int)ScalableSettingLevelParameter.Level.Low] = 3; ChromaticAberrationMaxSamples[(int)ScalableSettingLevelParameter.Level.Medium] = 6; ChromaticAberrationMaxSamples[(int)ScalableSettingLevelParameter.Level.High] = 12; } internal static GlobalPostProcessingQualitySettings NewDefault() => new GlobalPostProcessingQualitySettings(); /* Depth of field */ /// Depth of field near blur sample count for each quality level. public int[] NearBlurSampleCount = new int[s_QualitySettingCount]; /// Depth of field near blur maximum radius for each quality level. public float[] NearBlurMaxRadius = new float[s_QualitySettingCount]; /// Depth of field far blur sample count for each quality level. public int[] FarBlurSampleCount = new int[s_QualitySettingCount]; /// Depth of field far blur maximum radius for each quality level. public float[] FarBlurMaxRadius = new float[s_QualitySettingCount]; /// Depth of field resolution for each quality level. public DepthOfFieldResolution[] DoFResolution = new DepthOfFieldResolution[s_QualitySettingCount]; /// Use Depth of field high quality filtering for each quality level. public bool[] DoFHighQualityFiltering = new bool[s_QualitySettingCount]; /// Use Depth of field high physically based setting for each quality level. public bool[] DoFPhysicallyBased = new bool[s_QualitySettingCount]; /* Motion Blur */ /// Motion Blur sample count for each quality level. public int[] MotionBlurSampleCount = new int[s_QualitySettingCount]; /* Bloom */ /// Bloom resolution for each quality level. public BloomResolution[] BloomRes = new BloomResolution[s_QualitySettingCount]; /// Bloom high quality filtering for each quality level. public bool[] BloomHighQualityFiltering = new bool[s_QualitySettingCount]; /// Bloom high quality prefiltering for each quality level. public bool[] BloomHighQualityPrefiltering = new bool[s_QualitySettingCount]; /* Chromatic Aberration */ /// Chromatic aberration maximum sample count for each quality level. public int[] ChromaticAberrationMaxSamples = new int[s_QualitySettingCount]; } }