I added a log message to the suspension force calculation and set debug mode on the SuspL01 wheel
in the function: void UMMTSuspensionStack::CalculateAndApplySuspensionForce(const float& DeltaTime)
if (SuspensionSettings.bEnableDebugMode)
{
UE_LOG(MMT_Log, Error, TEXT("delta time: %s Spring Force %s Damping: %s Spring delta: %s SuspensionForceMagnitude %s Suspension Force: %s"),
*FString::SanitizeFloat(DeltaTime, 6),
*FString::SanitizeFloat(SpringForce, 6),
*FString::SanitizeFloat(SpringDamping, 6),
*FString::SanitizeFloat(SpringDelta, 6),
*FString::SanitizeFloat(SuspensionForceMagnitude, 6),
*FString::SanitizeFloat(SuspensionForceWS.Size(), 6)
);
DrawDebugLine(ParentComponentRef->GetWorld(), ReferenceFrameTransform.GetLocation(), ReferenceFrameTransform.GetLocation() + SuspensionForceWS * 0.0001f, FColor::Blue, false, 0.0f, 50, 1.0f);
DrawDebugString(ParentComponentRef->GetWorld(), ReferenceFrameTransform.GetLocation(), FString::SanitizeFloat(SuspensionForceMagnitude), 0, FColor::Blue, 0.0f, false);
}
Looking at the output I can see a significant difference in the final forces being calculated.
In this set of entries from around first contact with the ground: (debug “stable” first, non-debug “unstable” second)
MMT_Log: Error: delta time: 0.011111 Spring Force 0.000000 Damping: 0.000000 Spring delta: 0.000000 Suspension Force: 0.000000
MMT_Log: Error: delta time: 0.011111 Spring Force 0.000000 Damping: 0.000000 Spring delta: 0.000000 Suspension Force: 0.000000
MMT_Log: Error: delta time: 0.011111 Spring Force 546858.000000 Damping: -546858.000000 Spring delta: 0.841320 Suspension Force: 1093715.875000
MMT_Log: Error: delta time: 0.011111 Spring Force 713410.187500 Damping: -713410.187500 Spring delta: 2.121735 Suspension Force: 1426820.250000
MMT_Log: Error: delta time: 0.011111 Spring Force 738128.000000 Damping: -738128.000000 Spring delta: 3.338608 Suspension Force: 1476255.875000
MMT_Log: Error: delta time: 0.011111 Spring Force 0.000000 Damping: 0.000000 Spring delta: 0.000000 Suspension Force: 0.000000
MMT_Log: Error: delta time: 0.011111 Spring Force 0.000000 Damping: 0.000000 Spring delta: 0.000000 Suspension Force: 0.000000
MMT_Log: Error: delta time: 0.011111 Spring Force 546855.562500 Damping: -546855.562500 Spring delta: 0.841316 Suspension Force: 217897360.000000
MMT_Log: Error: delta time: 0.011111 Spring Force 1462500.000000 Damping: -1462500.000000 Spring delta: 39.998283 Suspension Force: 582740480.000000
MMT_Log: Error: delta time: 0.011111 Spring Force 1462500.000000 Damping: -481.977570 Spring delta: 39.998821 Suspension Force: 291466272.000000
Comparing the two lines:
MMT_Log: Error: delta time: 0.011111 Spring Force 546858.000000 Damping: -546858.000000 Spring delta: 0.841320 Suspension Force: 1093715.875000
MMT_Log: Error: delta time: 0.011111 Spring Force 546855.562500 Damping: -546855.562500 Spring delta: 0.841316 Suspension Force: 217897360.000000
The spring movement, force and damping calculations are almost identical, but the final vector magnitude differs wildly