You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
242 lines
7.9 KiB
242 lines
7.9 KiB
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; |
|
} |
|
} |
|
}
|
|
|