UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
Chaos::FPBDRigidsEvolutionBase Class Reference

#include <PBDRigidsEvolution.h>

+ Inheritance diagram for Chaos::FPBDRigidsEvolutionBase:

Classes

class  FChaosAccelerationStructureTask
 
struct  FTestModeParticleData
 

Public Types

using FAccelerationStructure = ISpatialAccelerationCollection< FAccelerationStructureHandle, FReal, 3 >
 
typedef TFunction< void(TTransientPBDRigidParticleHandle< FReal, 3 > &Particle, const FReal)> FForceRule
 
typedef TFunction< void(const TArray< FGeometryParticleHandle * > &, const FReal)> FUpdateVelocityRule
 
typedef TFunction< void(const TParticleView< FPBDRigidParticles > &, const FReal)> FUpdatePositionRule
 
typedef TFunction< void(FPBDRigidParticles &, const FReal, const FReal, const int32)> FKinematicUpdateRule
 
typedef TFunction< void(TParticleView< FPBDRigidParticles > &)> FCaptureRewindRule
 
typedef TFunction< void(TParticleView< FPBDRigidParticles > &)> FCaptureRewindKinematicTargetRule
 

Public Member Functions

CHAOS_API FPBDRigidsEvolutionBase (FPBDRigidsSOAs &InParticles, THandleArray< FChaosPhysicsMaterial > &InSolverPhysicsMaterials, bool InIsSingleThreaded=false)
 
virtual CHAOS_API ~FPBDRigidsEvolutionBase ()
 
TArray< FGeometryParticleHandle * > CreateStaticParticles (int32 NumParticles, const FUniqueIdx *ExistingIndices=nullptr, const FGeometryParticleParameters &Params=FGeometryParticleParameters())
 
TArray< FKinematicGeometryParticleHandle * > CreateKinematicParticles (int32 NumParticles, const FUniqueIdx *ExistingIndices=nullptr, const FKinematicGeometryParticleParameters &Params=FKinematicGeometryParticleParameters())
 
TArray< FPBDRigidParticleHandle * > CreateDynamicParticles (int32 NumParticles, const FUniqueIdx *ExistingIndices=nullptr, const FPBDRigidParticleParameters &Params=FPBDRigidParticleParameters())
 
TArray< TPBDRigidClusteredParticleHandle< FReal, 3 > * > CreateClusteredParticles (int32 NumParticles, const FUniqueIdx *ExistingIndices=nullptr, const FPBDRigidParticleParameters &Params=FPBDRigidParticleParameters())
 
TArray< TPBDGeometryCollectionParticleHandle< FReal, 3 > * > CreateGeometryCollectionParticles (int32 NumParticles, const FUniqueIdx *ExistingIndices=nullptr, const FPBDRigidParticleParameters &Params=FPBDRigidParticleParameters())
 
void AddForceFunction (FForceRule ForceFunction)
 
void AddImpulseFunction (FForceRule ImpulseFunction)
 
void SetParticleUpdatePositionFunction (FUpdatePositionRule ParticleUpdate)
 
void SetCaptureRewindDataFunction (FCaptureRewindRule Rule)
 
void SetCaptureRewindKinematicTargetFunction (FCaptureRewindKinematicTargetRule Rule)
 
TGeometryParticleHandles< FReal, 3 > & GetParticleHandles ()
 
const TGeometryParticleHandles< FReal, 3 > & GetParticleHandles () const
 
FPBDRigidsSOAsGetParticles ()
 
const FPBDRigidsSOAsGetParticles () const
 
virtual void ResetCollisions ()
 
void AddConstraintContainer (FPBDConstraintContainer &InContainer, const int32 Priority=0)
 
void SetNumPositionIterations (int32 InNumIterations)
 
int32 GetNumPositionIterations () const
 
void SetNumVelocityIterations (int32 InNumIterations)
 
int32 GetNumVelocityIterations () const
 
void SetNumProjectionIterations (int32 InNumIterations)
 
int32 GetNumProjectionIterations () const
 
void RegisterParticle (FGeometryParticleHandle *Particle)
 
void EnableParticle (FGeometryParticleHandle *Particle)
 
void DisableParticle (FGeometryParticleHandle *Particle)
 
void InvalidateParticle (FGeometryParticleHandle *Particle)
 
CHAOS_API void FlushExternalAccelerationQueue (FAccelerationStructure &Acceleration, FPendingSpatialDataQueue &ExternalQueue)
 
void DisableParticles (TSet< FGeometryParticleHandle * > &ParticlesIn)
 
template<bool bPersistent>
FORCEINLINE_DEBUGGABLE bool IsADisableCluster (TGeometryParticleHandleImp< FReal, 3, bPersistent > &Particle)
 
template<bool bPersistent>
FORCEINLINE_DEBUGGABLE void DirtyParticle (TGeometryParticleHandleImp< FReal, 3, bPersistent > &Particle, const EPendingSpatialDataOperation Op=EPendingSpatialDataOperation::Update)
 
template<bool bPersistent>
FORCEINLINE_DEBUGGABLE void DirtyParticleAsync (TGeometryParticleHandleImp< FReal, 3, bPersistent > &Particle, const EPendingSpatialDataOperation Op=EPendingSpatialDataOperation::Update)
 
void DestroyParticle (FGeometryParticleHandle *Particle)
 
void ReserveParticles (const int32 Num)
 
CHAOS_API void SetParticleObjectState (FPBDRigidParticleHandle *Particle, EObjectStateType ObjectState)
 
CHAOS_API void WakeParticle (FPBDRigidParticleHandle *Particle)
 
CHAOS_API void SetParticleSleepType (FPBDRigidParticleHandle *Particle, ESleepType InSleepType)
 
