UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
PBDBendingConstraints.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2#pragma once
3
6
7namespace Chaos::Softs
8{
9
11{
13
14public:
19
22 const TMap<FString, TConstArrayView<FRealSingle>>& WeightMaps,
24 bool bTrimKinematicConstraints = false)
25 : Base(
29 WeightMaps.FindRef(GetBucklingRatioString(PropertyCollection, BucklingRatioName.ToString())),
31 GetRestAngleMapFromCollection(WeightMaps, PropertyCollection),
33 FSolverVec2(GetWeightedFloatBucklingRatio(PropertyCollection, 0.f)), // BucklingRatio is clamped in base class
35 GetRestAngleValueFromCollection(PropertyCollection),
44 {
45 InitColor(InParticles);
46 }
47
52 const TMap<FString, TConstArrayView<FRealSingle>>& WeightMaps,
54 bool bTrimKinematicConstraints = false)
55 : Base(
61 WeightMaps.FindRef(GetBucklingRatioString(PropertyCollection, BucklingRatioName.ToString())),
63 GetRestAngleMapFromCollection(WeightMaps, PropertyCollection),
65 FSolverVec2(GetWeightedFloatBucklingRatio(PropertyCollection, 0.f)), // BucklingRatio is clamped in base class
67 GetRestAngleValueFromCollection(PropertyCollection),
76 {
77 InitColor(InParticles);
78 }
79
118
119 UE_DEPRECATED(5.5, "Use constructor with BucklingRatioMultipliers")
146
147 virtual ~FPBDBendingConstraints() override {}
148
150
153 const TMap<FString, TConstArrayView<FRealSingle>>& WeightMaps);
154
155 template<typename SolverParticlesOrRange>
157
158 const TArray<int32>& GetConstraintsPerColorStartIndex() const { return ConstraintsPerColorStartIndex; }
159
162 const TMap<FString, TConstArrayView<FRealSingle>>& WeightMaps)
163 {
164 CalculateRestAngles(Positions, ParticleOffset, ParticleCount,
165 GetRestAngleMapFromCollection(WeightMaps, PropertyCollection),
166 GetRestAngleValueFromCollection(PropertyCollection),
168 }
169
176
177private:
178 template<typename SolverParticlesOrRange>
179 CHAOS_API void InitColor(const SolverParticlesOrRange& InParticles);
180 template<typename SolverParticlesOrRange>
181 void ApplyHelper(SolverParticlesOrRange& InParticles, const FSolverReal Dt, const int32 ConstraintIndex, const FSolverReal ExpStiffnessValue, const FSolverReal ExpBucklingValue) const;
182
183 TConstArrayView<FRealSingle> GetRestAngleMapFromCollection(
184 const TMap<FString, TConstArrayView<FRealSingle>>& WeightMaps,
186 {
188
189 switch (ConstructionType)
190 {
191 default:
193 return TConstArrayView<FRealSingle>(); // Unused
195 return WeightMaps.FindRef(GetFlatnessRatioString(PropertyCollection, FlatnessRatioName.ToString()));
197 return WeightMaps.FindRef(GetRestAngleString(PropertyCollection, RestAngleName.ToString()));
198 }
199 }
200
201 FSolverVec2 GetRestAngleValueFromCollection(const FCollectionPropertyConstFacade& PropertyCollection)
202 {
204
205 switch (ConstructionType)
206 {
207 default:
209 return FSolverVec2(0.f); // Unused
214 }
215 }
216
217 using Base::Constraints;
220 using Base::Stiffness;
223
224 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.
225
228 UE_CHAOS_DECLARE_INDEXED_PROPERTYCOLLECTION_NAME(BucklingStiffness, float);
232};
233
234} // End namespace Chaos::Softs
#define UE_CHAOS_DECLARE_INDEXED_PROPERTYCOLLECTION_NAME(PropertyName, Type)
Definition CollectionPropertyFacade.h:893
@ ForceInit
Definition CoreMiscDefines.h:155
#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
UE_INTRINSIC_CAST UE_REWRITE constexpr std::remove_reference_t< T > && MoveTemp(T &&Obj) noexcept
Definition UnrealTemplate.h:520
Definition CollectionPropertyFacade.h:49
Definition PBDBendingConstraintsBase.h:15
const int32 ParticleOffset
Definition PBDBendingConstraintsBase.h:386
ERestAngleConstructionType
Definition PBDBendingConstraintsBase.h:18
void SetProperties(const FSolverVec2 &InStiffness, const FSolverVec2 &InBucklingRatio, const FSolverVec2 &InBucklingStiffness)
Definition PBDBendingConstraintsBase.h:206
CHAOS_API void CalculateRestAngles(const TConstArrayView< FSolverVec3 > &InPositions, int32 InParticleOffset, int32 InParticleCount, const TConstArrayView< FRealSingle > &RestAngleMap, const FSolverVec2 &RestAngleValue, ERestAngleConstructionType RestAngleConstructionType)
Definition PBDBendingConstraintsBase.cpp:112
FSolverReal BucklingRatio
Definition PBDBendingConstraintsBase.h:397
FPBDStiffness Stiffness
Definition PBDBendingConstraintsBase.h:389
FPBDWeightMap BucklingRatioWeighted
Definition PBDBendingConstraintsBase.h:390
FPBDStiffness BucklingStiffness
Definition PBDBendingConstraintsBase.h:391
const int32 ParticleCount
Definition PBDBendingConstraintsBase.h:387
TArray< TVec4< int32 > > Constraints
Definition PBDBendingConstraintsBase.h:383
Definition PBDBendingConstraints.h:11
UE_CHAOS_DECLARE_INDEXLESS_PROPERTYCOLLECTION_NAME(BucklingStiffness, float)
virtual ~FPBDBendingConstraints() override
Definition PBDBendingConstraints.h:147
CHAOS_API void SetProperties(const FCollectionPropertyConstFacade &PropertyCollection, const TMap< FString, TConstArrayView< FRealSingle > > &WeightMaps)
Definition PBDBendingConstraints.cpp:72
static bool IsEnabled(const FCollectionPropertyConstFacade &PropertyCollection)
Definition PBDBendingConstraints.h:15
UE_CHAOS_DECLARE_INDEXLESS_PROPERTYCOLLECTION_NAME(RestAngle, float)
const TArray< int32 > & GetConstraintsPerColorStartIndex() const
Definition PBDBendingConstraints.h:158
FPBDBendingConstraints(const FSolverParticlesRange &InParticles, TArray< TVec4< int32 > > &&InConstraints, const TMap< FString, TConstArrayView< FRealSingle > > &WeightMaps, const FCollectionPropertyConstFacade &PropertyCollection, bool bTrimKinematicConstraints=false)
Definition PBDBendingConstraints.h:20
UE_CHAOS_DECLARE_INDEXLESS_PROPERTYCOLLECTION_NAME(FlatnessRatio, float)
UE_CHAOS_DECLARE_INDEXLESS_PROPERTYCOLLECTION_NAME(RestAngleType, int32)
UE_CHAOS_DECLARE_INDEXLESS_PROPERTYCOLLECTION_NAME(BendingElementStiffness, float)
CHAOS_API void Apply(SolverParticlesOrRange &InParticles, const FSolverReal Dt) const
FPBDBendingConstraints(const FSolverParticles &InParticles, int32 InParticleOffset, int32 InParticleCount, TArray< TVec4< int32 > > &&InConstraints, const TMap< FString, TConstArrayView< FRealSingle > > &WeightMaps, const FCollectionPropertyConstFacade &PropertyCollection, bool bTrimKinematicConstraints=false)
Definition PBDBendingConstraints.h:48
void ResetRestLengths(const TConstArrayView< FSolverVec3 > &Positions, const FCollectionPropertyConstFacade &PropertyCollection, const TMap< FString, TConstArrayView< FRealSingle > > &WeightMaps)
Definition PBDBendingConstraints.h:160
FPBDBendingConstraints(const FSolverParticles &InParticles, int32 ParticleOffset, int32 ParticleCount, TArray< TVec4< int32 > > &&InConstraints, const TConstArrayView< FRealSingle > &StiffnessMultipliers, const TConstArrayView< FRealSingle > &BucklingRatioMultipliers, const TConstArrayView< FRealSingle > &BucklingStiffnessMultipliers, const TConstArrayView< FRealSingle > &RestAngleMap, const FSolverVec2 &InStiffness, const FSolverVec2 &InBucklingRatio, const FSolverVec2 &InBucklingStiffness, const FSolverVec2 &RestAngleValue, ERestAngleConstructionType RestAngleConstructionType, bool bTrimKinematicConstraints=false)
Definition PBDBendingConstraints.h:80
UE_CHAOS_DECLARE_INDEXLESS_PROPERTYCOLLECTION_NAME(BucklingRatio, float)
Definition SoftsSolverParticlesRange.h:12
Definition PBDSoftsSolverParticles.h:20
Definition Vector.h:41
Definition Array.h:670
Definition UnrealString.h.inl:34
Definition CollectionEmbeddedSpringConstraintFacade.cpp:6
TVector< FSolverReal, 2 > FSolverVec2
Definition PBDSoftsEvolutionFwd.h:32
FRealSingle FSolverReal
Definition PBDSoftsEvolutionFwd.h:31
float FRealSingle
Definition Real.h:14
@ false
Definition radaudio_common.h:23