| 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; | 
|         } | 
|     } | 
| } |