RBFKernel::Gaussian() is actually not a Gaussian kernel

See Runtime/AnimGraphRuntime/Public/RBF/RBFInterpolator.h. Current implementation:

static inline float Gaussian(float Value, float Sigma)
{
	return FMath::Exp(-Value * FMath::Square(1.0f / Sigma));
}

This kernel is certainly not Gaussian and is not smooth around zero. And the interpolation result will produce spikes around every RBF center.

Actually, this current Gaussian kernel is basically equivalent from the Exponential kernel, only the processing of sigma value is different:

static inline float Exponential(float Value, float Sigma)
{
	return FMath::Exp(-2.0f * Value / Sigma);
}

In Runtime/AnimGraphRuntime/Public/RBF/RBFSolver.cpp, the author wrote:

static float GetWeightedValue(
	float Value, 
	float KernelWidth, 
	ERBFFunctionType FalloffFunctionType,
	bool bBackCompFix = false
)
{
	if (ensure(Value >= 0.0f))
	{
		switch (FalloffFunctionType)
		{
        // ...
		case ERBFFunctionType::Gaussian:
			if (bBackCompFix)
			{
				// This is how the old code formulated it. It has a much wider falloff than the
				// one below it.
				return FMath::Exp(-Value * Value);
			}
			else
			{
				return RBFKernel::Gaussian(Value, KernelWidth);
			}
        }
        // ...
    }
}

The old implementation is correct except that it couldn’t modify the kernel width. For unknown reason, SolveAdditive() use the old implementation above and TRBFInterpolator.interpolate() use the new implementation. I wonder why the developer chose to implement the Gaussian kernel in such a way.