CHAOS_API void DisableParticles (const TSet< FGeometryParticleHandle * > &InParticles)
 
void RemoveConstraintFromConstraintGraph (FConstraintHandle *ConstraintHandle)
 
void RemoveConstraintsFromConstraintGraph (const FConstraintHandleArray &Constraints)
 
void DisconnectConstraints (const TSet< FGeometryParticleHandle * > &RemovedParticles)
 
void DisableConstraints (FGeometryParticleHandle *ParticleHandle)
 
void EnableConstraints (FGeometryParticleHandle *ParticleHandle)
 
void ResetConstraints ()
 
virtual void DestroyTransientConstraints (FGeometryParticleHandle *Particle)
 
virtual void DestroyTransientConstraints ()
 
const TParticleView< FPBDRigidClusteredParticles > & GetNonDisabledClusteredView () const
 
TSerializablePtr< FChaosPhysicsMaterialGetPhysicsMaterial (const FGeometryParticleHandle *Particle) const
 
CHAOS_API const FChaosPhysicsMaterialGetFirstPhysicsMaterial (const FGeometryParticleHandle *Particle) const
 
const TUniquePtr< FChaosPhysicsMaterial > & GetPerParticlePhysicsMaterial (const FGeometryParticleHandle *Particle) const
 
void SetPerParticlePhysicsMaterial (FGeometryParticleHandle *Particle, TUniquePtr< FChaosPhysicsMaterial > &InMaterial)
 
void SetPhysicsMaterial (FGeometryParticleHandle *Particle, TSerializablePtr< FChaosPhysicsMaterial > InMaterial)
 
void PrepareTick ()
 
void UnprepareTick ()
 
virtual void ApplyKinematicTargets (const FReal Dt, const FReal StepFraction)
 
CHAOS_API void UpdateExternalAccelerationStructure_External (ISpatialAccelerationCollection< FAccelerationStructureHandle, FReal, 3 > *&ExternalStructure, FPendingSpatialDataQueue &PendingExternal)
 
ISpatialAccelerationCollection< FAccelerationStructureHandle, FReal, 3 > * GetSpatialAcceleration ()
 
CHAOS_API void FlushSpatialAcceleration ()
 
CHAOS_API void RebuildSpatialAccelerationForPerfTest ()
 
CHAOS_API void ComputeIntermediateSpatialAcceleration (bool bBlock=false)
 
const Private::FPBDIslandManagerGetConstraintGraph () const
 
Private::FPBDIslandManagerGetConstraintGraph ()
 
Private::FPBDIslandManagerGetIslandManager ()
 
const Private::FPBDIslandManagerGetIslandManager () const
 
const Private::FPBDIslandGroupManagerGetIslandGroupManager () const
 
void SetResim (bool bInResim)
 
const bool IsResimming () const
 
void SetReset (bool bInReset)
 
const bool IsResetting () const
 
void Serialize (FChaosArchive &Ar)
 
FUniqueIdx GenerateUniqueIdx ()
 
void ReleaseUniqueIdx (FUniqueIdx UniqueIdx)
 
bool IsUniqueIndexPendingRelease (FUniqueIdx UniqueIdx) const
 
void KillSafeAsyncTasks ()
 
bool AreAnyTasksPending () const
 
void SetCanStartAsyncTasks (bool bInCanStartAsyncTasks)
 
void SetRewindData (FRewindData *RewindData)
 
FRewindDataGetRewindData ()
 
CHAOS_API void DisableParticleWithRemovalEvent (FGeometryParticleHandle *Particle)
 
const TArray< FRemovalData > & GetAllRemovals ()
 
void ResetAllRemovals ()
 
virtual void SetName (const FString &InName)
 
const FString & GetName () const
 
virtual UE_INTERNAL void WaitIntegrationComplete ()
 
template<bool bPersistent>
FORCEINLINE_DEBUGGABLE void RemoveParticleFromAccelerationStructure (TGeometryParticleHandleImp< FReal, 3, bPersistent > &ParticleHandle)
 

Public Attributes

int32 LatestExternalTimestampConsumed_Internal
 

Protected Member Functions

int32 NumConstraints () const
 
void UpdateConstraintPositionBasedState (FReal Dt)
 
void CreateConstraintGraph ()
 
void CreateIslands ()
 
void PruneInternalPendingData (FAccelerationStructure &AccelerationStructure)
 
void FlushInternalAccelerationQueue ()
 
void FlushAsyncAccelerationQueue ()
 
void WaitOnAccelerationStructure ()
 
FORCEINLINE_DEBUGGABLE void ApplyParticlePendingData (const FPendingSpatialData &PendingData, FAccelerationStructure &SpatialAcceleration, bool bUpdateCache, bool bUpdateDynamicTrees)
 
FAccelerationStructureGetFreeSpatialAcceleration_Internal ()
 
void FreeSpatialAcceleration_External (FAccelerationStructure *Structure)
 
void ReleaseIdx (FUniqueIdx Idx)
 
void ReleasePendingIndices ()
 
CHAOS_API void TestModeStep ()
 
CHAOS_API void TestModeParticleDisabled (FGeometryParticleHandle *Particle)
 
CHAOS_API void TestModeSaveParticles ()
 
CHAOS_API void TestModeSaveParticle (FGeometryParticleHandle *Particle)
 
CHAOS_API void TestModeUpdateSavedParticle (FGeometryParticleHandle *Particle)
 
CHAOS_API void TestModeRestoreParticles ()
 
CHAOS_API void TestModeRestoreParticle (FGeometryParticleHandle *Particle)
 

Static Protected Member Functions

