Description

Fracture Mode > "Remove-On-Break" setting: Cluster Crumbling causes flickering.
Once the Remove-On-Break Cluster Crumbling effect is activated, there is a small delay between the disappearance of the parent fragment and the appearance of the child fragments. That results in a perceivable flickering, a moment when both parent and child are not rendered.
The licensee noticed this behavior is not displayed if the Cluster is Crumbled from the BP, only if set via FractureMode>Remove-On-Break.
I'm not sure about the exact origin of the problem but I've attached the call stack to Chaos::FRigidClustering::BreakCluster where the Crumbling Event is fired off from.
I've tested this on every UE5 version:
5.0 - No Remove On Break functionality
5.1 - Remove On Break is introduced, but Cluster Crumbling does not work
5.2 - Same as 5.1
5.3 - Same as 5.2
5.4 - Cluster Crumbling works and shows the behavior is present
5.5 - Same as 5.4
5.6/7 (CL42031367) - I was not able to reproduce the issue

Steps to Reproduce

On a blank project, in a Basic Scene, create a geometry collection from a Cube
Fracture it into two levels (for instance using Uniform with default settings)
Select the first level particles and Set Remove on Break with Cluster crumbling turned on. ( I set up post break timer to 1.0 and 2.5)
Add a Masterfield to break apart the GC into it's first level
After 1 to 2.5 seconds see clusters start to crumble
Once they crumble they disappear for a second before the children pieces appear causing flickering
Pausing the game and executing one frame at a time might make the visualization easier if you can spot the exact moment the parent fragment disappears before the children are visible.

Using the Repro Project:
Simply open the project, position the camera so you face the cube, and Simulate-In-Editor. Take notice of the second stage breakage that happens randomly after the first breaking.

Expected result: crumbling should be smooth and indistinguishable
Actual result: because there is an offset between the disappearance of the parent and the spawning of the child, a flicker is perceivable, for what looks like a single frame

Callstack

> UnrealEditor-Chaos.dll!Chaos::FRigidClustering::BreakCluster(Chaos::TPBDRigidClusteredParticleHandleImp<double,3,1> * ClusteredParticle) Line 2563 C++
UnrealEditor-Chaos.dll!FGeometryCollectionPhysicsProxy::BreakClusters_External::__l12::<lambda_1>::operator()() Line 2414 C++
[Inline Frame] UnrealEditor-Chaos.dll!Chaos::ISimCallbackObject::PreSimulate_Internal() Line 90 C++
UnrealEditor-Chaos.dll!Chaos::FPBDRigidsSolver::ProcessPushedData_Internal(Chaos::FPushPhysicsData & PushData) Line 1894 C++
UnrealEditor-Chaos.dll!Chaos::FPhysicsSolverProcessPushDataTask::ProcessPushData() Line 116 C++
[Inline Frame] UnrealEditor-Chaos.dll!Chaos::FPhysicsSolverProcessPushDataTask::DoTask(ENamedThreads::Type) Line 115 C++
UnrealEditor-Chaos.dll!TGraphTask<Chaos::FPhysicsSolverProcessPushDataTask>::ExecuteTask() Line 634 C++
UnrealEditor-Chaos.dll!UE::Tasks::Private::FTaskBase::TryExecuteTask() Line 504 C++
[Inline Frame] UnrealEditor-Chaos.dll!UE::Tasks::Private::FTaskBase::Init::__l2::<lambda_1>::operator()() Line 185 C++
[Inline Frame] UnrealEditor-Chaos.dll!LowLevelTasks::FTask::Init::__l13::<lambda_1>::operator()(const bool) Line 499 C++
[Inline Frame] UnrealEditor-Chaos.dll!Invoke(LowLevelTasks::FTask::Init::__l13::<lambda_1> &) Line 47 C++
[Inline Frame] UnrealEditor-Chaos.dll!LowLevelTasks::TTaskDelegate<LowLevelTasks::FTask * __cdecl(bool),48>::TTaskDelegateImpl<`LowLevelTasks::FTask::Init<`UE::Tasks::Private::FTaskBase::Init'::`2'::<lambda_1>>'::`13'::<lambda_1>,0>::Call(void *) Line 162 C++
UnrealEditor-Chaos.dll!LowLevelTasks::TTaskDelegate<LowLevelTasks::FTask * __cdecl(bool),48>::TTaskDelegateImpl<`LowLevelTasks::FTask::Init<`UE::Tasks::Private::FTaskBase::Init'::`2'::<lambda_1>>'::`13'::<lambda_1>,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 245 C++
[Inline Frame] UnrealEditor-Core.dll!LowLevelTasks::FScheduler::TryExecuteTaskFrom(LowLevelTasks::Private::FWaitEvent *) Line 457 C++
UnrealEditor-Core.dll!LowLevelTasks::FScheduler::WorkerLoop(LowLevelTasks::Private::FWaitEvent * WorkerEvent, LowLevelTasks::Private::TLocalQueueRegistry<1024,1024>::TLocalQueue * WorkerLocalQueue, unsigned int WaitCycles, bool bPermitBackgroundWork) Line 514 C++
[Inline Frame] UnrealEditor-Core.dll!LowLevelTasks::FScheduler::WorkerMain(LowLevelTasks::Private::FWaitEvent * WorkerEvent, LowLevelTasks::Private::TLocalQueueRegistry<1024,1024>::TLocalQueue * WorkerLocalQueue, unsigned int WaitCycles, bool bPermitBackgroundWork) Line 571 C++
UnrealEditor-Core.dll!LowLevelTasks::FScheduler::CreateWorker::__l2::<lambda>() Line 75 C++
[Inline Frame] UnrealEditor-Core.dll!UE::Core::Private::Function::TFunctionRefBase<UE::Core::Private::Function::TFunctionStorage<1>,void __cdecl(void)>::operator()() Line 470 C++
UnrealEditor-Core.dll!FThreadImpl::Run() Line 69 C++
UnrealEditor-Core.dll!FRunnableThreadWin::Run() Line 159 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-279933 in the post.

0
Login to Vote

Fixed
ComponentUE - Simulation - Physics - Destruction
Affects Versions5.45.5
Target Fix5.6
CreatedMay 10, 2025
ResolvedMay 28, 2025
UpdatedMay 28, 2025
View Jira Issue