UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
XPBDSpringConstraints.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2#pragma once
3
5#include "ChaosStats.h"
6#include "PBDWeightMap.h"
8#include "Chaos/SoftsSpring.h"
9
10namespace Chaos::Softs
11{
12
14{
16
17public:
18 static constexpr FSolverReal MinStiffness = (FSolverReal)0; // We're not checking against MinStiffness (except when it's constant and == 0)
19 static constexpr FSolverReal MaxStiffness = (FSolverReal)1e9;
20 static constexpr FSolverReal MinDampingRatio = (FSolverReal)0.;
21 static constexpr FSolverReal MaxDampingRatio = (FSolverReal)1000.;
22
23 template<int32 Valence UE_REQUIRES(Valence >= 2 && Valence <= 4)>
48
49 template<int32 Valence UE_REQUIRES(Valence >= 2 && Valence <= 4)>
50 UE_DEPRECATED(5.4, "XPBD Constraints must always trim kinematic constraints")
76
77 template<int32 Valence UE_REQUIRES(Valence >= 2 && Valence <= 4)>
79 const FSolverParticles& Particles,
87 : Base(
88 Particles,
94 true /*bTrimKinematicConstraints*/,
102 {
103 Lambdas.Reset();
104 Lambdas.SetNumZeroed(Constraints.Num());
105 LambdasDamping.Reset();
106 LambdasDamping.SetNumZeroed(Constraints.Num());
107 InitColor(Particles);
108 }
109
110 template<int32 Valence UE_REQUIRES(Valence >= 2 && Valence <= 4)>
111 UE_DEPRECATED(5.4, "XPBD Constraints must always trim kinematic constraints")
113 const FSolverParticles& Particles,
122 : Base(
123 Particles,
129 true /*bTrimKinematicConstraints*/,
131 , DampingRatio(
137 {
138 Lambdas.Reset();
139 Lambdas.SetNumZeroed(Constraints.Num());
140 LambdasDamping.Reset();
141 LambdasDamping.SetNumZeroed(Constraints.Num());
142 InitColor(Particles);
143 }
144
145 virtual ~FXPBDSpringConstraints() override {}
146
147 void Init() const
148 {
149 Lambdas.Reset();
150 Lambdas.SetNumZeroed(Constraints.Num());
151 LambdasDamping.Reset();
152 LambdasDamping.SetNumZeroed(Constraints.Num());
153 }
154
155 // Update stiffness values
161
162 // Update stiffness table, as well as the simulation stiffness exponent
163 void ApplyProperties(const FSolverReal Dt, const int32 NumIterations)
164 {
167 }
168
169 template<typename SolverParticlesOrRange>
170 CHAOS_API void Apply(SolverParticlesOrRange& Particles, const FSolverReal Dt) const;
171
173
174 const TArray<int32>& GetConstraintsPerColorStartIndex() const { return ConstraintsPerColorStartIndex; }
175
176private:
177 template<typename SolverParticlesOrRange>
178 CHAOS_API void InitColor(const SolverParticlesOrRange& InParticles);
179
180 template<bool bDampingBefore, bool bSingleLambda, bool bSeparateStretch, bool bDampingAfter, typename SolverParticlesOrRange >
181 void ApplyHelper(SolverParticlesOrRange& Particles, const FSolverReal Dt, const int32 ConstraintIndex, const FSolverReal StiffnessValue, const FSolverReal DampingRatioValue) const;
182
183protected:
184 using Base::Constraints;
187 using Base::Stiffness;
189
190private:
191 using Base::Dists;
192 mutable TArray<FSolverReal> Lambdas;
193 mutable TArray<FSolverReal> LambdasDamping;
194 TArray<int32> ConstraintsPerColorStartIndex; // Constraints are ordered so each batch is contiguous. This is ColorNum + 1 length so it can be used as start and end.
195};
196
198{
199public:
204
220
221 UE_DEPRECATED(5.4, "XPBD Constraints must always trim kinematic constraints")
238
258
259 UE_DEPRECATED(5.4, "XPBD Constraints must always trim kinematic constraints")
280
281 virtual ~FXPBDEdgeSpringConstraints() override = default;
282
285 const TMap<FString, TConstArrayView<FRealSingle>>& WeightMaps);
286
287private:
293
296};
297
299{
300public:
305
321
322 UE_DEPRECATED(5.4, "XPBD Constraints must always trim kinematic constraints")
339
359
360 UE_DEPRECATED(5.4, "XPBD Constraints must always trim kinematic constraints")
381
382 virtual ~FXPBDBendingSpringConstraints() override = default;
383
386 const TMap<FString, TConstArrayView<FRealSingle>>& WeightMaps);
387
388private:
394
397};
398
399} // End namespace Chaos::Softs
400
401#if !defined(CHAOS_XPBD_SPRING_ISPC_ENABLED_DEFAULT)
402#define CHAOS_XPBD_SPRING_ISPC_ENABLED_DEFAULT 1
403#endif
404
405// Support ISPC enable/disable in non-shipping builds
406#if !INTEL_ISPC || UE_BUILD_SHIPPING
407static constexpr bool bChaos_XPBDSpring_ISPC_Enabled = INTEL_ISPC && CHAOS_XPBD_SPRING_ISPC_ENABLED_DEFAULT;
408#else
409extern CHAOS_API bool bChaos_XPBDSpring_ISPC_Enabled;
410#endif
#define UE_CHAOS_DECLARE_PROPERTYCOLLECTION_NAME(PropertyName, Type)
Definition CollectionPropertyFacade.h:969
#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
return true
Definition ExternalRpcRegistry.cpp:601
#define CHAOS_XPBD_SPRING_ISPC_ENABLED_DEFAULT
Definition XPBDSpringConstraints.h:402
Definition CollectionPropertyFacade.h:49
Definition SoftsEvolutionLinearSystem.h:45
Definition PBDSpringConstraintsBase.h:17
FPBDStiffness Stiffness
Definition PBDSpringConstraintsBase.h:160
const int32 ParticleCount
Definition PBDSpringConstraintsBase.h:159
const int32 ParticleOffset
Definition PBDSpringConstraintsBase.h:158
TArray< FSolverReal > Dists
Definition PBDSpringConstraintsBase.h:157
TArray< TVec2< int32 > > Constraints
Definition PBDSpringConstraintsBase.h:156
void SetWeightedValue(const FSolverVec2 &InWeightedValue, FSolverReal MaxStiffness=DefaultPBDMaxStiffness)
Definition PBDStiffness.h:65
void ApplyXPBDValues(const FSolverReal MaxStiffnesss)
Definition PBDStiffness.h:164
Definition PBDWeightMap.h:19
void ApplyValues(bool *bOutUpdated=nullptr)
Definition PBDWeightMap.h:71
void SetWeightedValue(const FSolverVec2 &InWeightedValue)
Definition PBDWeightMap.h:62
Definition SoftsSolverParticlesRange.h:12
Definition PBDSoftsSolverParticles.h:20
Definition XPBDSpringConstraints.h:299
CHAOS_API void SetProperties(const FCollectionPropertyConstFacade &PropertyCollection, const TMap< FString, TConstArrayView< FRealSingle > > &WeightMaps)
Definition XPBDSpringConstraints.cpp:667
virtual ~FXPBDBendingSpringConstraints() override=default
static bool IsEnabled(const FCollectionPropertyConstFacade &PropertyCollection)
Definition XPBDSpringConstraints.h:301
FXPBDBendingSpringConstraints(const FSolverParticlesRange &Particles, const TArray< TVec2< int32 > > &InConstraints, const TMap< FString, TConstArrayView< FRealSingle > > &WeightMaps, const FCollectionPropertyConstFacade &PropertyCollection)
Definition XPBDSpringConstraints.h:306
FXPBDBendingSpringConstraints(const FSolverParticles &Particles, int32 ParticleOffset, int32 ParticleCount, const TArray< TVec2< int32 > > &InConstraints, const TMap< FString, TConstArrayView< FRealSingle > > &WeightMaps, const FCollectionPropertyConstFacade &PropertyCollection)
Definition XPBDSpringConstraints.h:340
Definition XPBDSpringConstraints.h:198
FXPBDEdgeSpringConstraints(const FSolverParticles &Particles, int32 ParticleOffset, int32 ParticleCount, const TArray< TVec3< int32 > > &InConstraints, const TMap< FString, TConstArrayView< FRealSingle > > &WeightMaps, const FCollectionPropertyConstFacade &PropertyCollection)
Definition XPBDSpringConstraints.h:239
CHAOS_API void SetProperties(const FCollectionPropertyConstFacade &PropertyCollection, const TMap< FString, TConstArrayView< FRealSingle > > &WeightMaps)
Definition XPBDSpringConstraints.cpp:622
virtual ~FXPBDEdgeSpringConstraints() override=default
FXPBDEdgeSpringConstraints(const FSolverParticlesRange &Particles, const TArray< TVec3< int32 > > &InConstraints, const TMap< FString, TConstArrayView< FRealSingle > > &WeightMaps, const FCollectionPropertyConstFacade &PropertyCollection)
Definition XPBDSpringConstraints.h:205
static bool IsEnabled(const FCollectionPropertyConstFacade &PropertyCollection)
Definition XPBDSpringConstraints.h:200
Definition XPBDSpringConstraints.h:14
FPBDStiffness Stiffness
Definition PBDSpringConstraintsBase.h:160
CHAOS_API void UpdateLinearSystem(const FSolverParticlesRange &Particles, const FSolverReal Dt, FEvolutionLinearSystem &LinearSystem) const
Definition XPBDSpringConstraints.cpp:546
static constexpr FSolverReal MaxStiffness
Definition XPBDSpringConstraints.h:19
virtual ~FXPBDSpringConstraints() override
Definition XPBDSpringConstraints.h:145
const TArray< int32 > & GetConstraintsPerColorStartIndex() const
Definition XPBDSpringConstraints.h:174
const int32 ParticleCount
Definition PBDSpringConstraintsBase.h:159
const int32 ParticleOffset
Definition PBDSpringConstraintsBase.h:158
static constexpr FSolverReal MinDampingRatio
Definition XPBDSpringConstraints.h:20
void SetProperties(const FSolverVec2 &InStiffness, const FSolverVec2 &InDampingRatio=FSolverVec2::ZeroVector)
Definition XPBDSpringConstraints.h:156
static constexpr FSolverReal MaxDampingRatio
Definition XPBDSpringConstraints.h:21
CHAOS_API void Apply(SolverParticlesOrRange &Particles, const FSolverReal Dt) const
FXPBDSpringConstraints(const FSolverParticlesRange &Particles, const TArray< TVector< int32, Valence > > &InConstraints, const TConstArrayView< FRealSingle > &StiffnessMultipliers, const TConstArrayView< FRealSingle > &DampingMultipliers, const FSolverVec2 &InStiffness, const FSolverVec2 &InDampingRatio)
Definition XPBDSpringConstraints.h:24
static constexpr FSolverReal MinStiffness
Definition XPBDSpringConstraints.h:18
void ApplyProperties(const FSolverReal Dt, const int32 NumIterations)
Definition XPBDSpringConstraints.h:163
TArray< TVec2< int32 > > Constraints
Definition PBDSpringConstraintsBase.h:156
FXPBDSpringConstraints(const FSolverParticles &Particles, int32 ParticleOffset, int32 ParticleCount, const TArray< TVector< int32, Valence > > &InConstraints, const TConstArrayView< FRealSingle > &StiffnessMultipliers, const TConstArrayView< FRealSingle > &DampingMultipliers, const FSolverVec2 &InStiffness, const FSolverVec2 &InDampingRatio)
Definition XPBDSpringConstraints.h:78
FPBDWeightMap DampingRatio
Definition XPBDSpringConstraints.h:188
void Init() const
Definition XPBDSpringConstraints.h:147
Definition Vector.h:1000
Definition Vector.h:41
Definition Constraints.Build.cs:6
Definition Array.h:670
void SetNumZeroed(SizeType NewNum, EAllowShrinking AllowShrinking=UE::Core::Private::AllowShrinkingByDefault< AllocatorType >())
Definition Array.h:2340
void Reset(SizeType NewSize=0)
Definition Array.h:2246
void Init(const ElementType &Element, SizeType Number)
Definition Array.h:3043
Definition UnrealString.h.inl:34
Definition CollectionEmbeddedSpringConstraintFacade.cpp:6
FRealSingle FSolverReal
Definition PBDSoftsEvolutionFwd.h:31
float FRealSingle
Definition Real.h:14