static void CopyUnBuiltDynamicAccelerationStructures (const TMap< FSpatialAccelerationIdx, TUniquePtr< FSpatialAccelerationCache > > &SpatialAccelerationCache, FAccelerationStructure *InternalAcceleration, FAccelerationStructure *AsyncInternalAcceleration, FAccelerationStructure *AsyncExternalAcceleration)
 
static void CopyPristineAccelerationStructures (const TMap< FSpatialAccelerationIdx, TUniquePtr< FSpatialAccelerationCache > > &SpatialAccelerationCache, FAccelerationStructure *FromStructure, FAccelerationStructure *ToStructure, bool CheckPristine)
 

Protected Attributes

TArray< FForceRuleForceRules
 
TArray< FForceRuleImpulseRules
 
FUpdatePositionRule ParticleUpdatePosition
 
FKinematicUpdateRule KinematicUpdate
 
FCaptureRewindRule CaptureRewindData
 
FCaptureRewindKinematicTargetRule CaptureRewindKinematicTarget
 
TArray< FPBDConstraintContainer * > ConstraintContainers
 
Private::FPBDIslandManager IslandManager
 
Private::FPBDIslandGroupManager IslandGroupManager
 
TArrayCollectionArray< TSerializablePtr< FChaosPhysicsMaterial > > PhysicsMaterials
 
TArrayCollectionArray< TUniquePtr< FChaosPhysicsMaterial > > PerParticlePhysicsMaterials
 
TArrayCollectionArray< boolCollided
 
FPBDRigidsSOAsParticles
 
THandleArray< FChaosPhysicsMaterial > & SolverPhysicsMaterials
 
FAccelerationStructureInternalAcceleration
 
FAccelerationStructureAsyncInternalAcceleration
 
FAccelerationStructureAsyncExternalAcceleration
 
FRewindDataMRewindData = nullptr
 
TSpscQueue< FAccelerationStructure * > ExternalStructuresQueue
 
TSpscQueue< FAccelerationStructure * > ExternalStructuresPool
 
TArray< TUniquePtr< FAccelerationStructure > > AccelerationBackingBuffer
 
bool bIsSingleThreaded
 
bool bCanStartAsyncTasks
 
TArray< FUniqueIdxUniqueIndicesPendingRelease
 
TArray< FRemovalDataMAllRemovals
 
FPendingSpatialInternalDataQueue InternalAccelerationQueue
 
FPendingSpatialDataQueue AsyncAccelerationQueue
 
Private::FTaskDispatcherEvolution TaskDispatcher
 
TArrayAsMap< FUniqueIdx, uint32ParticleToCacheInnerIdx
 
TMap< FSpatialAccelerationIdx, TUniquePtr< FSpatialAccelerationCache > > SpatialAccelerationCache
 
FGraphEventRef AccelerationStructureTaskComplete
 
std::atomic< bool > * bAccelerationStructureTaskStarted
 
std::atomic< bool > * bAccelerationStructureTaskSignalKill
 
TUniquePtr< ISpatialAccelerationCollectionFactorySpatialCollectionFactory
 
TArray< FUniqueIdxPendingReleaseIndices
 
bool bIsResim = false
 
bool bIsReset = false
 
FSharedDebugName EvolutionName
 
TMap< FPBDRigidParticleHandle *, FTestModeParticleDataTestModeData
 

Member Typedef Documentation

◆ FAccelerationStructure

◆ FCaptureRewindKinematicTargetRule

◆ FCaptureRewindRule

◆ FForceRule

◆ FKinematicUpdateRule

◆ FUpdatePositionRule

◆ FUpdateVelocityRule

Constructor & Destructor Documentation

◆ FPBDRigidsEvolutionBase()

Chaos::FPBDRigidsEvolutionBase::FPBDRigidsEvolutionBase ( FPBDRigidsSOAs InParticles,
THandleArray< FChaosPhysicsMaterial > &  InSolverPhysicsMaterials,
bool  InIsSingleThreaded = false 
)

◆ ~FPBDRigidsEvolutionBase()

Chaos::FPBDRigidsEvolutionBase::~FPBDRigidsEvolutionBase ( )
virtual

Member Function Documentation

◆ AddConstraintContainer()

void Chaos::FPBDRigidsEvolutionBase::AddConstraintContainer ( FPBDConstraintContainer InContainer,
const int32  Priority = 0 
)
inline

Register a constraint container with the evolution. Constraints added to the container will be solved during the tick.

Note
we do not currently support removing containers. In a few places we assume the ContainerId is persistent and equal to the array index.

◆ AddForceFunction()

void Chaos::FPBDRigidsEvolutionBase::AddForceFunction ( FForceRule  ForceFunction)
inline

◆ AddImpulseFunction()

void Chaos::FPBDRigidsEvolutionBase::AddImpulseFunction ( FForceRule  ImpulseFunction)
inline

◆ ApplyKinematicTargets()

virtual void Chaos::FPBDRigidsEvolutionBase::ApplyKinematicTargets ( const FReal  Dt,
const FReal  StepFraction 
)
inlinevirtual

Reimplemented in Chaos::FPBDRigidsEvolutionGBF.

◆ ApplyParticlePendingData()

void Chaos::FPBDRigidsEvolutionBase::ApplyParticlePendingData ( const FPendingSpatialData PendingData,
FAccelerationStructure SpatialAcceleration,
bool  bUpdateCache,
bool  bUpdateDynamicTrees 
)
protected

◆ AreAnyTasksPending()

bool Chaos::FPBDRigidsEvolutionBase::AreAnyTasksPending ( ) const
inline

◆ ComputeIntermediateSpatialAcceleration()

void Chaos::FPBDRigidsEvolutionBase::ComputeIntermediateSpatialAcceleration ( bool  bBlock = false)

