| | |
| | | using System; |
| | | |
| | | namespace UnityEngine.PostProcessing |
| | | { |
| | | // Small wrapper on top of AnimationCurve to handle zero-key curves and keyframe looping |
| | | |
| | | [Serializable] |
| | | public sealed class ColorGradingCurve |
| | | { |
| | | public AnimationCurve curve; |
| | | |
| | | [SerializeField] |
| | | bool m_Loop; |
| | | |
| | | [SerializeField] |
| | | float m_ZeroValue; |
| | | |
| | | [SerializeField] |
| | | float m_Range; |
| | | |
| | | AnimationCurve m_InternalLoopingCurve; |
| | | |
| | | public ColorGradingCurve(AnimationCurve curve, float zeroValue, bool loop, Vector2 bounds) |
| | | { |
| | | this.curve = curve; |
| | | m_ZeroValue = zeroValue; |
| | | m_Loop = loop; |
| | | m_Range = bounds.magnitude; |
| | | } |
| | | |
| | | public void Cache() |
| | | { |
| | | if (!m_Loop) |
| | | return; |
| | | |
| | | var length = curve.length; |
| | | |
| | | if (length < 2) |
| | | return; |
| | | |
| | | if (m_InternalLoopingCurve == null) |
| | | m_InternalLoopingCurve = new AnimationCurve(); |
| | | |
| | | var prev = curve[length - 1]; |
| | | prev.time -= m_Range; |
| | | var next = curve[0]; |
| | | next.time += m_Range; |
| | | m_InternalLoopingCurve.keys = curve.keys; |
| | | m_InternalLoopingCurve.AddKey(prev); |
| | | m_InternalLoopingCurve.AddKey(next); |
| | | } |
| | | |
| | | public float Evaluate(float t) |
| | | { |
| | | if (curve.length == 0) |
| | | return m_ZeroValue; |
| | | |
| | | if (!m_Loop || curve.length == 1) |
| | | return curve.Evaluate(t); |
| | | |
| | | return m_InternalLoopingCurve.Evaluate(t); |
| | | } |
| | | } |
| | | } |
| | | using System;
|
| | |
|
| | | namespace UnityEngine.PostProcessing
|
| | | {
|
| | | // Small wrapper on top of AnimationCurve to handle zero-key curves and keyframe looping
|
| | |
|
| | | [Serializable]
|
| | | public sealed class ColorGradingCurve
|
| | | {
|
| | | public AnimationCurve curve;
|
| | |
|
| | | [SerializeField]
|
| | | bool m_Loop;
|
| | |
|
| | | [SerializeField]
|
| | | float m_ZeroValue;
|
| | |
|
| | | [SerializeField]
|
| | | float m_Range;
|
| | |
|
| | | AnimationCurve m_InternalLoopingCurve;
|
| | |
|
| | | public ColorGradingCurve(AnimationCurve curve, float zeroValue, bool loop, Vector2 bounds)
|
| | | {
|
| | | this.curve = curve;
|
| | | m_ZeroValue = zeroValue;
|
| | | m_Loop = loop;
|
| | | m_Range = bounds.magnitude;
|
| | | }
|
| | |
|
| | | public void Cache()
|
| | | {
|
| | | if (!m_Loop)
|
| | | return;
|
| | |
|
| | | var length = curve.length;
|
| | |
|
| | | if (length < 2)
|
| | | return;
|
| | |
|
| | | if (m_InternalLoopingCurve == null)
|
| | | m_InternalLoopingCurve = new AnimationCurve();
|
| | |
|
| | | var prev = curve[length - 1];
|
| | | prev.time -= m_Range;
|
| | | var next = curve[0];
|
| | | next.time += m_Range;
|
| | | m_InternalLoopingCurve.keys = curve.keys;
|
| | | m_InternalLoopingCurve.AddKey(prev);
|
| | | m_InternalLoopingCurve.AddKey(next);
|
| | | }
|
| | |
|
| | | public float Evaluate(float t)
|
| | | {
|
| | | if (curve.length == 0)
|
| | | return m_ZeroValue;
|
| | |
|
| | | if (!m_Loop || curve.length == 1)
|
| | | return curve.Evaluate(t);
|
| | |
|
| | | return m_InternalLoopingCurve.Evaluate(t);
|
| | | }
|
| | | }
|
| | | }
|