Description

In Packaged builds, Chaos Cache Manager (CCM) can't animate Geometry Collections (GC) with Nanite Enabled if Cache Mode is set to Static Pose.
The licensee tried to animate a CCM using Sequencer only to discover that the animation does not work in Packaged Builds.
During my tests I've tried animating CCM using BPs but it also does not work if the GC is Nanite enabled.
It works fine it the GC has Nanite disabled.
UGeometryCollection::SetEnableNanite() does have some processing that only happens in the Editor. I'll paste a callstack of UGeometryCollection::RebuildRenderData().

Steps to Reproduce

In an empty project, create a new scene
In the new scene create a Cube in the air so it can break when it falls
Select Fracture Mode and create a new GeometryCollection (GC)
Fracture the Cube at will
Select the GC and set DamageThreshold to a low value (1) to guarantee breakage
Select the instantiated GC and go to Actor>Chaos>Create CacheManager(CM)
Play In Editor (PIE) or Simulate In Editor (SIE) so the GC falls down, breaks and the process can be saved by the CM
Put the CacheMode of the CM as StaticPose
Try out the StartTime to verify it is animating the GC
Add a LevelSequence
Save the file
In the Sequencer window, press +Add
ActorToSequencer>ChaosCacheManager0
Press the + and select StartTime
Press <Enter> to create a key frame
Leave it at zero
Move the needle to the end of the sequence and press <Enter>
Set StartTime to a higher value (depends on how high the cube was, I'm using around 10)
Save the Sequence
Close the Sequencer window
Select the NewLevelSequence in the Outliner window
Enable AutoPlay
Set Loop to LoopIndefinitely to make it easier to see the animation
If you PIE you can see the animation looping, the Cube falls and breaks in a repetitive manner
Now you can either open the ProjectLauncher window and press LaunchThisProfile button to automatically make a build and run, or you can go to Platforms>Windows>PackageProject and choose a folder location - you will need to manually run the packaged project later.
At this point everything should work well, you can see the animation running in the packaged build. Now go back to the created GC, double click it, and enable EnableNanite.
Now package the project again and run

Expected result: the animation should run like it did with the non-nanite version
Actual result: the animation does not run. The particular combination of Nanite, GC, and CM in StaticPose don't work to animate the GC in Packaged Builds.

Callstack

> UnrealEditor-GeometryCollectionEngine.dll!UGeometryCollection::RebuildRenderData() Line 1408 C++
UnrealEditor-GeometryCollectionEngine.dll!UGeometryCollection::PostEditChangeProperty(FPropertyChangedEvent & PropertyChangedEvent) Line 1836 C++
UnrealEditor-CoreUObject.dll!UObject::PostEditChangeChainProperty(FPropertyChangedChainEvent & PropertyChangedEvent) Line 553 C++
[Inline Frame] UnrealEditor-PropertyEditor.dll!FPropertyNode::NotifyPostChange::__l14::<lambda_1>::operator()(UObject *) Line 3078 C++
UnrealEditor-PropertyEditor.dll!FPropertyNode::NotifyPostChange(FPropertyChangedEvent & InPropertyChangedEvent, FNotifyHook * InNotifyHook) Line 3082 C++
UnrealEditor-PropertyEditor.dll!FPropertyValueImpl::ImportText(const TArray<FObjectBaseAddress,TSizedDefaultAllocator<32>> & InObjects, const TArray<FString,TSizedDefaultAllocator<32>> & InValues, FPropertyNode * InPropertyNode, unsigned int Flags) Line 565 C++
UnrealEditor-PropertyEditor.dll!FPropertyValueImpl::ImportText(const FString & InValue, FPropertyNode * InPropertyNode, unsigned int Flags) Line 251 C++
UnrealEditor-PropertyEditor.dll!FPropertyValueImpl::ImportText(const FString & InValue, unsigned int Flags) Line 158 C++
UnrealEditor-PropertyEditor.dll!FPropertyHandleBool::SetValue(const bool & NewValue, unsigned int Flags) Line 3845 C++
UnrealEditor-PropertyEditor.dll!SPropertyEditorBool::OnCheckStateChanged(ECheckBoxState InNewState) Line 96 C++
[Inline Frame] UnrealEditor-PropertyEditor.dll!Invoke(void(SPropertyEditorBool::*)(ECheckBoxState)) Line 66 C++
[Inline Frame] UnrealEditor-PropertyEditor.dll!UE::Core::Private::Tuple::TTupleBase<TIntegerSequence<unsigned int>>::ApplyAfter(void(SPropertyEditorBool::*)(ECheckBoxState) &) Line 309 C++
UnrealEditor-PropertyEditor.dll!V::TBaseSPMethodDelegateInstance::ExecuteIfSafe(ECheckBoxState <Params_0>) Line 298 C++
UnrealEditor-Slate.dll!TDelegate<void __cdecl(ECheckBoxState),FDefaultDelegateUserPolicy>::ExecuteIfBound<void,0>(ECheckBoxState <Params_0>) Line 570 C++
UnrealEditor-Slate.dll!SCheckBox::ToggleCheckedState() Line 386 C++
UnrealEditor-Slate.dll!SCheckBox::OnMouseButtonUp(const FGeometry & MyGeometry, const FPointerEvent & MouseEvent) Line 248 C++
[Inline Frame] UnrealEditor-Slate.dll!FSlateApplication::RoutePointerUpEvent::__l8::<lambda_2>::operator()(const FArrangedWidget &) Line 5293 C++
UnrealEditor-Slate.dll!??$Route@VFReply@@VFToLeafmostPolicy@FEventRouter@@UFPointerEvent@@V<lambda_2>@?7??RoutePointerUpEvent@FSlateApplication@@QEAA?AV1@AEBVFWidgetPath@@AEBU4@@Z@@FEventRouter@@SA?AVFReply@@PEAVFSlateApplication@@VFToLeafmostPolicy@0@UFPointerEvent@@AEBV<lambda_2>@?7??RoutePointerUpEvent@2@QEAA?AV1@AEBVFWidgetPath@@AEBU4@@Z@W4ESlateDebuggingInputEvent@@@Z(FSlateApplication * ThisApplication, FEventRouter::FToLeafmostPolicy RoutingPolicy, FPointerEvent EventCopy, const FSlateApplication::RoutePointerUpEvent::__l8::<lambda_2> & Lambda, ESlateDebuggingInputEvent DebuggingInputEvent) Line 442 C++
UnrealEditor-Slate.dll!FSlateApplication::RoutePointerUpEvent(const FWidgetPath & WidgetsUnderPointer, const FPointerEvent & PointerEvent) Line 5279 C++
UnrealEditor-Slate.dll!FSlateApplication::ProcessMouseButtonUpEvent(const FPointerEvent & MouseEvent) Line 5857 C++
UnrealEditor-Slate.dll!FSlateApplication::OnMouseUp(const EMouseButtons::Type Button, const UE::Math::TVector2<double> CursorPos) Line 5813 C++
UnrealEditor-ApplicationCore.dll!FWindowsApplication::ProcessDeferredMessage(const FDeferredWindowsMessage & DeferredMessage) Line 2243 C++
UnrealEditor-ApplicationCore.dll!FWindowsApplication::DeferMessage(TSharedPtr<FWindowsWindow,1> & NativeWindow, HWND__ * InHWnd, unsigned int InMessage, unsigned __int64 InWParam, __int64 InLParam, int MouseX, int MouseY, unsigned int RawInputFlags) Line 2750 C++
UnrealEditor-ApplicationCore.dll!FWindowsApplication::ProcessMessage(HWND__ * hwnd, unsigned int msg, unsigned __int64 wParam, __int64 lParam) Line 1919 C++
[Inline Frame] UnrealEditor-ApplicationCore.dll!WindowsApplication_WndProc(HWND__ *) Line 923 C++
UnrealEditor-ApplicationCore.dll!FWindowsApplication::AppWndProc(HWND__ * hwnd, unsigned int msg, unsigned __int64 wParam, __int64 lParam) Line 929 C++
[External Code]
[Inline Frame] UnrealEditor-ApplicationCore.dll!WinPumpMessages() Line 116 C++
UnrealEditor-ApplicationCore.dll!FWindowsPlatformApplicationMisc::PumpMessages(bool bFromMainLoop) Line 145 C++
UnrealEditor.exe!FEngineLoop::Tick() Line 5850 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]

Have Comments or More Details?

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

0
Login to Vote

Unresolved
ComponentUE - Simulation - Physics - Destruction
Affects Versions5.4.4
Target Fix5.6
CreatedFeb 27, 2025
UpdatedMar 3, 2025
View Jira Issue