Description

The licensee found a way to lock the state of a rigidbody as PBDRigid->ObjectState() == EObjectStateType::Sleeping by subjecting it to a particular transient field composed of a RadialFalloff and a RadialVector. The transient field is set as Physics Type> Linear Force. Once the rigidbody sleeps under it's area of influence, it never wakes up, even if the field is moved away from the rigidbody. Please check the repro project.

I didn't hit this while debugging but found this comment on PBDRigidsSOAs.h about setting sleep in two places:
void DeactivateParticle(...)
...
// Sleeping state is currently expressed in 2 places...
PBDRigid->SetSleeping(true);
PBDRigid->SetObjectStateLowLevel(EObjectStateType::Sleeping);

The comment suggests this might be an issue.

Steps to Reproduce

To reproduce the problem:
Use the repro project
'Simulate' the scene
Move the Red Wireframe Sphere called BP_FieldSystemActorRadial over onto one of the two spheres in the center
Doing so will change the sphere's color to orange, indicating it's awake
Now move BP_FieldSystemActorBase over one of the two spheres
Nothing should happen -
Then move BP_FieldSystemActorBase somewhere away from the sphere, and move BP_FieldSystemActorRadial (the red wireframe sphere) onto the sphere instead
In this case, the sphere's color should remain white, indicating that it's still asleep

Opening up either BP_FieldSystemActorRadial & BP_FieldSystemActorBase will show you how the Transient Fields are set up

Callstack

Call stack for the behavior, non-fatal:
> UnrealEditor-FieldSystemEngine.dll!UFieldSystemComponent::DispatchFieldCommand(const FFieldSystemCommand & InCommand, const bool IsTransient) Line 150 C++
UnrealEditor-FieldSystemEngine.dll!UFieldSystemComponent::BuildFieldCommand(bool Enabled, EFieldPhysicsType Target, UFieldSystemMetaData * MetaData, UFieldNodeBase * Field, const bool IsTransient) Line 285 C++
[Inline Frame] UnrealEditor-FieldSystemEngine.dll!UFieldSystemComponent::ApplyPhysicsField(bool Target, EFieldPhysicsType) Line 387 C++
UnrealEditor-FieldSystemEngine.dll!UFieldSystemComponent::execApplyPhysicsField(UObject * Context, FFrame & Stack, void * const Z_Param__Result) Line 337 C++
UnrealEditor-CoreUObject.dll!UFunction::Invoke(UObject * Obj, FFrame & Stack, void * const Z_Param__Result) Line 6847 C++
UnrealEditor-CoreUObject.dll!UObject::CallFunction(FFrame & Stack, void * const Z_Param__Result, UFunction * Function) Line 1139 C++
[Inline Frame] UnrealEditor-CoreUObject.dll!FFrame::Step(UObject *) Line 478 C++
UnrealEditor-CoreUObject.dll!UObject::ProcessContextOpcode(FFrame & Stack, void * const Z_Param__Result, bool bCanFailSilently) Line 3086 C++
[Inline Frame] UnrealEditor-CoreUObject.dll!FFrame::Step(UObject *) Line 478 C++
UnrealEditor-CoreUObject.dll!ProcessLocalScriptFunction(UObject * Context, FFrame & Stack, void * const Z_Param__Result) Line 1206 C++
UnrealEditor-CoreUObject.dll!ProcessScriptFunction<void ({}cdecl*)(UObject *,FFrame &,void *)>(UObject * Context, UFunction * Function, FFrame & Stack, void * const Z_Param{_}_Result, void[Image Removed](UObject *, FFrame &, void *) ExecFtor) Line 1039 C++
UnrealEditor-CoreUObject.dll!ProcessLocalFunction(UObject * Context, UFunction * Fn, FFrame & Stack, void * const Z_Param__Result) Line 1276 C++
[Inline Frame] UnrealEditor-CoreUObject.dll!FFrame::Step(UObject *) Line 478 C++
UnrealEditor-CoreUObject.dll!ProcessLocalScriptFunction(UObject * Context, FFrame & Stack, void * const Z_Param__Result) Line 1206 C++
UnrealEditor-CoreUObject.dll!UObject::ProcessInternal(UObject * Context, FFrame & Stack, void * const Z_Param__Result)

Have Comments or More Details?

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

0
Login to Vote

Backlogged
ComponentUE - Simulation - Physics
Affects Versions5.4.3
CreatedSep 5, 2024
UpdatedSep 11, 2024
View Jira Issue