Description

A Skeletal Mesh simulating physics that hits a Geometry Collection Actor with OneWayInteraction true, OneWayInteractionLevel 1, and is using Damage Propagation (default) will be accelerated so fast it immediately disappears by hitting the world limits.
The licensee was testing some setups using Geometry Collections (GC) and collision when he came across this: if the GC is using OneWayInteraction, OneWayInteractionLevel 1, and Damage Propagation (true by default), a colliding skeletal mesh simulating physics is abruptly accelerated into infinity - the most common behavior is reaching the KillZ threshold and being deleted.
I've tried logging the Skeletal Mesh Hit event but could not.
I could confirm the position from Event Destroyed and it's beyond the world's KillZ, what makes me believe that's what is destroying the actor.
I've tested and confirmed the behavior on versions 5.4, 5.5, and 5.6.

Steps to Reproduce

Using the repro project:
Open the project and simulate the scene ReproMap_SKM (the scene opens by default)
Check that BP_Ball7 will free fall onto GC_Cube9 and some time later will disappear from the Outliner view: it hits the World Kill Z moments after hitting the GeometryCollectionActor(GCA)

From scratch:
Create a new, blank project
Create a new basic level
Create a cube in the level and set it's scale to (5,5,1)
Got to Fracture mode and save a new Geometry Collection for the created cube
Do a uniform fracture with default parameters, save
Position it in the level so it does not fall on the floor and it's laying there
Select the GeometryCollectionActor (GCA) created and enable OneWayInteraction, also set OneWayInteractionLevel to 1
Reduce DamageThreshold[0] to 1 to ensure the SKM damages the GC
Confirm GCA has Damage Propagation enabled
On the content browser, Settings, enable Show Engine Content
Select the All folder and search for DefaultSkeletalMesh
Create a duplicate and move it to your project
Right-click the duplicate and Create>PhysicsAsset>CreateAndAssign
Change the primitive type to Box, Create Asset
Drag and drop one in the level, that will instantiate one SkeletalMeshActor in the level
Select it and enable Simulate Physics
Position it on top of the GCA so it can hit it while falling
Simulate the scene and verify it disappears as it hits the GCA

Expected behavior: BP_Ball7 should hit the GCA and break it, but remain on top of the cluster or, at most, reach the Floor and stay there
Actual behavior: BP_Ball7 is accelerated to such extent that a fraction of a second later it is destroyed, possibly from crossing the World Kill Z threshold (by logging Event Destroyed we can confirm the position is past the Kill Z)

Callstack

