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

#include <SoftsEvolution.h>

Public Types

typedef TFunction< void(FSolverParticlesRange &, const FSolverReal Dt, const FSolverReal Time)> KinematicUpdateFunc
 
typedef TFunction< void(FSolverCollisionParticlesRange &, const FSolverReal Dt, const FSolverReal Time)> CollisionKinematicUpdateFunc
 
typedef TFunction< void(const FSolverParticlesRange &, const FSolverReal Dt, const ESolverMode)> ParallelInitFunc
 
typedef TFunction< void(FSolverParticlesRange &, const FSolverReal Dt, const ESolverMode)> ConstraintRuleFunc
 
typedef TFunction< void(FSolverParticlesRange &, const FSolverReal Dt)> PBDConstraintRuleFunc
 
typedef TFunction< void(FSolverParticlesRange &, const FSolverReal Dt, const TArray< FSolverCollisionParticlesRange > &)> PBDCollisionConstraintRuleFunc
 
typedef TFunction< void(const FSolverParticlesRange &, const FSolverReal Dt, FEvolutionLinearSystem &)> UpdateLinearSystemFunc
 
typedef TFunction< void(const FSolverParticlesRange &, const FSolverReal Dt, const TArray< FSolverCollisionParticlesRange > &, FEvolutionLinearSystem &)> UpdateLinearSystemCollisionsFunc
 

Public Member Functions

CHAOS_API FEvolution (const FCollectionPropertyConstFacade &Properties)
 
 ~FEvolution ()=default
 
CHAOS_API void Reset ()
 
CHAOS_API void AdvanceOneTimeStep (const FSolverReal Dt, const FSolverReal TimeDependentIterationMultiplier)
 
void AddGroupArray (TArrayCollectionArrayBase *Array)
 
void AddParticleArray (TArrayCollectionArrayBase *Array)
 
void AddCollisionParticleArray (TArrayCollectionArrayBase *Array)
 
const FSolverParticlesGetParticles () const
 
FSolverParticlesGetParticles ()
 
TSet< uint32GetActiveGroups () const
 
CHAOS_API TArray< uint32GetActiveGroupsArray () const
 
CHAOS_API int32 NumActiveParticles () const
 
const FEvolutionGroupContextGetGroupContext (uint32 GroupId) const
 
const FEvolutionGroupContextGetGroupContextForSoftBody (int32 SoftBodyId) const
 
CHAOS_API int32 AddSoftBody (uint32 GroupId, int32 NumParticles, bool bEnable)
 
CHAOS_API void RemoveSoftBody (int32 SoftBodyId)
 
int32 GetSoftBodyParticleNum (int32 SoftBodyId) const
 
int32 GetSoftBodyGroupId (int32 SoftBodyId) const
 
CHAOS_API void SetSoftBodyProperties (int32 SoftBodyId, const FCollectionPropertyConstFacade &PropertyCollection, const TMap< FString, TConstArrayView< FRealSingle > > &WeightMaps, const FSolverVec3 &ReferenceSpaceLocation, const FSolverVec3 &ReferenceSpaceVelocity, const FSolverVec3 &ReferenceSpaceAngularVelocity)
 
void SetSoftBodyProperties (int32 SoftBodyId, const FCollectionPropertyConstFacade &PropertyCollection, const TMap< FString, TConstArrayView< FRealSingle > > &WeightMaps)
 
CHAOS_API void ActivateSoftBody (int32 SoftBodyId, bool bActivate)
 
bool IsSoftBodyActive (int32 SoftBodyId) const
 
FSolverParticlesRangeGetSoftBodyParticles (int32 SoftBodyId)
 
const FSolverParticlesRangeGetSoftBodyParticles (int32 SoftBodyId) const
 
const TArray< int32 > & GetGroupSoftBodies (uint32 GroupId) const
 
const TSet< int32 > & GetGroupActiveSoftBodies (uint32 GroupId) const
 
int32 GetLastLinearSolveIterations (int32 SoftBodyId) const
 
FSolverReal GetLastLinearSolveError (int32 SoftBodyId) const
 
CHAOS_API int32 AddCollisionParticleRange (uint32 GroupId, int32 NumParticles, bool bEnable)
 
CHAOS_API void RemoveCollisionParticleRange (int32 CollisionRangeId)
 
