243 lines
		
	
	
		
			7.9 KiB
		
	
	
	
		
			C#
		
	
	
	
			
		
		
	
	
			243 lines
		
	
	
		
			7.9 KiB
		
	
	
	
		
			C#
		
	
	
	
| 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, 1f)]
 | |
|             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, 1f)]
 | |
|             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;
 | |
|         }
 | |
|     }
 | |
| }
 |