> UnrealEditor-Chaos.dll!Chaos::FPBDCollisionConstraint::UpdateMassScales() Line 483 C++
[Inline Frame] UnrealEditor-Chaos.dll!Chaos::FPBDCollisionConstraint::UpdateMaterialPropertiesImpl() Line 479 C++
[Inline Frame] UnrealEditor-Chaos.dll!Chaos::FPBDCollisionConstraint::UpdateMaterialProperties() Line 442 C++
UnrealEditor-Chaos.dll!Chaos::FPBDCollisionConstraint::Activate() Line 467 C++
UnrealEditor-Chaos.dll!Chaos::Private::FCollisionContextAllocator::ActivateConstraint(Chaos::FPBDCollisionConstraint * Constraint) Line 100 C++
UnrealEditor-Chaos.dll!Chaos::FSingleShapePairCollisionDetector::GenerateCollisionImpl(const float Dt, const float CullDistance, const Chaos::TVector<float,3> & RelativeMovement, const Chaos::FCollisionContext & Context) Line 527 C++
[Inline Frame] UnrealEditor-Chaos.dll!Chaos::FSingleShapePairCollisionDetector::GenerateCollision(const float) Line 407 C++
UnrealEditor-Chaos.dll!Chaos::FShapePairParticlePairMidPhase::GenerateCollisionsImpl(const float Dt, const float CullDistance, const Chaos::TVector<float,3> & RelativeMovement, const Chaos::FCollisionContext & Context) Line 1169 C++
UnrealEditor-Chaos.dll!Chaos::FParticlePairMidPhase::GenerateCollisions(const double InCullDistance, const double InDt, const Chaos::FCollisionContext & Context) Line 1007 C++
UnrealEditor-Chaos.dll!Chaos::FSpatialAccelerationBroadPhase::ProcessMidPhases(const double Dt, const Chaos::Private::FBroadPhaseContext & BroadphaseContext) Line 736 C++
UnrealEditor-Chaos.dll!??R<lambda_1>@?1??ProduceCollisions@FSpatialAccelerationBroadPhase@Chaos@@QEAAXN@Z@QEBA@H@Z(const int ContextIndex) Line 419 C++
[Inline Frame] UnrealEditor-Chaos.dll!UE::Core::Private::Function::TFunctionRefBase<UE::Core::Private::Function::FFunctionRefStoragePolicy,void __cdecl(int)>::operator()(int <Params_0>) Line 555 C++
UnrealEditor-Chaos.dll!??R<lambda_1>@?1??PhysicsParallelFor@Chaos@@YAXHV?$TFunctionRef@$$A6AXH@Z@@_N@Z@QEBA@H@Z(int Idx) Line 74 C++
[Inline Frame] UnrealEditor-Chaos.dll!UE::Core::Private::Function::TFunctionRefBase<UE::Core::Private::Function::FFunctionRefStoragePolicy,void __cdecl(int)>::operator()(int <Params_0>) Line 555 C++
[Inline Frame] UnrealEditor-Chaos.dll!ParallelForImpl::CallBody(const TFunctionRef<void __cdecl(int)> &) Line 80 C++
UnrealEditor-Chaos.dll!??$ParallelForInternal@V?$TFunctionRef@$$A6AXH@Z@@V<lambda_1>@?1??ParallelFor@@YAXPEB_WHHV1@W4EParallelForFlags@@@Z@$$T@ParallelForImpl@@YAXPEB_WHHV?$TFunctionRef@$$A6AXH@Z@@V<lambda_1>@?1??ParallelFor@@YAX0HH1W4EParallelForFlags@@@Z@2AEBV?$TArrayView@$$TH@@@Z(const wchar_t * DebugName, int Num, int MinBatchSize, TFunctionRef<void _cdecl(int)> Body, ParallelFor::_l2::<lambda_1> CurrentThreadWorkToDoBeforeHelping, EParallelForFlags Flags, const TArrayView<std::nullptr_t,int> & Contexts) Line 143 C++
[Inline Frame] UnrealEditor-Chaos.dll!ParallelFor(const wchar_t *) Line 528 C++
UnrealEditor-Chaos.dll!Chaos::PhysicsParallelFor(int InNum, TFunctionRef<void __cdecl(int)> InCallable, bool bForceSingleThreaded) Line 81 C++
UnrealEditor-Chaos.dll!Chaos::FSpatialAccelerationBroadPhase::ProduceCollisions(double Dt) Line 421 C++
UnrealEditor-Chaos.dll!Chaos::FSpatialAccelerationCollisionDetector::RunNarrowPhase(const double Dt, Chaos::FEvolutionResimCache * ResimCache) Line 50 C++
UnrealEditor-Chaos.dll!Chaos::FPBDRigidsEvolutionGBF::AdvanceOneTimeStepImpl(const double Dt, const Chaos::FSubStepInfo & SubStepInfo) Line 527 C++
UnrealEditor-Chaos.dll!Chaos::FPBDRigidsEvolutionGBF::AdvanceOneTimeStep(const double Dt, const Chaos::FSubStepInfo & SubStepInfo) Line 365 C++
UnrealEditor-Chaos.dll!Chaos::AdvanceOneTimeStepTask::DoWork() Line 540 C++
UnrealEditor-Chaos.dll!Chaos::FPBDRigidsSolver::AdvanceSolverBy(const Chaos::FSubStepInfo & SubStepInfo) Line 1387 C++
UnrealEditor-Chaos.dll!Chaos::FPhysicsSolverAdvanceTask::AdvanceSolver() Line 175 C++
UnrealEditor-Chaos.dll!Chaos::FPhysicsSolverAdvanceTask::DoTask(ENamedThreads::Type CurrentThread, const TRefCountPtr<FGraphEvent> & MyCompletionGraphEvent) Line 151 C++
UnrealEditor-Chaos.dll!TGraphTask<Chaos::FPhysicsSolverAdvanceTask>::ExecuteTask(TArray<FBaseGraphTask *,TSizedDefaultAllocator<32>> & NewTasks, ENamedThreads::Type CurrentThread, bool bDeleteOnCompletion) Line 1235 C++
[Inline Frame] UnrealEditor-Core.dll!FBaseGraphTask::Execute(TArray<FBaseGraphTask *,TSizedDefaultAllocator<32>> &) Line 840 C++
[Inline Frame] UnrealEditor-Core.dll!FTaskGraphCompatibilityImplementation::QueueTask::__l5::<lambda>() Line 1970 C++
UnrealEditor-Core.dll!LowLevelTasks::FTask::Init::__l13::<lambda>(const bool bNotCanceled) Line 499 C++
[Inline Frame] UnrealEditor-Core.dll!Invoke(LowLevelTasks::FTask::Init::__l13::void <lambda>(void) &) Line 47 C++
[Inline Frame] UnrealEditor-Core.dll!LowLevelTasks::TTaskDelegate<LowLevelTasks::FTask * __cdecl(bool),48>::TTaskDelegateImpl<`LowLevelTasks::FTask::Init<`FTaskGraphCompatibilityImplementation::QueueTask'::`5'::void <lambda>(void)>'::`13'::void <lambda>(void),0>::Call(void *) Line 162 C++
UnrealEditor-Core.dll!LowLevelTasks::TTaskDelegate<LowLevelTasks::FTask * __cdecl(bool),48>::TTaskDelegateImpl<`LowLevelTasks::FTask::Init<`FTaskGraphCompatibilityImplementation::QueueTask'::`5'::void <lambda>(void)>'::`13'::void <lambda>(void),0>::CallAndMove(LowLevelTasks::TTaskDelegate<LowLevelTasks::FTask * __cdecl(bool),48> & Destination, void * InlineData, unsigned int DestInlineSize, bool <Params_0>) Line 171 C++
[Inline Frame] UnrealEditor-Core.dll!LowLevelTasks::TTaskDelegate<LowLevelTasks::FTask * __cdecl(bool),48>::CallAndMove(LowLevelTasks::TTaskDelegate<LowLevelTasks::FTask * __cdecl(bool),48> &) Line 308 C++
UnrealEditor-Core.dll!LowLevelTasks::FTask::ExecuteTask() Line 627 C++
UnrealEditor-Core.dll!LowLevelTasks::FScheduler::ExecuteTask(LowLevelTasks::FTask * InTask) Line 155 C++
[Inline Frame] UnrealEditor-Core.dll!LowLevelTasks::FScheduler::TryExecuteTaskFrom(LowLevelTasks::Private::FWaitEvent *) Line 362 C++
UnrealEditor-Core.dll!LowLevelTasks::FScheduler::WorkerMain(LowLevelTasks::Private::FWaitEvent * WorkerEvent, LowLevelTasks::Private::TLocalQueueRegistry<1024>::TLocalQueue * WorkerLocalQueue, unsigned int WaitCycles, bool bPermitBackgroundWork) Line 397 C++
[Inline Frame] UnrealEditor-Core.dll!LowLevelTasks::FScheduler::CreateWorker::__l2::<lambda>() Line 70 C++
[Inline Frame] UnrealEditor-Core.dll!Invoke(LowLevelTasks::FScheduler::CreateWorker::__l2::void <lambda>(void) &) Line 47 C++
UnrealEditor-Core.dll!UE::Core::Private::Function::TFunctionRefCaller<`LowLevelTasks::FScheduler::CreateWorker'::`2'::void <lambda>(void),void __cdecl(void)>::Call(void * Obj) Line 406 C++
[Inline Frame] UnrealEditor-Core.dll!UE::Core::Private::Function::TFunctionRefBase<UE::Core::Private::Function::TFunctionStorage<1>,void __cdecl(void)>::operator()() Line 555 C++
UnrealEditor-Core.dll!FThreadImpl::Run() Line 69 C++
UnrealEditor-Core.dll!FRunnableThreadWin::Run() Line 149 C++
UnrealEditor-Core.dll!FRunnableThreadWin::GuardedRun() Line 71 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-239435 in the post.

0
Login to Vote

Unresolved
ComponentUE - Simulation - Physics - Destruction
Affects Versions5.65.5.15.4.4
Target Fix5.7
CreatedJan 20, 2025
UpdatedJan 23, 2025
View Jira Issue