CHAOS_API void ActivateCollisionParticleRange (int32 CollisionRangeId, bool bEnable)
 
const TSet< int32 > & GetGroupActiveCollisionParticleRanges (uint32 GroupId) const
 
CHAOS_API TArray< FSolverCollisionParticlesRangeGetActiveCollisionParticles (uint32 GroupId) const
 
bool IsValidCollisionParticleRange (int32 CollisionRangeId) const
 
FSolverCollisionParticlesRangeGetCollisionParticleRange (int32 CollisionRangeId)
 
const FSolverCollisionParticlesRangeGetCollisionParticleRange (int32 CollisionRangeId) const
 
void SetKinematicUpdateFunction (KinematicUpdateFunc Func)
 
void SetCollisionKinematicUpdateFunction (CollisionKinematicUpdateFunc Func)
 
void AllocatePreSubstepParallelInitRange (int32 SoftBodyId, int32 NumRules)
 
void AllocatePBDExternalForceRulesRange (int32 SoftBodyId, int32 NumRules)
 
void AllocatePostInitialGuessParallelInitRange (int32 SoftBodyId, int32 NumRules)
 
void AllocatePreSubstepConstraintRulesRange (int32 SoftBodyId, int32 NumRules)
 
void AllocatePerIterationPBDConstraintRulesRange (int32 SoftBodyId, int32 NumRules)
 
void AllocatePerIterationCollisionPBDConstraintRulesRange (int32 SoftBodyId, int32 NumRules)
 
void AllocatePerIterationPostCollisionsPBDConstraintRulesRange (int32 SoftBodyId, int32 NumRules)
 
void AllocateUpdateLinearSystemRulesRange (int32 SoftBodyId, int32 NumRules)
 
void AllocateUpdateLinearSystemCollisionsRulesRange (int32 SoftBodyId, int32 NumRules)
 
void AllocatePostSubstepConstraintRulesRange (int32 SoftBodyId, int32 NumRules)
 
TArrayView< ParallelInitFuncGetPreSubstepParallelInitRange (int32 SoftBodyId)
 
TArrayView< PBDConstraintRuleFuncGetPBDExternalForceRulesRange (int32 SoftBodyId)
 
TArrayView< ParallelInitFuncGetPostInitialGuessParallelInitRange (int32 SoftBodyId)
 
TArrayView< ConstraintRuleFuncGetPreSubstepConstraintRulesRange (int32 SoftBodyId)
 
TArrayView< PBDConstraintRuleFuncGetPerIterationPBDConstraintRulesRange (int32 SoftBodyId)
 
TArrayView< PBDCollisionConstraintRuleFuncGetPerIterationCollisionPBDConstraintRulesRange (int32 SoftBodyId)
 
TArrayView< PBDConstraintRuleFuncGetPerIterationPostCollisionsPBDConstraintRulesRange (int32 SoftBodyId)
 
TArrayView< UpdateLinearSystemFuncGetUpdateLinearSystemRulesRange (int32 SoftBodyId)
 
TArrayView< UpdateLinearSystemCollisionsFuncGetUpdateLinearSystemCollisionsRulesRange (int32 SoftBodyId)
 
TArrayView< ConstraintRuleFuncGetPostSubstepConstraintRulesRange (int32 SoftBodyId)
 
FSolverReal GetTime () const
 
int32 GetIterations () const
 
int32 GetMaxIterations () const
 
int32 GetNumUsedIterations () const
 
bool GetDisableTimeDependentNumIterations () const
 
bool GetDoQuasistatics () const
 
void SetDisableTimeDependentNumIterations (bool bDisable)
 
CHAOS_API void SetSolverProperties (const FCollectionPropertyConstFacade &PropertyCollection)
 

Detailed Description

Solver can contain multiple "Groups". Groups do not interact with each other. They may be in different spaces. They may be solved in parallel, completely independently of each other. The only reason why they're in the same evolution is because they share the same solver settings and step together in time.

A Group can contain multiple "SoftBodies". SoftBodies can interact but have different constraint rules/forces.

Member Typedef Documentation

◆ CollisionKinematicUpdateFunc

◆ ConstraintRuleFunc

◆ KinematicUpdateFunc

◆ ParallelInitFunc

◆ PBDCollisionConstraintRuleFunc

◆ PBDConstraintRuleFunc

