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

#include <ConstraintGroupSolver.h>

+ Inheritance diagram for Chaos::Private::FPBDConstraintGroupSolver:

Public Member Functions

 UE_NONCOPYABLE (FPBDConstraintGroupSolver)
 
CHAOS_API FPBDConstraintGroupSolver ()
 
virtual CHAOS_API ~FPBDConstraintGroupSolver ()
 
FIterationSettings GetIterationSettings () const
 
virtual void SetIterationSettings (const FIterationSettings &InIterations)
 
int32 GetNumSolverBodies () const
 
int32 GetNumSolverConstraints () const
 
CHAOS_API void SetConstraintSolver (const int32 ContainerId, TUniquePtr< FConstraintContainerSolver > &&Solver)
 
CHAOS_API void SetConstraintSolverPriority (const int32 ContainerId, const int32 Priority)
 
CHAOS_API void Reset ()
 
CHAOS_API void AddConstraintsAndBodies ()
 
CHAOS_API void GatherBodies (const FReal Dt)
 
CHAOS_API void GatherBodies (const FReal Dt, const int32 BeginBodyIndex, const int32 EndBodyIndex)
 
CHAOS_API void GatherConstraints (const FReal Dt)
 
CHAOS_API void GatherConstraints (const FReal Dt, const int32 BeginConstraintIndex, const int32 EndConstraintIndex)
 
CHAOS_API void PreApplyPositionConstraints (const FReal Dt)
 
CHAOS_API void PreApplyVelocityConstraints (const FReal Dt)
 
CHAOS_API void PreApplyProjectionConstraints (const FReal Dt)
 
CHAOS_API void ApplyPositionConstraints (const FReal Dt)
 
CHAOS_API void ApplyVelocityConstraints (const FReal Dt)
 
CHAOS_API void ApplyProjectionConstraints (const FReal Dt)
 
CHAOS_API void ScatterBodies (const FReal Dt)
 
CHAOS_API void ScatterBodies (const FReal Dt, const int32 BeginBodyIndex, const int32 EndBodyIndex)
 
CHAOS_API void ScatterConstraints (const FReal Dt)
 
CHAOS_API void ScatterConstraints (const FReal Dt, const int32 BeginConstraintIndex, const int32 EndConstraintIndex)
 

Protected Member Functions

template<typename LambdaType >
void ApplyToConstraintRange (const int32 BeginConstraintIndex, const int32 EndConstraintIndex, const LambdaType &Lambda)
 
CHAOS_API void SortSolverContainers ()
 
virtual void ResetImpl ()
 
virtual void SetConstraintSolverImpl (const int32 ContainerId)
 
virtual void AddConstraintsImpl ()
 
virtual void GatherBodiesImpl (const FReal Dt, const int32 BeginBodyIndex, const int32 EndBodyIndex)
 

Protected Attributes

FSolverBodyContainer SolverBodyContainer
 
TArray< TUniquePtr< FConstraintContainerSolver > > ConstraintContainerSolvers
 
int32 TotalNumConstraints
 
TArray< FConstraintContainerSolver * > PrioritizedConstraintContainerSolvers
 
FIterationSettings Iterations
 

Detailed Description

All the data required to solver a set of constraints. All constraints in the groups are solved in sequence in a single thread. We can create one of these for each Island (or group of Islands, or subset of a color of constraints) for parallelism.

Constructor & Destructor Documentation

◆ FPBDConstraintGroupSolver()

Chaos::Private::FPBDConstraintGroupSolver::FPBDConstraintGroupSolver ( )

◆ ~FPBDConstraintGroupSolver()

Chaos::Private::FPBDConstraintGroupSolver::~FPBDConstraintGroupSolver ( )
virtual

Member Function Documentation

◆ AddConstraintsAndBodies()

void Chaos::Private::FPBDConstraintGroupSolver::AddConstraintsAndBodies ( )

Set up the constraints solvers and body containers with pointers to their constraint and particles, but do not collect any data.

◆ AddConstraintsImpl()

virtual void Chaos::Private::FPBDConstraintGroupSolver::AddConstraintsImpl ( )
inlineprotectedvirtual

◆ ApplyPositionConstraints()

void Chaos::Private::FPBDConstraintGroupSolver::ApplyPositionConstraints ( const FReal  Dt)

Apply positional constraints, and set the body velocities

◆ ApplyProjectionConstraints()

void Chaos::Private::FPBDConstraintGroupSolver::ApplyProjectionConstraints ( const FReal  Dt)

Apply projection to attempt to fix up any errors left over from the Position and Velocity saolver phases

◆ ApplyToConstraintRange()

template<typename LambdaType >
void Chaos::Private::FPBDConstraintGroupSolver::ApplyToConstraintRange ( const int32  BeginConstraintIndex,
const int32  EndConstraintIndex,
const LambdaType Lambda 
)
protected

◆ ApplyVelocityConstraints()

void Chaos::Private::FPBDConstraintGroupSolver::ApplyVelocityConstraints ( const FReal  Dt)

Apply any velocity constraints, and update the body velocities

◆ GatherBodies() [1/2]

void Chaos::Private::FPBDConstraintGroupSolver::GatherBodies ( const FReal  Dt)

Collect all the data for all solver bodies from their respective particles.

◆ GatherBodies() [2/2]

void Chaos::Private::FPBDConstraintGroupSolver::GatherBodies ( const FReal  Dt,
const int32  BeginBodyIndex,
const int32  EndBodyIndex 
)

Collect all the data for the specified range of solver bodies from their respective particles. Will be called from multiple threads with different non-overlapping indices.

◆ GatherBodiesImpl()

