UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
XPBDAnisotropicBendingConstraints.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2#pragma once
3
7#include "ChaosStats.h"
8
9namespace Chaos
10{
11class FTriangleMesh;
12}
13
14namespace Chaos::Softs
15{
16
18{
20
21public:
22 // Stiffness is in kg cm^2 / rad^2 s^2
23 static constexpr FSolverReal MinStiffness = (FSolverReal)0; // We're not checking against MinStiffness (except when it's constant and == 0)
24 static constexpr FSolverReal MaxStiffness = (FSolverReal)1e7;
25 static constexpr FSolverReal MinDamping = (FSolverReal)0.;
26 static constexpr FSolverReal MaxDamping = (FSolverReal)1000.;
27
32
34 const FTriangleMesh& TriangleMesh,
36 const TMap<FString, TConstArrayView<FRealSingle>>& WeightMaps,
38
42 const FTriangleMesh& TriangleMesh,
44 const TMap<FString, TConstArrayView<FRealSingle>>& WeightMaps,
46
50 const FTriangleMesh& TriangleMesh,
71
73
74 template<typename SolverParticlesOrRange>
76
79 const TMap<FString, TConstArrayView<FRealSingle>>& WeightMaps);
80
81 void ApplyProperties(const FSolverReal /*Dt*/, const int32 /*NumIterations*/)
82 {
84 }
85
86 template<typename SolverParticlesOrRange>
87 CHAOS_API void Apply(SolverParticlesOrRange& Particles, const FSolverReal Dt) const;
88
89 const TArray<int32>& GetConstraintsPerColorStartIndex() const { return ConstraintsPerColorStartIndex; }
90 const TArray<FSolverVec3>& GetWarpWeftBiasBaseMultipliers() const { return WarpWeftBiasBaseMultipliers; }
91
93
95 {
98 for (int32 i = 0; i < Constraints.Num(); i++)
99 {
100 ConstraintsArray[i].SetNum(4);
101 for (int32 j = 0; j < 4; j++)
102 {
103 ConstraintsArray[i][j] = Constraints[i][j];
104 }
105 }
106 return ConstraintsArray;
107 }
108
110
113 const TMap<FString, TConstArrayView<FRealSingle>>& WeightMaps)
114 {
115 CalculateRestAngles(Positions, ParticleOffset, ParticleCount,
116 GetRestAngleMapFromCollection(WeightMaps, PropertyCollection),
117 GetRestAngleValueFromCollection(PropertyCollection),
119 }
120private:
121 template<typename SolverParticlesOrRange>
122 void InitColor(const SolverParticlesOrRange& InParticles);
123 template<bool bDampingOnly, bool bElasticOnly, typename SolverParticlesOrRange>
124 void ApplyHelper(SolverParticlesOrRange& Particles, const FSolverReal Dt, const int32 ConstraintIndex, const FSolverVec3& ExpStiffnessValues,
126
127 TArray<FSolverVec3> GenerateWarpWeftBiasBaseMultipliers(const TArray<TVec3<FVec2f>>& FaceVertexPatternPositions, const FTriangleMesh& TriangleMesh) const;
128
129 TConstArrayView<FRealSingle> GetRestAngleMapFromCollection(
130 const TMap<FString, TConstArrayView<FRealSingle>>& WeightMaps,
132 {
134
135 switch (ConstructionType)
136 {
137 default:
139 return TConstArrayView<FRealSingle>(); // Unused
143 return WeightMaps.FindRef(GetXPBDAnisoRestAngleString(PropertyCollection, XPBDAnisoRestAngleName.ToString()));
144 }
145 }
146
147 FSolverVec2 GetRestAngleValueFromCollection(const FCollectionPropertyConstFacade& PropertyCollection)
148 {
150
151 switch (ConstructionType)
152 {
153 default:
155 return FSolverVec2(0.f); // Unused
160 }
161 }
162 void ComputeGradTheta(const FSolverVec3& X0, const FSolverVec3& X1, const FSolverVec3& X2, const FSolverVec3& X3, const int32 Index, FSolverVec3& dThetadx, FSolverReal& Theta);
163
164 using Base::Constraints;
167 using Base::RestAngles;
168
169 FPBDFlatWeightMap StiffnessWarp;
170 FPBDFlatWeightMap StiffnessWeft;
171 FPBDFlatWeightMap StiffnessBias;
172 FPBDFlatWeightMap BucklingStiffnessWarp;
173 FPBDFlatWeightMap BucklingStiffnessWeft;
174 FPBDFlatWeightMap BucklingStiffnessBias;
175
176 FPBDFlatWeightMap DampingRatio;
177
178 mutable TArray<FSolverReal> Lambdas;
179 mutable TArray<FSolverReal> LambdasDamping;
180 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.
181
182#if INTEL_ISPC
183 // Constraint SOA. InitColor will initialize these. Only used if using ISPC
188
189 // Particles.X but stored per constraint.
190 // These are only copied over if using ISPC.
195#endif
196
197 TArray<FSolverVec3> WarpWeftBiasBaseMultipliers;
198
210};
211
212} // End namespace Chaos::Softs
#define UE_CHAOS_DECLARE_PROPERTYCOLLECTION_NAME(PropertyName, Type)
Definition CollectionPropertyFacade.h:969
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
Definition TriangleMesh.h:24
Definition Matrix.h:21
Definition CollectionPropertyFacade.h:49
Definition PBDBendingConstraintsBase.h:15
const int32 ParticleOffset
Definition PBDBendingConstraintsBase.h:386
ERestAngleConstructionType
Definition PBDBendingConstraintsBase.h:18
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
TArray< FSolverReal > RestAngles
Definition PBDBendingConstraintsBase.h:393
FPBDWeightMap BucklingRatioWeighted
Definition PBDBendingConstraintsBase.h:390
const int32 ParticleCount
Definition PBDBendingConstraintsBase.h:387
TArray< TVec4< int32 > > Constraints
Definition PBDBendingConstraintsBase.h:383
void ApplyValues(bool *bOutUpdated=nullptr)
Definition PBDWeightMap.h:71
Definition SoftsSolverParticlesRange.h:12
Definition PBDSoftsSolverParticles.h:20
Definition XPBDAnisotropicBendingConstraints.h:18
CHAOS_API void Init(const SolverParticlesOrRange &InParticles)
const TArray< FSolverVec3 > & GetWarpWeftBiasBaseMultipliers() const
Definition XPBDAnisotropicBendingConstraints.h:90
CHAOS_API void AddAnisotropicBendingResidualAndHessian(const FSolverParticles &Particles, const int32 ConstraintIndex, const int32 ConstraintIndexLocal, const FSolverReal Dt, TVec3< FSolverReal > &ParticleResidual, Chaos::PMatrix< FSolverReal, 3, 3 > &ParticleHessian)
Definition XPBDAnisotropicBendingConstraints.cpp:1230
const TArray< int32 > & GetConstraintsPerColorStartIndex() const
Definition XPBDAnisotropicBendingConstraints.h:89
static constexpr FSolverReal MaxStiffness
Definition XPBDAnisotropicBendingConstraints.h:24
static bool IsEnabled(const FCollectionPropertyConstFacade &PropertyCollection)
Definition XPBDAnisotropicBendingConstraints.h:28
static constexpr FSolverReal MinStiffness
Definition XPBDAnisotropicBendingConstraints.h:23
void ApplyProperties(const FSolverReal, const int32)
Definition XPBDAnisotropicBendingConstraints.h:81
static constexpr FSolverReal MinDamping
Definition XPBDAnisotropicBendingConstraints.h:25
CHAOS_API void SetProperties(const FCollectionPropertyConstFacade &PropertyCollection, const TMap< FString, TConstArrayView< FRealSingle > > &WeightMaps)
Definition XPBDAnisotropicBendingConstraints.cpp:419
virtual ~FXPBDAnisotropicBendingConstraints() override
Definition XPBDAnisotropicBendingConstraints.h:72
static constexpr FSolverReal MaxDamping
Definition XPBDAnisotropicBendingConstraints.h:26
CHAOS_API void Apply(SolverParticlesOrRange &Particles, const FSolverReal Dt) const
void ResetRestLengths(const TConstArrayView< FSolverVec3 > &Positions, const FCollectionPropertyConstFacade &PropertyCollection, const TMap< FString, TConstArrayView< FRealSingle > > &WeightMaps)
Definition XPBDAnisotropicBendingConstraints.h:111
TArray< TArray< int32 > > GetConstraintsArray() const
Definition XPBDAnisotropicBendingConstraints.h:94
CHAOS_API void AddInternalForceDifferential(const FSolverParticles &InParticles, const TArray< TVector< FSolverReal, 3 > > &DeltaParticles, TArray< TVector< FSolverReal, 3 > > &ndf)
Definition XPBDAnisotropicBendingConstraints.cpp:1271
Definition Vector.h:1000
Definition Constraints.Build.cs:6
Definition Array.h:670
void SetNum(SizeType NewNum, EAllowShrinking AllowShrinking=UE::Core::Private::AllowShrinkingByDefault< AllocatorType >())
Definition Array.h:2308
Definition UnrealString.h.inl:34
Definition CollectionEmbeddedSpringConstraintFacade.cpp:6
TVector< FSolverReal, 2 > FSolverVec2
Definition PBDSoftsEvolutionFwd.h:32
FRealSingle FSolverReal
Definition PBDSoftsEvolutionFwd.h:31
TVector< FSolverReal, 3 > FSolverVec3
Definition PBDSoftsEvolutionFwd.h:33
Definition SkeletalMeshComponent.h:307
U16 Index
Definition radfft.cpp:71