◆ UpdateLinearSystemCollisionsFunc

◆ UpdateLinearSystemFunc

Constructor & Destructor Documentation

◆ FEvolution()

Chaos::Softs::FEvolution::FEvolution ( const FCollectionPropertyConstFacade Properties)

◆ ~FEvolution()

Chaos::Softs::FEvolution::~FEvolution ( )
default

Member Function Documentation

◆ ActivateCollisionParticleRange()

void Chaos::Softs::FEvolution::ActivateCollisionParticleRange ( int32  CollisionRangeId,
bool  bEnable 
)

◆ ActivateSoftBody()

void Chaos::Softs::FEvolution::ActivateSoftBody ( int32  SoftBodyId,
bool  bActivate 
)

◆ AddCollisionParticleArray()

void Chaos::Softs::FEvolution::AddCollisionParticleArray ( TArrayCollectionArrayBase Array)
inline

◆ AddCollisionParticleRange()

int32 Chaos::Softs::FEvolution::AddCollisionParticleRange ( uint32  GroupId,
int32  NumParticles,
bool  bEnable 
)

Add Collision particle range to a group. Adding and removing collision particle ranges is not threadsafe.

Returns
Particle range offset (unique id for this range)

◆ AddGroupArray()

void Chaos::Softs::FEvolution::AddGroupArray ( TArrayCollectionArrayBase Array)
inline

Add custom collection arrays

◆ AddParticleArray()

void Chaos::Softs::FEvolution::AddParticleArray ( TArrayCollectionArrayBase Array)
inline

◆ AddSoftBody()

int32 Chaos::Softs::FEvolution::AddSoftBody ( uint32  GroupId,
int32  NumParticles,
bool  bEnable 
)

Add a SoftBody to a Group. Adding and removing soft bodies is not threadsafe.

Returns
SoftBodyId

◆ AdvanceOneTimeStep()

void Chaos::Softs::FEvolution::AdvanceOneTimeStep ( const FSolverReal  Dt,
const FSolverReal  TimeDependentIterationMultiplier 
)

Move forward in time

◆ AllocatePBDExternalForceRulesRange()

void Chaos::Softs::FEvolution::AllocatePBDExternalForceRulesRange ( int32  SoftBodyId,
int32  NumRules 
)
inline

◆ AllocatePerIterationCollisionPBDConstraintRulesRange()

void Chaos::Softs::FEvolution::AllocatePerIterationCollisionPBDConstraintRulesRange ( int32  SoftBodyId,
int32  NumRules 
)
inline

◆ AllocatePerIterationPBDConstraintRulesRange()

void Chaos::Softs::FEvolution::AllocatePerIterationPBDConstraintRulesRange ( int32  SoftBodyId,
int32  NumRules 
)
inline

◆ AllocatePerIterationPostCollisionsPBDConstraintRulesRange()

void Chaos::Softs::FEvolution::AllocatePerIterationPostCollisionsPBDConstraintRulesRange ( int32  SoftBodyId,
int32  NumRules 
)
inline

◆ AllocatePostInitialGuessParallelInitRange()

void Chaos::Softs::FEvolution::AllocatePostInitialGuessParallelInitRange ( int32  SoftBodyId,
int32  NumRules 
)
inline

◆ AllocatePostSubstepConstraintRulesRange()

void Chaos::Softs::FEvolution::AllocatePostSubstepConstraintRulesRange ( int32  SoftBodyId,
int32  NumRules 
)
inline

◆ AllocatePreSubstepConstraintRulesRange()

void Chaos::Softs::FEvolution::AllocatePreSubstepConstraintRulesRange ( int32  SoftBodyId,
int32  NumRules 
)
inline

◆ AllocatePreSubstepParallelInitRange()

void Chaos::Softs::FEvolution::AllocatePreSubstepParallelInitRange ( int32  SoftBodyId,
int32  NumRules 
)
inline

◆ AllocateUpdateLinearSystemCollisionsRulesRange()

void Chaos::Softs::FEvolution::AllocateUpdateLinearSystemCollisionsRulesRange ( int32  SoftBodyId,
int32  NumRules 
)
inline

◆ AllocateUpdateLinearSystemRulesRange()

void Chaos::Softs::FEvolution::AllocateUpdateLinearSystemRulesRange ( int32  SoftBodyId,
int32  NumRules 
)
inline

