Example #1
0
        private EmissionData GetInterpolatedEmissionData(float time)
        {
            if (emissionDataKeys.Count == 0)
            {
                return(new EmissionData());
            }

            var nearest = FindClosestIndex(emissionDataKeys, time);

            var param0 = emissionDataKeys[nearest].Item1;

            if (param0 >= time && nearest == 0)
            {
                return(emissionDataKeys[0].Item2);
            }
            else if (param0 <= time && nearest == emissionDataKeys.Count - 1)
            {
                return(emissionDataKeys[emissionDataKeys.Count - 1].Item2);
            }
            else if (param0 > time)
            {
                nearest--;
            }

            var param1 = emissionDataKeys[nearest + 1].Item1;

            var alpha = (time - param0) / (param1 - param0);

            var val0 = emissionDataKeys[nearest].Item2;
            var val1 = emissionDataKeys[nearest + 1].Item2;

            // use smoothstep
            alpha = Mathf.SmoothStep(0, 1, Mathf.Clamp01(alpha));

            return(EmissionData.Lerp(val0, val1, alpha));
        }
Example #2
0
            public static EmissionData Lerp(EmissionData a, EmissionData b, float alpha)
            {
                var r = Mathf.Lerp(a.Radius, b.Radius, alpha);

                return(new EmissionData(r));
            }