UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
PBDSpringConstraints.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2#pragma once
3
6
7namespace Chaos
8{
9 class FTriangleMesh;
10}
11
12namespace Chaos::Softs
13{
14
16{
17public:
18 template<int32 Valence>
20 const FSolverParticlesRange& Particles,
24 bool bTrimKinematicConstraints = false,
25 bool bInitColor = true,
26 typename TEnableIf<Valence >= 2 && Valence <= 4>::Type* = nullptr)
27 : Base(
28 Particles,
33 {
34 if (bInitColor)
35 {
36 InitColor(Particles);
37 }
38 }
39
40 template<int32 Valence>
42 const FSolverParticles& Particles,
48 bool bTrimKinematicConstraints = false,
49 bool bInitColor = true,
50 typename TEnableIf<Valence >= 2 && Valence <= 4>::Type* = nullptr)
51 : Base(
52 Particles,
59 {
60 if (bInitColor)
61 {
62 InitColor(Particles);
63 }
64 }
65
66 virtual ~FPBDSpringConstraints() override {}
67
68 template<typename SolverParticlesOrRange>
69 CHAOS_API void Apply(SolverParticlesOrRange& Particles, const FSolverReal Dt) const;
70
71 const TArray<int32>& GetConstraintsPerColorStartIndex() const { return ConstraintsPerColorStartIndex; }
72
73protected:
74
75 /* Returns OrigToReorderedVertices */
76 template<typename SolverParticlesOrRange>
78
79
82 using Base::Stiffness;
85
86private:
87 template<typename SolverParticlesOrRange>
88 void ApplyHelper(SolverParticlesOrRange& Particles, const FSolverReal Dt, const int32 ConstraintIndex, const FSolverReal ExpStiffnessValue) const;
89
90private:
91 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.
92};
93
95{
96public:
101
122
146
149 const FSolverParticlesRange& Particles,
150 const FTriangleMesh& TriangleMesh,
152 const TMap<FString, TConstArrayView<FRealSingle>>& WeightMaps,
154 bool bTrimKinematicConstraints = false);
155
156 virtual ~FPBDEdgeSpringConstraints() override = default;
157
160 const TMap<FString, TConstArrayView<FRealSingle>>& WeightMaps);
161
162 CHAOS_API void ApplyProperties(const FSolverReal Dt, const int32 NumIterations);
163
165
169
170private:
171
172 void InitFromPatternData(const TArray<TVec3<FVec2f>>& FaceVertexPatternPositions, const FTriangleMesh& TriangleMesh);
173 void UpdateDists();
174
176
177 bool bWarpWeftScaleEnabled = false;
178 FPBDWeightMap WarpScale;
179 FPBDWeightMap WeftScale;
180 TArray<FSolverReal> BaseDists; // Without Warp/Weft Scale applied
181 TArray<FSolverVec2> WarpWeftScaleBaseMultipliers;
182
186};
187
189{
190public:
195
212
233
234 virtual ~FPBDBendingSpringConstraints() override = default;
235
238 const TMap<FString, TConstArrayView<FRealSingle>>& WeightMaps);
239
241
242private:
244
246};
247
248} // End namespace Chaos::Softs
249
250#if !defined(CHAOS_SPRING_ISPC_ENABLED_DEFAULT)
251#define CHAOS_SPRING_ISPC_ENABLED_DEFAULT 1
252#endif
253
254#if !defined(USE_ISPC_KERNEL_CONSOLE_VARIABLES_IN_SHIPPING)
255#define USE_ISPC_KERNEL_CONSOLE_VARIABLES_IN_SHIPPING 0
256#endif
257
258// Support run-time toggling on supported platforms in non-shipping configurations
259#if !INTEL_ISPC || (UE_BUILD_SHIPPING && !USE_ISPC_KERNEL_CONSOLE_VARIABLES_IN_SHIPPING)
260static constexpr bool bChaos_Spring_ISPC_Enabled = INTEL_ISPC && CHAOS_SPRING_ISPC_ENABLED_DEFAULT;
261#else
262extern CHAOS_API bool bChaos_Spring_ISPC_Enabled;
263#endif
#define UE_CHAOS_DECLARE_INDEXED_PROPERTYCOLLECTION_NAME(PropertyName, Type)
Definition CollectionPropertyFacade.h:893
@ ForceInit
Definition CoreMiscDefines.h:155
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
#define CHAOS_SPRING_ISPC_ENABLED_DEFAULT
Definition PBDSpringConstraints.h:251
Definition TriangleMesh.h:24
Definition CollectionPropertyFacade.h:49
Definition PBDSpringConstraints.h:189
CHAOS_API void SetProperties(const FCollectionPropertyConstFacade &PropertyCollection, const TMap< FString, TConstArrayView< FRealSingle > > &WeightMaps)
Definition PBDSpringConstraints.cpp:402
FPBDBendingSpringConstraints(const FSolverParticles &Particles, int32 ParticleOffset, int32 ParticleCount, const TArray< TVec2< int32 > > &InConstraints, const TMap< FString, TConstArrayView< FRealSingle > > &WeightMaps, const FCollectionPropertyConstFacade &PropertyCollection, bool bTrimKinematicConstraints=false)
Definition PBDSpringConstraints.h:213
FPBDBendingSpringConstraints(const FSolverParticlesRange &Particles, const TArray< TVec2< int32 > > &InConstraints, const TMap< FString, TConstArrayView< FRealSingle > > &WeightMaps, const FCollectionPropertyConstFacade &PropertyCollection, bool bTrimKinematicConstraints=false)
Definition PBDSpringConstraints.h:196
static bool IsEnabled(const FCollectionPropertyConstFacade &PropertyCollection)
Definition PBDSpringConstraints.h:191
UE_CHAOS_DECLARE_INDEXLESS_PROPERTYCOLLECTION_NAME(BendingSpringStiffness, float)
virtual ~FPBDBendingSpringConstraints() override=default
Definition PBDSpringConstraints.h:95
FPBDEdgeSpringConstraints(const FSolverParticles &Particles, int32 ParticleOffset, int32 ParticleCount, const TArray< TVec3< int32 > > &InConstraints, const TMap< FString, TConstArrayView< FRealSingle > > &WeightMaps, const FCollectionPropertyConstFacade &PropertyCollection, bool bTrimKinematicConstraints=false)
Definition PBDSpringConstraints.h:123
static bool IsEnabled(const FCollectionPropertyConstFacade &PropertyCollection)
Definition PBDSpringConstraints.h:97
CHAOS_API void ApplyProperties(const FSolverReal Dt, const int32 NumIterations)
Definition PBDSpringConstraints.cpp:356
UE_CHAOS_DECLARE_INDEXLESS_PROPERTYCOLLECTION_NAME(EdgeSpringStiffness, float)
CHAOS_API void SetProperties(const FCollectionPropertyConstFacade &PropertyCollection, const TMap< FString, TConstArrayView< FRealSingle > > &WeightMaps)
Definition PBDSpringConstraints.cpp:293
FPBDEdgeSpringConstraints(const FSolverParticlesRange &Particles, const TArray< TVec3< int32 > > &InConstraints, const TMap< FString, TConstArrayView< FRealSingle > > &WeightMaps, const FCollectionPropertyConstFacade &PropertyCollection, bool bTrimKinematicConstraints=false)
Definition PBDSpringConstraints.h:102
UE_CHAOS_DECLARE_INDEXLESS_PROPERTYCOLLECTION_NAME(EdgeSpringWeftScale, float)
virtual ~FPBDEdgeSpringConstraints() override=default
CHAOS_API void ResetRestLengths(const TConstArrayView< FSolverVec3 > &Positions)
Definition PBDSpringConstraints.cpp:374
UE_CHAOS_DECLARE_INDEXLESS_PROPERTYCOLLECTION_NAME(EdgeSpringWarpScale, float)
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< TVec2< int32 > > Constraints
Definition PBDSpringConstraintsBase.h:156
Definition PBDSpringConstraints.h:16
CHAOS_API TArray< int32 > InitColor(const SolverParticlesOrRange &InParticles)
FPBDSpringConstraints(const FSolverParticlesRange &Particles, const TArray< TVector< int32, Valence > > &InConstraints, const TConstArrayView< FRealSingle > &StiffnessMultipliers, const FSolverVec2 &InStiffness, bool bTrimKinematicConstraints=false, bool bInitColor=true, typename TEnableIf< Valence >=2 &&Valence<=4 >::Type *=nullptr)
Definition PBDSpringConstraints.h:19
const int32 ParticleCount
Definition PBDSpringConstraintsBase.h:159
const int32 ParticleOffset
Definition PBDSpringConstraintsBase.h:158
CHAOS_API void Apply(SolverParticlesOrRange &Particles, const FSolverReal Dt) const
FPBDSpringConstraintsBase Base
Definition PBDSpringConstraints.h:80
virtual ~FPBDSpringConstraints() override
Definition PBDSpringConstraints.h:66
FPBDSpringConstraints(const FSolverParticles &Particles, int32 InParticleOffset, int32 InParticleCount, const TArray< TVector< int32, Valence > > &InConstraints, const TConstArrayView< FRealSingle > &StiffnessMultipliers, const FSolverVec2 &InStiffness, bool bTrimKinematicConstraints=false, bool bInitColor=true, typename TEnableIf< Valence >=2 &&Valence<=4 >::Type *=nullptr)
Definition PBDSpringConstraints.h:41
const TArray< int32 > & GetConstraintsPerColorStartIndex() const
Definition PBDSpringConstraints.h:71
Definition PBDWeightMap.h:19
Definition SoftsSolverParticlesRange.h:12
Definition PBDSoftsSolverParticles.h:20
Definition Vector.h:1000
Definition Vector.h:41
Definition Array.h:670
Definition EnableIf.h:20
Definition UnrealString.h.inl:34
Definition CollectionEmbeddedSpringConstraintFacade.cpp:6
FRealSingle FSolverReal
Definition PBDSoftsEvolutionFwd.h:31
Definition SkeletalMeshComponent.h:307