◆ GetActiveCollisionParticles()

TArray< FSolverCollisionParticlesRange > Chaos::Softs::FEvolution::GetActiveCollisionParticles ( uint32  GroupId) const

◆ GetActiveGroups()

TSet< uint32 > Chaos::Softs::FEvolution::GetActiveGroups ( ) const
inline

◆ GetActiveGroupsArray()

TArray< uint32 > Chaos::Softs::FEvolution::GetActiveGroupsArray ( ) const

◆ GetCollisionParticleRange() [1/2]

FSolverCollisionParticlesRange & Chaos::Softs::FEvolution::GetCollisionParticleRange ( int32  CollisionRangeId)
inline

◆ GetCollisionParticleRange() [2/2]

const FSolverCollisionParticlesRange & Chaos::Softs::FEvolution::GetCollisionParticleRange ( int32  CollisionRangeId) const
inline

◆ GetDisableTimeDependentNumIterations()

bool Chaos::Softs::FEvolution::GetDisableTimeDependentNumIterations ( ) const
inline

◆ GetDoQuasistatics()

bool Chaos::Softs::FEvolution::GetDoQuasistatics ( ) const
inline

◆ GetGroupActiveCollisionParticleRanges()

const TSet< int32 > & Chaos::Softs::FEvolution::GetGroupActiveCollisionParticleRanges ( uint32  GroupId) const
inline

◆ GetGroupActiveSoftBodies()

const TSet< int32 > & Chaos::Softs::FEvolution::GetGroupActiveSoftBodies ( uint32  GroupId) const
inline

◆ GetGroupContext()

const FEvolutionGroupContext & Chaos::Softs::FEvolution::GetGroupContext ( uint32  GroupId) const
inline

◆ GetGroupContextForSoftBody()

const FEvolutionGroupContext & Chaos::Softs::FEvolution::GetGroupContextForSoftBody ( int32  SoftBodyId) const
inline

◆ GetGroupSoftBodies()

const TArray< int32 > & Chaos::Softs::FEvolution::GetGroupSoftBodies ( uint32  GroupId) const
inline

◆ GetIterations()

int32 Chaos::Softs::FEvolution::GetIterations ( ) const
inline

◆ GetLastLinearSolveError()

FSolverReal Chaos::Softs::FEvolution::GetLastLinearSolveError ( int32  SoftBodyId) const
inline

◆ GetLastLinearSolveIterations()

int32 Chaos::Softs::FEvolution::GetLastLinearSolveIterations ( int32  SoftBodyId) const
inline

◆ GetMaxIterations()

int32 Chaos::Softs::FEvolution::GetMaxIterations ( ) const
inline

◆ GetNumUsedIterations()

int32 Chaos::Softs::FEvolution::GetNumUsedIterations ( ) const
inline

◆ GetParticles() [1/2]

FSolverParticles & Chaos::Softs::FEvolution::GetParticles ( )
inline

◆ GetParticles() [2/2]

const FSolverParticles & Chaos::Softs::FEvolution::GetParticles ( ) const
inline

◆ GetPBDExternalForceRulesRange()

TArrayView< PBDConstraintRuleFunc > Chaos::Softs::FEvolution::GetPBDExternalForceRulesRange ( int32  SoftBodyId)
inline

◆ GetPerIterationCollisionPBDConstraintRulesRange()

TArrayView< PBDCollisionConstraintRuleFunc > Chaos::Softs::FEvolution::GetPerIterationCollisionPBDConstraintRulesRange ( int32  SoftBodyId)
inline

◆ GetPerIterationPBDConstraintRulesRange()

TArrayView< PBDConstraintRuleFunc > Chaos::Softs::FEvolution::GetPerIterationPBDConstraintRulesRange ( int32  SoftBodyId)
inline

◆ GetPerIterationPostCollisionsPBDConstraintRulesRange()

TArrayView< PBDConstraintRuleFunc > Chaos::Softs::FEvolution::GetPerIterationPostCollisionsPBDConstraintRulesRange ( int32  SoftBodyId)
inline

◆ GetPostInitialGuessParallelInitRange()

TArrayView< ParallelInitFunc > Chaos::Softs::FEvolution::GetPostInitialGuessParallelInitRange ( int32  SoftBodyId)
inline