virtual void Chaos::Private::FPBDConstraintGroupSolver::GatherBodiesImpl ( const FReal  Dt,
const int32  BeginBodyIndex,
const int32  EndBodyIndex 
)
inlineprotectedvirtual

◆ GatherConstraints() [1/2]

void Chaos::Private::FPBDConstraintGroupSolver::GatherConstraints ( const FReal  Dt)

Collect all the data for all constraint solvers from their respective constraints.

◆ GatherConstraints() [2/2]

void Chaos::Private::FPBDConstraintGroupSolver::GatherConstraints ( const FReal  Dt,
const int32  BeginConstraintIndex,
const int32  EndConstraintIndex 
)

Collect all the data for the specified range of constraint solvers from their respective constraints. Will be called from multiple threads with different non-overlapping indices.

◆ GetIterationSettings()

FIterationSettings Chaos::Private::FPBDConstraintGroupSolver::GetIterationSettings ( ) const
inline

Get the iterations settings for this group of islands

◆ GetNumSolverBodies()

int32 Chaos::Private::FPBDConstraintGroupSolver::GetNumSolverBodies ( ) const
inline

Get the number of solver bodies we have. This is all the bodies referenced by all constraints and is only non-zero after calling AddConstraintsAndBodies(). NOTE: it may be less than the number of particles in the IslandGroup (

See also
FPBDISlandGroup) when there are no constraints in some islands.

◆ GetNumSolverConstraints()

int32 Chaos::Private::FPBDConstraintGroupSolver::GetNumSolverConstraints ( ) const
inline

Get the number of constraint solver we have, after AddConstraintsAndBodies() has been called.

◆ PreApplyPositionConstraints()

void Chaos::Private::FPBDConstraintGroupSolver::PreApplyPositionConstraints ( const FReal  Dt)

For additional processing after gathering all the data. Calls PreApplyConstraints on each container solver.

◆ PreApplyProjectionConstraints()

void Chaos::Private::FPBDConstraintGroupSolver::PreApplyProjectionConstraints ( const FReal  Dt)

◆ PreApplyVelocityConstraints()

void Chaos::Private::FPBDConstraintGroupSolver::PreApplyVelocityConstraints ( const FReal  Dt)

◆ Reset()

void Chaos::Private::FPBDConstraintGroupSolver::Reset ( )

Reset all state - called once per tick

◆ ResetImpl()

virtual void Chaos::Private::FPBDConstraintGroupSolver::ResetImpl ( )
inlineprotectedvirtual

◆ ScatterBodies() [1/2]

void Chaos::Private::FPBDConstraintGroupSolver::ScatterBodies ( const FReal  Dt)

Push results from all solver bodies back to their respective particles.

◆ ScatterBodies() [2/2]

void Chaos::Private::FPBDConstraintGroupSolver::ScatterBodies ( const FReal  Dt,
const int32  BeginBodyIndex,
const int32  EndBodyIndex 
)

Push results from the specified range of solver bodies back to their respective particles. Will be called from multiple threads with different non-overlapping indices.

◆ ScatterConstraints() [1/2]

void Chaos::Private::FPBDConstraintGroupSolver::ScatterConstraints ( const FReal  Dt)

Push results from all constraint solvers back to their respective constraints.

◆ ScatterConstraints() [2/2]

void Chaos::Private::FPBDConstraintGroupSolver::ScatterConstraints ( const FReal  Dt,
const int32  BeginConstraintIndex,
const int32  EndConstraintIndex 
)

Push results from the specified range of constraint solvers back to their respective constraints.Will be called from multiple threads with different non-overlapping indices. The range covers all constraint types.

◆ SetConstraintSolver()

void Chaos::Private::FPBDConstraintGroupSolver::SetConstraintSolver ( const int32  ContainerId,
TUniquePtr< FConstraintContainerSolver > &&  Solver 
)

Attach a constraint solver to the specified ContainerId. This must be for the same constraint type as the container with that Id.

◆ SetConstraintSolverImpl()

virtual void Chaos::Private::FPBDConstraintGroupSolver::SetConstraintSolverImpl ( const int32  ContainerId)
inlineprotectedvirtual

◆ SetConstraintSolverPriority()

void Chaos::Private::FPBDConstraintGroupSolver::SetConstraintSolverPriority ( const int32  ContainerId,
const int32  Priority 
)

Set the solver priority of the specified constraint type

◆ SetIterationSettings()

virtual void Chaos::Private::FPBDConstraintGroupSolver::SetIterationSettings ( const FIterationSettings InIterations)
inlinevirtual

Set the iterations settings for this group of islands

Reimplemented in Chaos::Private::FPBDIslandConstraintGroupSolver.

◆ SortSolverContainers()

void Chaos::Private::FPBDConstraintGroupSolver::SortSolverContainers ( )
protected

◆ UE_NONCOPYABLE()

Chaos::Private::FPBDConstraintGroupSolver::UE_NONCOPYABLE ( FPBDConstraintGroupSolver  )

Member Data Documentation

◆ ConstraintContainerSolvers

TArray<TUniquePtr<FConstraintContainerSolver> > Chaos::Private::FPBDConstraintGroupSolver::ConstraintContainerSolvers
protected

◆ Iterations

FIterationSettings Chaos::Private::FPBDConstraintGroupSolver::Iterations
protected

◆ PrioritizedConstraintContainerSolvers

TArray<FConstraintContainerSolver*> Chaos::Private::FPBDConstraintGroupSolver::PrioritizedConstraintContainerSolvers
protected

◆ SolverBodyContainer

FSolverBodyContainer Chaos::Private::FPBDConstraintGroupSolver::SolverBodyContainer
protected

◆ TotalNumConstraints

int32 Chaos::Private::FPBDConstraintGroupSolver::TotalNumConstraints
protected

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