public static float GetEquationTransformedFactor(
        this LerpEquationTypes lerpEquation, float crudeFactor
        )
    {
        crudeFactor = Mathf.Clamp(crudeFactor, 0.0f, 1.0f);

        switch (lerpEquation)
        {
        case LerpEquationTypes.Quadratic:
            crudeFactor = crudeFactor * crudeFactor;
            break;

        case LerpEquationTypes.SmoothCos:
            crudeFactor = (Mathf.Cos(crudeFactor * Mathf.PI) * -0.5f) + 0.5f;
            break;

        case LerpEquationTypes.InverseQuadratic:
            crudeFactor = 1 - ((1 - crudeFactor) * (1 - crudeFactor));
            break;

        case LerpEquationTypes.Smootherstep:
            crudeFactor = crudeFactor * crudeFactor * crudeFactor * (crudeFactor * (6f * crudeFactor - 15f) + 10f);
            break;
        }

        return(crudeFactor);
    }
 public static Quaternion Slerp(
     this LerpEquationTypes lerpEquation, Quaternion start, Quaternion end, float crudeFactor
     )
 {
     return(Quaternion.Slerp(start, end, lerpEquation.GetEquationTransformedFactor(crudeFactor)));
 }
 public static Color Lerp(
     this LerpEquationTypes lerpEquation, Color start, Color end, float crudeFactor
     )
 {
     return(Color.Lerp(start, end, lerpEquation.GetEquationTransformedFactor(crudeFactor)));
 }
 public static float Lerp(
     this LerpEquationTypes lerpEquation, float start, float end, float crudeFactor
     )
 {
     return(Mathf.Lerp(start, end, lerpEquation.GetEquationTransformedFactor(crudeFactor)));
 }
 public static Vector3 Slerp(
     this LerpEquationTypes lerpEquation, Vector3 start, Vector3 end, float crudeFactor
     )
 {
     return(Vector3.Slerp(start, end, lerpEquation.GetEquationTransformedFactor(crudeFactor)));
 }