◆ GetPostSubstepConstraintRulesRange()

TArrayView< ConstraintRuleFunc > Chaos::Softs::FEvolution::GetPostSubstepConstraintRulesRange ( int32  SoftBodyId)
inline

◆ GetPreSubstepConstraintRulesRange()

TArrayView< ConstraintRuleFunc > Chaos::Softs::FEvolution::GetPreSubstepConstraintRulesRange ( int32  SoftBodyId)
inline

◆ GetPreSubstepParallelInitRange()

TArrayView< ParallelInitFunc > Chaos::Softs::FEvolution::GetPreSubstepParallelInitRange ( int32  SoftBodyId)
inline

◆ GetSoftBodyGroupId()

int32 Chaos::Softs::FEvolution::GetSoftBodyGroupId ( int32  SoftBodyId) const
inline

◆ GetSoftBodyParticleNum()

int32 Chaos::Softs::FEvolution::GetSoftBodyParticleNum ( int32  SoftBodyId) const
inline

◆ GetSoftBodyParticles() [1/2]

FSolverParticlesRange & Chaos::Softs::FEvolution::GetSoftBodyParticles ( int32  SoftBodyId)
inline

◆ GetSoftBodyParticles() [2/2]

const FSolverParticlesRange & Chaos::Softs::FEvolution::GetSoftBodyParticles ( int32  SoftBodyId) const
inline

◆ GetTime()

FSolverReal Chaos::Softs::FEvolution::GetTime ( ) const
inline

Solver settings

◆ GetUpdateLinearSystemCollisionsRulesRange()

TArrayView< UpdateLinearSystemCollisionsFunc > Chaos::Softs::FEvolution::GetUpdateLinearSystemCollisionsRulesRange ( int32  SoftBodyId)
inline

◆ GetUpdateLinearSystemRulesRange()

TArrayView< UpdateLinearSystemFunc > Chaos::Softs::FEvolution::GetUpdateLinearSystemRulesRange ( int32  SoftBodyId)
inline

◆ IsSoftBodyActive()

bool Chaos::Softs::FEvolution::IsSoftBodyActive ( int32  SoftBodyId) const
inline

◆ IsValidCollisionParticleRange()

bool Chaos::Softs::FEvolution::IsValidCollisionParticleRange ( int32  CollisionRangeId) const
inline

◆ NumActiveParticles()

int32 Chaos::Softs::FEvolution::NumActiveParticles ( ) const

◆ RemoveCollisionParticleRange()

void Chaos::Softs::FEvolution::RemoveCollisionParticleRange ( int32  CollisionRangeId)

◆ RemoveSoftBody()

void Chaos::Softs::FEvolution::RemoveSoftBody ( int32  SoftBodyId)

◆ Reset()

void Chaos::Softs::FEvolution::Reset ( )

Reset/empty everything.

◆ SetCollisionKinematicUpdateFunction()

void Chaos::Softs::FEvolution::SetCollisionKinematicUpdateFunction ( CollisionKinematicUpdateFunc  Func)
inline

◆ SetDisableTimeDependentNumIterations()

void Chaos::Softs::FEvolution::SetDisableTimeDependentNumIterations ( bool  bDisable)
inline

◆ SetKinematicUpdateFunction()

void Chaos::Softs::FEvolution::SetKinematicUpdateFunction ( KinematicUpdateFunc  Func)
inline

◆ SetSoftBodyProperties() [1/2]

void Chaos::Softs::FEvolution::SetSoftBodyProperties ( int32  SoftBodyId,
const FCollectionPropertyConstFacade PropertyCollection,
const TMap< FString, TConstArrayView< FRealSingle > > &  WeightMaps 
)
inline

◆ SetSoftBodyProperties() [2/2]

void Chaos::Softs::FEvolution::SetSoftBodyProperties ( int32  SoftBodyId,
const FCollectionPropertyConstFacade PropertyCollection,
const TMap< FString, TConstArrayView< FRealSingle > > &  WeightMaps,
const FSolverVec3 ReferenceSpaceLocation,
const FSolverVec3 ReferenceSpaceVelocity,
const FSolverVec3 ReferenceSpaceAngularVelocity 
)

◆ SetSolverProperties()

void Chaos::Softs::FEvolution::SetSolverProperties ( const FCollectionPropertyConstFacade PropertyCollection)

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