UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
PBDEvolution.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"
9#if UE_ENABLE_INCLUDE_ORDER_DEPRECATED_IN_5_4
11#endif
13#include "Chaos/VelocityField.h"
14
15namespace Chaos::Softs
16{
17
19{
20 public:
21 // TODO: Tidy up this constructor (and update Headless Chaos)
25 TArray<TVec3<int32>>&& CollisionTriangles,
26 int32 NumIterations = 1,
27 FSolverReal CollisionThickness = (FSolverReal)0.,
30 FSolverReal Damping = (FSolverReal)0.04,
31 FSolverReal LocalDamping = (FSolverReal)0.,
32 bool bDoQuasistatics = false,
33 bool InbUsePerParticleDamping = false);
35
36 // Advance one time step. Filter the input time step if specified.
38
39 // Remove all particles, will also reset all rules
41
42 // Add particles and initialize group ids. Return the index of the first added particle.
43 CHAOS_API int32 AddParticleRange(int32 NumParticles, uint32 GroupId, bool bActivate);
44
45 // Return the number of particles of the block starting at Offset
46 int32 GetParticleRangeSize(int32 Offset) const { return MParticlesActiveView.GetRangeSize(Offset); }
47
48 // Set a block of particles active or inactive, using the index of the first added particle to identify the block.
49 void ActivateParticleRange(int32 Offset, bool bActivate) { MParticlesActiveView.ActivateRange(Offset, bActivate); }
50
51 // Clear all ranges.
52 void DeactivateParticleRanges() { MParticlesActiveView.Reset(0); }
53
54 // Set a block of particles active or inactive, using the index of the first added particle to identify the block.
55 int32 AddParticleRange(int32 NumItems, bool bActivate = true) { return MParticlesActiveView.AddRange(NumItems, bActivate); }
56
57
58 // Particles accessors
59 const FSolverParticles& Particles() const { return MParticles; }
60 FSolverParticles& Particles() { return MParticles; }
61 const TPBDActiveView<FSolverParticles>& ParticlesActiveView() { return MParticlesActiveView; }
62 // These versions just help share code with Softs::FEvolution which follows UE naming standards.
63 const FSolverParticles& GetParticles() const { return MParticles; }
64 FSolverParticles& GetParticles() { return MParticles; }
65
66
67 const TArray<uint32>& ParticleGroupIds() const { return MParticleGroupIds; }
68
69 // Remove all collision particles
70 CHAOS_API void ResetCollisionParticles(int32 NumParticles = 0);
71
72 // Add collision particles and initialize group ids. Return the index of the first added particle.
73 // Use INDEX_NONE as GroupId for collision particles that affect all particle groups.
74 CHAOS_API int32 AddCollisionParticleRange(int32 NumParticles, uint32 GroupId, bool bActivate);
75
76 // Add a single collision body particle to the solver.
77 CHAOS_API int32 AddCollisionParticle(uint32 GroupId, bool bActivate);
78
79 // Remove a collision body from the active view list, and save its particle in the remvoed collision particle list
81
82 // Set a block of collision particles active or inactive, using the index of the first added particle to identify the block.
83 void ActivateCollisionParticleRange(int32 Offset, bool bActivate) { MCollisionParticlesActiveView.ActivateRange(Offset, bActivate); }
84
85 // Return the number of particles of the block starting at Offset
86 int32 GetCollisionParticleRangeSize(int32 Offset) const { return MCollisionParticlesActiveView.GetRangeSize(Offset); }
87
88 // Collision particles accessors
89 const FSolverCollisionParticles& CollisionParticles() const { return MCollisionParticles; }
90 FSolverCollisionParticles& CollisionParticles() { return MCollisionParticles; }
91 TArray<uint32>& CollisionParticleGroupIds() { return MCollisionParticleGroupIds; }
92 const TArray<uint32>& CollisionParticleGroupIds() const { return MCollisionParticleGroupIds; }
94 const TPBDActiveView<FSolverCollisionParticles>& CollisionParticlesActiveView() const { return MCollisionParticlesActiveView; }
95
96 // Reset all constraint init and rule functions.
98 {
99 MConstraintInits.Reset();
100 MConstraintRules.Reset();
101 MPostCollisionConstraintRules.Reset();
102 MConstraintPostprocessings.Reset();
103 MConstraintInitsActiveView.Reset();
104 MConstraintRulesActiveView.Reset();
105 MPostCollisionConstraintRulesActiveView.Reset();
106 MConstraintPostprocessingsActiveView.Reset();
107 }
108
109 // Add constraints. Return the index of the first added constraint.
110 CHAOS_API int32 AddConstraintInitRange(int32 NumConstraints, bool bActivate);
111 CHAOS_API int32 AddConstraintRuleRange(int32 NumConstraints, bool bActivate);
112 CHAOS_API int32 AddPostCollisionConstraintRuleRange(int32 NumConstraints, bool bActivate);
113 CHAOS_API int32 AddConstraintPostprocessingsRange(int32 NumConstraints, bool bActivate);
114
115 // Return the number of particles of the block starting at Offset
116 int32 GetConstraintInitRangeSize(int32 Offset) const { return MConstraintInitsActiveView.GetRangeSize(Offset); }
117 int32 GetConstraintRuleRangeSize(int32 Offset) const { return MConstraintRulesActiveView.GetRangeSize(Offset); }
118 int32 GetPostCollisionConstraintRuleRangeSize(int32 Offset) const { return MPostCollisionConstraintRulesActiveView.GetRangeSize(Offset); }
119 int32 GetConstraintPostprocessingsRangeSize(int32 Offset) const { return MConstraintPostprocessingsActiveView.GetRangeSize(Offset); }
120
121 // Set a block of constraints active or inactive, using the index of the first added particle to identify the block.
122 void ActivateConstraintInitRange(int32 Offset, bool bActivate) { MConstraintInitsActiveView.ActivateRange(Offset, bActivate); }
123 void ActivateConstraintRuleRange(int32 Offset, bool bActivate) { MConstraintRulesActiveView.ActivateRange(Offset, bActivate); }
124 void ActivatePostCollisionConstraintRuleRange(int32 Offset, bool bActivate) { MPostCollisionConstraintRulesActiveView.ActivateRange(Offset, bActivate); }
125 void ActivateConstraintPostprocessingsRange(int32 Offset, bool bActivate) { MConstraintPostprocessingsActiveView.ActivateRange(Offset, bActivate); }
126
127 // Constraint accessors
128 const TArray<TFunction<void(FSolverParticles&, const FSolverReal)>>& ConstraintInits() const { return MConstraintInits; }
129 TArray<TFunction<void(FSolverParticles&, const FSolverReal)>>& ConstraintInits() { return MConstraintInits; }
130 const TArray<TFunction<void(FSolverParticles&, const FSolverReal)>>& ConstraintRules() const { return MConstraintRules; }
131 TArray<TFunction<void(FSolverParticles&, const FSolverReal)>>& ConstraintRules() { return MConstraintRules; }
132 const TArray<TFunction<void(FSolverParticles&, const FSolverReal)>>& PostCollisionConstraintRules() const { return MPostCollisionConstraintRules; }
133 TArray<TFunction<void(FSolverParticles&, const FSolverReal)>>& PostCollisionConstraintRules() { return MPostCollisionConstraintRules; }
134 const TArray<TFunction<void(FSolverParticles&, const FSolverReal)>>& ConstraintPostprocessings() const { return MConstraintPostprocessings; }
135 TArray<TFunction<void(FSolverParticles&, const FSolverReal)>>& ConstraintPostprocessings() { return MConstraintPostprocessings; }
136
137 void SetKinematicUpdateFunction(TFunction<void(FSolverParticles&, const FSolverReal, const FSolverReal, const int32)> KinematicUpdate) { MKinematicUpdate = KinematicUpdate; }
138 void SetCollisionKinematicUpdateFunction(TFunction<void(FSolverCollisionParticles&, const FSolverReal, const FSolverReal, const int32)> KinematicUpdate) { MCollisionKinematicUpdate = KinematicUpdate; }
139
140 TFunction<void(FSolverParticles&, const FSolverReal, const int32)>& GetForceFunction(const uint32 GroupId = 0) { return MGroupForceRules[GroupId]; }
141 const TFunction<void(FSolverParticles&, const FSolverReal, const int32)>& GetForceFunction(const uint32 GroupId = 0) const { return MGroupForceRules[GroupId]; }
142
143 const FSolverVec3& GetGravity(const uint32 GroupId = 0) const { check(GroupId < TArrayCollection::Size()); return MGroupGravityAccelerations[GroupId]; }
144 void SetGravity(const FSolverVec3& Acceleration, const uint32 GroupId = 0) { check(GroupId < TArrayCollection::Size()); MGroupGravityAccelerations[GroupId] = Acceleration; }
145
146 void SetQuasistatics(const bool bDoQuasistaticsIn) { bDoQuasistatics = bDoQuasistaticsIn; }
147
148 FVelocityAndPressureField& GetVelocityAndPressureField(const uint32 GroupId = 0) { check(GroupId < TArrayCollection::Size()); return MGroupVelocityAndPressureFields[GroupId]; }
149 const FVelocityAndPressureField& GetVelocityAndPressureField(const uint32 GroupId = 0) const { check(GroupId < TArrayCollection::Size()); return MGroupVelocityAndPressureFields[GroupId]; }
150
151 int32 GetIterations() const { return MNumIterations; }
152 void SetIterations(const int32 Iterations) { MNumIterations = Iterations; }
153
154 FSolverReal GetCollisionThickness(const uint32 GroupId = 0) const { check(GroupId < TArrayCollection::Size()); return MGroupCollisionThicknesses[GroupId]; }
155 void SetCollisionThickness(const FSolverReal CollisionThickness, const uint32 GroupId = 0) { check(GroupId < TArrayCollection::Size()); MGroupCollisionThicknesses[GroupId] = CollisionThickness; }
156
157 FSolverReal GetCoefficientOfFriction(const uint32 GroupId = 0) const { check(GroupId < TArrayCollection::Size()); return MGroupCoefficientOfFrictions[GroupId]; }
158 void SetCoefficientOfFriction(const FSolverReal CoefficientOfFriction, const uint32 GroupId = 0) { check(GroupId < TArrayCollection::Size()); MGroupCoefficientOfFrictions[GroupId] = CoefficientOfFriction; }
159
160 FSolverReal GetDamping(const uint32 GroupId = 0) const { check(GroupId < TArrayCollection::Size()); return MGroupDampings[GroupId]; }
161 void SetDamping(const FSolverReal Damping, const uint32 GroupId = 0) { check(GroupId < TArrayCollection::Size()); MGroupDampings[GroupId] = Damping; }
162
163 FSolverReal GetLocalDamping(const uint32 GroupId = 0) const { check(GroupId < TArrayCollection::Size()); return MGroupLocalDampings[GroupId]; }
164 void SetLocalDamping(const FSolverReal LocalDamping, const uint32 GroupId = 0) { check(GroupId < TArrayCollection::Size()); MGroupLocalDampings[GroupId] = LocalDamping; }
165
166 bool GetUseCCD(const uint32 GroupId = 0) const { check(GroupId < TArrayCollection::Size()); return MGroupUseCCDs[GroupId]; }
167 void SetUseCCD(const bool bUseCCD, const uint32 GroupId = 0) { check(GroupId < TArrayCollection::Size()); MGroupUseCCDs[GroupId] = bUseCCD; }
168
169 FSolverReal GetParticleDamping(const uint32 ParticleIndex = 0) const { check(ParticleIndex < this->Particles().Size() && bUsePerParticleDamping); return MParticleDampings[ParticleIndex]; }
170 void SetParticleDamping(const FSolverReal Damping, const uint32 ParticleIndex = 0) { check(ParticleIndex < this->Particles().Size()); if (bUsePerParticleDamping) { MParticleDampings[ParticleIndex] = Damping; } }
171
172 const TArray<bool>& GetCollisionStatus() { return MCollided; }
173 const TArray<FSolverVec3>& GetCollisionContacts() const { return MCollisionContacts; }
174 const TArray<FSolverVec3>& GetCollisionNormals() const { return MCollisionNormals; }
175 const TArray<FSolverReal>& GetCollisionPhis() const { return MCollisionPhis; }
176
177 FSolverReal GetTime() const { return MTime; }
178
179 private:
180 // Add simulation groups and set default values
181 CHAOS_API void AddGroups(int32 NumGroups);
182 // Reset simulation groups
183 CHAOS_API void ResetGroups();
184 // Selected versions of the pre-iteration updates (euler step, force, velocity field. damping updates)..
185 template<bool bForceRule, bool bVelocityField, bool bDampVelocityRule>
186 void PreIterationUpdate(const FSolverReal Dt, const int32 Offset, const int32 Range, const int32 MinParallelBatchSize);
187
188 struct FParticleVievToken { int32 ParticleIndex = INDEX_NONE; int32 ViewIndex = INDEX_NONE; };
189
190private:
191 FSolverParticles MParticles;
192 TPBDActiveView<FSolverParticles> MParticlesActiveView;
193 FSolverCollisionParticles MCollisionParticles;
194 TPBDActiveView<FSolverCollisionParticles> MCollisionParticlesActiveView;
195 TArray<FParticleVievToken> RemovedCollisionIndices;
196
197 TArrayCollectionArray<FSolverRigidTransform3> MCollisionTransforms; // Used for CCD to store the initial state before the kinematic update
199 TArrayCollectionArray<uint32> MCollisionParticleGroupIds; // Used for per group parameters for collision particles
200 TArrayCollectionArray<uint32> MParticleGroupIds; // Used for per group parameters for particles
201 TArray<FSolverVec3> MCollisionContacts;
202 TArray<FSolverVec3> MCollisionNormals;
203 TArray<FSolverReal> MCollisionPhis;
204
205 TArrayCollectionArray<FSolverVec3> MGroupGravityAccelerations;
206 TArrayCollectionArray<FVelocityAndPressureField> MGroupVelocityAndPressureFields;
207 TArrayCollectionArray<TFunction<void(FSolverParticles&, const FSolverReal, const int32)>> MGroupForceRules;
208 TArrayCollectionArray<FSolverReal> MGroupCollisionThicknesses;
209 TArrayCollectionArray<FSolverReal> MGroupCoefficientOfFrictions;
211 TArrayCollectionArray<FSolverReal> MGroupLocalDampings;
212 TArrayCollectionArray<bool> MGroupUseCCDs;
213
214 //per particle data:
215 TArrayCollectionArray<FSolverReal> MParticleDampings;
216
217 TArray<TFunction<void(FSolverParticles&, const FSolverReal)>> MConstraintInits;
218 TPBDActiveView<TArray<TFunction<void(FSolverParticles&, const FSolverReal)>>> MConstraintInitsActiveView;
219 TArray<TFunction<void(FSolverParticles&, const FSolverReal)>> MConstraintRules;
220 TPBDActiveView<TArray<TFunction<void(FSolverParticles&, const FSolverReal)>>> MConstraintRulesActiveView;
221 TArray<TFunction<void(FSolverParticles&, const FSolverReal)>> MPostCollisionConstraintRules;
222 TPBDActiveView<TArray<TFunction<void(FSolverParticles&, const FSolverReal)>>> MPostCollisionConstraintRulesActiveView;
223 TArray<TFunction<void(FSolverParticles&, const FSolverReal)>> MConstraintPostprocessings;
224 TPBDActiveView<TArray<TFunction<void(FSolverParticles&, const FSolverReal)>>> MConstraintPostprocessingsActiveView;
225
226 TFunction<void(FSolverParticles&, const FSolverReal, const FSolverReal, const int32)> MKinematicUpdate;
227 TFunction<void(FSolverCollisionParticles&, const FSolverReal, const FSolverReal, const int32)> MCollisionKinematicUpdate;
228
229 int32 MNumIterations;
230 FSolverVec3 MGravity;
231 FSolverReal MCollisionThickness;
232 FSolverReal MCoefficientOfFriction;
233 FSolverReal MDamping;
234 FSolverReal MLocalDamping;
235 FSolverReal MTime;
236 bool bDoQuasistatics = false;
237 bool bUsePerParticleDamping = false;
238};
239
240} // End namespace Chaos::Softs
241
242#if !defined(CHAOS_POST_ITERATION_UPDATES_ISPC_ENABLED)
243#define CHAOS_POST_ITERATION_UPDATES_ISPC_ENABLED 1
244#endif
245
246// Support ISPC enable/disable in non-shipping builds
247#if !INTEL_ISPC || UE_BUILD_SHIPPING
248static constexpr bool bChaos_PostIterationUpdates_ISPC_Enabled = INTEL_ISPC && CHAOS_POST_ITERATION_UPDATES_ISPC_ENABLED;
249#else
250extern CHAOS_API bool bChaos_PostIterationUpdates_ISPC_Enabled;
251#endif
OODEFFUNC typedef void(OODLE_CALLBACK t_fp_OodleCore_Plugin_Free)(void *ptr)
#define check(expr)
Definition AssertionMacros.h:314
@ INDEX_NONE
Definition CoreMiscDefines.h:150
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
#define CHAOS_POST_ITERATION_UPDATES_ISPC_ENABLED
Definition PBDEvolution.h:243
uint32 Offset
Definition VulkanMemory.cpp:4033
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition PBDEvolution.h:19
const TArray< FSolverVec3 > & GetCollisionContacts() const
Definition PBDEvolution.h:173
FSolverReal GetTime() const
Definition PBDEvolution.h:177
void SetLocalDamping(const FSolverReal LocalDamping, const uint32 GroupId=0)
Definition PBDEvolution.h:164
const FSolverCollisionParticles & CollisionParticles() const
Definition PBDEvolution.h:89
FSolverParticles & Particles()
Definition PBDEvolution.h:60
void SetUseCCD(const bool bUseCCD, const uint32 GroupId=0)
Definition PBDEvolution.h:167
const TArray< TFunction< void(FSolverParticles &, const FSolverReal)> > & ConstraintInits() const
Definition PBDEvolution.h:128
const TArray< FSolverReal > & GetCollisionPhis() const
Definition PBDEvolution.h:175
int32 GetPostCollisionConstraintRuleRangeSize(int32 Offset) const
Definition PBDEvolution.h:118
const TArray< uint32 > & ParticleGroupIds() const
Definition PBDEvolution.h:67
TFunction< void(FSolverParticles &, const FSolverReal, const int32)> & GetForceFunction(const uint32 GroupId=0)
Definition PBDEvolution.h:140
CHAOS_API int32 AddCollisionParticleRange(int32 NumParticles, uint32 GroupId, bool bActivate)
Definition PBDEvolution.cpp:179
int32 GetConstraintInitRangeSize(int32 Offset) const
Definition PBDEvolution.h:116
CHAOS_API int32 AddCollisionParticle(uint32 GroupId, bool bActivate)
Definition PBDEvolution.cpp:201
FSolverCollisionParticles & CollisionParticles()
Definition PBDEvolution.h:90
TPBDActiveView< FSolverCollisionParticles > & CollisionParticlesActiveView()
Definition PBDEvolution.h:93
FSolverReal GetDamping(const uint32 GroupId=0) const
Definition PBDEvolution.h:160
FSolverReal GetCoefficientOfFriction(const uint32 GroupId=0) const
Definition PBDEvolution.h:157
CHAOS_API int32 AddPostCollisionConstraintRuleRange(int32 NumConstraints, bool bActivate)
Definition PBDEvolution.cpp:267
CHAOS_API int32 AddParticleRange(int32 NumParticles, uint32 GroupId, bool bActivate)
Definition PBDEvolution.cpp:136
const FSolverVec3 & GetGravity(const uint32 GroupId=0) const
Definition PBDEvolution.h:143
CHAOS_API int32 AddConstraintPostprocessingsRange(int32 NumConstraints, bool bActivate)
Definition PBDEvolution.cpp:276
~FPBDEvolution()
Definition PBDEvolution.h:34
const TArray< TFunction< void(FSolverParticles &, const FSolverReal)> > & PostCollisionConstraintRules() const
Definition PBDEvolution.h:132
const TPBDActiveView< FSolverParticles > & ParticlesActiveView()
Definition PBDEvolution.h:61
const FVelocityAndPressureField & GetVelocityAndPressureField(const uint32 GroupId=0) const
Definition PBDEvolution.h:149
TArray< TFunction< void(FSolverParticles &, const FSolverReal)> > & PostCollisionConstraintRules()
Definition PBDEvolution.h:133
FSolverReal GetCollisionThickness(const uint32 GroupId=0) const
Definition PBDEvolution.h:154
TArray< TFunction< void(FSolverParticles &, const FSolverReal)> > & ConstraintInits()
Definition PBDEvolution.h:129
int32 GetIterations() const
Definition PBDEvolution.h:151
void SetCoefficientOfFriction(const FSolverReal CoefficientOfFriction, const uint32 GroupId=0)
Definition PBDEvolution.h:158
void SetParticleDamping(const FSolverReal Damping, const uint32 ParticleIndex=0)
Definition PBDEvolution.h:170
void SetCollisionThickness(const FSolverReal CollisionThickness, const uint32 GroupId=0)
Definition PBDEvolution.h:155
CHAOS_API int32 AddConstraintInitRange(int32 NumConstraints, bool bActivate)
Definition PBDEvolution.cpp:249
void ActivateParticleRange(int32 Offset, bool bActivate)
Definition PBDEvolution.h:49
CHAOS_API void AdvanceOneTimeStep(const FSolverReal Dt)
Definition PBDEvolution.cpp:468
CHAOS_API void ResetParticles()
Definition PBDEvolution.cpp:126
const TArray< TFunction< void(FSolverParticles &, const FSolverReal)> > & ConstraintPostprocessings() const
Definition PBDEvolution.h:134
void SetIterations(const int32 Iterations)
Definition PBDEvolution.h:152
const TArray< FSolverVec3 > & GetCollisionNormals() const
Definition PBDEvolution.h:174
int32 GetCollisionParticleRangeSize(int32 Offset) const
Definition PBDEvolution.h:86
const FSolverParticles & GetParticles() const
Definition PBDEvolution.h:63
const TArray< bool > & GetCollisionStatus()
Definition PBDEvolution.h:172
CHAOS_API int32 AddConstraintRuleRange(int32 NumConstraints, bool bActivate)
Definition PBDEvolution.cpp:258
void SetDamping(const FSolverReal Damping, const uint32 GroupId=0)
Definition PBDEvolution.h:161
void ResetConstraintRules()
Definition PBDEvolution.h:97
CHAOS_API void ResetCollisionParticles(int32 NumParticles=0)
Definition PBDEvolution.cpp:173
FSolverParticles & GetParticles()
Definition PBDEvolution.h:64
const FSolverParticles & Particles() const
Definition PBDEvolution.h:59
int32 AddParticleRange(int32 NumItems, bool bActivate=true)
Definition PBDEvolution.h:55
const TFunction< void(FSolverParticles &, const FSolverReal, const int32)> & GetForceFunction(const uint32 GroupId=0) const
Definition PBDEvolution.h:141
const TPBDActiveView< FSolverCollisionParticles > & CollisionParticlesActiveView() const
Definition PBDEvolution.h:94
TArray< TFunction< void(FSolverParticles &, const FSolverReal)> > & ConstraintRules()
Definition PBDEvolution.h:131
void DeactivateParticleRanges()
Definition PBDEvolution.h:52
FSolverReal GetLocalDamping(const uint32 GroupId=0) const
Definition PBDEvolution.h:163
bool GetUseCCD(const uint32 GroupId=0) const
Definition PBDEvolution.h:166
const TArray< uint32 > & CollisionParticleGroupIds() const
Definition PBDEvolution.h:92
TArray< TFunction< void(FSolverParticles &, const FSolverReal)> > & ConstraintPostprocessings()
Definition PBDEvolution.h:135
int32 GetConstraintPostprocessingsRangeSize(int32 Offset) const
Definition PBDEvolution.h:119
void SetKinematicUpdateFunction(TFunction< void(FSolverParticles &, const FSolverReal, const FSolverReal, const int32)> KinematicUpdate)
Definition PBDEvolution.h:137
void ActivateCollisionParticleRange(int32 Offset, bool bActivate)
Definition PBDEvolution.h:83
void ActivateConstraintInitRange(int32 Offset, bool bActivate)
Definition PBDEvolution.h:122
TArray< uint32 > & CollisionParticleGroupIds()
Definition PBDEvolution.h:91
FSolverReal GetParticleDamping(const uint32 ParticleIndex=0) const
Definition PBDEvolution.h:169
void SetQuasistatics(const bool bDoQuasistaticsIn)
Definition PBDEvolution.h:146
int32 GetParticleRangeSize(int32 Offset) const
Definition PBDEvolution.h:46
void SetGravity(const FSolverVec3 &Acceleration, const uint32 GroupId=0)
Definition PBDEvolution.h:144
void ActivateConstraintPostprocessingsRange(int32 Offset, bool bActivate)
Definition PBDEvolution.h:125
void ActivateConstraintRuleRange(int32 Offset, bool bActivate)
Definition PBDEvolution.h:123
FVelocityAndPressureField & GetVelocityAndPressureField(const uint32 GroupId=0)
Definition PBDEvolution.h:148
CHAOS_API void RemoveCollisionParticle(int32 CollisionParticleIndex, int32 CollisionParticleViewIndex)
Definition PBDEvolution.cpp:234
void SetCollisionKinematicUpdateFunction(TFunction< void(FSolverCollisionParticles &, const FSolverReal, const FSolverReal, const int32)> KinematicUpdate)
Definition PBDEvolution.h:138
void ActivatePostCollisionConstraintRuleRange(int32 Offset, bool bActivate)
Definition PBDEvolution.h:124
const TArray< TFunction< void(FSolverParticles &, const FSolverReal)> > & ConstraintRules() const
Definition PBDEvolution.h:130
int32 GetConstraintRuleRangeSize(int32 Offset) const
Definition PBDEvolution.h:117
Definition SoftsSolverCollisionParticles.h:10
Definition PBDSoftsSolverParticles.h:20
Definition VelocityField.h:17
Definition ArrayCollectionArray.h:15
Definition ArrayCollection.h:10
uint32 Size() const
Definition ArrayCollection.h:66
Definition PBDActiveView.h:47
Definition Vector.h:1000
Definition Array.h:670
Definition AndroidPlatformMisc.h:14
Definition CollectionEmbeddedSpringConstraintFacade.cpp:6
FRealSingle FSolverReal
Definition PBDSoftsEvolutionFwd.h:31
FRealSingle FSolverReal
Definition SolverBody.h:38