Description

Might relate to issue [Link Removed] - "The Remove-On-Break feature, set on Fracture Mode on Geometry Collections, stops shrinking and shows strange behaviors"

The added information on this particular bug is that a GeometryCollection (GC) that has multiple levels and had the first level broken will have its clusters start to shrink normally as a group, but the moment the next level is broken, the shrinking process resets, the size goes up to full size, and it starts shrinking again. What causes quite a noticeable effect of a "pop". This is unavoidable. If the GC is sleeping it will not animate the shrinking further and stay at full size. If it is awake it will animate shrinking like normal, but the popping is still very noticeable

Steps to Reproduce

Remove on Break instructions:

  • Create a New Level using the Basic Template
  • Add a Cube blueprint to the level
  • Set scale to (1,4,1)
  • Select it and activate Fracture Mode (SHIFT+6)
  • Press New - save the new GC preferably in your project folder
  • Select Fracture>Slice
  • Slicing> X = 0, Y = 1, Z = 0
  • Press Fracture - that will split it in 2 and add one level
  • On Fracture Hierarchy select the first child and press Fracture so it further splits into 2, repeat for the second child - we end up with two levels of particles, 4 in total
  • Select a fracture level 1 and in Utilities go to Set Removal-On-Break Parameters
  • Set Remove On Break> Enabled = true; Cluster Crumbling = true
  • Set Post Break Timer to 0,0
  • Set Removal Timer to 10,10
  • Apply removal-on-break parameters
  • Repeat the process for the second level 1
  • After this is done, back in the level, select the GC and Enable Gravity
  • Position it on top of a static cube so it does not fall on its own - we want to control the breaking
  • Create a field system actor BP to the project and configure it so there's a BoxFalloff of a very high magnitude
  • In it's EventTick add an Enabled AddTransientField where the Physics Type is External Strain with the BoxFalloff as FieldNode
  • Add logic so it will only activate after some time
  • Make this variable public
  • Spawn it in the scene and make it so one will break the cluster earlier and another will break it after some time, causing the cluster to break twice
  • Once the second level is broken the shrinking resets, the particles pop up at full size again, and the shrinking resumes
Callstack

