Description

Up to UE 5.5, skeletal mesh physics did not get updated when the component's scale changed. This was improved on January 2025 with CL 39190335, which addressed [Link Removed] Closed . However, the new code on function USkeletalMeshComponent::UpdateRigidBodyScaling() handles scale updates by computing and using a change factor (SceneRelativeScale / PrevRootRigidBodyScale). When coming back from a situation where the scale was zero, the factor is computed as NaN or Inf, which messes up subsequent calculations and triggers an ensure() inside FBodyInstance::UpdateBodyScale(). After that point, the correct scale value becomes unrecoverable.

One suggested fix would be to detect zero scale and clamp it to some very small nonzero value. Note, though, that almost immediately below the scale factor calculation, there is a comment in the code warning about the drift that may be caused by the current method.

Steps to Reproduce

1. Create and edit a new Actor Blueprint

1.1. Add a SkeletalMeshComponent as the root

1.2. On the component details:

1.2.1. Assign a Skeletal Mesh Asset (e.g. /Engine/Tutorial/SubEditors/TutorialAssets/Character/TutorialTPP)

1.2.2. Set "Collision Presets" to "Ragdoll"

1.2.3. Enable "Simulate Physics"

1.4. On the actor details, set "AutoReceiveInput" to "Player0"

1.5. On the Event Graph, add a couple of keyboard events to call SetRelativeScale3D() on the SkeletalMeshComponent with (0,0,0) and (1,1,1) for the scale

1.6. Save and close

2. Place an instance of the actor blueprint on a level

3. Play In Editor

3.1. Press the key to set the skeletal mesh component scale to (0,0,0) - This may already trigger an ensure() in Chaos::CombineWorldSpace() [MassProperties.cpp]

3.2. Press the key to set the skeletal mesh component scale to (1,1,1) - This produces the NaN value and triggers an ensure() in FBodyInstance::UpdateBodyScale() [BodyInstance.cpp]

Note: The first ensure() above has a fallback behavior, but in the second case the NaN value gets propagated and the correct scale can never again be recovered

Callstack

ensureMsgf ( !Scale3D.ContainsNaN() && !InScale3D.ContainsNaN(), TEXT("Scale3D = (%f,%f,%f) InScale3D = (%f,%f,%f)"), Scale3D.X, Scale3D.Y, Scale3D.Z, InScale3D.X, InScale3D.Y, InScale3D.Z );

UnrealEditor-Engine.dll!??R<lambda_1>@?1??UpdateBodyScale@FBodyInstance@@QEAA_NAEBU?$TVector@N@Math@UE@@_N@Z@QEBA@XZ() Line 2189 C++

UnrealEditor-Engine.dll!FBodyInstance::UpdateBodyScale(const UE::Math::TVector<double> & InScale3D, bool bForceUpdate) Line 2195 C++

> UnrealEditor-Engine.dll!USkeletalMeshComponent::UpdateRigidBodyScaling(ETeleportType TeleportType) Line 3298 C++

UnrealEditor-Engine.dll!USceneComponent::PropagateTransformUpdate(bool bTransformChanged, EUpdateTransformFlags UpdateTransformFlags, ETeleportType Teleport) Line 972 C++

UnrealEditor-Engine.dll!USceneComponent::UpdateComponentToWorldWithParent(USceneComponent * Parent, FName SocketName, EUpdateTransformFlags UpdateTransformFlags, const UE::Math::TQuat<double> & RelativeRotationQuat, ETeleportType Teleport) Line 796 C++

UnrealEditor-Engine.dll!USceneComponent::UpdateComponentToWorld(EUpdateTransformFlags UpdateTransformFlags, ETeleportType Teleport) Line 930 C++

UnrealEditor-Engine.dll!USceneComponent::SetRelativeScale3D(UE::Math::TVector<double> NewScale3D) Line 1851 C++

UnrealEditor-Engine.dll!USceneComponent::execSetRelativeScale3D(UObject * Context, FFrame & Stack, void * const Z_Param__Result) Line 3572 C++

UnrealEditor-CoreUObject.dll!UFunction::Invoke(UObject * Obj, FFrame & Stack, void * const Z_Param__Result) Line 7460 C++

UnrealEditor-CoreUObject.dll!UObject::CallFunction(FFrame & Stack, void * const Z_Param__Result, UFunction * Function) Line 1175 C++