◆ CopyPristineAccelerationStructures()

void Chaos::FPBDRigidsEvolutionBase::CopyPristineAccelerationStructures ( const TMap< FSpatialAccelerationIdx, TUniquePtr< FSpatialAccelerationCache > > &  SpatialAccelerationCache,
FAccelerationStructure FromStructure,
FAccelerationStructure ToStructure,
bool  CheckPristine 
)
staticprotected

◆ CopyUnBuiltDynamicAccelerationStructures()

void Chaos::FPBDRigidsEvolutionBase::CopyUnBuiltDynamicAccelerationStructures ( const TMap< FSpatialAccelerationIdx, TUniquePtr< FSpatialAccelerationCache > > &  SpatialAccelerationCache,
FAccelerationStructure InternalAcceleration,
FAccelerationStructure AsyncInternalAcceleration,
FAccelerationStructure AsyncExternalAcceleration 
)
staticprotected

◆ CreateClusteredParticles()

TArray< TPBDRigidClusteredParticleHandle< FReal, 3 > * > Chaos::FPBDRigidsEvolutionBase::CreateClusteredParticles ( int32  NumParticles,
const FUniqueIdx ExistingIndices = nullptr,
const FPBDRigidParticleParameters Params = FPBDRigidParticleParameters() 
)
inline

◆ CreateConstraintGraph()

void Chaos::FPBDRigidsEvolutionBase::CreateConstraintGraph ( )
inlineprotected

◆ CreateDynamicParticles()

TArray< FPBDRigidParticleHandle * > Chaos::FPBDRigidsEvolutionBase::CreateDynamicParticles ( int32  NumParticles,
const FUniqueIdx ExistingIndices = nullptr,
const FPBDRigidParticleParameters Params = FPBDRigidParticleParameters() 
)
inline

◆ CreateGeometryCollectionParticles()

TArray< TPBDGeometryCollectionParticleHandle< FReal, 3 > * > Chaos::FPBDRigidsEvolutionBase::CreateGeometryCollectionParticles ( int32  NumParticles,
const FUniqueIdx ExistingIndices = nullptr,
const FPBDRigidParticleParameters Params = FPBDRigidParticleParameters() 
)
inline

◆ CreateIslands()

void Chaos::FPBDRigidsEvolutionBase::CreateIslands ( )
inlineprotected

◆ CreateKinematicParticles()

TArray< FKinematicGeometryParticleHandle * > Chaos::FPBDRigidsEvolutionBase::CreateKinematicParticles ( int32  NumParticles,
const FUniqueIdx ExistingIndices = nullptr,
const FKinematicGeometryParticleParameters Params = FKinematicGeometryParticleParameters() 
)
inline

◆ CreateStaticParticles()

TArray< FGeometryParticleHandle * > Chaos::FPBDRigidsEvolutionBase::CreateStaticParticles ( int32  NumParticles,
const FUniqueIdx ExistingIndices = nullptr,
const FGeometryParticleParameters Params = FGeometryParticleParameters() 
)
inline

◆ DestroyParticle()

void Chaos::FPBDRigidsEvolutionBase::DestroyParticle ( FGeometryParticleHandle Particle)
inline

◆ DestroyTransientConstraints() [1/2]

virtual void Chaos::FPBDRigidsEvolutionBase::DestroyTransientConstraints ( )
inlinevirtual

Reimplemented in Chaos::FPBDRigidsEvolutionGBF.

◆ DestroyTransientConstraints() [2/2]

virtual void Chaos::FPBDRigidsEvolutionBase::DestroyTransientConstraints ( FGeometryParticleHandle Particle)
inlinevirtual

Destroy all transient constraints (collisions) involving the specified particle.

Reimplemented in Chaos::FPBDRigidsEvolutionGBF.

◆ DirtyParticle()

template<bool bPersistent>
FORCEINLINE_DEBUGGABLE void Chaos::FPBDRigidsEvolutionBase::DirtyParticle ( TGeometryParticleHandleImp< FReal, 3, bPersistent > &  Particle,
const EPendingSpatialDataOperation  Op = EPendingSpatialDataOperation::Update 
)
inline

◆ DirtyParticleAsync()

template<bool bPersistent>
FORCEINLINE_DEBUGGABLE void Chaos::FPBDRigidsEvolutionBase::DirtyParticleAsync ( TGeometryParticleHandleImp< FReal, 3, bPersistent > &  Particle,
const EPendingSpatialDataOperation  Op = EPendingSpatialDataOperation::Update 
)
inline

◆ DisableConstraints()

void Chaos::FPBDRigidsEvolutionBase::DisableConstraints ( FGeometryParticleHandle ParticleHandle)
inline

Disconnect constraints (all types except collisions) from a particle to be removed (or destroyed) this will set the constraints to Enabled = false, but leave connections to the particles to support re-enabling at a later time.

Note
This only applies to persistent constraints (joints etc), not transient constraints (collisions)
See also
DestroyTransientConstraints()

◆ DisableParticle()

void Chaos::FPBDRigidsEvolutionBase::DisableParticle ( FGeometryParticleHandle Particle)
inline

Disable a particle so that it is no longer simulated. This also disables all constraints connected to the particle.

◆ DisableParticles() [1/2]

void Chaos::FPBDRigidsEvolutionBase::DisableParticles ( const TSet< FGeometryParticleHandle * > &  InParticles)

◆ DisableParticles() [2/2]

void Chaos::FPBDRigidsEvolutionBase::DisableParticles ( TSet< FGeometryParticleHandle * > &  ParticlesIn)
inline

◆ DisableParticleWithRemovalEvent()

