using System; 
 | 
  
 | 
namespace UnityEngine.PostProcessing 
 | 
{ 
 | 
    [Serializable] 
 | 
    public class AntialiasingModel : PostProcessingModel 
 | 
    { 
 | 
        public enum Method 
 | 
        { 
 | 
            Fxaa, 
 | 
            Taa 
 | 
        } 
 | 
  
 | 
        // Most settings aren't exposed to the user anymore, presets are enough. Still, I'm leaving 
 | 
        // the tooltip attributes in case an user wants to customize each preset. 
 | 
  
 | 
        #region FXAA Settings 
 | 
        public enum FxaaPreset 
 | 
        { 
 | 
            ExtremePerformance, 
 | 
            Performance, 
 | 
            Default, 
 | 
            Quality, 
 | 
            ExtremeQuality 
 | 
        } 
 | 
  
 | 
        [Serializable] 
 | 
        public struct FxaaQualitySettings 
 | 
        { 
 | 
            [Tooltip("The amount of desired sub-pixel aliasing removal. Effects the sharpeness of the output.")] 
 | 
            [Range(0f, 1f)] 
 | 
            public float subpixelAliasingRemovalAmount; 
 | 
  
 | 
            [Tooltip("The minimum amount of local contrast required to qualify a region as containing an edge.")] 
 | 
            [Range(0.063f, 0.333f)] 
 | 
            public float edgeDetectionThreshold; 
 | 
  
 | 
            [Tooltip("Local contrast adaptation value to disallow the algorithm from executing on the darker regions.")] 
 | 
            [Range(0f, 0.0833f)] 
 | 
            public float minimumRequiredLuminance; 
 | 
  
 | 
            public static FxaaQualitySettings[] presets = 
 | 
            { 
 | 
                // ExtremePerformance 
 | 
                new FxaaQualitySettings 
 | 
                { 
 | 
                    subpixelAliasingRemovalAmount = 0f, 
 | 
                    edgeDetectionThreshold = 0.333f, 
 | 
                    minimumRequiredLuminance = 0.0833f 
 | 
                }, 
 | 
  
 | 
                // Performance 
 | 
                new FxaaQualitySettings 
 | 
                { 
 | 
                    subpixelAliasingRemovalAmount = 0.25f, 
 | 
                    edgeDetectionThreshold = 0.25f, 
 | 
                    minimumRequiredLuminance = 0.0833f 
 | 
                }, 
 | 
  
 | 
                // Default 
 | 
                new FxaaQualitySettings 
 | 
                { 
 | 
                    subpixelAliasingRemovalAmount = 0.75f, 
 | 
                    edgeDetectionThreshold = 0.166f, 
 | 
                    minimumRequiredLuminance = 0.0833f 
 | 
                }, 
 | 
  
 | 
                // Quality 
 | 
                new FxaaQualitySettings 
 | 
                { 
 | 
                    subpixelAliasingRemovalAmount = 1f, 
 | 
                    edgeDetectionThreshold = 0.125f, 
 | 
                    minimumRequiredLuminance = 0.0625f 
 | 
                }, 
 | 
  
 | 
                // ExtremeQuality 
 | 
                new FxaaQualitySettings 
 | 
                { 
 | 
                    subpixelAliasingRemovalAmount = 1f, 
 | 
                    edgeDetectionThreshold = 0.063f, 
 | 
                    minimumRequiredLuminance = 0.0312f 
 | 
                } 
 | 
            }; 
 | 
        } 
 | 
  
 | 
        [Serializable] 
 | 
        public struct FxaaConsoleSettings 
 | 
        { 
 | 
            [Tooltip("The amount of spread applied to the sampling coordinates while sampling for subpixel information.")] 
 | 
            [Range(0.33f, 0.5f)] 
 | 
            public float subpixelSpreadAmount; 
 | 
  
 | 
            [Tooltip("This value dictates how sharp the edges in the image are kept; a higher value implies sharper edges.")] 
 | 
            [Range(2f, 8f)] 
 | 
            public float edgeSharpnessAmount; 
 | 
  
 | 
            [Tooltip("The minimum amount of local contrast required to qualify a region as containing an edge.")] 
 | 
            [Range(0.125f, 0.25f)] 
 | 
            public float edgeDetectionThreshold; 
 | 
  
 | 
            [Tooltip("Local contrast adaptation value to disallow the algorithm from executing on the darker regions.")] 
 | 
            [Range(0.04f, 0.06f)] 
 | 
            public float minimumRequiredLuminance; 
 | 
  
 | 
            public static FxaaConsoleSettings[] presets = 
 | 
            { 
 | 
                // ExtremePerformance 
 | 
                new FxaaConsoleSettings 
 | 
                { 
 | 
                    subpixelSpreadAmount = 0.33f, 
 | 
                    edgeSharpnessAmount = 8f, 
 | 
                    edgeDetectionThreshold = 0.25f, 
 | 
                    minimumRequiredLuminance = 0.06f 
 | 
                }, 
 | 
  
 | 
                // Performance 
 | 
                new FxaaConsoleSettings 
 | 
                { 
 | 
                    subpixelSpreadAmount = 0.33f, 
 | 
                    edgeSharpnessAmount = 8f, 
 | 
                    edgeDetectionThreshold = 0.125f, 
 | 
                    minimumRequiredLuminance = 0.06f 
 | 
                }, 
 | 
  
 | 
                // Default 
 | 
                new FxaaConsoleSettings 
 | 
                { 
 | 
                    subpixelSpreadAmount = 0.5f, 
 | 
                    edgeSharpnessAmount = 8f, 
 | 
                    edgeDetectionThreshold = 0.125f, 
 | 
                    minimumRequiredLuminance = 0.05f 
 | 
                }, 
 | 
  
 | 
                // Quality 
 | 
                new FxaaConsoleSettings 
 | 
                { 
 | 
                    subpixelSpreadAmount = 0.5f, 
 | 
                    edgeSharpnessAmount = 4f, 
 | 
                    edgeDetectionThreshold = 0.125f, 
 | 
                    minimumRequiredLuminance = 0.04f 
 | 
                }, 
 | 
  
 | 
                // ExtremeQuality 
 | 
                new FxaaConsoleSettings 
 | 
                { 
 | 
                    subpixelSpreadAmount = 0.5f, 
 | 
                    edgeSharpnessAmount = 2f, 
 | 
                    edgeDetectionThreshold = 0.125f, 
 | 
                    minimumRequiredLuminance = 0.04f 
 | 
                } 
 | 
            }; 
 | 
        } 
 | 
  
 | 
        [Serializable] 
 | 
        public struct FxaaSettings 
 | 
        { 
 | 
            public FxaaPreset preset; 
 | 
  
 | 
            public static FxaaSettings defaultSettings 
 | 
            { 
 | 
                get 
 | 
                { 
 | 
                    return new FxaaSettings 
 | 
                    { 
 | 
                        preset = FxaaPreset.Default 
 | 
                    }; 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
        #endregion 
 | 
  
 | 
        #region TAA Settings 
 | 
        [Serializable] 
 | 
        public struct TaaSettings 
 | 
        { 
 | 
            [Tooltip("The diameter (in texels) inside which jitter samples are spread. Smaller values result in crisper but more aliased output, while larger values result in more stable but blurrier output.")] 
 | 
            [Range(0.1f, 1f)] 
 | 
            public float jitterSpread; 
 | 
  
 | 
            [Tooltip("Controls the amount of sharpening applied to the color buffer.")] 
 | 
            [Range(0f, 3f)] 
 | 
            public float sharpen; 
 | 
  
 | 
            [Tooltip("The blend coefficient for a stationary fragment. Controls the percentage of history sample blended into the final color.")] 
 | 
            [Range(0f, 0.99f)] 
 | 
            public float stationaryBlending; 
 | 
  
 | 
            [Tooltip("The blend coefficient for a fragment with significant motion. Controls the percentage of history sample blended into the final color.")] 
 | 
            [Range(0f, 0.99f)] 
 | 
            public float motionBlending; 
 | 
  
 | 
            public static TaaSettings defaultSettings 
 | 
            { 
 | 
                get 
 | 
                { 
 | 
                    return new TaaSettings 
 | 
                    { 
 | 
                        jitterSpread = 0.75f, 
 | 
                        sharpen = 0.3f, 
 | 
                        stationaryBlending = 0.95f, 
 | 
                        motionBlending = 0.85f 
 | 
                    }; 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
        #endregion 
 | 
  
 | 
        [Serializable] 
 | 
        public struct Settings 
 | 
        { 
 | 
            public Method method; 
 | 
            public FxaaSettings fxaaSettings; 
 | 
            public TaaSettings taaSettings; 
 | 
  
 | 
            public static Settings defaultSettings 
 | 
            { 
 | 
                get 
 | 
                { 
 | 
                    return new Settings 
 | 
                    { 
 | 
                        method = Method.Fxaa, 
 | 
                        fxaaSettings = FxaaSettings.defaultSettings, 
 | 
                        taaSettings = TaaSettings.defaultSettings 
 | 
                    }; 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
  
 | 
        [SerializeField] 
 | 
        Settings m_Settings = Settings.defaultSettings; 
 | 
        public Settings settings 
 | 
        { 
 | 
            get { return m_Settings; } 
 | 
            set { m_Settings = value; } 
 | 
        } 
 | 
  
 | 
        public override void Reset() 
 | 
        { 
 | 
            m_Settings = Settings.defaultSettings; 
 | 
        } 
 | 
    } 
 | 
} 
 |