[Inline Frame] UnrealEditor-CoreUObject.dll!FFrame::Step(UObject *) Line 509 C++

UnrealEditor-CoreUObject.dll!UObject::ProcessContextOpcode(FFrame & Stack, void * const Z_Param__Result, bool bCanFailSilently) Line 3153 C++

[Blueprint] BP_<Error reading characters of string.>::ExecuteUbergraph_BP_<Error reading characters of string.> Blueprint

[Inline Frame] UnrealEditor-CoreUObject.dll!FFrame::Step(UObject *) Line 509 C++

UnrealEditor-CoreUObject.dll!ProcessLocalScriptFunction(UObject * Context, FFrame & Stack, void * const Z_Param__Result) Line 1242 C++

UnrealEditor-CoreUObject.dll!ProcessScriptFunction<void (_cdecl*)(UObject *,FFrame &,void *)>(UObject * Context, UFunction * Function, FFrame & Stack, void * const Z_Param_Result, void[Image Removed](UObject *, FFrame &, void *) ExecFtor) Line 1070 C++

UnrealEditor-CoreUObject.dll!ProcessLocalFunction::__l2::<lambda_1>::operator()() Line 1320 C++

UnrealEditor-CoreUObject.dll!ProcessLocalFunction(UObject * Context, UFunction * Fn, FFrame & Stack, void * const Z_Param__Result) Line 1339 C++

[Blueprint] BP_<Error reading characters of string.>::InpActEvt_SpaceBar_K2Node_InputKeyEvent_<Error reading characters of string.> Blueprint

[Inline Frame] UnrealEditor-CoreUObject.dll!FFrame::Step(UObject *) Line 509 C++

UnrealEditor-CoreUObject.dll!ProcessLocalScriptFunction(UObject * Context, FFrame & Stack, void * const Z_Param__Result) Line 1242 C++

UnrealEditor-CoreUObject.dll!UObject::ProcessInternal(UObject * Context, FFrame & Stack, void * const Z_Param__Result) Line 1371 C++

UnrealEditor-CoreUObject.dll!UFunction::Invoke(UObject * Obj, FFrame & Stack, void * const Z_Param__Result) Line 7460 C++

UnrealEditor-CoreUObject.dll!UObject::ProcessEvent(UFunction * Function, void * Parms) Line 2211 C++

UnrealEditor-Engine.dll!AActor::ProcessEvent(UFunction * Function, void * Parameters) Line 1456 C++

UnrealEditor-Engine.dll!TScriptDelegate<FNotThreadSafeDelegateMode>::ProcessDelegate<UObject>(void * Parameters) Line 459 C++

UnrealEditor-Engine.dll!FInputActionHandlerDynamicSignature_DelegateWrapper(const TScriptDelegate<FNotThreadSafeDelegateMode> & InputActionHandlerDynamicSignature, FKey Key) Line 75 C++

[Inline Frame] UnrealEditor-Engine.dll!FInputActionHandlerDynamicSignature::Execute(FKey) Line 127 C++

UnrealEditor-Engine.dll!FInputActionUnifiedDelegate::Execute(const FKey Key) Line 302 C++

UnrealEditor-Engine.dll!UPlayerInput::EvaluateInputDelegates(const TArray<UInputComponent *,TSizedDefaultAllocator<32>> & InputComponentStack, const float DeltaTime, const bool bGamePaused, const TArray<TTuple<FKey,FKeyState *>,TSizedDefaultAllocator<32>> & KeysWithEvents) Line 1629 C++

UnrealEditor-EnhancedInput.dll!UEnhancedPlayerInput::EvaluateInputDelegates(const TArray<UInputComponent *,TSizedDefaultAllocator<32>> & InputComponentStack, const float DeltaTime, const bool bGamePaused, const TArray<TTuple<FKey,FKeyState *>,TSizedDefaultAllocator<32>> & KeysWithEvents) Line 792 C++

UnrealEditor-Engine.dll!UPlayerInput::ProcessInputStack(const TArray<UInputComponent *,TSizedDefaultAllocator<32>> & InputComponentStack, const float DeltaTime, const bool bGamePaused) Line 1254 C++

UnrealEditor-Engine.dll!APlayerController::ProcessPlayerInput(const float DeltaTime, const bool bGamePaused) Line 2724 C++

