107 return Groups.SolverContexts[GroupId];
113 return Groups.SolverContexts[SoftBodies.GroupId[
SoftBodyId]];
134 UE_DEPRECATED(5.6,
"Use version with ReferenceSpace parameters. Otherwise, LocalSpace damping with ReferenceBone space will not work correctly.")
205 return AllocateRules(
SoftBodyId,
NumRules, SoftBodies.PerIterationPBDConstraintRules);
210 return AllocateRules(
SoftBodyId,
NumRules, SoftBodies.PerIterationCollisionPBDConstraintRules);
215 return AllocateRules(
SoftBodyId,
NumRules, SoftBodies.PerIterationPostCollisionsPBDConstraintRules);
225 return AllocateRules(
SoftBodyId,
NumRules, SoftBodies.UpdateLinearSystemCollisionsRules);
236 return GetRules(
SoftBodyId, SoftBodies.PreSubstepParallelInits);
241 return GetRules(
SoftBodyId, SoftBodies.PBDExternalForceRules);
246 return GetRules(
SoftBodyId, SoftBodies.PostInitialGuessParallelInits);
251 return GetRules(
SoftBodyId, SoftBodies.PreSubstepConstraintRules);
256 return GetRules(
SoftBodyId, SoftBodies.PerIterationPBDConstraintRules);
261 return GetRules(
SoftBodyId, SoftBodies.PerIterationCollisionPBDConstraintRules);
266 return GetRules(
SoftBodyId, SoftBodies.PerIterationPostCollisionsPBDConstraintRules);
271 return GetRules(
SoftBodyId, SoftBodies.UpdateLinearSystemRules);
276 return GetRules(
SoftBodyId, SoftBodies.UpdateLinearSystemCollisionsRules);
281 return GetRules(
SoftBodyId, SoftBodies.PostSubstepConstraintRules);
296 template<
typename ElementType>
311 return RangeSize == 0 || (
Array && Offset >= 0 && Offset + RangeSize <=
Array->Num());
326 bool IsEmpty()
const {
return RangeSize == 0; }
327 int32 GetRangeSize()
const {
return RangeSize; }
335 struct FSoftBodies :
public TArrayCollection
371 enum struct EStatus :
uint8
378 TArrayCollectionArray<EStatus> Status;
379 TArrayCollectionArray<uint32> GroupId;
381 TArrayCollectionArray<FSolverReal> GlobalDampings;
383 TArrayCollectionArray<bool> UsePerParticleDamping;
399 struct FCollisionBodyRanges :
public TArrayCollection
401 FCollisionBodyRanges()
420 enum struct EStatus :
uint8
427 TArrayCollectionArray<EStatus> Status;
428 TArrayCollectionArray<uint32> GroupId;
432 struct FGroups :
public TArrayCollection
447 void AddGroupsToSize(
uint32 DesiredSize)
462 struct FLinearSystemParameters :
public FEvolutionLinearSystemSolverParameters
466 FLinearSystemParameters()
493 template<
typename RuleFunc>
500 template<
typename RuleFunc>
510 bool bEnableForceBasedSolver =
false;
511 int32 MaxNumIterations;
513 int32 NumUsedIterations = 0;
514 int32 NumNewtonIterations;
515 bool bDisableTimeDependentNumIterations =
false;
516 bool bDoQuasistatics;
518 FLinearSystemParameters LinearSystemParameters;
522 FSolverParticles Particles;
523 TArrayCollectionArray<FSolverReal> ParticleDampings;
526 FSolverCollisionParticles CollisionParticles;
529 FSoftBodies SoftBodies;
535 FCollisionBodyRanges CollisionRanges;
OODEFFUNC typedef void(OODLE_CALLBACK t_fp_OodleCore_Plugin_Free)(void *ptr)
#define check(expr)
Definition AssertionMacros.h:314
#define ensure( InExpression)
Definition AssertionMacros.h:464
#define UE_CHAOS_DECLARE_INDEXLESS_PROPERTYCOLLECTION_NAME(PropertyName, Type)
Definition CollectionPropertyFacade.h:853
@ INDEX_NONE
Definition CoreMiscDefines.h:150
#define UE_DEPRECATED(Version, Message)
Definition CoreMiscDefines.h:302
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
#define ENUM_CLASS_FLAGS(Enum)
Definition EnumClassFlags.h:6
UE_FORCEINLINE_HINT bool IsValid(const UObject *Test)
Definition Object.h:1875
EChaosSoftsLocalDampingSpace
Definition SoftsSimulationSpace.h:22
uint32 Offset
Definition VulkanMemory.cpp:4033
Definition CollectionPropertyFacade.h:49
Definition SoftsEvolutionLinearSystem.h:45
Definition SoftsEvolution.h:76
FSolverReal GetTime() const
Definition SoftsEvolution.h:285
TArrayView< PBDConstraintRuleFunc > GetPerIterationPBDConstraintRulesRange(int32 SoftBodyId)
Definition SoftsEvolution.h:254
int32 GetMaxIterations() const
Definition SoftsEvolution.h:287
TArrayView< UpdateLinearSystemFunc > GetUpdateLinearSystemRulesRange(int32 SoftBodyId)
Definition SoftsEvolution.h:269
void AllocatePerIterationPostCollisionsPBDConstraintRulesRange(int32 SoftBodyId, int32 NumRules)
Definition SoftsEvolution.h:213
void AllocatePerIterationPBDConstraintRulesRange(int32 SoftBodyId, int32 NumRules)
Definition SoftsEvolution.h:203
TFunction< void(FSolverParticlesRange &, const FSolverReal Dt, const TArray< FSolverCollisionParticlesRange > &)> PBDCollisionConstraintRuleFunc
Definition SoftsEvolution.h:176
TArrayView< ParallelInitFunc > GetPostInitialGuessParallelInitRange(int32 SoftBodyId)
Definition SoftsEvolution.h:244
bool GetDoQuasistatics() const
Definition SoftsEvolution.h:290
TFunction< void(const FSolverParticlesRange &, const FSolverReal Dt, const ESolverMode)> ParallelInitFunc
Definition SoftsEvolution.h:173
FSolverParticles & GetParticles()
Definition SoftsEvolution.h:95
CHAOS_API int32 AddCollisionParticleRange(uint32 GroupId, int32 NumParticles, bool bEnable)
Definition SoftsEvolution.cpp:320
bool IsValidCollisionParticleRange(int32 CollisionRangeId) const
Definition SoftsEvolution.h:162
CHAOS_API void RemoveCollisionParticleRange(int32 CollisionRangeId)
Definition SoftsEvolution.cpp:347
int32 GetLastLinearSolveIterations(int32 SoftBodyId) const
Definition SoftsEvolution.h:147
TArrayView< PBDConstraintRuleFunc > GetPerIterationPostCollisionsPBDConstraintRulesRange(int32 SoftBodyId)
Definition SoftsEvolution.h:264
int32 GetIterations() const
Definition SoftsEvolution.h:286
TArrayView< ConstraintRuleFunc > GetPreSubstepConstraintRulesRange(int32 SoftBodyId)
Definition SoftsEvolution.h:249
CHAOS_API int32 NumActiveParticles() const
Definition SoftsEvolution.cpp:206
void AddGroupArray(TArrayCollectionArrayBase *Array)
Definition SoftsEvolution.h:89
TFunction< void(FSolverParticlesRange &, const FSolverReal Dt)> PBDConstraintRuleFunc
Definition SoftsEvolution.h:175
void AllocatePerIterationCollisionPBDConstraintRulesRange(int32 SoftBodyId, int32 NumRules)
Definition SoftsEvolution.h:208
const FEvolutionGroupContext & GetGroupContextForSoftBody(int32 SoftBodyId) const
Definition SoftsEvolution.h:111
CHAOS_API void SetSolverProperties(const FCollectionPropertyConstFacade &PropertyCollection)
Definition SoftsEvolution.cpp:392
void AllocateUpdateLinearSystemCollisionsRulesRange(int32 SoftBodyId, int32 NumRules)
Definition SoftsEvolution.h:223
FSolverParticlesRange & GetSoftBodyParticles(int32 SoftBodyId)
Definition SoftsEvolution.h:143
FSolverReal GetLastLinearSolveError(int32 SoftBodyId) const
Definition SoftsEvolution.h:148
int32 GetSoftBodyGroupId(int32 SoftBodyId) const
Definition SoftsEvolution.h:127
void SetCollisionKinematicUpdateFunction(CollisionKinematicUpdateFunc Func)
Definition SoftsEvolution.h:170
bool GetDisableTimeDependentNumIterations() const
Definition SoftsEvolution.h:289
CHAOS_API void AdvanceOneTimeStep(const FSolverReal Dt, const FSolverReal TimeDependentIterationMultiplier)
Definition SoftsEvolution.cpp:403
TFunction< void(FSolverParticlesRange &, const FSolverReal Dt, const FSolverReal Time)> KinematicUpdateFunc
Definition SoftsEvolution.h:167
const TSet< int32 > & GetGroupActiveCollisionParticleRanges(uint32 GroupId) const
Definition SoftsEvolution.h:159
TFunction< void(const FSolverParticlesRange &, const FSolverReal Dt, const TArray< FSolverCollisionParticlesRange > &, FEvolutionLinearSystem &)> UpdateLinearSystemCollisionsFunc
Definition SoftsEvolution.h:178
TArrayView< PBDCollisionConstraintRuleFunc > GetPerIterationCollisionPBDConstraintRulesRange(int32 SoftBodyId)
Definition SoftsEvolution.h:259
TFunction< void(const FSolverParticlesRange &, const FSolverReal Dt, FEvolutionLinearSystem &)> UpdateLinearSystemFunc
Definition SoftsEvolution.h:177
const TArray< int32 > & GetGroupSoftBodies(uint32 GroupId) const
Definition SoftsEvolution.h:145
TArrayView< ParallelInitFunc > GetPreSubstepParallelInitRange(int32 SoftBodyId)
Definition SoftsEvolution.h:234
int32 GetSoftBodyParticleNum(int32 SoftBodyId) const
Definition SoftsEvolution.h:126
const TSet< int32 > & GetGroupActiveSoftBodies(uint32 GroupId) const
Definition SoftsEvolution.h:146
bool IsSoftBodyActive(int32 SoftBodyId) const
Definition SoftsEvolution.h:142
const FSolverParticles & GetParticles() const
Definition SoftsEvolution.h:93
TArrayView< UpdateLinearSystemCollisionsFunc > GetUpdateLinearSystemCollisionsRulesRange(int32 SoftBodyId)
Definition SoftsEvolution.h:274
void AllocatePostSubstepConstraintRulesRange(int32 SoftBodyId, int32 NumRules)
Definition SoftsEvolution.h:228
CHAOS_API void RemoveSoftBody(int32 SoftBodyId)
Definition SoftsEvolution.cpp:261
TFunction< void(FSolverCollisionParticlesRange &, const FSolverReal Dt, const FSolverReal Time)> CollisionKinematicUpdateFunc
Definition SoftsEvolution.h:168
const FEvolutionGroupContext & GetGroupContext(uint32 GroupId) const
Definition SoftsEvolution.h:105
void AllocateUpdateLinearSystemRulesRange(int32 SoftBodyId, int32 NumRules)
Definition SoftsEvolution.h:218
CHAOS_API TArray< uint32 > GetActiveGroupsArray() const
Definition SoftsEvolution.cpp:192
CHAOS_API void ActivateCollisionParticleRange(int32 CollisionRangeId, bool bEnable)
Definition SoftsEvolution.cpp:363
TFunction< void(FSolverParticlesRange &, const FSolverReal Dt, const ESolverMode)> ConstraintRuleFunc
Definition SoftsEvolution.h:174
void SetDisableTimeDependentNumIterations(bool bDisable)
Definition SoftsEvolution.h:291
void AllocatePreSubstepConstraintRulesRange(int32 SoftBodyId, int32 NumRules)
Definition SoftsEvolution.h:198
void AllocatePreSubstepParallelInitRange(int32 SoftBodyId, int32 NumRules)
Definition SoftsEvolution.h:183
int32 GetNumUsedIterations() const
Definition SoftsEvolution.h:288
void AddCollisionParticleArray(TArrayCollectionArrayBase *Array)
Definition SoftsEvolution.h:91
const FSolverParticlesRange & GetSoftBodyParticles(int32 SoftBodyId) const
Definition SoftsEvolution.h:144
FSolverCollisionParticlesRange & GetCollisionParticleRange(int32 CollisionRangeId)
Definition SoftsEvolution.h:163
void AllocatePBDExternalForceRulesRange(int32 SoftBodyId, int32 NumRules)
Definition SoftsEvolution.h:188
TArrayView< PBDConstraintRuleFunc > GetPBDExternalForceRulesRange(int32 SoftBodyId)
Definition SoftsEvolution.h:239
void AddParticleArray(TArrayCollectionArrayBase *Array)
Definition SoftsEvolution.h:90
void SetKinematicUpdateFunction(KinematicUpdateFunc Func)
Definition SoftsEvolution.h:169
const FSolverCollisionParticlesRange & GetCollisionParticleRange(int32 CollisionRangeId) const
Definition SoftsEvolution.h:164
CHAOS_API TArray< FSolverCollisionParticlesRange > GetActiveCollisionParticles(uint32 GroupId) const
Definition SoftsEvolution.cpp:379
TArrayView< ConstraintRuleFunc > GetPostSubstepConstraintRulesRange(int32 SoftBodyId)
Definition SoftsEvolution.h:279
CHAOS_API void Reset()
Definition SoftsEvolution.cpp:178
CHAOS_API int32 AddSoftBody(uint32 GroupId, int32 NumParticles, bool bEnable)
Definition SoftsEvolution.cpp:219
CHAOS_API void SetSoftBodyProperties(int32 SoftBodyId, const FCollectionPropertyConstFacade &PropertyCollection, const TMap< FString, TConstArrayView< FRealSingle > > &WeightMaps, const FSolverVec3 &ReferenceSpaceLocation, const FSolverVec3 &ReferenceSpaceVelocity, const FSolverVec3 &ReferenceSpaceAngularVelocity)
Definition SoftsEvolution.cpp:278
CHAOS_API void ActivateSoftBody(int32 SoftBodyId, bool bActivate)
Definition SoftsEvolution.cpp:306
void AllocatePostInitialGuessParallelInitRange(int32 SoftBodyId, int32 NumRules)
Definition SoftsEvolution.h:193
TSet< uint32 > GetActiveGroups() const
Definition SoftsEvolution.h:98
Definition SoftsSolverCollisionParticlesRange.h:11
Definition SoftsSolverParticlesRange.h:12
Definition PBDSoftsSolverParticles.h:20
Definition ArrayCollectionArrayBase.h:9
int32 AddArray(TArrayCollectionArrayBase *Array)
Definition ArrayCollection.h:36
uint32 Size() const
Definition ArrayCollection.h:66
void ResizeHelper(const int32 Num)
Definition ArrayCollection.h:93
void AddElementsHelper(const int32 Num)
Definition ArrayCollection.h:84
Definition ArrayView.h:139
Definition AndroidPlatformMisc.h:14
Definition UnrealString.h.inl:34
constexpr FSolverReal LocalDamping
Definition SoftsEvolution.cpp:23
TArrayView< T > GetArrayView(TManagedArrayAccessor< T > &DataArray, const TManagedArrayAccessor< int32 > &StartArray, const TManagedArrayAccessor< int32 > &EndArray, int32 ConstraintIndex)
Definition CollectionEmbeddedSpringConstraintFacade.cpp:10
Definition CollectionEmbeddedSpringConstraintFacade.cpp:6
ESolverMode
Definition SoftsEvolution.h:22
FRealSingle FSolverReal
Definition PBDSoftsEvolutionFwd.h:31
TVector< FSolverReal, 3 > FSolverVec3
Definition PBDSoftsEvolutionFwd.h:33
float FRealSingle
Definition Real.h:14
@ Invalid
Definition BTCompositeNode.h:38
@ Active
Definition BehaviorTreeTypes.h:172
@ Inactive
Definition BehaviorTreeTypes.h:174
const FVector Offset(0, 0, 20)
@ Free
Definition MemPro.h:147
@ false
Definition radaudio_common.h:23
Definition SoftsEvolution.h:33
int32 CurrentPBDIteration
Definition SoftsEvolution.h:38
ESolverMode SolverMode
Definition SoftsEvolution.h:34
void Init(ESolverMode InSolverMode, FSolverReal InDt, int32 InNumPBDIterations, int32 InNumNewtonIterations)
Definition SoftsEvolution.h:55
int32 NumNewtonIterations
Definition SoftsEvolution.h:40
int32 NumPBDIterations
Definition SoftsEvolution.h:37
FSolverReal Dt
Definition SoftsEvolution.h:35
void Reset()
Definition SoftsEvolution.h:43
int32 CurrentNewtonIteration
Definition SoftsEvolution.h:41
int32 MaxNumCGIterations
Definition SoftsEvolutionLinearSystem.h:36
bool bCheckCGResidual
Definition SoftsEvolutionLinearSystem.h:38
static constexpr FSolverReal DefaultCGTolerance
Definition SoftsEvolutionLinearSystem.h:12
static constexpr bool bDefaultCheckCGResidual
Definition SoftsEvolutionLinearSystem.h:13
bool bDoQuasistatics
Definition SoftsEvolutionLinearSystem.h:34
FSolverReal CGResidualTolerance
Definition SoftsEvolutionLinearSystem.h:37
FEvolutionLinearSystemSolverParameters()=default
static constexpr int32 DefaultMaxNumCGIterations
Definition SoftsEvolutionLinearSystem.h:11
bool bXPBDInitialGuess
Definition SoftsEvolutionLinearSystem.h:35