void Chaos::FPBDRigidsEvolutionBase::DisableParticleWithRemovalEvent ( FGeometryParticleHandle Particle)

◆ DisconnectConstraints()

void Chaos::FPBDRigidsEvolutionBase::DisconnectConstraints ( const TSet< FGeometryParticleHandle * > &  RemovedParticles)
inline

Disconnect constraints (all types except collisions) from a set of particles to be destroyed. this will set the constraints to Enabled = false and set their respective bodies handles to nullptr. Once this is done, the constraints cannot be re-enabled.

Note
This only applies to persistent constraints (joints etc), not transient constraints (collisions)
See also
DestroyTransientConstraints()

◆ EnableConstraints()

void Chaos::FPBDRigidsEvolutionBase::EnableConstraints ( FGeometryParticleHandle ParticleHandle)
inline

Enable constraints (all types except collisions) from the enabled particles; constraints will only become enabled if their particle end points are valid.

Note
This only applies to persistent constraints (joints etc), not transient constraints (collisions)

◆ EnableParticle()

void Chaos::FPBDRigidsEvolutionBase::EnableParticle ( FGeometryParticleHandle Particle)
inline

Enable a particle.Only enabled particles are simulated. If the particle has constraints connected to it they will also be enabled (assuming the other particles in the constraints are also enabled).

◆ FlushAsyncAccelerationQueue()

void Chaos::FPBDRigidsEvolutionBase::FlushAsyncAccelerationQueue ( )
protected

◆ FlushExternalAccelerationQueue()

void Chaos::FPBDRigidsEvolutionBase::FlushExternalAccelerationQueue ( FAccelerationStructure Acceleration,
FPendingSpatialDataQueue ExternalQueue 
)

◆ FlushInternalAccelerationQueue()

void Chaos::FPBDRigidsEvolutionBase::FlushInternalAccelerationQueue ( )
protected

◆ FlushSpatialAcceleration()

void Chaos::FPBDRigidsEvolutionBase::FlushSpatialAcceleration ( )

Perform a blocking flush of the spatial acceleration structure for situations where we aren't simulating but must have an up to date structure

◆ FreeSpatialAcceleration_External()

void Chaos::FPBDRigidsEvolutionBase::FreeSpatialAcceleration_External ( FAccelerationStructure Structure)
protected

◆ GenerateUniqueIdx()

FUniqueIdx Chaos::FPBDRigidsEvolutionBase::GenerateUniqueIdx ( )
inline

◆ GetAllRemovals()

const TArray< FRemovalData > & Chaos::FPBDRigidsEvolutionBase::GetAllRemovals ( )
inline

◆ GetConstraintGraph() [1/2]

Private::FPBDIslandManager & Chaos::FPBDRigidsEvolutionBase::GetConstraintGraph ( )
inline

◆ GetConstraintGraph() [2/2]

const Private::FPBDIslandManager & Chaos::FPBDRigidsEvolutionBase::GetConstraintGraph ( ) const
inline

◆ GetFirstPhysicsMaterial()

const FChaosPhysicsMaterial * Chaos::FPBDRigidsEvolutionBase::GetFirstPhysicsMaterial ( const FGeometryParticleHandle Particle) const

◆ GetFreeSpatialAcceleration_Internal()

FPBDRigidsEvolutionBase::FAccelerationStructure * Chaos::FPBDRigidsEvolutionBase::GetFreeSpatialAcceleration_Internal ( )
protected

◆ GetIslandGroupManager()

const Private::FPBDIslandGroupManager & Chaos::FPBDRigidsEvolutionBase::GetIslandGroupManager ( ) const
inline

◆ GetIslandManager() [1/2]

Private::FPBDIslandManager & Chaos::FPBDRigidsEvolutionBase::GetIslandManager ( )
inline

◆ GetIslandManager() [2/2]

const Private::FPBDIslandManager & Chaos::FPBDRigidsEvolutionBase::GetIslandManager ( ) const
inline

◆ GetName()

const FString & Chaos::FPBDRigidsEvolutionBase::GetName ( ) const
inline

◆ GetNonDisabledClusteredView()

const TParticleView< FPBDRigidClusteredParticles > & Chaos::FPBDRigidsEvolutionBase::GetNonDisabledClusteredView ( ) const
inline

◆ GetNumPositionIterations()

int32 Chaos::FPBDRigidsEvolutionBase::GetNumPositionIterations ( ) const
inline

Get the number of position iterations the solver is running

◆ GetNumProjectionIterations()

int32 Chaos::FPBDRigidsEvolutionBase::GetNumProjectionIterations ( ) const
inline

Get the number of projection iterations the solver is running

◆ GetNumVelocityIterations()

int32 Chaos::FPBDRigidsEvolutionBase::GetNumVelocityIterations ( ) const
inline

Get the number of velocity iterations the solver is running

◆ GetParticleHandles() [1/2]

TGeometryParticleHandles< FReal, 3 > & Chaos::FPBDRigidsEvolutionBase::GetParticleHandles ( )
inline

◆ GetParticleHandles() [2/2]

const TGeometryParticleHandles< FReal, 3 > & Chaos::FPBDRigidsEvolutionBase::GetParticleHandles ( ) const
inline

◆ GetParticles() [1/2]

FPBDRigidsSOAs & Chaos::FPBDRigidsEvolutionBase::GetParticles ( )
inline

◆ GetParticles() [2/2]

const FPBDRigidsSOAs & Chaos::FPBDRigidsEvolutionBase::GetParticles ( ) const
inline

◆ GetPerParticlePhysicsMaterial()

const TUniquePtr< FChaosPhysicsMaterial > & Chaos::FPBDRigidsEvolutionBase::GetPerParticlePhysicsMaterial ( const FGeometryParticleHandle Particle) const
inline

