URootMotionModifier_SkewWarp::WarpTranslation() uses InverseFast() within a block of code that is only executed if DeltaTranslation is not nearly zero. The ToRootSyncSpace transform the code builds, however, is apparently NIL because the InverseTransformVector() call on Line 57 causes an ensure in extremely rare circumstances.
Steps to Reproduce
We're using the Motion Warping plugin for our ambient character animations. Very rarely (twice since we started using it ~6 months ago), we get an ensure() call related to trying to invert a NIL matrix. This is a simple root motion warp to get characters into an out of ambient animations more smoothly. The warp is being handled in native code rather than blueprint, simply by calling MotionWarpingComponent->AddOrUpdateWarpTargetFromTransform(). Outside of our subclass of CharacterMovementComponent calling Super::TickComponent(), there's really nothing project-specific in the callstack.
Ensure condition failed: false [Link Removed] [Line: 429]
TMatrix<T>::InverseFast(), trying to invert a NIL matrix, this results in NaNs! Use Inverse() instead.
0x00007ff6cb561886 ---.exe!`UE::Math::TMatrix<double>::ErrorEnsure'::`2'::<lambda_1>::operator()() [D:\Projects\---\Engine\Source\Runtime\Core\Public\Math\Matrix.h:429]
0x00007ff6c450b338 ---.exe!URootMotionModifier_SkewWarp::WarpTranslation() [D:\Projects\---\Engine\Plugins\Animation\MotionWarping\Source\MotionWarping\Private\RootMotionModifier_SkewWarp.cpp:57]
0x00007ff6c4506924 ---.exe!URootMotionModifier_SkewWarp::ProcessRootMotion() [D:\Projects\---\Engine\Plugins\Animation\MotionWarping\Source\MotionWarping\Private\RootMotionModifier_SkewWarp.cpp:183]
0x00007ff6c4506e12 ---.exe!UMotionWarpingComponent::ProcessRootMotionPreConvertToWorld() [D:\Projects\---\Engine\Plugins\Animation\MotionWarping\Source\MotionWarping\Private\MotionWarpingComponent.cpp:467]
0x00007ff6c44fa868 ---.exe!TBaseUObjectMethodDelegateInstance<0,UMotionWarpingComponent,UE::Math::TTransform<double> __cdecl(UE::Math::TTransform<double> const &,float,FMotionWarpingUpdateContext const *),FDefaultDelegateUserPolicy>::Execute() [D:\Projects\---\Engine\Source\Runtime\Core\Public\Delegates\DelegateInstancesImpl.h:651]
0x00007ff6c450a2db ---.exe!UMotionWarpingCharacterAdapter::WarpLocalRootMotionOnCharacter() [D:\Projects\---\Engine\Plugins\Animation\MotionWarping\Source\MotionWarping\Private\MotionWarpingCharacterAdapter.cpp:97]
0x00007ff6c44fa7dc ---.exe!TBaseUObjectMethodDelegateInstance<0,UMotionWarpingCharacterAdapter,UE::Math::TTransform<double> __cdecl(UE::Math::TTransform<double> const &,UCharacterMovementComponent *,float),FDefaultDelegateUserPolicy>::Execute() [D:\Projects\---\Engine\Source\Runtime\Core\Public\Delegates\DelegateInstancesImpl.h:651]
0x00007ff6c0fadb08 ---.exe!UCharacterMovementComponent::ConvertLocalRootMotionToWorld() [D:\Projects\---\Engine\Source\Runtime\Engine\Private\Components\CharacterMovementComponent.cpp:2018]
0x00007ff6c0fcfbd1 ---.exe!UCharacterMovementComponent::PerformMovement() [D:\Projects\---\Engine\Source\Runtime\Engine\Private\Components\CharacterMovementComponent.cpp:2828]
0x00007ff6c0fad91f ---.exe!UCharacterMovementComponent::ControlledCharacterMove() [D:\Projects\---\Engine\Source\Runtime\Engine\Private\Components\CharacterMovementComponent.cpp:6255]
0x00007ff6c0ffae9f ---.exe!UCharacterMovementComponent::TickComponent() [D:\Projects\---\Engine\Source\Runtime\Engine\Private\Components\CharacterMovementComponent.cpp:1685]
0x00007ff6c4f29a5a ---.exe!UAlabamaBaseCharacterMovement::TickComponent() [D:\Projects\---\---\Source\---\Character\AlabamaBaseCharacterMovement.cpp:85]
0x00007ff6c4f60e85 ---.exe!UAlabamaCharacterMovement::TickComponent() [D:\Projects\---\---\Source\---\Character\AlabamaCharacterMovement.cpp:323]
0x00007ff6c0fb4b3d ---.exe!FActorComponentTickFunction::ExecuteTick() [D:\Projects\---\Engine\Source\Runtime\Engine\Private\Components\ActorComponent.cpp:1223]
0x00007ff6c22611ef ---.exe!FTickFunctionTask::DoTask() [D:\Projects\---\Engine\Source\Runtime\Engine\Private\TickTaskManager.cpp:307]
0x00007ff6c2279d56 ---.exe!TGraphTask<FTickFunctionTask>::ExecuteTask() [D:\Projects\---\Engine\Source\Runtime\Core\Public\Async\TaskGraphInterfaces.h:636]
0x00007ff6b9ec1b22 ---.exe!UE::Tasks::Private::FTaskBase::TryExecuteTask() [D:\Projects\---\Engine\Source\Runtime\Core\Public\Tasks\TaskPrivate.h:505]
0x00007ff6b9eb629d ---.exe!FNamedTaskThread::ProcessTasksNamedThread() [D:\Projects\---\Engine\Source\Runtime\Core\Private\Async\TaskGraph.cpp:779]
0x00007ff6b9eb673e ---.exe!FNamedTaskThread::ProcessTasksUntilQuit() [D:\Projects\---\Engine\Source\Runtime\Core\Private\Async\TaskGraph.cpp:668]
0x00007ff6b9ec4bcd ---.exe!FTaskGraphCompatibilityImplementation::WaitUntilTasksComplete() [D:\Projects\---\Engine\Source\Runtime\Core\Private\Async\TaskGraph.cpp:1526]
0x00007ff6c22d42bb ---.exe!FTickTaskSequencer::ReleaseTickGroup() [D:\Projects\---\Engine\Source\Runtime\Engine\Private\TickTaskManager.cpp:815]
There's no existing public thread on this issue, so head over to Questions & Answers just mention UE-347285 in the post.
0 |
Component | UE - Anim - Runtime |
---|---|
Affects Versions | 5.5 |
Created | Oct 3, 2025 |
---|---|
Updated | Oct 3, 2025 |