UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
ConstraintGroupSolver.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2#pragma once
3
4#include "Chaos/Core.h"
7#include "Containers/Array.h"
8
9namespace Chaos
10{
11 class FConstraintContainerSolver;
12 class FPBDConstraintContainer;
13
14 namespace Private
15 {
22 {
23 public:
25
28
36
44
51 {
52 return SolverBodyContainer.Num();
53 }
54
59 {
61 }
62
67
71 CHAOS_API void SetConstraintSolverPriority(const int32 ContainerId, const int32 Priority);
72
76 CHAOS_API void Reset();
77
82
86 CHAOS_API void GatherBodies(const FReal Dt);
87
93
97 CHAOS_API void GatherConstraints(const FReal Dt);
98
104
112
117
122
127
131 CHAOS_API void ScatterBodies(const FReal Dt);
132
138
142 CHAOS_API void ScatterConstraints(const FReal Dt);
143
149
150 protected:
151
152 // Loop over the range of constraints and apply the lambda. The range is treats constraints of all types as a contiguous list
153 // and the function loops over constraint types and maps the range into the solver ranges for each type.
154 template<typename LambdaType>
156
157 // Sort the solvers based on Level and other criteria for more stable solving
159
160 // Allow a derived class to perform per-tick reset
161 virtual void ResetImpl() {}
162
163 // Allow a derived class to add data based on the number of constraint types we need to support
164 virtual void SetConstraintSolverImpl(const int32 ContainerId) {}
165
166 // Allow a derived class to add constraints solvers
167 virtual void AddConstraintsImpl() {}
168
169 // Allow a derived class to populate some of the SolverBody data (Level and Color)
170 virtual void GatherBodiesImpl(const FReal Dt, const int32 BeginBodyIndex, const int32 EndBodyIndex) {}
171
172 // All the bodies used by all the constraints solved by this group
174
175 // A solver for each constraint type in the group
178
179 // Sorted by priority for use in solve methods
181
183 };
184
185
186 //
187 //
188 //
189 //
190 //
191
200 {
201 public:
206
207 protected:
208 // The Scene Group Solver adds all constraints from all containers
209 CHAOS_API virtual void AddConstraintsImpl() override final;
210 };
211
212 } // namespace Private
213
214
215 //UE_DEPRECATED(5.2, "FPBDConstraintGroupSolver is for internal use only")
216 //using FPBDConstraintGroupSolver = Private::FPBDConstraintGroupSolver;
217
218
219 //UE_DEPRECATED(5.2, "FPBDSceneConstraintGroupSolver is for internal use only")
220 //using FPBDSceneConstraintGroupSolver = Private::FPBDSceneConstraintGroupSolver;
221
222} // namespace Chaos
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
Definition SolverBodyContainer.h:37
int Num() const
Definition SolverBodyContainer.h:62
Definition ConstraintGroupSolver.h:22
CHAOS_API void ScatterConstraints(const FReal Dt)
Definition ConstraintGroupSolver.cpp:171
CHAOS_API void GatherBodies(const FReal Dt)
Definition ConstraintGroupSolver.cpp:98
virtual void AddConstraintsImpl()
Definition ConstraintGroupSolver.h:167
FSolverBodyContainer SolverBodyContainer
Definition ConstraintGroupSolver.h:173
virtual void GatherBodiesImpl(const FReal Dt, const int32 BeginBodyIndex, const int32 EndBodyIndex)
Definition ConstraintGroupSolver.h:170
CHAOS_API void GatherConstraints(const FReal Dt)
Definition ConstraintGroupSolver.cpp:103
int32 TotalNumConstraints
Definition ConstraintGroupSolver.h:177
CHAOS_API void ApplyVelocityConstraints(const FReal Dt)
Definition ConstraintGroupSolver.cpp:238
TArray< TUniquePtr< FConstraintContainerSolver > > ConstraintContainerSolvers
Definition ConstraintGroupSolver.h:176
virtual void SetIterationSettings(const FIterationSettings &InIterations)
Definition ConstraintGroupSolver.h:40
CHAOS_API FPBDConstraintGroupSolver()
Definition ConstraintGroupSolver.cpp:11
virtual void ResetImpl()
Definition ConstraintGroupSolver.h:161
UE_NONCOPYABLE(FPBDConstraintGroupSolver)
CHAOS_API void Reset()
Definition ConstraintGroupSolver.cpp:64
CHAOS_API void ApplyPositionConstraints(const FReal Dt)
Definition ConstraintGroupSolver.cpp:207
CHAOS_API void ApplyProjectionConstraints(const FReal Dt)
Definition ConstraintGroupSolver.cpp:271
CHAOS_API void PreApplyVelocityConstraints(const FReal Dt)
Definition ConstraintGroupSolver.cpp:224
int32 GetNumSolverConstraints() const
Definition ConstraintGroupSolver.h:58
CHAOS_API void SortSolverContainers()
Definition ConstraintGroupSolver.cpp:46
CHAOS_API void PreApplyProjectionConstraints(const FReal Dt)
Definition ConstraintGroupSolver.cpp:255
TArray< FConstraintContainerSolver * > PrioritizedConstraintContainerSolvers
Definition ConstraintGroupSolver.h:180
virtual CHAOS_API ~FPBDConstraintGroupSolver()
Definition ConstraintGroupSolver.cpp:16
CHAOS_API void AddConstraintsAndBodies()
Definition ConstraintGroupSolver.cpp:81
virtual void SetConstraintSolverImpl(const int32 ContainerId)
Definition ConstraintGroupSolver.h:164
CHAOS_API void PreApplyPositionConstraints(const FReal Dt)
Definition ConstraintGroupSolver.cpp:196
CHAOS_API void SetConstraintSolver(const int32 ContainerId, TUniquePtr< FConstraintContainerSolver > &&Solver)
Definition ConstraintGroupSolver.cpp:20
CHAOS_API void SetConstraintSolverPriority(const int32 ContainerId, const int32 Priority)
Definition ConstraintGroupSolver.cpp:34
CHAOS_API void ScatterBodies(const FReal Dt)
Definition ConstraintGroupSolver.cpp:166
int32 GetNumSolverBodies() const
Definition ConstraintGroupSolver.h:50
void ApplyToConstraintRange(const int32 BeginConstraintIndex, const int32 EndConstraintIndex, const LambdaType &Lambda)
Definition ConstraintGroupSolver.cpp:122
FIterationSettings Iterations
Definition ConstraintGroupSolver.h:182
FIterationSettings GetIterationSettings() const
Definition ConstraintGroupSolver.h:32
Definition ConstraintGroupSolver.h:200
virtual CHAOS_API void AddConstraintsImpl() override final
Definition ConstraintGroupSolver.cpp:294
FPBDSceneConstraintGroupSolver(const FIterationSettings &InIterations)
Definition ConstraintGroupSolver.h:202
Definition IterationSettings.h:19
Definition Array.h:670
Definition UniquePtr.h:107
Definition SkeletalMeshComponent.h:307
FRealDouble FReal
Definition Real.h:22
Definition OverriddenPropertySet.cpp:45