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)); }
public static EmissionData Lerp(EmissionData a, EmissionData b, float alpha) { var r = Mathf.Lerp(a.Radius, b.Radius, alpha); return(new EmissionData(r)); }