ColorGradingModel.cs
9.79 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
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;
}
}
}