◆ GetPhysicsMaterial()

TSerializablePtr< FChaosPhysicsMaterial > Chaos::FPBDRigidsEvolutionBase::GetPhysicsMaterial ( const FGeometryParticleHandle Particle) const
inline

◆ GetRewindData()

FRewindData * Chaos::FPBDRigidsEvolutionBase::GetRewindData ( )
inline

◆ GetSpatialAcceleration()

ISpatialAccelerationCollection< FAccelerationStructureHandle, FReal, 3 > * Chaos::FPBDRigidsEvolutionBase::GetSpatialAcceleration ( )
inline

◆ InvalidateParticle()

void Chaos::FPBDRigidsEvolutionBase::InvalidateParticle ( FGeometryParticleHandle Particle)
inline

To be called when a particle geometry changes. We must clear collisions and anything else that may reference the prior shapes.

◆ IsADisableCluster()

template<bool bPersistent>
FORCEINLINE_DEBUGGABLE bool Chaos::FPBDRigidsEvolutionBase::IsADisableCluster ( TGeometryParticleHandleImp< FReal, 3, bPersistent > &  Particle)
inline

◆ IsResetting()

const bool Chaos::FPBDRigidsEvolutionBase::IsResetting ( ) const
inline

◆ IsResimming()

const bool Chaos::FPBDRigidsEvolutionBase::IsResimming ( ) const
inline

◆ IsUniqueIndexPendingRelease()

bool Chaos::FPBDRigidsEvolutionBase::IsUniqueIndexPendingRelease ( FUniqueIdx  UniqueIdx) const
inline

◆ KillSafeAsyncTasks()

void Chaos::FPBDRigidsEvolutionBase::KillSafeAsyncTasks ( )
inline

◆ NumConstraints()

int32 Chaos::FPBDRigidsEvolutionBase::NumConstraints ( ) const
inlineprotected

◆ PrepareTick()

void Chaos::FPBDRigidsEvolutionBase::PrepareTick ( )
inline

◆ PruneInternalPendingData()

void Chaos::FPBDRigidsEvolutionBase::PruneInternalPendingData ( FAccelerationStructure AccelerationStructure)
protected

◆ RebuildSpatialAccelerationForPerfTest()

void Chaos::FPBDRigidsEvolutionBase::RebuildSpatialAccelerationForPerfTest ( )

Rebuilds the spatial acceleration from scratch. This should only be used for perf testing

◆ RegisterParticle()

void Chaos::FPBDRigidsEvolutionBase::RegisterParticle ( FGeometryParticleHandle Particle)
inline

To be called after creating a particle in the Particles container

◆ ReleaseIdx()

void Chaos::FPBDRigidsEvolutionBase::ReleaseIdx ( FUniqueIdx  Idx)
protected

◆ ReleasePendingIndices()

void Chaos::FPBDRigidsEvolutionBase::ReleasePendingIndices ( )
protected

◆ ReleaseUniqueIdx()

void Chaos::FPBDRigidsEvolutionBase::ReleaseUniqueIdx ( FUniqueIdx  UniqueIdx)
inline

◆ RemoveConstraintFromConstraintGraph()

void Chaos::FPBDRigidsEvolutionBase::RemoveConstraintFromConstraintGraph ( FConstraintHandle ConstraintHandle)
inline

remove a constraint from the constraint graph

◆ RemoveConstraintsFromConstraintGraph()

void Chaos::FPBDRigidsEvolutionBase::RemoveConstraintsFromConstraintGraph ( const FConstraintHandleArray Constraints)
inline

remove a list of constraints from the constraint graph

◆ RemoveParticleFromAccelerationStructure()

template<bool bPersistent>
FORCEINLINE_DEBUGGABLE void Chaos::FPBDRigidsEvolutionBase::RemoveParticleFromAccelerationStructure ( TGeometryParticleHandleImp< FReal, 3, bPersistent > &  ParticleHandle)
inline

◆ ReserveParticles()

void Chaos::FPBDRigidsEvolutionBase::ReserveParticles ( const int32  Num)
inline

Preallocate buffers for creating Num particles.

◆ ResetAllRemovals()

void Chaos::FPBDRigidsEvolutionBase::ResetAllRemovals ( )
inline

◆ ResetCollisions()

virtual void Chaos::FPBDRigidsEvolutionBase::ResetCollisions ( )
inlinevirtual

Reset the collisions warm starting when resimulate. Ideally we should store that in the RewindData history but probably too expensive for now

Reimplemented in Chaos::FPBDRigidsEvolutionGBF.

◆ ResetConstraints()

void Chaos::FPBDRigidsEvolutionBase::ResetConstraints ( )
inline

Clear all constraints from the system reeady for shut down

◆ Serialize()

void Chaos::FPBDRigidsEvolutionBase::Serialize ( FChaosArchive Ar)

◆ SetCanStartAsyncTasks()

void Chaos::FPBDRigidsEvolutionBase::SetCanStartAsyncTasks ( bool  bInCanStartAsyncTasks)
inline

◆ SetCaptureRewindDataFunction()

void Chaos::FPBDRigidsEvolutionBase::SetCaptureRewindDataFunction ( FCaptureRewindRule  Rule)
inline

◆ SetCaptureRewindKinematicTargetFunction()

void Chaos::FPBDRigidsEvolutionBase::SetCaptureRewindKinematicTargetFunction ( FCaptureRewindKinematicTargetRule  Rule)
inline

◆ SetName()

virtual void Chaos::FPBDRigidsEvolutionBase::SetName ( const FString &  InName)
inlinevirtual