UnrealEditor-Engine.dll!APlayerController::TickPlayerInput(const float DeltaSeconds, const bool bGamePaused) Line 5351 C++

UnrealEditor-Engine.dll!APlayerController::PlayerTick(float DeltaTime) Line 2283 C++

UnrealEditor-Engine.dll!APlayerController::TickActor(float DeltaSeconds, ELevelTick TickType, FActorTickFunction & ThisTickFunction) Line 5503 C++

UnrealEditor-Engine.dll!FActorTickFunction::ExecuteTick(float DeltaTime, ELevelTick TickType, ENamedThreads::Type CurrentThread, const TRefCountPtr<FBaseGraphTask> & MyCompletionGraphEvent) Line 372 C++

[Inline Frame] UnrealEditor-Engine.dll!FTickFunctionTask::DoTask(ENamedThreads::Type CurrentThread, const TRefCountPtr<FBaseGraphTask> &) Line 329 C++

UnrealEditor-Engine.dll!TGraphTask<FTickFunctionTask>::ExecuteTask() Line 706 C++

UnrealEditor-Core.dll!UE::Tasks::Private::FTaskBase::TryExecuteTask() Line 527 C++

[Inline Frame] UnrealEditor-Core.dll!FBaseGraphTask::Execute(TArray<FBaseGraphTask *,TSizedDefaultAllocator<32>> &) Line 505 C++

UnrealEditor-Core.dll!FNamedTaskThread::ProcessTasksNamedThread(int QueueIndex, bool bAllowStall) Line 779 C++

UnrealEditor-Core.dll!FNamedTaskThread::ProcessTasksUntilIdle(int QueueIndex) Line 679 C++

[Inline Frame] UnrealEditor-Core.dll!FTaskGraphCompatibilityImplementation::ProcessThreadUntilIdle(ENamedThreads::Type) Line 1419 C++

UnrealEditor-Core.dll!FTaskGraphCompatibilityImplementation::ProcessUntilTasksComplete(const TArray<TRefCountPtr<FBaseGraphTask>,TSizedInlineAllocator<4,32,TSizedDefaultAllocator<32>>> & Tasks, ENamedThreads::Type CurrentThreadIfKnown, const TFunction<enum FTaskGraphInterface::EProcessTasksOperation __cdecl(int)> & IdleWorkUpdate) Line 1592 C++

UnrealEditor-Engine.dll!FTickTaskSequencer::ReleaseTickGroup(ETickingGroup WorldTickGroup, bool bBlockTillComplete, TArray<FTickFunction *,TSizedDefaultAllocator<32>> & TicksToManualDispatch) Line 986 C++

UnrealEditor-Engine.dll!FTickTaskManager::RunTickGroup(ETickingGroup Group, bool bBlockTillComplete) Line 2079 C++

UnrealEditor-Engine.dll!UWorld::RunTickGroup(ETickingGroup Group, bool bBlockTillComplete) Line 786 C++

UnrealEditor-Engine.dll!UWorld::Tick(ELevelTick TickType, float DeltaSeconds) Line 1511 C++

UnrealEditor-UnrealEd.dll!UEditorEngine::Tick(float DeltaSeconds, bool bIdleMode) Line 2151 C++

UnrealEditor-UnrealEd.dll!UUnrealEdEngine::Tick(float DeltaSeconds, bool bIdleMode) Line 533 C++

UnrealEditor.exe!FEngineLoop::Tick() Line 5625 C++

[Inline Frame] UnrealEditor.exe!EngineTick() Line 60 C++

UnrealEditor.exe!GuardedMain(const wchar_t * CmdLine) Line 187 C++

UnrealEditor.exe!LaunchWindowsStartup(HINSTANCE__ * hInInstance, HINSTANCE__ * hPrevInstance, char * __formal, int nCmdShow, const wchar_t * CmdLine) Line 271 C++

UnrealEditor.exe!WinMain(HINSTANCE__ * hInInstance, HINSTANCE__ * hPrevInstance, char * pCmdLine, int nCmdShow) Line 339 C++

[External Code]

Have Comments or More Details?

There's no existing public thread on this issue, so head over to Questions & Answers just mention UE-365189 in the post.

0
Login to Vote

Unresolved
ComponentUE - Anim - Rigging
Affects Versions5.65.75.8
CreatedFeb 11, 2026
UpdatedFeb 26, 2026
View Jira Issue