Description

When a collision enabled RBAN node attempts to collect surrounding meshes, if there is a mesh with UseComplexAsSimple, it will hit the Ensure when cloning a mesh on the task graph thread.

Disabling "Use Multi Threaded Animation Update" is a work around.

Steps to Reproduce
  1. Open attached repro project on ue5  [Link Removed]
  2. Start PIE
  3. Move forward and approach the curved surface on the floor

 

Result : 

Ensure occurs with a log : 

ensure condition failed: IsInGameThreadContext() [File:D:\dev\UnrealEngine-5.0.2\Engine\Source\Runtime\Experimental\Chaos\Public\Framework\Threading.h] [Line: 243] 
Callstack
[Inline Frame] UnrealEditor-Engine.dll!Chaos::EnsureIsInGameThreadContext::__l2::<lambda_f61a178694a0d47aebbc24795f291b87>::operator()() Line 243	C++
[Inline Frame] UnrealEditor-Engine.dll!Chaos::EnsureIsInGameThreadContext() Line 243	C++
UnrealEditor-Engine.dll!Chaos::TThreadedSingleParticlePhysicsProxyBase<1>::VerifyContext() Line 885	C++
[Inline Frame] UnrealEditor-Engine.dll!Chaos::TThreadedSingleParticlePhysicsProxyBase<1>::Read(const Chaos::TThreadedSingleParticlePhysicsProxyBase<1>::Geometry::__l2::<lambda_ca30add81d44aadf87c6dcdd23e0c5c6> &) Line 898	C++
[Inline Frame] UnrealEditor-Engine.dll!Chaos::TThreadedSingleParticlePhysicsProxyBase<1>::Geometry() Line 251	C++
[Inline Frame] UnrealEditor-Engine.dll!ImmediatePhysics_Chaos::CloneGeometry(FBodyInstance *) Line 103	C++
UnrealEditor-Engine.dll!ImmediatePhysics_Chaos::CreateGeometry(FBodyInstance * BodyInstance, ImmediatePhysics_Shared::EActorType ActorType, const UE::Math::TVector<double> & Scale, double & OutMass, Chaos::TVector<double,3> & OutInertia, Chaos::TRigidTransform<double,3> & OutCoMTransform, TUniquePtr<Chaos::FImplicitObject,TDefaultDelete<Chaos::FImplicitObject>> & OutGeom, TArray<TUniquePtr<Chaos::FPerShapeData,TDefaultDelete<Chaos::FPerShapeData>>,TSizedDefaultAllocator<32>> & OutShapes) Line 126	C++
UnrealEditor-Engine.dll!ImmediatePhysics_Chaos::FActorHandle::FActorHandle(Chaos::FPBDRigidsSOAs & InParticles, Chaos::TArrayCollectionArray<Chaos::TVector<double,3>> & InParticlePrevXs, Chaos::TArrayCollectionArray<Chaos::TRotation<double,3>> & InParticlePrevRs, ImmediatePhysics_Shared::EActorType ActorType, FBodyInstance * BodyInstance, const UE::Math::TTransform<double> & InTransform) Line 243	C++
UnrealEditor-Engine.dll!ImmediatePhysics_Chaos::FSimulation::CreateActor(ImmediatePhysics_Shared::EActorType ActorType, FBodyInstance * BodyInstance, const UE::Math::TTransform<double> & Transform) Line 436	C++
UnrealEditor-AnimGraphRuntime.dll!FAnimNode_RigidBody::CollectWorldObjects() Line 1594	C++
UnrealEditor-AnimGraphRuntime.dll!FAnimNode_RigidBody::UpdateInternal(const FAnimationUpdateContext & Context) Line 1551	C++
UnrealEditor-AnimGraphRuntime.dll!FAnimNode_SkeletalControlBase::Update_AnyThread(const FAnimationUpdateContext & Context) Line 76	C++
UnrealEditor-Engine.dll!FPoseLinkBase::Update(const FAnimationUpdateContext & InContext) Line 295	C++
UnrealEditor-Engine.dll!FPoseLinkBase::Update(const FAnimationUpdateContext & InContext) Line 295	C++
UnrealEditor-Engine.dll!FAnimInstanceProxy::UpdateAnimationNode_WithRoot(const FAnimationUpdateContext & InContext, FAnimNode_Base * InRootNode, FName InLayerName) Line 69	C++
UnrealEditor-Engine.dll!FAnimInstanceProxy::UpdateAnimationNode(const FAnimationUpdateContext & InContext) Line 47	C++
UnrealEditor-Engine.dll!FAnimInstanceProxy::UpdateAnimation_WithRoot(const FAnimationUpdateContext & InContext, FAnimNode_Base * InRootNode, FName InLayerName) Line 1152	C++
UnrealEditor-Engine.dll!FAnimInstanceProxy::UpdateAnimation() Line 1035	C++
UnrealEditor-Engine.dll!USkeletalMeshComponent::PerformAnimationProcessing(const USkeletalMesh * InSkeletalMesh, UAnimInstance * InAnimInstance, bool bInDoEvaluation, TArray<UE::Math::TTransform<double>,TSizedDefaultAllocator<32>> & OutSpaceBases, TArray<UE::Math::TTransform<double>,TSizedDefaultAllocator<32>> & OutBoneSpaceTransforms, UE::Math::TVector<double> & OutRootBoneTranslation, FBlendedHeapCurve & OutCurve, UE::Anim::FMeshAttributeContainer & OutAttributes) Line 2028	C++
UnrealEditor-Engine.dll!USkeletalMeshComponent::ParallelAnimationEvaluation() Line 3893	C++
UnrealEditor-Engine.dll!FParallelAnimationEvaluationTask::DoTask(ENamedThreads::Type CurrentThread, const TRefCountPtr<FGraphEvent> & MyCompletionGraphEvent) Line 141	C++
UnrealEditor-Engine.dll!TGraphTask<FParallelAnimationEvaluationTask>::ExecuteTask(TArray<FBaseGraphTask *,TSizedDefaultAllocator<32>> & NewTasks, ENamedThreads::Type CurrentThread, bool bDeleteOnCompletion) Line 975	C++
[Inline Frame] UnrealEditor-Core.dll!FBaseGraphTask::Execute(TArray<FBaseGraphTask *,TSizedDefaultAllocator<32>> &) Line 587	C++
[Inline Frame] UnrealEditor-Core.dll!FTaskGraphCompatibilityImplementation::QueueTask::__l5::<lambda_13c427d0bfcf321a066cb5a2badfbc27>::operator()() Line 2027	C++
UnrealEditor-Core.dll!LowLevelTasks::FTask::Init::__l2::<lambda>(const bool NotCanceled) Line 350	C++
[Inline Frame] UnrealEditor-Core.dll!Invoke(LowLevelTasks::FTask::Init::__l2::void <lambda>(const bool) &) Line 47	C++
[Inline Frame] UnrealEditor-Core.dll!LowLevelTasks::TTaskDelegate<void __cdecl(bool),48>::TTaskDelegateImpl<void <lambda>(const bool),0>::Call(void *) Line 162	C++
UnrealEditor-Core.dll!LowLevelTasks::TTaskDelegate<void __cdecl(bool),48>::TTaskDelegateImpl<void <lambda>(const bool),0>::CallAndMove(LowLevelTasks::TTaskDelegate<void __cdecl(bool),48> & Destination, void * InlineData, unsigned int DestInlineSize, bool <Params_0>) Line 171	C++
[Inline Frame] UnrealEditor-Core.dll!LowLevelTasks::TTaskDelegate<void __cdecl(bool),48>::CallAndMove(LowLevelTasks::TTaskDelegate<void __cdecl(bool),48> &) Line 308	C++
UnrealEditor-Core.dll!LowLevelTasks::FTask::ExecuteTask() Line 426	C++
UnrealEditor-Core.dll!LowLevelTasks::FScheduler::TryExecuteTaskFrom<&LowLevelTasks::TLocalQueueRegistry<1024>::TLocalQueue::DequeueGlobal,0>(LowLevelTasks::TLocalQueueRegistry<1024>::TLocalQueue * Queue, LowLevelTasks::TLocalQueueRegistry<1024>::FOutOfWork & OutOfWork, bool bPermitBackgroundWork, bool bDisableThrottleStealing) Line 280	C++
UnrealEditor-Core.dll!LowLevelTasks::FScheduler::WorkerMain(LowLevelTasks::FSleepEvent * WorkerEvent, LowLevelTasks::TLocalQueueRegistry<1024>::TLocalQueue * ExternalWorkerLocalQueue, unsigned int WaitCycles, bool bPermitBackgroundWork) Line 320	C++
[Inline Frame] UnrealEditor-Core.dll!LowLevelTasks::FScheduler::CreateWorker::__l2::<lambda_776551d1e343b6cb7eaf0e5521c77c81>::operator()() Line 86	C++
[Inline Frame] UnrealEditor-Core.dll!Invoke(LowLevelTasks::FScheduler::CreateWorker::__l2::<lambda_776551d1e343b6cb7eaf0e5521c77c81> &) Line 47	C++
UnrealEditor-Core.dll!UE::Core::Private::Function::TFunctionRefCaller<<lambda_776551d1e343b6cb7eaf0e5521c77c81>,void __cdecl(void)>::Call(void * Obj) Line 549	C++
[Inline Frame] UnrealEditor-Core.dll!UE::Core::Private::Function::TFunctionRefBase<UE::Core::Private::Function::TFunctionStorage<1>,void __cdecl(void)>::operator()() Line 676	C++
UnrealEditor-Core.dll!FThreadImpl::Run() Line 69	C++
UnrealEditor-Core.dll!FRunnableThreadWin::Run() Line 146	C++
UnrealEditor-Core.dll!FRunnableThreadWin::GuardedRun() Line 68	C++
kernel32.dll!00007ffe68d37034()	Unknown
ntdll.dll!00007ffe6ac42651()	Unknown

Have Comments or More Details?

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

1
Login to Vote

Fixed
ComponentUE - Simulation - Physics - Character
Affects Versions5.0
Target Fix5.2
Fix Commit22318038
Main Commit22327050
Release Commit22318038
CreatedJun 30, 2022
ResolvedOct 26, 2022
UpdatedNov 2, 2022
View Jira Issue