UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
XPBDPlanarConstraints.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2#pragma once
3
5
6namespace Chaos::Softs
7{
8 template <typename T>
10 {
11 public:
13
15
17 {
19 PhysicsParallelFor(CollisionIndices.Num(), [this, &Particles, Dt, &CollisionIndices, &CollisionTargets, &CollisionNormals](const int32 ConstraintIndex)
20 {
21 ApplySingleConstraint(Particles, Dt, ConstraintIndex, CollisionIndices[ConstraintIndex], CollisionTargets[ConstraintIndex], CollisionNormals[ConstraintIndex]);
22 });
23 }
24
26
27 void SetTolerance(const T TolIn) { Tol = TolIn; }
28
30
31 private:
32
33 void ApplySingleConstraint(FSolverParticlesRange& Particles, const T Dt, const int32 ConstraintIndex, const int32 ParticleIndex, const TVec3<T>& CollisionTarget, const TVec3<T>& CollisionNormal)
34 {
35 const TVec3<T> Diff = Particles.P(ParticleIndex) - CollisionTarget;
37 if (DiffDotNormal < Tol && Particles.InvM(ParticleIndex) != T(0.) && Stiffness>.0)
38 {
39 T Constraint = Tol - DiffDotNormal;
40 T AlphaTilde = T(1) / (Dt * Dt * Stiffness);
42 {
43 AlphaTilde = T(0);
44 }
45 T DeltaLambda = (-Constraint - AlphaTilde * LambdaArray[ConstraintIndex]) / (Particles.InvM(ParticleIndex) + AlphaTilde);
46 LambdaArray[ConstraintIndex] += DeltaLambda;
47 Particles.P(ParticleIndex) += (-DeltaLambda) * Particles.InvM(ParticleIndex) * CollisionNormal;
48 }
49 }
50
51 protected:
52 T Tol = T(.1);
56 };
57} // End namespace Chaos::Softs
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 TRACE_CPUPROFILER_EVENT_SCOPE(Name)
Definition CpuProfilerTrace.h:528
Definition SoftsSolverParticlesRange.h:12
const FSolverVec3 & P(const int32 Index) const
Definition SoftsSolverParticlesRange.h:30
FSolverReal InvM(const int32 Index) const
Definition SoftsSolverParticlesRange.h:56
Definition XPBDPlanarConstraints.h:10
TArray< T > LambdaArray
Definition XPBDPlanarConstraints.h:55
virtual ~TXPBDPlanarConstraints()
Definition XPBDPlanarConstraints.h:14
T Stiffness
Definition XPBDPlanarConstraints.h:53
void Init(const FSolverParticlesRange &InParticles, const T Dt, const int32 CollisionSize)
Definition XPBDPlanarConstraints.h:25
T StiffnessThreshold
Definition XPBDPlanarConstraints.h:54
T Tol
Definition XPBDPlanarConstraints.h:52
void SetTolerance(const T TolIn)
Definition XPBDPlanarConstraints.h:27
TXPBDPlanarConstraints()
Definition XPBDPlanarConstraints.h:12
void Apply(FSolverParticlesRange &Particles, const T Dt, const TArray< int32 > &CollisionIndices, const TArray< TVec3< T > > &CollisionTargets, const TArray< TVec3< T > > &CollisionNormals)
Definition XPBDPlanarConstraints.h:16
void SetStiffness(const T StiffnessIn)
Definition XPBDPlanarConstraints.h:29
Definition Vector.h:1000
Definition Array.h:670
void Init(const ElementType &Element, SizeType Number)
Definition Array.h:3043
Definition CollectionEmbeddedSpringConstraintFacade.cpp:6
void CHAOS_API PhysicsParallelFor(int32 InNum, TFunctionRef< void(int32)> InCallable, bool bForceSingleThreaded=false)
Definition Parallel.cpp:55