Crumbling Geometry collection do not render for one frame when child clusters crumble. In the repro project a 4 particle GC is told to crumble. The single GeometryCollectionActor is then split into 2. After some time those 2 children of GC_CrumbleRepro also get crumbled. In that single frame the GC_CrumbleRepro is not rendered.
I've debugged the scene using Chaos Visual Debugger and during the entire execution the physics scene displays the particles correctly so it does not look like a physics issue (will attach it to the report). I've also made a capture using RenderDoc the moment the GC does not render and will attach it too.
The licensee pointed out that the reason for this behavior is that the geometry collection component ticks during physics, so when it calls BreakClusters_External(), the physics doesn't actually break until the following frame, so on the same frame the clusters have been removed but their children have not been activated yet. I'll attach the call stack for BreakClusters_External() when called the second time too.
Option 1: Use the repro project
Option 2: Clean repro steps
> UnrealEditor-Chaos.dll!FGeometryCollectionPhysicsProxy::BreakClusters_External(TArray<FGeometryCollectionItemIndex,TSizedDefaultAllocator<32>> && ItemIndices) Line 2451 C++
[Inline Frame] UnrealEditor-GeometryCollectionEngine.dll!FGeometryCollectionDecayContext::Process(FGeometryDynamicCollection & DynamicCollection) Line 6455 C++
UnrealEditor-GeometryCollectionEngine.dll!UGeometryCollectionComponent::IncrementBreakTimer(float DeltaTime) Line 6648 C++
UnrealEditor-GeometryCollectionEngine.dll!UGeometryCollectionComponent::TickComponent(float DeltaTime, ELevelTick TickType, FActorComponentTickFunction * ThisTickFunction) Line 3476 C++
[Inline Frame] UnrealEditor-Engine.dll!FActorComponentTickFunction::ExecuteTick::__l2::<lambda_1>::operator()(float) Line 1172 C++
UnrealEditor-Engine.dll!FActorComponentTickFunction::ExecuteTickHelper<`FActorComponentTickFunction::ExecuteTick'::`2'::<lambda_1>>(UActorComponent * Target, bool bTickInEditor, float DeltaTime, ELevelTick TickType, const FActorComponentTickFunction::ExecuteTick::__l2::<lambda_1> & ExecuteTickFunc) Line 4573 C++
UnrealEditor-Engine.dll!FActorComponentTickFunction::ExecuteTick(float DeltaTime, ELevelTick TickType, ENamedThreads::Type CurrentThread, const TRefCountPtr<FGraphEvent> & MyCompletionGraphEvent) Line 1170 C++
UnrealEditor-Engine.dll!FTickFunctionTask::DoTask(ENamedThreads::Type CurrentThread, const TRefCountPtr<FGraphEvent> & MyCompletionGraphEvent) Line 278 C++
UnrealEditor-Engine.dll!TGraphTask<FTickFunctionTask>::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::ProcessTasksUntilIdle(int QueueIndex) Line 662 C++
UnrealEditor-Engine.dll!FTickTaskSequencer::ReleaseTickGroup(ETickingGroup WorldTickGroup, bool bBlockTillComplete) Line 573 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 1514 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!LaunchWindowsStartup(HINSTANCE__ * hInInstance, HINSTANCE__ * hPrevInstance, char * __formal, int nCmdShow, const wchar_t * CmdLine) Line 247 C++
UnrealEditor.exe!WinMain(HINSTANCE__ * hInInstance, HINSTANCE__ * hPrevInstance, char * pCmdLine, int nCmdShow) Line 298 C++
[External Code]
There's no existing public thread on this issue, so head over to Questions & Answers just mention UE-226492 in the post.
0 |
Component | UE - Simulation - Physics - Destruction |
---|---|
Affects Versions | 5.4.4 |
Target Fix | 5.6 |
Fix Commit | 37471370 |
---|
Created | Oct 3, 2024 |
---|---|
Resolved | Oct 25, 2024 |
Updated | Nov 7, 2024 |