Reimplemented in Chaos::FPBDRigidsEvolutionGBF.

◆ SetNumPositionIterations()

void Chaos::FPBDRigidsEvolutionBase::SetNumPositionIterations ( int32  InNumIterations)
inline

Set the number of iterations to perform in the constraint position-solve phase

◆ SetNumProjectionIterations()

void Chaos::FPBDRigidsEvolutionBase::SetNumProjectionIterations ( int32  InNumIterations)
inline

Set the number of iterations to perform in the constraint projection phase

◆ SetNumVelocityIterations()

void Chaos::FPBDRigidsEvolutionBase::SetNumVelocityIterations ( int32  InNumIterations)
inline

Set the number of iterations to perform in the constraint velocity-solve phase

◆ SetParticleObjectState()

void Chaos::FPBDRigidsEvolutionBase::SetParticleObjectState ( FPBDRigidParticleHandle Particle,
EObjectStateType  ObjectState 
)

◆ SetParticleSleepType()

void Chaos::FPBDRigidsEvolutionBase::SetParticleSleepType ( FPBDRigidParticleHandle Particle,
ESleepType  InSleepType 
)

◆ SetParticleUpdatePositionFunction()

void Chaos::FPBDRigidsEvolutionBase::SetParticleUpdatePositionFunction ( FUpdatePositionRule  ParticleUpdate)
inline

◆ SetPerParticlePhysicsMaterial()

void Chaos::FPBDRigidsEvolutionBase::SetPerParticlePhysicsMaterial ( FGeometryParticleHandle Particle,
TUniquePtr< FChaosPhysicsMaterial > &  InMaterial 
)
inline

◆ SetPhysicsMaterial()

void Chaos::FPBDRigidsEvolutionBase::SetPhysicsMaterial ( FGeometryParticleHandle Particle,
TSerializablePtr< FChaosPhysicsMaterial InMaterial 
)
inline

◆ SetReset()

void Chaos::FPBDRigidsEvolutionBase::SetReset ( bool  bInReset)
inline

◆ SetResim()

void Chaos::FPBDRigidsEvolutionBase::SetResim ( bool  bInResim)
inline

◆ SetRewindData()

void Chaos::FPBDRigidsEvolutionBase::SetRewindData ( FRewindData RewindData)
inline

◆ TestModeParticleDisabled()

CHAOS_API void Chaos::FPBDRigidsEvolutionBase::TestModeParticleDisabled ( FGeometryParticleHandle Particle)
protected

◆ TestModeRestoreParticle()

CHAOS_API void Chaos::FPBDRigidsEvolutionBase::TestModeRestoreParticle ( FGeometryParticleHandle Particle)
protected

◆ TestModeRestoreParticles()

CHAOS_API void Chaos::FPBDRigidsEvolutionBase::TestModeRestoreParticles ( )
protected

◆ TestModeSaveParticle()

CHAOS_API void Chaos::FPBDRigidsEvolutionBase::TestModeSaveParticle ( FGeometryParticleHandle Particle)
protected

◆ TestModeSaveParticles()

CHAOS_API void Chaos::FPBDRigidsEvolutionBase::TestModeSaveParticles ( )
protected

◆ TestModeStep()

CHAOS_API void Chaos::FPBDRigidsEvolutionBase::TestModeStep ( )
protected

◆ TestModeUpdateSavedParticle()

CHAOS_API void Chaos::FPBDRigidsEvolutionBase::TestModeUpdateSavedParticle ( FGeometryParticleHandle Particle)
protected

◆ UnprepareTick()

void Chaos::FPBDRigidsEvolutionBase::UnprepareTick ( )
inline

◆ UpdateConstraintPositionBasedState()

void Chaos::FPBDRigidsEvolutionBase::UpdateConstraintPositionBasedState ( FReal  Dt)
inlineprotected

◆ UpdateExternalAccelerationStructure_External()

void Chaos::FPBDRigidsEvolutionBase::UpdateExternalAccelerationStructure_External ( ISpatialAccelerationCollection< FAccelerationStructureHandle, FReal, 3 > *&  ExternalStructure,
FPendingSpatialDataQueue PendingExternal 
)

Make a copy of the acceleration structure to allow for external modification. This is needed for supporting sync operations on SQ structure from game thread. You probably want to go through solver which maintains PendingExternal

◆ WaitIntegrationComplete()

virtual UE_INTERNAL void Chaos::FPBDRigidsEvolutionBase::WaitIntegrationComplete ( )
inlinevirtual

Reimplemented in Chaos::FPBDRigidsEvolutionGBF.

◆ WaitOnAccelerationStructure()

void Chaos::FPBDRigidsEvolutionBase::WaitOnAccelerationStructure ( )
protected

◆ WakeParticle()

void Chaos::FPBDRigidsEvolutionBase::WakeParticle ( FPBDRigidParticleHandle Particle)

Member Data Documentation

◆ AccelerationBackingBuffer

TArray<TUniquePtr<FAccelerationStructure> > Chaos::FPBDRigidsEvolutionBase::AccelerationBackingBuffer
protected

◆ AccelerationStructureTaskComplete

FGraphEventRef Chaos::FPBDRigidsEvolutionBase::AccelerationStructureTaskComplete
protected

◆ AsyncAccelerationQueue

FPendingSpatialDataQueue Chaos::FPBDRigidsEvolutionBase::AsyncAccelerationQueue
protected

Pending operations for the acceleration structures being rebuilt asynchronously

◆ AsyncExternalAcceleration

FAccelerationStructure* Chaos::FPBDRigidsEvolutionBase::AsyncExternalAcceleration
protected

◆ AsyncInternalAcceleration

