9#include "Containers/Array.h"
13 template<
int32 Source,
int32 Target>
16 static constexpr bool Value =
false;
21 static constexpr bool Value =
true;
26 static constexpr bool Value =
true;
31 static constexpr bool Value =
true;
34 template <
int32 Source,
int32 Target>
66 LambdasDamping.
Reset();
123 template<
int32 Source,
int32 Target>
152 Weights.Reserve(NumConstraints);
153 SpringLengths.
Reserve(NumConstraints);
159 for (
int32 Idx = 0; Idx < ExpectedNum; ++Idx)
161 if (
InWeights[Idx] != 0.f && Particles.
InvM(Indices[Idx]) != 0.f)
169 for (
int32 ConstraintIdx = 0; ConstraintIdx < NumConstraints; ++ConstraintIdx)
175 OrigMapToReordered[ConstraintIdx] =
INDEX_NONE;
181 for (
int32 Idx = 0; Idx < Source; ++Idx)
201 InitColorAndRemap(Particles);
204 template<
int32 Source,
int32 Target>
208 if constexpr (bCanUseISPC)
210 InitColor(Particles);
215 ExtensionStiffness.ReorderIndicesAndShrink(OrigMapToReordered, NumConstraints);
216 CompressionStiffness.ReorderIndicesAndShrink(OrigMapToReordered, NumConstraints);
217 DampingRatio.ReorderIndicesAndShrink(OrigMapToReordered, NumConstraints);
220 template<
int32 Source,
int32 Target>
225 if (bChaos_XPBDSpring_ISPC_Enabled && bCanUseISPC)
232 ApplyInternal(Particles, Dt);
236 template<
int32 Source,
int32 Target>
244 for (
int32 ConstraintIndex = 0; ConstraintIndex <
Constraints.Num(); ++ConstraintIndex)
246 const FSolverVec3 Delta =
Spring::GetXPBDEmbeddedSpringDampingDelta(Particles, Dt,
Constraints[ConstraintIndex], Weights[ConstraintIndex], SpringLengths[ConstraintIndex], LambdasDamping[ConstraintIndex], ExtensionStiffness.GetValue(ConstraintIndex), CompressionStiffness.GetValue(ConstraintIndex), DampingRatio.GetValue(ConstraintIndex));
251 Particles.
P(NodeIndex) += Particles.
InvM(NodeIndex) * Weights[ConstraintIndex][
NIndex] *
Delta;
257 for (
int32 ConstraintIndex = 0; ConstraintIndex <
Constraints.Num(); ++ConstraintIndex)
264 Particles.
P(NodeIndex) += Particles.
InvM(NodeIndex) * Weights[ConstraintIndex][
NIndex] *
Delta;
#define check(expr)
Definition AssertionMacros.h:314
#define UE_CHAOS_DECLARE_PROPERTYCOLLECTION_NAME(PropertyName, Type)
Definition CollectionPropertyFacade.h:969
@ INDEX_NONE
Definition CoreMiscDefines.h:150
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
#define TRACE_CPUPROFILER_EVENT_SCOPE(Name)
Definition CpuProfilerTrace.h:528
#define UE_BIG_NUMBER
Definition UnrealMathUtility.h:132
Definition CollectionPropertyFacade.h:49
Definition CollectionEmbeddedSpringConstraintFacade.h:44
Definition PBDFlatWeightMap.h:98
FSolverReal GetValue(int32 Index) const
Definition PBDFlatWeightMap.h:167
Definition SoftsSolverParticlesRange.h:12
const FSolverVec3 & P(const int32 Index) const
Definition SoftsSolverParticlesRange.h:30
FSolverReal InvM(const int32 Index) const
Definition SoftsSolverParticlesRange.h:56
Definition XPBDEmbeddedSpringConstraints.h:320
static constexpr FSolverReal DefaultDamping
Definition XPBDEmbeddedSpringConstraints.h:323
static bool IsEnabled(const FCollectionPropertyConstFacade &PropertyCollection)
Definition XPBDEmbeddedSpringConstraints.h:325
CHAOS_API void SetProperties(const FCollectionPropertyConstFacade &PropertyCollection)
Definition XPBDEmbeddedSpringConstraints.cpp:372
static constexpr FSolverReal DefaultStiffness
Definition XPBDEmbeddedSpringConstraints.h:322
Definition XPBDEmbeddedSpringConstraints.h:270
static constexpr FSolverReal DefaultDamping
Definition XPBDEmbeddedSpringConstraints.h:273
static bool IsEnabled(const FCollectionPropertyConstFacade &PropertyCollection)
Definition XPBDEmbeddedSpringConstraints.h:275
CHAOS_API void SetProperties(const FCollectionPropertyConstFacade &PropertyCollection)
Definition XPBDEmbeddedSpringConstraints.cpp:286
static constexpr FSolverReal DefaultStiffness
Definition XPBDEmbeddedSpringConstraints.h:272
Definition XPBDEmbeddedSpringConstraints.h:295
static bool IsEnabled(const FCollectionPropertyConstFacade &PropertyCollection)
Definition XPBDEmbeddedSpringConstraints.h:300
static constexpr FSolverReal DefaultDamping
Definition XPBDEmbeddedSpringConstraints.h:298
static constexpr FSolverReal DefaultStiffness
Definition XPBDEmbeddedSpringConstraints.h:297
CHAOS_API void SetProperties(const FCollectionPropertyConstFacade &PropertyCollection)
Definition XPBDEmbeddedSpringConstraints.cpp:329
Definition XPBDEmbeddedSpringConstraints.h:36
static constexpr FSolverReal SoftMaxStiffness
Definition XPBDEmbeddedSpringConstraints.h:40
static constexpr FSolverReal MaxStiffness
Definition XPBDEmbeddedSpringConstraints.h:39
void Apply(FSolverParticlesRange &Particles, const FSolverReal Dt) const
Definition XPBDEmbeddedSpringConstraints.h:221
const TArray< TVector< int32, N > > & GetConstraints() const
Definition XPBDEmbeddedSpringConstraints.h:76
FPBDFlatWeightMap DampingRatio
Definition XPBDEmbeddedSpringConstraints.h:120
static constexpr FSolverReal MaxDampingRatio
Definition XPBDEmbeddedSpringConstraints.h:42
static constexpr bool bCanUseISPC
Definition XPBDEmbeddedSpringConstraints.h:44
TXPBDEmbeddedSpringConstraints(const FSolverParticlesRange &Particles, const TConstArrayView< TArray< int32 > > &InSourceIndices, const TConstArrayView< TArray< FRealSingle > > &InSourceWeights, const TConstArrayView< TArray< int32 > > &InTargetIndices, const TConstArrayView< TArray< FRealSingle > > &InTargetWeights, const TConstArrayView< FRealSingle > &InSpringLengths, const TConstArrayView< FRealSingle > &InExtensionStiffnessMultipliers, const TConstArrayView< FRealSingle > &InCompressionStiffnessMultipliers, const TConstArrayView< FRealSingle > &InDampingMultipliers, const FSolverVec2 &InExtensionStiffness, const FSolverVec2 &InCompressionStiffness, const FSolverVec2 &InDampingRatio)
Definition XPBDEmbeddedSpringConstraints.h:124
const TArray< TVector< FSolverReal, N > > & GetWeights() const
Definition XPBDEmbeddedSpringConstraints.h:80
static constexpr int32 N
Definition XPBDEmbeddedSpringConstraints.h:43
static constexpr FSolverReal MinStiffness
Definition XPBDEmbeddedSpringConstraints.h:38
FSolverReal GetCompressionStiffness(const int32 ConstraintIndex) const
Definition XPBDEmbeddedSpringConstraints.h:92
FPBDFlatWeightMap CompressionStiffness
Definition XPBDEmbeddedSpringConstraints.h:119
void Init()
Definition XPBDEmbeddedSpringConstraints.h:62
FSolverReal GetExtensionStiffness(const int32 ConstraintIndex) const
Definition XPBDEmbeddedSpringConstraints.h:88
void ApplyProperties(const FSolverReal, const int32)
Definition XPBDEmbeddedSpringConstraints.h:70
FPBDFlatWeightMap ExtensionStiffness
Definition XPBDEmbeddedSpringConstraints.h:118
const TArray< FSolverReal > & GetSpringLengths() const
Definition XPBDEmbeddedSpringConstraints.h:84
virtual ~TXPBDEmbeddedSpringConstraints()=default
static constexpr FSolverReal MinDampingRatio
Definition XPBDEmbeddedSpringConstraints.h:41
Definition Constraints.Build.cs:6
void SetNumZeroed(SizeType NewNum, EAllowShrinking AllowShrinking=UE::Core::Private::AllowShrinkingByDefault< AllocatorType >())
Definition Array.h:2340
void Reset(SizeType NewSize=0)
Definition Array.h:2246
UE_FORCEINLINE_HINT SizeType Emplace(ArgsType &&... Args)
Definition Array.h:2561
void SetNumUninitialized(SizeType NewNum, EAllowShrinking AllowShrinking=UE::Core::Private::AllowShrinkingByDefault< AllocatorType >())
Definition Array.h:2369
UE_FORCEINLINE_HINT void Reserve(SizeType Number)
Definition Array.h:3016
FSolverVec3 GetXPBDEmbeddedSpringDampingDelta(const SolverParticlesOrRange &Particles, const FSolverReal Dt, const TVector< int32, N > &Constraint, const TVector< FSolverReal, N > &Weights, const FSolverReal RestLength, FSolverReal &Lambda, const FSolverReal ExtensionStiffnessValue, const FSolverReal CompressionStiffnessValue, const FSolverReal DampingRatioValue)
Definition SoftsSpring.h:242
FSolverVec3 GetXPBDEmbeddedSpringDelta(const SolverParticlesOrRange &Particles, const FSolverReal Dt, const TVector< int32, N > &Constraint, const TVector< FSolverReal, N > &Weights, const FSolverReal RestLength, FSolverReal &Lambda, const FSolverReal ExtensionStiffnessValue, const FSolverReal CompressionStiffnessValue)
Definition SoftsSpring.h:213
Definition CollectionEmbeddedSpringConstraintFacade.cpp:6
FRealSingle FSolverReal
Definition PBDSoftsEvolutionFwd.h:31
TVector< FSolverReal, 3 > FSolverVec3
Definition PBDSoftsEvolutionFwd.h:33
Definition XPBDEmbeddedSpringConstraints.h:15
static constexpr bool Value
Definition XPBDEmbeddedSpringConstraints.h:16