UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
NewtonEvolution.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"
11#if UE_ENABLE_INCLUDE_ORDER_DEPRECATED_IN_5_4
13#endif
15#include "Chaos/VelocityField.h"
16
17namespace Chaos::Softs
18{
19
22 //TArray<CorotatedFiberCache> CorotatedFiberCache;
23};
24
26{
27public:
28 // TODO: Tidy up this constructor (and update Headless Chaos)
32 TArray<TVec3<int32>>&& CollisionTriangles,
35 int32 NumNewtonIterations = 5,
39 FSolverReal CollisionThickness = (FSolverReal)0.,
42 FSolverReal Damping = (FSolverReal)0.04,
43 FSolverReal LocalDamping = (FSolverReal)0.,
48 bool bWriteDebugInfoIn = true);
50
51 // Advance one time step. Filter the input time step if specified.
52 CHAOS_API void AdvanceOneTimeStep(const FSolverReal Dt, const bool bSmoothDt = true);
53
54 // Remove all particles, will also reset all rules
56
57 // Add particles and initialize group ids. Return the index of the first added particle.
58 CHAOS_API int32 AddParticleRange(int32 NumParticles, uint32 GroupId, bool bActivate);
59
60 // Return the number of particles of the block starting at Offset
61 int32 GetParticleRangeSize(int32 Offset) const { return MParticlesActiveView.GetRangeSize(Offset); }
62
63 // Set a block of particles active or inactive, using the index of the first added particle to identify the block.
64 void ActivateParticleRange(int32 Offset, bool bActivate) { MParticlesActiveView.ActivateRange(Offset, bActivate); }
65
66 // Particles accessors
67 const FSolverParticles& Particles() const { return MParticles; }
68 FSolverParticles& Particles() { return MParticles; }
69 const TPBDActiveView<FSolverParticles>& ParticlesActiveView() { return MParticlesActiveView; }
70
71 TArray<TArray<TVector<int32, 2>>>& IncidentElements() { return MIncidentElements; }
72
73 const TArray<uint32>& ParticleGroupIds() const { return MParticleGroupIds; }
74
75 // Remove all collision particles
76 CHAOS_API void ResetCollisionParticles(int32 NumParticles = 0);
77
78 // Add collision particles and initialize group ids. Return the index of the first added particle.
79 // Use INDEX_NONE as GroupId for collision particles that affect all particle groups.
80 CHAOS_API int32 AddCollisionParticleRange(int32 NumParticles, uint32 GroupId, bool bActivate);
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
89 const FSolverCollisionParticles& CollisionParticles() const { return MCollisionParticles; }
90 FSolverCollisionParticles& CollisionParticles() { return MCollisionParticles; }
91 const TArray<uint32>& CollisionParticleGroupIds() const { return MCollisionParticleGroupIds; }
92 const TPBDActiveView<FSolverCollisionParticles>& CollisionParticlesActiveView() { return MCollisionParticlesActiveView; }
93
94
95 // Reset all constraint init and rule functions.
97 {
98 MConstraintInits.Reset();
99 MConstraintRules.Reset();
100 MPostCollisionConstraintRules.Reset();
101 MConstraintInitsActiveView.Reset();
102 MConstraintRulesActiveView.Reset();
103 MPostCollisionConstraintRulesActiveView.Reset();
104 }
105
106 // Add constraints. Return the index of the first added constraint.
107 CHAOS_API int32 AddConstraintInitRange(int32 NumConstraints, bool bActivate);
108 CHAOS_API int32 AddConstraintRuleRange(int32 NumConstraints, bool bActivate);
109 CHAOS_API int32 AddPostCollisionConstraintRuleRange(int32 NumConstraints, bool bActivate);
110
111 // Return the number of particles of the block starting at Offset
112 int32 GetConstraintInitRangeSize(int32 Offset) const { return MConstraintInitsActiveView.GetRangeSize(Offset); }
113 int32 GetConstraintRuleRangeSize(int32 Offset) const { return MConstraintRulesActiveView.GetRangeSize(Offset); }
114 int32 GetPostCollisionConstraintRuleRangeSize(int32 Offset) const { return MPostCollisionConstraintRulesActiveView.GetRangeSize(Offset); }
115
116 // Set a block of constraints active or inactive, using the index of the first added particle to identify the block.
117 void ActivateConstraintInitRange(int32 Offset, bool bActivate) { MConstraintInitsActiveView.ActivateRange(Offset, bActivate); }
118 void ActivateConstraintRuleRange(int32 Offset, bool bActivate) { MConstraintRulesActiveView.ActivateRange(Offset, bActivate); }
119 void ActivatePostCollisionConstraintRuleRange(int32 Offset, bool bActivate) { MPostCollisionConstraintRulesActiveView.ActivateRange(Offset, bActivate); }
120
121 // Constraint accessors
122 const TArray<TFunction<void(FSolverParticles&, const FSolverReal)>>& ConstraintInits() const { return MConstraintInits; }
123 TArray<TFunction<void(FSolverParticles&, const FSolverReal)>>& ConstraintInits() { return MConstraintInits; }
124 const TArray<TFunction<void(FSolverParticles&, const FSolverReal)>>& ConstraintRules() const { return MConstraintRules; }
125 TArray<TFunction<void(FSolverParticles&, const FSolverReal)>>& ConstraintRules() { return MConstraintRules; }
126 const TArray<TFunction<void(FSolverParticles&, const FSolverReal)>>& PostCollisionConstraintRules() const { return MPostCollisionConstraintRules; }
127 TArray<TFunction<void(FSolverParticles&, const FSolverReal)>>& PostCollisionConstraintRules() { return MPostCollisionConstraintRules; }
128
129 void SetKinematicUpdateFunction(TFunction<void(FSolverParticles&, const FSolverReal, const FSolverReal, const int32)> KinematicUpdate) { MKinematicUpdate = KinematicUpdate; }
130 void SetCollisionKinematicUpdateFunction(TFunction<void(FSolverCollisionParticles&, const FSolverReal, const FSolverReal, const int32)> KinematicUpdate) { MCollisionKinematicUpdate = KinematicUpdate; }
131
132 TFunction<void(FSolverParticles&, const FSolverReal, const int32)>& GetForceFunction(const uint32 GroupId = 0) { return MGroupForceRules[GroupId]; }
133 const TFunction<void(FSolverParticles&, const FSolverReal, const int32)>& GetForceFunction(const uint32 GroupId = 0) const { return MGroupForceRules[GroupId]; }
134
135 const FSolverVec3& GetGravity(const uint32 GroupId = 0) const { check(GroupId < TArrayCollection::Size()); return MGroupGravityAccelerations[GroupId]; }
136 void SetGravity(const FSolverVec3& Acceleration, const uint32 GroupId = 0) { check(GroupId < TArrayCollection::Size()); MGroupGravityAccelerations[GroupId] = Acceleration; }
137
138 FVelocityAndPressureField& GetVelocityAndPressureField(const uint32 GroupId = 0) { check(GroupId < TArrayCollection::Size()); return MGroupVelocityAndPressureFields[GroupId]; }
139 const FVelocityAndPressureField& GetVelocityAndPressureField(const uint32 GroupId = 0) const { check(GroupId < TArrayCollection::Size()); return MGroupVelocityAndPressureFields[GroupId]; }
140
141 int32 GetNewtonIterations() const { return MNumNewtonIterations; }
142 void SetNewtonIterations(const int32 Iterations) { MNumNewtonIterations = Iterations; }
143
144 FSolverReal GetCollisionThickness(const uint32 GroupId = 0) const { check(GroupId < TArrayCollection::Size()); return MGroupCollisionThicknesses[GroupId]; }
145 void SetCollisionThickness(const FSolverReal CollisionThickness, const uint32 GroupId = 0) { check(GroupId < TArrayCollection::Size()); MGroupCollisionThicknesses[GroupId] = CollisionThickness; }
146
147 FSolverReal GetCoefficientOfFriction(const uint32 GroupId = 0) const { check(GroupId < TArrayCollection::Size()); return MGroupCoefficientOfFrictions[GroupId]; }
148 void SetCoefficientOfFriction(const FSolverReal CoefficientOfFriction, const uint32 GroupId = 0) { check(GroupId < TArrayCollection::Size()); MGroupCoefficientOfFrictions[GroupId] = CoefficientOfFriction; }
149
150 FSolverReal GetDamping(const uint32 GroupId = 0) const { check(GroupId < TArrayCollection::Size()); return MGroupDampings[GroupId]; }
151 void SetDamping(const FSolverReal Damping, const uint32 GroupId = 0) { check(GroupId < TArrayCollection::Size()); MGroupDampings[GroupId] = Damping; }
152
153 FSolverReal GetLocalDamping(const uint32 GroupId = 0) const { check(GroupId < TArrayCollection::Size()); return MGroupLocalDampings[GroupId]; }
154 void SetLocalDamping(const FSolverReal LocalDamping, const uint32 GroupId = 0) { check(GroupId < TArrayCollection::Size()); MGroupLocalDampings[GroupId] = LocalDamping; }
155
156 bool GetUseCCD(const uint32 GroupId = 0) const { check(GroupId < TArrayCollection::Size()); return MGroupUseCCDs[GroupId]; }
157 void SetUseCCD(const bool bUseCCD, const uint32 GroupId = 0) { check(GroupId < TArrayCollection::Size()); MGroupUseCCDs[GroupId] = bUseCCD; }
158
159 UE_DEPRECATED(4.27, "Use GetCollisionStatus() instead")
160 const bool Collided(int32 index) { return MCollided[index]; }
161
162 const TArray<bool>& GetCollisionStatus() { return MCollided; }
163 const TArray<FSolverVec3>& GetCollisionContacts() const { return MCollisionContacts; }
164 const TArray<FSolverVec3>& GetCollisionNormals() const { return MCollisionNormals; }
165
166 FSolverReal GetTime() const { return MTime; }
167
168 template <typename Func1, typename Func2>
170
171 template<typename Func1, typename Func2, typename Func3, typename Func4, typename Func5, typename Func6>
173
174 CHAOS_API void InitFEM();
175
177
178private:
179 // Add simulation groups and set default values
180 CHAOS_API void AddGroups(int32 NumGroups);
181 // Reset simulation groups
182 CHAOS_API void ResetGroups();
183 // Selected versions of the pre-iteration updates (euler step, force, velocity field. damping updates)..
184 template<bool bForceRule, bool bVelocityField, bool bDampVelocityRule>
185 void PreIterationUpdate(const FSolverReal Dt, const int32 Offset, const int32 Range, const int32 MinParallelBatchSize);
186
187
188private:
189 FSolverParticles MParticles;
190 TPBDActiveView<FSolverParticles> MParticlesActiveView;
191 FSolverCollisionParticles MCollisionParticles;
192 TPBDActiveView<FSolverCollisionParticles> MCollisionParticlesActiveView;
193
194 TArrayCollectionArray<FSolverRigidTransform3> MCollisionTransforms; // Used for CCD to store the initial state before the kinematic update
196 TArrayCollectionArray<uint32> MCollisionParticleGroupIds; // Used for per group parameters for collision particles
197 TArrayCollectionArray<uint32> MParticleGroupIds; // Used for per group parameters for particles
198 TArray<FSolverVec3> MCollisionContacts;
199 TArray<FSolverVec3> MCollisionNormals;
200
201 TArrayCollectionArray<FSolverVec3> MGroupGravityAccelerations;
202 TArrayCollectionArray<FVelocityAndPressureField> MGroupVelocityAndPressureFields;
203 TArrayCollectionArray<TFunction<void(FSolverParticles&, const FSolverReal, const int32)>> MGroupForceRules;
204 TArrayCollectionArray<FSolverReal> MGroupCollisionThicknesses;
205 TArrayCollectionArray<FSolverReal> MGroupCoefficientOfFrictions;
207 TArrayCollectionArray<FSolverReal> MGroupLocalDampings;
208 TArrayCollectionArray<bool> MGroupUseCCDs;
209
210 TArray<TFunction<void(FSolverParticles&, const FSolverReal)>> MConstraintInits;
211 TPBDActiveView<TArray<TFunction<void(FSolverParticles&, const FSolverReal)>>> MConstraintInitsActiveView;
212 TArray<TFunction<void(FSolverParticles&, const FSolverReal)>> MConstraintRules;
213 TPBDActiveView<TArray<TFunction<void(FSolverParticles&, const FSolverReal)>>> MConstraintRulesActiveView;
214 TArray<TFunction<void(FSolverParticles&, const FSolverReal)>> MPostCollisionConstraintRules;
215 TPBDActiveView<TArray<TFunction<void(FSolverParticles&, const FSolverReal)>>> MPostCollisionConstraintRulesActiveView;
216
217 TFunction<void(FSolverParticles&, const FSolverReal, const FSolverReal, const int32)> MKinematicUpdate;
218 TFunction<void(FSolverCollisionParticles&, const FSolverReal, const FSolverReal, const int32)> MCollisionKinematicUpdate;
219 //Newton specific lambdas:
220 TFunction<void(const bool)> UpdatePositionBasedState;
223 TFunction<void(TArray<FSolverVec3>&)> ProjectBCs;
225 TFunction<void(const FSolverReal, const FSolverReal, const TArray<FSolverReal>&, bool, TArray<FSolverVec3>&)> MAddExternalForce;
226
227 int32 MNumNewtonIterations;
228 int32 MNumCGIterations;
230 TArray<TArray<TVector<int32, 2>>> MIncidentElements;
231 TArray<FSolverReal> Measure;
232 //Material Constants:
233 FSolverReal Mu;
234 FSolverReal Lambda;
235
236 FSolverVec3 MGravity;
237 FSolverReal MCollisionThickness;
238 FSolverReal MCoefficientOfFriction;
239 FSolverReal MDamping;
240 FSolverReal MLocalDamping;
241 FSolverReal MTime;
242 FSolverReal MSmoothDt;
243 FSolverReal MNewtonTol;
244 FSolverReal MCGTol;
245 TArray<FSolverVec3> ElementForces;
247 TArray<FSolverReal> MNodalMass;
248 TArray<FSolverReal> MResidualNorm;
249 TArray<int32> MConstrainedVertices;
250 TArray<FSolverVec3> MBCPositions;
251 bool NoVerbose = false;
252 ConsModelCaches ConsCaches;
254 TUniquePtr<TArray<int32>> use_list;
255 bool bWriteDebugInfo;
256};
257
258
259} // End namespace Chaos::Softs
260//
261//#if !defined(CHAOS_POST_ITERATION_UPDATES_ISPC_ENABLED)
262//#define CHAOS_POST_ITERATION_UPDATES_ISPC_ENABLED 1
263//#endif
264
265
OODEFFUNC typedef void(OODLE_CALLBACK t_fp_OodleCore_Plugin_Free)(void *ptr)
EGLSurface EGLnsecsANDROID time
Definition AndroidOpenGLFunctions.h:9
#define check(expr)
Definition AssertionMacros.h:314
#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
uint32 Offset
Definition VulkanMemory.cpp:4033
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition Matrix.h:21
Definition NewtonEvolution.h:26
CHAOS_API void ResetParticles()
Definition NewtonEvolution.cpp:214
void SetKinematicUpdateFunction(TFunction< void(FSolverParticles &, const FSolverReal, const FSolverReal, const int32)> KinematicUpdate)
Definition NewtonEvolution.h:129
const FSolverCollisionParticles & CollisionParticles() const
Definition NewtonEvolution.h:89
void SetNewtonIterations(const int32 Iterations)
Definition NewtonEvolution.h:142
CHAOS_API int32 AddPostCollisionConstraintRuleRange(int32 NumConstraints, bool bActivate)
Definition NewtonEvolution.cpp:301
void SetDamping(const FSolverReal Damping, const uint32 GroupId=0)
Definition NewtonEvolution.h:151
CHAOS_API int32 AddCollisionParticleRange(int32 NumParticles, uint32 GroupId, bool bActivate)
Definition NewtonEvolution.cpp:261
void ActivateParticleRange(int32 Offset, bool bActivate)
Definition NewtonEvolution.h:64
int32 GetParticleRangeSize(int32 Offset) const
Definition NewtonEvolution.h:61
int32 GetCollisionParticleRangeSize(int32 Offset) const
Definition NewtonEvolution.h:86
const FVelocityAndPressureField & GetVelocityAndPressureField(const uint32 GroupId=0) const
Definition NewtonEvolution.h:139
FSolverReal GetCollisionThickness(const uint32 GroupId=0) const
Definition NewtonEvolution.h:144
FSolverReal GetLocalDamping(const uint32 GroupId=0) const
Definition NewtonEvolution.h:153
void ActivatePostCollisionConstraintRuleRange(int32 Offset, bool bActivate)
Definition NewtonEvolution.h:119
TArray< TFunction< void(FSolverParticles &, const FSolverReal)> > & ConstraintInits()
Definition NewtonEvolution.h:123
const FSolverVec3 & GetGravity(const uint32 GroupId=0) const
Definition NewtonEvolution.h:135
TArray< TArray< TVector< int32, 2 > > > & IncidentElements()
Definition NewtonEvolution.h:71
int32 GetConstraintRuleRangeSize(int32 Offset) const
Definition NewtonEvolution.h:113
int32 GetNewtonIterations() const
Definition NewtonEvolution.h:141
void SetUseCCD(const bool bUseCCD, const uint32 GroupId=0)
Definition NewtonEvolution.h:157
TArray< TFunction< void(FSolverParticles &, const FSolverReal)> > & ConstraintRules()
Definition NewtonEvolution.h:125
void DoNewtonStep(const int32 max_it_newton, const FSolverReal newton_tol, const int32 max_it_cg, const FSolverReal cg_tol, Func1 P, Func2 dP, const FSolverReal time, const FSolverReal dt, const TArray< TArray< TVector< int32, 2 > > > &incident_elements, const TArray< FSolverReal > &nodal_mass, Func3 set_bcs, Func4 project_bcs, Func5 add_external_force, Func6 update_position_based_state, FSolverParticles &InParticles, TArray< FSolverReal > &residual_norm, bool use_cg=false, FSolverReal cg_prctg_reduce=0, bool no_verbose=false)
Definition NewtonEvolution.cpp:342
const TPBDActiveView< FSolverCollisionParticles > & CollisionParticlesActiveView()
Definition NewtonEvolution.h:92
const bool Collided(int32 index)
Definition NewtonEvolution.h:160
TFunction< void(FSolverParticles &, const FSolverReal, const int32)> & GetForceFunction(const uint32 GroupId=0)
Definition NewtonEvolution.h:132
const FSolverParticles & Particles() const
Definition NewtonEvolution.h:67
const TArray< FSolverVec3 > & GetCollisionNormals() const
Definition NewtonEvolution.h:164
int32 GetPostCollisionConstraintRuleRangeSize(int32 Offset) const
Definition NewtonEvolution.h:114
FVelocityAndPressureField & GetVelocityAndPressureField(const uint32 GroupId=0)
Definition NewtonEvolution.h:138
CHAOS_API void InitFEM()
Definition NewtonEvolution.cpp:198
void ActivateConstraintRuleRange(int32 Offset, bool bActivate)
Definition NewtonEvolution.h:118
void SetCoefficientOfFriction(const FSolverReal CoefficientOfFriction, const uint32 GroupId=0)
Definition NewtonEvolution.h:148
const TPBDActiveView< FSolverParticles > & ParticlesActiveView()
Definition NewtonEvolution.h:69
TArray< TFunction< void(FSolverParticles &, const FSolverReal)> > & PostCollisionConstraintRules()
Definition NewtonEvolution.h:127
const TFunction< void(FSolverParticles &, const FSolverReal, const int32)> & GetForceFunction(const uint32 GroupId=0) const
Definition NewtonEvolution.h:133
const TArray< FSolverVec3 > & GetCollisionContacts() const
Definition NewtonEvolution.h:163
CHAOS_API int32 AddParticleRange(int32 NumParticles, uint32 GroupId, bool bActivate)
Definition NewtonEvolution.cpp:224
~FNewtonEvolution()
Definition NewtonEvolution.h:49
FSolverReal GetDamping(const uint32 GroupId=0) const
Definition NewtonEvolution.h:150
const TArray< uint32 > & CollisionParticleGroupIds() const
Definition NewtonEvolution.h:91
int32 GetConstraintInitRangeSize(int32 Offset) const
Definition NewtonEvolution.h:112
FSolverParticles & Particles()
Definition NewtonEvolution.h:68
const TArray< TFunction< void(FSolverParticles &, const FSolverReal)> > & ConstraintRules() const
Definition NewtonEvolution.h:124
CHAOS_API void ResetCollisionParticles(int32 NumParticles=0)
Definition NewtonEvolution.cpp:255
CHAOS_API int32 AddConstraintRuleRange(int32 NumConstraints, bool bActivate)
Definition NewtonEvolution.cpp:292
void ActivateCollisionParticleRange(int32 Offset, bool bActivate)
Definition NewtonEvolution.h:83
void ActivateConstraintInitRange(int32 Offset, bool bActivate)
Definition NewtonEvolution.h:117
FSolverCollisionParticles & CollisionParticles()
Definition NewtonEvolution.h:90
CHAOS_API int32 AddConstraintInitRange(int32 NumConstraints, bool bActivate)
Definition NewtonEvolution.cpp:283
const TArray< uint32 > & ParticleGroupIds() const
Definition NewtonEvolution.h:73
FSolverReal GetTime() const
Definition NewtonEvolution.h:166
const TArray< bool > & GetCollisionStatus()
Definition NewtonEvolution.h:162
bool GetUseCCD(const uint32 GroupId=0) const
Definition NewtonEvolution.h:156
CHAOS_API void AdvanceOneTimeStep(const FSolverReal Dt, const bool bSmoothDt=true)
Definition NewtonEvolution.cpp:684
void SetCollisionThickness(const FSolverReal CollisionThickness, const uint32 GroupId=0)
Definition NewtonEvolution.h:145
void ResetConstraintRules()
Definition NewtonEvolution.h:96
void SetGravity(const FSolverVec3 &Acceleration, const uint32 GroupId=0)
Definition NewtonEvolution.h:136
FSolverReal GetCoefficientOfFriction(const uint32 GroupId=0) const
Definition NewtonEvolution.h:147
const TArray< TFunction< void(FSolverParticles &, const FSolverReal)> > & PostCollisionConstraintRules() const
Definition NewtonEvolution.h:126
CHAOS_API void WriteOutputLog(const int32 Frame)
Definition NewtonEvolution.cpp:204
void SetLocalDamping(const FSolverReal LocalDamping, const uint32 GroupId=0)
Definition NewtonEvolution.h:154
void SetCollisionKinematicUpdateFunction(TFunction< void(FSolverCollisionParticles &, const FSolverReal, const FSolverReal, const int32)> KinematicUpdate)
Definition NewtonEvolution.h:130
void ComputeNegativeBackwardEulerResidual(const FSolverParticles &InParticles, const TArray< TArray< TVector< int32, 2 > > > &IncidentElements, const TArray< FSolverReal > &NodalMass, const TArray< FSolverVec3 > &Vn, const FSolverParticles &Xn, Func1 P, Func2 AddExternalForce, const FSolverReal Time, const FSolverReal Dt, TArray< FSolverVec3 > &Residual)
Definition NewtonEvolution.cpp:311
const TArray< TFunction< void(FSolverParticles &, const FSolverReal)> > & ConstraintInits() const
Definition NewtonEvolution.h:122
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 Vector.h:41
Definition Array.h:670
Definition AndroidPlatformMisc.h:14
Definition UniquePtr.h:107
Definition CollectionEmbeddedSpringConstraintFacade.cpp:6
FRealSingle FSolverReal
Definition PBDSoftsEvolutionFwd.h:31
Definition NewtonEvolution.h:20
TArray< Chaos::Softs::CorotatedCache< FSolverReal > > CorotatedCache
Definition NewtonEvolution.h:21