FAccelerationStructure* Chaos::FPBDRigidsEvolutionBase::AsyncInternalAcceleration
protected

◆ bAccelerationStructureTaskSignalKill

std::atomic<bool>* Chaos::FPBDRigidsEvolutionBase::bAccelerationStructureTaskSignalKill
protected

◆ bAccelerationStructureTaskStarted

std::atomic<bool>* Chaos::FPBDRigidsEvolutionBase::bAccelerationStructureTaskStarted
protected

◆ bCanStartAsyncTasks

bool Chaos::FPBDRigidsEvolutionBase::bCanStartAsyncTasks
protected

◆ bIsReset

bool Chaos::FPBDRigidsEvolutionBase::bIsReset = false
protected

◆ bIsResim

bool Chaos::FPBDRigidsEvolutionBase::bIsResim = false
protected

◆ bIsSingleThreaded

bool Chaos::FPBDRigidsEvolutionBase::bIsSingleThreaded
protected

◆ CaptureRewindData

FCaptureRewindRule Chaos::FPBDRigidsEvolutionBase::CaptureRewindData
protected

◆ CaptureRewindKinematicTarget

FCaptureRewindKinematicTargetRule Chaos::FPBDRigidsEvolutionBase::CaptureRewindKinematicTarget
protected

◆ Collided

TArrayCollectionArray<bool> Chaos::FPBDRigidsEvolutionBase::Collided
protected

◆ ConstraintContainers

TArray<FPBDConstraintContainer*> Chaos::FPBDRigidsEvolutionBase::ConstraintContainers
protected

◆ EvolutionName

FSharedDebugName Chaos::FPBDRigidsEvolutionBase::EvolutionName
protected

◆ ExternalStructuresPool

TSpscQueue<FAccelerationStructure*> Chaos::FPBDRigidsEvolutionBase::ExternalStructuresPool
protected

◆ ExternalStructuresQueue

TSpscQueue<FAccelerationStructure*> Chaos::FPBDRigidsEvolutionBase::ExternalStructuresQueue
protected

◆ ForceRules

TArray<FForceRule> Chaos::FPBDRigidsEvolutionBase::ForceRules
protected

◆ ImpulseRules

TArray<FForceRule> Chaos::FPBDRigidsEvolutionBase::ImpulseRules
protected

◆ InternalAcceleration

FAccelerationStructure* Chaos::FPBDRigidsEvolutionBase::InternalAcceleration
protected

◆ InternalAccelerationQueue

FPendingSpatialInternalDataQueue Chaos::FPBDRigidsEvolutionBase::InternalAccelerationQueue
protected

Pending operations for the internal acceleration structure

◆ IslandGroupManager

Private::FPBDIslandGroupManager Chaos::FPBDRigidsEvolutionBase::IslandGroupManager
protected

◆ IslandManager

Private::FPBDIslandManager Chaos::FPBDRigidsEvolutionBase::IslandManager
protected

◆ KinematicUpdate

FKinematicUpdateRule Chaos::FPBDRigidsEvolutionBase::KinematicUpdate
protected

◆ LatestExternalTimestampConsumed_Internal

int32 Chaos::FPBDRigidsEvolutionBase::LatestExternalTimestampConsumed_Internal

◆ MAllRemovals

TArray<FRemovalData> Chaos::FPBDRigidsEvolutionBase::MAllRemovals
protected

◆ MRewindData

FRewindData* Chaos::FPBDRigidsEvolutionBase::MRewindData = nullptr
protected

◆ Particles

FPBDRigidsSOAs& Chaos::FPBDRigidsEvolutionBase::Particles
protected

◆ ParticleToCacheInnerIdx

TArrayAsMap<FUniqueIdx, uint32> Chaos::FPBDRigidsEvolutionBase::ParticleToCacheInnerIdx
protected

Used for async acceleration rebuild

◆ ParticleUpdatePosition

FUpdatePositionRule Chaos::FPBDRigidsEvolutionBase::ParticleUpdatePosition
protected

◆ PendingReleaseIndices

TArray<FUniqueIdx> Chaos::FPBDRigidsEvolutionBase::PendingReleaseIndices
protected

◆ PerParticlePhysicsMaterials

TArrayCollectionArray<TUniquePtr<FChaosPhysicsMaterial> > Chaos::FPBDRigidsEvolutionBase::PerParticlePhysicsMaterials
protected

◆ PhysicsMaterials

TArrayCollectionArray<TSerializablePtr<FChaosPhysicsMaterial> > Chaos::FPBDRigidsEvolutionBase::PhysicsMaterials
protected

◆ SolverPhysicsMaterials

THandleArray<FChaosPhysicsMaterial>& Chaos::FPBDRigidsEvolutionBase::SolverPhysicsMaterials
protected

◆ SpatialAccelerationCache

TMap<FSpatialAccelerationIdx, TUniquePtr<FSpatialAccelerationCache> > Chaos::FPBDRigidsEvolutionBase::SpatialAccelerationCache
protected

◆ SpatialCollectionFactory

TUniquePtr<ISpatialAccelerationCollectionFactory> Chaos::FPBDRigidsEvolutionBase::SpatialCollectionFactory
protected

◆ TaskDispatcher

Private::FTaskDispatcherEvolution Chaos::FPBDRigidsEvolutionBase::TaskDispatcher
protected

◆ TestModeData

TMap<FPBDRigidParticleHandle*, FTestModeParticleData> Chaos::FPBDRigidsEvolutionBase::TestModeData
protected

◆ UniqueIndicesPendingRelease

TArray<FUniqueIdx> Chaos::FPBDRigidsEvolutionBase::UniqueIndicesPendingRelease
protected

The documentation for this class was generated from the following files: