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