123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311 |
- using System;
- namespace UnityEngine.PostProcessing
- {
- [Serializable]
- public class ColorGradingModel : PostProcessingModel
- {
- public enum Tonemapper
- {
- None,
- /// <summary>
- /// ACES Filmic reference tonemapper.
- /// </summary>
- ACES,
- /// <summary>
- /// Neutral tonemapper (based off John Hable's & Jim Hejl's work).
- /// </summary>
- Neutral
- }
- [Serializable]
- public struct TonemappingSettings
- {
- [Tooltip("Tonemapping algorithm to use at the end of the color grading process. Use \"Neutral\" if you need a customizable tonemapper or \"Filmic\" to give a standard filmic look to your scenes.")]
- public Tonemapper tonemapper;
- // Neutral settings
- [Range(-0.1f, 0.1f)]
- public float neutralBlackIn;
- [Range(1f, 20f)]
- public float neutralWhiteIn;
- [Range(-0.09f, 0.1f)]
- public float neutralBlackOut;
- [Range(1f, 19f)]
- public float neutralWhiteOut;
- [Range(0.1f, 20f)]
- public float neutralWhiteLevel;
- [Range(1f, 10f)]
- public float neutralWhiteClip;
- public static TonemappingSettings defaultSettings
- {
- get
- {
- return new TonemappingSettings
- {
- tonemapper = Tonemapper.Neutral,
- neutralBlackIn = 0.02f,
- neutralWhiteIn = 10f,
- neutralBlackOut = 0f,
- neutralWhiteOut = 10f,
- neutralWhiteLevel = 5.3f,
- neutralWhiteClip = 10f
- };
- }
- }
- }
- [Serializable]
- public struct BasicSettings
- {
- [Tooltip("Adjusts the overall exposure of the scene in EV units. This is applied after HDR effect and right before tonemapping so it won't affect previous effects in the chain.")]
- public float postExposure;
- [Range(-100f, 100f), Tooltip("Sets the white balance to a custom color temperature.")]
- public float temperature;
- [Range(-100f, 100f), Tooltip("Sets the white balance to compensate for a green or magenta tint.")]
- public float tint;
- [Range(-180f, 180f), Tooltip("Shift the hue of all colors.")]
- public float hueShift;
- [Range(0f, 2f), Tooltip("Pushes the intensity of all colors.")]
- public float saturation;
- [Range(0f, 2f), Tooltip("Expands or shrinks the overall range of tonal values.")]
- public float contrast;
- public static BasicSettings defaultSettings
- {
- get
- {
- return new BasicSettings
- {
- postExposure = 0f,
- temperature = 0f,
- tint = 0f,
- hueShift = 0f,
- saturation = 1f,
- contrast = 1f,
- };
- }
- }
- }
- [Serializable]
- public struct ChannelMixerSettings
- {
- public Vector3 red;
- public Vector3 green;
- public Vector3 blue;
- [HideInInspector]
- public int currentEditingChannel; // Used only in the editor
- public static ChannelMixerSettings defaultSettings
- {
- get
- {
- return new ChannelMixerSettings
- {
- red = new Vector3(1f, 0f, 0f),
- green = new Vector3(0f, 1f, 0f),
- blue = new Vector3(0f, 0f, 1f),
- currentEditingChannel = 0
- };
- }
- }
- }
- [Serializable]
- public struct LogWheelsSettings
- {
- [Trackball("GetSlopeValue")]
- public Color slope;
- [Trackball("GetPowerValue")]
- public Color power;
- [Trackball("GetOffsetValue")]
- public Color offset;
- public static LogWheelsSettings defaultSettings
- {
- get
- {
- return new LogWheelsSettings
- {
- slope = Color.clear,
- power = Color.clear,
- offset = Color.clear
- };
- }
- }
- }
- [Serializable]
- public struct LinearWheelsSettings
- {
- [Trackball("GetLiftValue")]
- public Color lift;
- [Trackball("GetGammaValue")]
- public Color gamma;
- [Trackball("GetGainValue")]
- public Color gain;
- public static LinearWheelsSettings defaultSettings
- {
- get
- {
- return new LinearWheelsSettings
- {
- lift = Color.clear,
- gamma = Color.clear,
- gain = Color.clear
- };
- }
- }
- }
- public enum ColorWheelMode
- {
- Linear,
- Log
- }
- [Serializable]
- public struct ColorWheelsSettings
- {
- public ColorWheelMode mode;
- [TrackballGroup]
- public LogWheelsSettings log;
- [TrackballGroup]
- public LinearWheelsSettings linear;
- public static ColorWheelsSettings defaultSettings
- {
- get
- {
- return new ColorWheelsSettings
- {
- mode = ColorWheelMode.Log,
- log = LogWheelsSettings.defaultSettings,
- linear = LinearWheelsSettings.defaultSettings
- };
- }
- }
- }
- [Serializable]
- public struct CurvesSettings
- {
- public ColorGradingCurve master;
- public ColorGradingCurve red;
- public ColorGradingCurve green;
- public ColorGradingCurve blue;
- public ColorGradingCurve hueVShue;
- public ColorGradingCurve hueVSsat;
- public ColorGradingCurve satVSsat;
- public ColorGradingCurve lumVSsat;
- // Used only in the editor
- [HideInInspector] public int e_CurrentEditingCurve;
- [HideInInspector] public bool e_CurveY;
- [HideInInspector] public bool e_CurveR;
- [HideInInspector] public bool e_CurveG;
- [HideInInspector] public bool e_CurveB;
- public static CurvesSettings defaultSettings
- {
- get
- {
- return new CurvesSettings
- {
- master = new ColorGradingCurve(new AnimationCurve(new Keyframe(0f, 0f, 1f, 1f), new Keyframe(1f, 1f, 1f, 1f)), 0f, false, new Vector2(0f, 1f)),
- red = new ColorGradingCurve(new AnimationCurve(new Keyframe(0f, 0f, 1f, 1f), new Keyframe(1f, 1f, 1f, 1f)), 0f, false, new Vector2(0f, 1f)),
- green = new ColorGradingCurve(new AnimationCurve(new Keyframe(0f, 0f, 1f, 1f), new Keyframe(1f, 1f, 1f, 1f)), 0f, false, new Vector2(0f, 1f)),
- blue = new ColorGradingCurve(new AnimationCurve(new Keyframe(0f, 0f, 1f, 1f), new Keyframe(1f, 1f, 1f, 1f)), 0f, false, new Vector2(0f, 1f)),
- hueVShue = new ColorGradingCurve(new AnimationCurve(), 0.5f, true, new Vector2(0f, 1f)),
- hueVSsat = new ColorGradingCurve(new AnimationCurve(), 0.5f, true, new Vector2(0f, 1f)),
- satVSsat = new ColorGradingCurve(new AnimationCurve(), 0.5f, false, new Vector2(0f, 1f)),
- lumVSsat = new ColorGradingCurve(new AnimationCurve(), 0.5f, false, new Vector2(0f, 1f)),
- e_CurrentEditingCurve = 0,
- e_CurveY = true,
- e_CurveR = false,
- e_CurveG = false,
- e_CurveB = false
- };
- }
- }
- }
- [Serializable]
- public struct Settings
- {
- public TonemappingSettings tonemapping;
- public BasicSettings basic;
- public ChannelMixerSettings channelMixer;
- public ColorWheelsSettings colorWheels;
- public CurvesSettings curves;
- public static Settings defaultSettings
- {
- get
- {
- return new Settings
- {
- tonemapping = TonemappingSettings.defaultSettings,
- basic = BasicSettings.defaultSettings,
- channelMixer = ChannelMixerSettings.defaultSettings,
- colorWheels = ColorWheelsSettings.defaultSettings,
- curves = CurvesSettings.defaultSettings
- };
- }
- }
- }
- [SerializeField]
- Settings m_Settings = Settings.defaultSettings;
- public Settings settings
- {
- get { return m_Settings; }
- set
- {
- m_Settings = value;
- OnValidate();
- }
- }
- public bool isDirty { get; internal set; }
- public RenderTexture bakedLut { get; internal set; }
- public override void Reset()
- {
- m_Settings = Settings.defaultSettings;
- OnValidate();
- }
- public override void OnValidate()
- {
- isDirty = true;
- }
- }
- }
|