UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
IslandGroupManager.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2#pragma once
3
5
6namespace Chaos
7{
8 class FPBDConstraintContainer;
9
10#if CSV_PROFILER_STATS
11 #define CSV_CUSTOM_STAT_ISLANDGROUP_HELPER(Stat) CSV_CUSTOM_STAT(PhysicsVerbose, Stat, Stats[Stat] * 1000.0, ECsvCustomStatOp::Set);
12 #define CSV_SCOPED_ISLANDGROUP_TIMING_STAT(Stat, ThreadIndex) FScopedDurationTimer Timer_##Stat(GetThreadStatAccumulator(ThreadIndex, FIslandGroupStats::Stat))
13
18 struct alignas(64) FIslandGroupStats
19 {
21 {
29 };
30
31 void ReportStats() const
32 {
38 }
39
41 {
42 for (double& Stat : Stats) { Stat = 0.0; }
43 }
44
46 {
49 {
50 for (int32 Stat = 0; Stat < NumStats; ++Stat)
51 {
52 Flat.Stats[Stat] += GroupStats.Stats[Stat];
53 }
54 }
55
56 return Flat;
57 }
58
59 double Stats[EPerIslandStat::NumStats];
60 };
61
62#else // !CSV_PROFILER_STATS
63
64 #define CSV_SCOPED_ISLANDGROUP_TIMING_STAT(Stat, ThreadIndex)
65
66#endif
67
68 namespace Private
69 {
70
77 {
78 public:
80
83
88 CHAOS_API void AddConstraintContainer(FPBDConstraintContainer& ConstraintContainer, const int32 Priority = 0);
89
94
98 CHAOS_API void SetConstraintContainerPriority(const int32 ContainerId, const int32 Priority);
99
103 inline int32 GetNumActiveGroups() const { return NumActiveGroups; }
104
108 inline FPBDIslandConstraintGroupSolver* GetGroup(const int32 GroupIndex) { return IslandGroups[GroupIndex].Get(); }
109
114 CHAOS_API int32 BuildGroups(const bool bIsResimming);
115
123
124 FIterationSettings GetIslandGroupIterations(const int32 GroupIndex) const { return IslandGroups[GroupIndex]->GetIterationSettings(); }
125
130 const FIterationSettings& GetIterationSettings() const { return Iterations; }
131
135 CHAOS_API void Solve(const FReal Dt);
136
137
138 private:
139 // Used to specify a range of bodies or constraints in an island group for more even parallelization of Gather and Scatter
140 struct FIslandGroupRange
141 {
143 : BeginIndex(InBeginIndex)
144 , EndIndex(InEndIndex)
145 , IslandGroup(InIslandGroup)
146 {
147 }
148
149 // Ranges are sorted by range size
150 friend bool operator<(const FIslandGroupRange& L, const FIslandGroupRange& R)
151 {
152 return (L.EndIndex - L.BeginIndex) > (R.EndIndex - R.BeginIndex);
153 }
154
155 int32 BeginIndex;
156 int32 EndIndex;
157 FPBDIslandConstraintGroupSolver* IslandGroup;
158 };
159
160 CHAOS_API void SolveSerial(const FReal Dt);
161 CHAOS_API void SolveParallelFor(const FReal Dt);
162 CHAOS_API void SolveParallelTasks(const FReal Dt);
163
165 CHAOS_API void SolveGroupConstraints(const int32 GroupIndex, const FReal Dt);
166
167
168 FPBDIslandManager& IslandManager;
170 int32 NumActiveGroups;
171 int32 NumWorkerThreads;
172 int32 TargetNumBodiesPerTask;
173 int32 TargetNumConstraintsPerTask;
174 FIterationSettings Iterations;
175
176 #if CSV_PROFILER_STATS
177 double& GetThreadStatAccumulator(const int32 ThreadIndex, const FIslandGroupStats::EPerIslandStat StatId)
178 {
179 if (!GroupStats.IsValidIndex(ThreadIndex))
180 {
181 GroupStats.SetNum(ThreadIndex + 1);
182 }
183 return GroupStats[ThreadIndex].Stats[StatId];
184 }
186 #endif
187 };
188
189 } // namespace Private
190
191
192 using FPBDIslandGroupManager UE_DEPRECATED(5.2, "Internal class moved to Private namespace") = Private::FPBDIslandGroupManager;
193
194} // namespace Chaos
#define UE_NONCOPYABLE(TypeName)
Definition CoreMiscDefines.h:457
#define UE_DEPRECATED(Version, Message)
Definition CoreMiscDefines.h:302
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
bool operator<(const FTextFormatString &LHS, const FTextFormatString &RHS)
Definition ITextFormatArgumentModifier.h:147
Definition PBDConstraintContainer.h:19
Definition IslandGroupManager.h:77
CHAOS_API void Solve(const FReal Dt)
Definition IslandGroupManager.cpp:548
const FIterationSettings & GetIterationSettings() const
Definition IslandGroupManager.h:130
CHAOS_API void AddConstraintContainer(FPBDConstraintContainer &ConstraintContainer, const int32 Priority=0)
Definition IslandGroupManager.cpp:85
void SetNumPositionIterations(const int32 InNumIterations)
Definition IslandGroupManager.h:120
void SetNumProjectionIterations(const int32 InNumIterations)
Definition IslandGroupManager.h:122
int32 GetNumActiveGroups() const
Definition IslandGroupManager.h:103
FIterationSettings GetIslandGroupIterations(const int32 GroupIndex) const
Definition IslandGroupManager.h:124
void SetNumVelocityIterations(const int32 InNumIterations)
Definition IslandGroupManager.h:121
CHAOS_API void RemoveConstraintContainer(FPBDConstraintContainer &ConstraintContainer)
Definition IslandGroupManager.cpp:95
CHAOS_API int32 BuildGroups(const bool bIsResimming)
Definition IslandGroupManager.cpp:112
CHAOS_API ~FPBDIslandGroupManager()
Definition IslandGroupManager.cpp:80
FPBDIslandConstraintGroupSolver * GetGroup(const int32 GroupIndex)
Definition IslandGroupManager.h:108
CHAOS_API void SetIterationSettings(const FIterationSettings &InIterations)
Definition IslandGroupManager.cpp:543
CHAOS_API void SetConstraintContainerPriority(const int32 ContainerId, const int32 Priority)
Definition IslandGroupManager.cpp:104
Definition IslandManager.h:453
Definition IterationSettings.h:19
void SetNumPositionIterations(const int32 InNum)
Definition IterationSettings.h:64
void SetNumVelocityIterations(const int32 InNum)
Definition IterationSettings.h:65
void SetNumProjectionIterations(const int32 InNum)
Definition IterationSettings.h:66
Definition Array.h:670
FIterationSettings8 FIterationSettings
Definition IterationSettings.h:83
Definition SkeletalMeshComponent.h:307
FRealDouble FReal
Definition Real.h:22
TArray< T > Flatten(const TMap< T, uint32, FDefaultSetAllocator, KeyFuncs > &Index)
Definition AssetDataTagMap.cpp:830
Definition OverriddenPropertySet.cpp:45