> UnrealEditor-GeometryCollectionEngine.dll!UGeometryCollectionComponent::UpdateBrokenAndDecayedStates() Line 4110 C++
UnrealEditor-GeometryCollectionEngine.dll!UGeometryCollectionComponent::OnPostPhysicsSync() Line 4337 C++
[Inline Frame] UnrealEditor-Chaos.dll!UE::Core::Private::Function::TFunctionRefBase<UE::Core::Private::Function::TFunctionStorage<0>,void __cdecl(void)>::operator()() Line 555 C++
UnrealEditor-Chaos.dll!FGeometryCollectionPhysicsProxy::PullFromPhysicsState(const Chaos::FDirtyGeometryCollectionData & PullData, const int SolverSyncTimestamp, const Chaos::FDirtyGeometryCollectionData * NextPullData, const float * Alpha, const Chaos::FDirtyRigidParticleReplicationErrorData * Error, const double AsyncFixedTimeStep) Line 4458 C++
UnrealEditor-Engine.dll!Chaos::FPhysicsSolverBase::PullPhysicsStateForEachDirtyProxy_External<`FPhysScene_Chaos::OnSyncBodies'::`2'::FDispatcher>(FPhysScene_Chaos::OnSyncBodies::__l2::FDispatcher & Dispatcher) Line 164 C++
[Inline Frame] UnrealEditor-Engine.dll!UE::Core::Private::Function::TFunctionRefBase<UE::Core::Private::Function::FFunctionRefStoragePolicy,void __cdecl(FPhysScene_Chaos *)>::operator()(FPhysScene_Chaos * <Params_0>) Line 555 C++
UnrealEditor-Engine.dll!FPhysInterface_Chaos::ExecuteWrite(FPhysScene_Chaos * InScene, TFunctionRef<void __cdecl(FPhysScene_Chaos *)> InCallable) Line 630 C++
UnrealEditor-Engine.dll!FPhysScene_Chaos::OnSyncBodies(Chaos::FPhysicsSolverBase * Solver) Line 2417 C++
UnrealEditor-PhysicsCore.dll!FChaosScene::SyncBodies<Chaos::FPBDRigidsSolver>(Chaos::FPBDRigidsSolver * Solver) Line 459 C++
UnrealEditor-PhysicsCore.dll!`FChaosScene::EndFrame'::`65'::<lambda_1>::operator()<Chaos::FPBDRigidsSolver>(Chaos::FPBDRigidsSolver & Concrete) Line 559 C++
[Inline Frame] UnrealEditor-PhysicsCore.dll!Chaos::FPhysicsSolverBase::CastHelper(const FChaosScene::EndFrame::__l65::<lambda_1> &) Line 313 C++
UnrealEditor-PhysicsCore.dll!FChaosScene::EndFrame() Line 554 C++
[Inline Frame] UnrealEditor-Engine.dll!Invoke(void(UWorld::*)()) Line 66 C++
[Inline Frame] UnrealEditor-Engine.dll!UE::Core::Private::Tuple::TTupleBase<TIntegerSequence<unsigned int>>::ApplyAfter(void(UWorld::*)() &) Line 309 C++
UnrealEditor-Engine.dll!TBaseUObjectMethodDelegateInstance<0,UWorld,void __cdecl(void),FDefaultDelegateUserPolicy>::ExecuteIfSafe() Line 667 C++
[Inline Frame] UnrealEditor-Engine.dll!TDelegate<void __cdecl(void),FDefaultDelegateUserPolicy>::ExecuteIfBound() Line 570 C++
[Inline Frame] UnrealEditor-Engine.dll!FSimpleDelegateGraphTask::DoTask(ENamedThreads::Type) Line 1580 C++
UnrealEditor-Engine.dll!TGraphTask<FSimpleDelegateGraphTask>::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>> & CurrentThread, ENamedThreads::Type) Line 840 C++
UnrealEditor-Core.dll!FNamedTaskThread::ProcessTasksNamedThread(int QueueIndex, bool bAllowStall) Line 760 C++
UnrealEditor-Core.dll!FNamedTaskThread::ProcessTasksUntilQuit(int QueueIndex) Line 651 C++
[Inline Frame] UnrealEditor-Core.dll!FTaskGraphCompatibilityImplementation::ProcessThreadUntilRequestReturn(ENamedThreads::Type) Line 2068 C++
UnrealEditor-Core.dll!FTaskGraphCompatibilityImplementation::WaitUntilTasksComplete(const TArray<TRefCountPtr<FGraphEvent>,TSizedInlineAllocator<4,32,TSizedDefaultAllocator<32>>> & Tasks, ENamedThreads::Type CurrentThreadIfKnown) Line 2122 C++
UnrealEditor-Engine.dll!FTickTaskSequencer::ReleaseTickGroup(ETickingGroup WorldTickGroup, bool bBlockTillComplete) Line 556 C++
UnrealEditor-Engine.dll!FTickTaskManager::RunTickGroup(ETickingGroup Group, bool bBlockTillComplete) Line 1583 C++
UnrealEditor-Engine.dll!UWorld::RunTickGroup(ETickingGroup Group, bool bBlockTillComplete) Line 772 C++
UnrealEditor-Engine.dll!UWorld::Tick(ELevelTick TickType, float DeltaSeconds) Line 1521 C++
UnrealEditor-UnrealEd.dll!UEditorEngine::Tick(float DeltaSeconds, bool bIdleMode) Line 2015 C++
UnrealEditor-UnrealEd.dll!UUnrealEdEngine::Tick(float DeltaSeconds, bool bIdleMode) Line 550 C++
UnrealEditor.exe!FEngineLoop::Tick() Line 5921 C++
[Inline Frame] UnrealEditor.exe!EngineTick() Line 61 C++
UnrealEditor.exe!GuardedMain(const wchar_t * CmdLine) Line 180 C++
UnrealEditor.exe!GuardedMainWrapper(const wchar_t * CmdLine) Line 118 C++
UnrealEditor.exe!LaunchWindowsStartup(HINSTANCE__ * hInInstance, HINSTANCE__ * hPrevInstance, char * __formal, int nCmdShow, const wchar_t * CmdLine) Line 258 C++
UnrealEditor.exe!WinMain(HINSTANCE__ * hInInstance, HINSTANCE__ * hPrevInstance, char * pCmdLine, int nCmdShow) Line 298 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-228164 in the post.

0
Login to Vote

Unresolved
ComponentUE - Simulation - Physics - Destruction
Affects Versions5.4.4
Target Fix5.6
CreatedOct 18, 2024
UpdatedOct 23, 2024
View Jira Issue