22 for (
int32 ElementIndex = 0; ElementIndex <
Constraints.Num(); ElementIndex++)
25 for (
int32 i = 0; i < 4; i++)
31 RestLength[4* ElementIndex +i] = FSolverVec3::DotProduct(FSolverVec3::CrossProduct(P3 - P2,
P4 - P2), P1 - P2) / FSolverVec3::CrossProduct(P3 - P2,
P4 - P2).Size();
38 Volumes[ElementIndex] = FSolverVec3::DotProduct(FSolverVec3::CrossProduct(P2 - P1, P3 - P1),
P4 - P1) / (
FSolverReal)6.;
50 const int32 i2 = Constraint[(
ie + 1) % 4];
51 const int32 i3 = Constraint[(
ie + 2) % 4];
52 const int32 i4 = Constraint[(
ie + 3) % 4];
95 const int32 i2 = Constraint[(
ie + 1) % 4];
96 const int32 i3 = Constraint[(
ie + 2) % 4];
97 const int32 i4 = Constraint[(
ie + 3) % 4];
105 const FSolverReal S = (CurrentLength - RestLength[4*ElementIndex+
ie]) / (
110 return Stiffness *
S;
117 for (
int ie = 0;
ie < 4; ++
ie)
121 const int32 i2 = Constraint[(
ie + 1) % 4];
122 const int32 i3 = Constraint[(
ie + 2) % 4];
123 const int32 i4 = Constraint[(
ie + 3) % 4];
129 Particles.
P(i4) -=
S * Particles.
InvM(i4) *
Grads[3];
137 for (
int ie = 0;
ie < 4; ++
ie)
141 const int32 i2 = Constraint[(
ie + 1) % 4];
142 const int32 i3 = Constraint[(
ie + 2) % 4];
143 const int32 i4 = Constraint[(
ie + 3) % 4];
178 const FSolverReal S = Stiffness * (CurrentLength - RestLength[4 * ElementIndex +
ie]) / (
182 Particles.
InvM(i4) *
Grads[3].SizeSquared());
186 Particles.
P(i4) -=
S * Particles.
InvM(i4) *
Grads[3];
205 const int32 i1 = Constraint[0];
206 const int32 i2 = Constraint[1];
207 const int32 i3 = Constraint[2];
208 const int32 i4 = Constraint[3];
215 Particles.
InvM(i4) *
Grads[3].SizeSquared());
220 Particles.
P(i4) -=
S * Particles.
InvM(i4) *
Grads[3];
230 const int32 i2 = Constraint[(
ie + 1) % 4];
231 const int32 i3 = Constraint[(
ie + 2) % 4];
232 const int32 i4 = Constraint[(
ie + 3) % 4];
238 Particles.
P(i4) -=
S * Particles.
InvM(i4) *
Grads[3];
247 for (
int ie = 0;
ie < 4; ++
ie)
250 const int32 i2 = Constraint[(
ie + 1) % 4];
251 const int32 i3 = Constraint[(
ie + 2) % 4];
252 const int32 i4 = Constraint[(
ie + 3) % 4];
297 for (
int32 ElementIndex = 0; ElementIndex <
Constraints.Num(); ++ElementIndex)
309 if ((ConstraintsPerColorStartIndex.
Num() > 1))
353 ConstraintsPerColorStartIndex.
Reset(ConstraintsPerColor.
Num() + 1);
#define ensure( InExpression)
Definition AssertionMacros.h:464
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
UE_INTRINSIC_CAST UE_REWRITE constexpr std::remove_reference_t< T > && MoveTemp(T &&Obj) noexcept
Definition UnrealTemplate.h:520
static TArray< TArray< int32 > > ComputeGraphColoring(const TArray< TVector< int32, N > > &Graph, const TDynamicParticles< T, 3 > &InParticles, const int32 GraphParticlesStart, const int32 GraphParticlesEnd)
Definition GraphColoring.h:24
Definition PBDAltitudeSpringConstraints.h:14
virtual void ApplySingleElement(FSolverParticles &Particles, const FSolverReal Dt, const int32 ElementIndex) const
Definition PBDAltitudeSpringConstraints.h:113
FPBDAltitudeSpringConstraints(const FSolverParticles &InParticles, TArray< TVec4< int32 > > &&InConstraints, const FSolverReal InStiffness=(FSolverReal) 1.)
Definition PBDAltitudeSpringConstraints.h:16
void ApplyInParallel(FSolverParticles &Particles, const FSolverReal Dt) const
Definition PBDAltitudeSpringConstraints.h:305
virtual void ApplySingleElementAllInOne(FSolverParticles &Particles, const FSolverReal Dt, const int32 ElementIndex) const
Definition PBDAltitudeSpringConstraints.h:133
virtual ~FPBDAltitudeSpringConstraints()
Definition PBDAltitudeSpringConstraints.h:43
void ApplyInSerial(FSolverParticles &Particles, const FSolverReal Dt) const
Definition PBDAltitudeSpringConstraints.h:293
TVec4< FSolverVec3 > GetGradients(const FSolverParticles &InParticles, const int32 ElementIndex, const int32 ie) const
Definition PBDAltitudeSpringConstraints.h:45
FSolverReal GetScalingFactor(const FSolverParticles &InParticles, const int32 ElementIndex, const int32 ie, const TVec4< FSolverVec3 > &Grads) const
Definition PBDAltitudeSpringConstraints.h:91
virtual void ApplySingleElementVolumeAllInOne(FSolverParticles &Particles, const FSolverReal Dt, const int32 ElementIndex) const
Definition PBDAltitudeSpringConstraints.h:190
TArray< TVec4< int32 > > Constraints
Definition PBDAltitudeSpringConstraints.h:331
int32 GetSingleElementShortestLength(FSolverParticles &Particles, const FSolverReal Dt, const int32 ElementIndex) const
Definition PBDAltitudeSpringConstraints.h:242
virtual void ApplySingleElementShortest(FSolverParticles &Particles, const FSolverReal Dt, const int32 ElementIndex) const
Definition PBDAltitudeSpringConstraints.h:223
Definition PBDSoftsSolverParticles.h:20
const FSolverVec3 & P(const int32 index) const
Definition PBDSoftsSolverParticles.h:36
const T InvM(const int32 Index) const
Definition DynamicParticles.h:48
Definition Constraints.Build.cs:6
UE_REWRITE SizeType Num() const
Definition Array.h:1144
void Reset(SizeType NewSize=0)
Definition Array.h:2246
UE_NODEBUG UE_FORCEINLINE_HINT SizeType Add(ElementType &&Item)
Definition Array.h:2696
void Init(const ElementType &Element, SizeType Number)
Definition Array.h:3043
void SetNumUninitialized(SizeType NewNum, EAllowShrinking AllowShrinking=UE::Core::Private::AllowShrinkingByDefault< AllocatorType >())
Definition Array.h:2369
Definition CollectionEmbeddedSpringConstraintFacade.cpp:6
FRealSingle FSolverReal
Definition PBDSoftsEvolutionFwd.h:31
TVector< FSolverReal, 3 > FSolverVec3
Definition PBDSoftsEvolutionFwd.h:33
void CHAOS_API PhysicsParallelFor(int32 InNum, TFunctionRef< void(int32)> InCallable, bool bForceSingleThreaded=false)
Definition Parallel.cpp:55
U16 Index
Definition radfft.cpp:71
Definition NumericLimits.h:41