UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
Chaos::Private Namespace Reference

Classes

class  FBroadPhaseContext
 
class  FBroadPhaseOverlap
 
struct  FChaosAsyncInitBodyReadScopeLock
 
struct  FChaosAsyncInitBodyWriteScopeLock
 
class  FCharacterGroundConstraintContainerSolver
 
class  FCharacterGroundConstraintSolver
 FCharacterGroundConstraintSolver class. More...
 
class  FCollisionConstraintAllocator
 An allocator and container of collision constraints that supports reuse of constraints from the previous tick. More...
 
class  FCollisionContextAllocator
 
struct  FCollisionObjects
 
class  FCollisionParticlePairKey
 
class  FCollisionShapePairKey
 
class  FCollisionSortKeyHashed
 
class  FCollisionSortKeyNonHashed
 
class  FConvexFeature
 
class  FConvexOptimizer
 The convex optimizer goal is to have a central place where implicits hierarchy could be modified in order to accelerate collision detection. More...
 
struct  FGenericPhysicsInterface_Internal
 
union  FImplicitBoundsTestFlags
 
class  FImplicitBVH
 
class  FImplicitBVHNode
 
class  FImplicitBVHObject
 
struct  FInitBodiesHelperBaseInternal
 
class  FMeshContactGenerator
 
class  FMeshContactGeneratorSettings
 
class  FMeshContactGeneratorTriangle
 
class  FOBBVectorized
 
class  FPBDCollisionContainerSolverJacobi
 
class  FPBDCollisionContainerSolverSimd
 
class  FPBDCollisionSolver
 
class  FPBDCollisionSolverHelperSimd
 
class  FPBDCollisionSolverJacobi
 
class  FPBDCollisionSolverJacobiHelper
 
class  FPBDCollisionSolverJacobiManifoldPoints
 A set of 4 manifold points in a FPBDCollisionSolver. More...
 
class  FPBDCollisionSolverManifoldPoint
 A single contact point in a FPBDCollisionSolver. More...
 
class  FPBDConstraintGroupSolver
 
class  FPBDIsland
 
class  FPBDIslandConstraint
 
class  FPBDIslandConstraintGroupSolver
 
class  FPBDIslandGroupManager
 
class  FPBDIslandManager
 
class  FPBDIslandMergeSet
 
class  FPBDIslandParticle
 
struct  FPBDParticleMomentumSq
 
class  FPBDSceneConstraintGroupSolver
 
struct  FQueryInterface_Internal
 
class  FScratchBuffer
 
class  FShapeInstanceExtended
 
class  FSimOverlapParticleShape
 
struct  FSimOverlapVisitor
 
class  FSimSweepCollectorFirstHit
 
class  FSimSweepParticleFilterBroadPhase
 
class  FSimSweepParticleHit
 
class  FSimSweepShapeFilterNarrowPhase
 
class  FSolverRealSOA
 
class  FSolverVec3SOA
 
class  FTaskDispatcherEvolution
 
class  FTaskDispatcherSolver
 
class  FTribox
 Tribox object that represents a k-DOP18 convex. More...
 
class  TABTestingConstraintContainerSolver
 
class  TChaosChunkedArray
 
class  TConvexContactPoint
 
class  THashMappedArray
 
struct  THashMappedArrayTraits
 
class  TIterationSettings
 
class  TPBDCollisionSolverManifoldPointsSimd
 A SIMD row of contact points from a set of FPBDCollisionSolverSimd. More...
 
class  TPBDCollisionSolverSimd
 
class  TPBDJointContainerSolver
 
class  TPoolBackedArray
 
struct  TPoolBackedItemAdapter
 
struct  TPullPhysicsStateDispatchHelper
 
struct  TSimdInt32
 
struct  TSimdRealf
 
struct  TSimdSelector
 
struct  TSimdValue
 
struct  TSimdVec3f
 
class  TSimSweepSQVisitor
 
struct  TSolverBodyPtrPairSimd
 

Typedefs

using FCollisionSortKey = FCollisionSortKeyNonHashed
 
using FConvexContactPoint = TConvexContactPoint< FReal >
 
using FConvexContactPointf = TConvexContactPoint< FRealSingle >
 
template<int TNumLanes>
using TConstraintPtrSimd = TSimdValue< FPBDCollisionConstraint *, TNumLanes >
 
template<int TNumLanes>
using TSolverBodyPtrSimd = TSimdValue< FSolverBody *, TNumLanes >
 
using FIterationSettings8 = TIterationSettings< int8 >
 
using FIterationSettings16 = TIterationSettings< int16 >
 
using FIterationSettings = FIterationSettings8
 
template<typename T >
using TConstraintTypeArray = TArray< T, TInlineAllocator< ConstraintGraphNumConstraintTypes > >
 
using FSimd4Realf = TSimdRealf< 4 >
 
using FSimd4Vec3f = TSimdVec3f< 4 >
 
using FSimd4Int32 = TSimdInt32< 4 >
 
using FSimd4Selector = TSimdSelector< 4 >
 

Enumerations

enum class  EConvexFeatureType : int8 { Unknown , Vertex , Edge , Plane }
 
enum class  ECollisionSolverType { GaussSeidel , GaussSeidelSimd , PartialJacobi }
 

Functions

template<typename TContainer , typename THit >
void LowLevelRaycast (const TContainer &Container, const FVector &Start, const FVector &Dir, float DeltaMag, FPhysicsHitCallback< THit > &HitBuffer, EHitFlags OutputFlags, FQueryFlags QueryFlags, const FCollisionFilterData &Filter, const ChaosInterface::FQueryFilterData &QueryFilterData, ICollisionQueryFilterCallbackBase *QueryCallback, const ChaosInterface::FQueryDebugParams &DebugParams={})
 
template<typename TContainer , typename THit >
void LowLevelSweep (const TContainer &Container, const FPhysicsGeometry &Geom, const FTransform &StartTM, const FVector &Dir, float DeltaMag, FPhysicsHitCallback< THit > &HitBuffer, EHitFlags OutputFlags, FQueryFlags QueryFlags, const FCollisionFilterData &Filter, const ChaosInterface::FQueryFilterData &QueryFilterData, ICollisionQueryFilterCallbackBase *QueryCallback, const ChaosInterface::FQueryDebugParams &DebugParams={})
 
template<typename TContainer , typename THit >
void LowLevelOverlap (const TContainer &Container, const FPhysicsGeometry &Geom, const FTransform &GeomPose, FPhysicsHitCallback< THit > &HitBuffer, FQueryFlags QueryFlags, const FCollisionFilterData &Filter, const ChaosInterface::FQueryFilterData &QueryFilterData, ICollisionQueryFilterCallbackBase *QueryCallback, const ChaosInterface::FQueryDebugParams &DebugParams={})
 
template<typename ConvexType >
void ConvexTriangleManifoldFromContact (const ConvexType &Convex, const FTriangle &Triangle, const FVec3 &TriangleNormal, const FConvexContactPoint &Contact, const FReal CullDistance, FContactPointManifold &OutManifold)
 
template void ConvexTriangleManifoldFromContact (const FImplicitConvex3 &Convex, const FTriangle &Triangle, const FVec3 &TriangleNormal, const FConvexContactPoint &Contact, const FReal CullDistance, FContactPointManifold &OutManifold)
 
template void ConvexTriangleManifoldFromContact (const TImplicitObjectInstanced< FImplicitConvex3 > &Convex, const FTriangle &Triangle, const FVec3 &TriangleNormal, const FConvexContactPoint &Contact, const FReal CullDistance, FContactPointManifold &OutManifold)
 
template void ConvexTriangleManifoldFromContact (const TImplicitObjectScaled< FImplicitConvex3 > &Convex, const FTriangle &Triangle, const FVec3 &TriangleNormal, const FConvexContactPoint &Contact, const FReal CullDistance, FContactPointManifold &OutManifold)
 
template void ConvexTriangleManifoldFromContact (const FImplicitBox3 &Convex, const FTriangle &Triangle, const FVec3 &TriangleNormal, const FConvexContactPoint &Contact, const FReal CullDistance, FContactPointManifold &OutManifold)
 
template void ConvexTriangleManifoldFromContact (const TImplicitObjectScaled< FImplicitBox3 > &Convex, const FTriangle &Triangle, const FVec3 &TriangleNormal, const FConvexContactPoint &Contact, const FReal CullDistance, FContactPointManifold &OutManifold)
 
template void ConvexTriangleManifoldFromContact (const TImplicitObjectInstanced< FImplicitBox3 > &Convex, const FTriangle &Triangle, const FVec3 &TriangleNormal, const FConvexContactPoint &Contact, const FReal CullDistance, FContactPointManifold &OutManifold)
 
template<typename ConvexType >
bool ConvexTriangleContactPoint (const ConvexType &Convex, const FTriangle &Triangle, const FVec3 &TriangleNormal, const FReal CullDistanceSq, FConvexContactPoint &OutContactPoint)
 
template bool ConvexTriangleContactPoint (const FImplicitConvex3 &Convex, const FTriangle &Triangle, const FVec3 &TriangleNormal, const FReal CullDistance, FConvexContactPoint &OutContactPoint)
 
template bool ConvexTriangleContactPoint (const TImplicitObjectInstanced< FImplicitConvex3 > &Convex, const FTriangle &Triangle, const FVec3 &TriangleNormal, const FReal CullDistance, FConvexContactPoint &OutContactPoint)
 
template bool ConvexTriangleContactPoint (const TImplicitObjectScaled< FImplicitConvex3 > &Convex, const FTriangle &Triangle, const FVec3 &TriangleNormal, const FReal CullDistance, FConvexContactPoint &OutContactPoint)
 
template bool ConvexTriangleContactPoint (const FImplicitBox3 &Convex, const FTriangle &Triangle, const FVec3 &TriangleNormal, const FReal CullDistance, FConvexContactPoint &OutContactPoint)
 
template bool ConvexTriangleContactPoint (const TImplicitObjectScaled< FImplicitBox3 > &Convex, const FTriangle &Triangle, const FVec3 &TriangleNormal, const FReal CullDistance, FConvexContactPoint &OutContactPoint)
 
template bool ConvexTriangleContactPoint (const TImplicitObjectInstanced< FImplicitBox3 > &Convex, const FTriangle &Triangle, const FVec3 &TriangleNormal, const FReal CullDistance, FConvexContactPoint &OutContactPoint)
 
template<typename ConvexType >
bool FindClosestFeatures (const ConvexType &Convex, const FTriangle &Triangle, const FVec3 &TriangleNormal, const FVec3 &ConvexRelativeMovement, const FReal CullDistance, FConvexContactPoint &OutContactPoint)
 
template<>
bool FindClosestFeatures (const FImplicitSphere3 &Convex, const FTriangle &Triangle, const FVec3 &TriangleNormal, const FVec3 &ConvexRelativeMovement, const FReal CullDistance, FConvexContactPoint &OutContactPoint)
 
template bool FindClosestFeatures (const FImplicitConvex3 &Convex, const FTriangle &Triangle, const FVec3 &TriangleNormal, const FVec3 &ConvexRelativeMovement, const FReal CullDistance, FConvexContactPoint &OutContact)
 
template bool FindClosestFeatures (const TImplicitObjectInstanced< FImplicitConvex3 > &Convex, const FTriangle &Triangle, const FVec3 &TriangleNormal, const FVec3 &ConvexRelativeMovement, const FReal CullDistance, FConvexContactPoint &OutContact)
 
template bool FindClosestFeatures (const TImplicitObjectScaled< FImplicitConvex3 > &Convex, const FTriangle &Triangle, const FVec3 &TriangleNormal, const FVec3 &ConvexRelativeMovement, const FReal CullDistance, FConvexContactPoint &OutContact)
 
template bool FindClosestFeatures (const FImplicitBox3 &Convex, const FTriangle &Triangle, const FVec3 &TriangleNormal, const FVec3 &ConvexRelativeMovement, const FReal CullDistance, FConvexContactPoint &OutContact)
 
template bool FindClosestFeatures (const TImplicitObjectScaled< FImplicitBox3 > &Convex, const FTriangle &Triangle, const FVec3 &TriangleNormal, const FVec3 &ConvexRelativeMovement, const FReal CullDistance, FConvexContactPoint &OutContact)
 
template bool FindClosestFeatures (const TImplicitObjectInstanced< FImplicitBox3 > &Convex, const FTriangle &Triangle, const FVec3 &TriangleNormal, const FVec3 &ConvexRelativeMovement, const FReal CullDistance, FConvexContactPoint &OutContact)
 
FORCEINLINE_DEBUGGABLE void UpdateCollisionSolverContactPointFromConstraint (Private::FPBDCollisionSolverJacobi &Solver, const int32 SolverPointIndex, const FPBDCollisionConstraint *Constraint, const int32 ConstraintPointIndex, const FRealSingle Dt, const FSolverBody &Body0, const FSolverBody &Body1)
 
FORCEINLINE_DEBUGGABLE void UpdateCollisionSolverManifoldFromConstraint (Private::FPBDCollisionSolverJacobi &Solver, const FPBDCollisionConstraint *Constraint, const FSolverReal Dt, const int32 ConstraintPointBeginIndex, const int32 ConstraintPointEndIndex)
 
FORCEINLINE_DEBUGGABLE void UpdateCollisionSolverFromConstraint (Private::FPBDCollisionSolverJacobi &Solver, const FPBDCollisionConstraint *Constraint, const FSolverReal Dt, const FPBDCollisionSolverSettings &SolverSettings, bool &bOutPerIterationCollision)
 
FORCEINLINE_DEBUGGABLE void UpdateCollisionConstraintFromSolver (FPBDCollisionConstraint *Constraint, const Private::FPBDCollisionSolverJacobi &Solver, const FSolverReal Dt)
 
template<int TNumLanes>
void UpdateSolverManifoldPointFromConstraint (const int32 ManifoldPointIndex, TPBDCollisionSolverSimd< 4 > &Solvers, TConstraintPtrSimd< 4 > &Constraints, TSolverBodyPtrPairSimd< 4 > &Bodies, const TArrayView< TPBDCollisionSolverManifoldPointsSimd< TNumLanes > > &ManifoldPointsBuffer, const FRealSingle Dt)
 
template<int TNumLanes>
void UpdateSolverManifoldPointsFromConstraint (TPBDCollisionSolverSimd< 4 > &Solvers, TConstraintPtrSimd< 4 > &Constraints, TSolverBodyPtrPairSimd< 4 > &Bodies, const TArrayView< TPBDCollisionSolverManifoldPointsSimd< TNumLanes > > &ManifoldPointsBuffer, const FSolverReal Dt, const int32 ManifoldPointBeginIndex, const int32 ManifoldPointEndIndex)
 
template<int TNumLanes>
void UpdateSolverFromConstraint (TPBDCollisionSolverSimd< 4 > &Solvers, TConstraintPtrSimd< 4 > &Constraints, TSolverBodyPtrPairSimd< 4 > &Bodies, const TArrayView< TPBDCollisionSolverManifoldPointsSimd< TNumLanes > > &ManifoldPointsBuffer, const FSolverReal Dt, const FPBDCollisionSolverSettings &SolverSettings, bool &bOutPerIterationCollision)
 
template<int TNumLanes>
void UpdateConstraintFromSolver (TConstraintPtrSimd< 4 > &Constraints, TPBDCollisionSolverSimd< 4 > &Solvers, TSolverBodyPtrPairSimd< 4 > &Bodies, const TArrayView< TPBDCollisionSolverManifoldPointsSimd< TNumLanes > > &ManifoldPointsBuffer, const FSolverReal Dt)
 
FORCEINLINE void PrefetchSolvePosition (const int32 Index, const TArrayView< TPBDCollisionSolverSimd< 4 > > &Solvers, const TArrayView< TPBDCollisionSolverManifoldPointsSimd< 4 > > &ManifoldPoints, const TArrayView< TSolverBodyPtrPairSimd< 4 > > &Bodies)
 
FORCEINLINE void PrefetchSolveVelocity (const int32 Index, const TArrayView< TPBDCollisionSolverSimd< 4 > > &Solvers, const TArrayView< TPBDCollisionSolverManifoldPointsSimd< 4 > > &ManifoldPoints, const TArrayView< TSolverBodyPtrPairSimd< 4 > > &Bodies)
 
bool SimSweepParticleFirstHit (ISpatialAcceleration< FAccelerationStructureHandle, FReal, 3 > *SpatialAcceleration, FIgnoreCollisionManager *InIgnoreCollisionManager, const FGeometryParticleHandle *SweptParticle, const FVec3 &StartPos, const FRotation3 &Rot, const FVec3 &Dir, const FReal Length, FSimSweepParticleHit &OutHit, const FReal InHitDistanceEqualTolerance)
 
bool SimOverlapBoundsAll (ISpatialAcceleration< FAccelerationStructureHandle, FReal, 3 > *SpatialAcceleration, const FAABB3 &QueryBounds, TArray< FSimOverlapParticleShape > &Overlaps)
 
 DECLARE_CYCLE_STAT (TEXT("Collisions::BuildConvexShapes"), STAT_BuildConvexShapes, STATGROUP_ChaosCollision)
 
FORCEINLINE void InvalidateCachedTriboxes (FConvexOptimizer::FTriboxNodes &RootTriboxes)
 
 DECLARE_CYCLE_STAT (TEXT("Collisions::ResizeCachedTriboxes"), STAT_ResizeCachedTriboxes, STATGROUP_ChaosCollision)
 
FORCEINLINE void ResizeCachedTriboxes (FConvexOptimizer::FTriboxNodes &RootTriboxes)
 
 DECLARE_CYCLE_STAT (TEXT("Collisions::BuildConvexTriboxes"), STAT_BuildConvexTriboxes, STATGROUP_ChaosCollision)
 
FORCEINLINE void BuildConvexTriboxes (const Chaos::FImplicitObjectUnionPtr &UnionGeometry, const FShapesArray &UnionShapes, TUniquePtr< Private::FCollisionObjects > &CollisionObjects, FConvexOptimizer::FTriboxNodes &RootTriboxes, int32 &NextConvexId, const TBitArray<> &bOptimizeConvexes)
 
 DECLARE_CYCLE_STAT (TEXT("Collisions::BuildUnionConnectivity"), STAT_BuildUnionConnectivity, STATGROUP_ChaosCollision)
 
 DECLARE_CYCLE_STAT (TEXT("Collisions::MergeConnectedShapes"), STAT_MergeConnectedShapes, STATGROUP_ChaosCollision)
 
void VisitCollisionObjects (const FConvexOptimizer *ConvexOptimizer, const FImplicitObject *ImplicitObject, const FImplicitHierarchyVisitor &VisitorFunc)
 
void VisitOverlappingObjects (const FConvexOptimizer *ConvexOptimizer, const FImplicitObject *ImplicitObject, const FAABB3 &LocalBounds, const FImplicitHierarchyVisitor &VisitorFunc)
 
FChaosArchiveoperator<< (FChaosArchive &Ar, FImplicitBVH &BVH)
 
FChaosArchiveoperator<< (FChaosArchive &Ar, FImplicitBVHObject &BVHObject)
 
bool IsParticleDynamic (const FGeometryParticleHandle *Particle)
 
bool IsParticleSleeping (const FGeometryParticleHandle *Particle)
 
bool WasParticleAsleep (const FGeometryParticleHandle *Particle)
 
bool IsParticleMoving (const FGeometryParticleHandle *Particle)
 
bool ParticlesIslandNeedsResim (const FGeometryParticleHandle *Particle)
 
bool GetIslandParticleSleepThresholds (const FGeometryParticleHandle *Particle, const TArrayCollectionArray< TSerializablePtr< FChaosPhysicsMaterial > > *PhysicsMaterials, const TArrayCollectionArray< TUniquePtr< FChaosPhysicsMaterial > > *PerParticlePhysicsMaterials, const THandleArray< FChaosPhysicsMaterial > *SimMaterials, FRealSingle &OutSleepLinearThreshold, FRealSingle &OutSleepAngularThreshold, int &OutSleepCounterThreshold, FRealSingle &OutWakeLinearThreshold, FRealSingle &OutWakeAngularThreshold)
 
bool GetIsolatedParticleSleepThresholds (const FGeometryParticleHandle *Particle, const TArrayCollectionArray< TSerializablePtr< FChaosPhysicsMaterial > > *PhysicsMaterials, const TArrayCollectionArray< TUniquePtr< FChaosPhysicsMaterial > > *PerParticlePhysicsMaterials, const THandleArray< FChaosPhysicsMaterial > *SimMaterials, FRealSingle &OutSleepLinearThreshold, FRealSingle &OutSleepAngularThreshold, int &OutSleepCounterThreshold)
 
bool GetParticleDisableThresholds (const FGeometryParticleHandle *Particle, const TArrayCollectionArray< TSerializablePtr< FChaosPhysicsMaterial > > *PhysicsMaterials, const TArrayCollectionArray< TUniquePtr< FChaosPhysicsMaterial > > *PerParticlePhysicsMaterials, const THandleArray< FChaosPhysicsMaterial > *SimMaterials, FRealSingle &OutDisableLinearThreshold, FRealSingle &OutDisableAngularThreshold)
 
template<typename TRigidParticleHandle >
void InitParticleSleepMetrics (TRigidParticleHandle &Rigid, FReal Dt)
 
template<typename TRigidParticleHandle >
void UpdateParticleSleepMetrics (TRigidParticleHandle &Rigid, FReal Dt)
 
void ValidateWakeQueues (TArray< FPBDIslandParticle * > &NodeQueue, TArray< FPBDParticleMomentumSq > &MomentumQueue)
 
FGeometryParticleHandleGetJointParticle (FPBDJointConstraints &Constraints, const int32 ContainerConstraintIndex, const int32 ParticleIndex)
 
const FRigidTransform3GetJointFrame (FPBDJointConstraints &Constraints, const int32 ContainerConstraintIndex, const int32 ParticleIndex)
 
FReal GetJointShockPropagationInvMassScale (const FConstraintSolverBody &Body0, const FConstraintSolverBody &Body1, const FPBDJointSolverSettings &Settings, const FPBDJointSettings &JointSettings, const int32 It, const int32 NumIts)
 
FReal GetJointIterationStiffness (const FPBDJointSolverSettings &Settings, int32 It, int32 NumIts)
 
bool GetJointShouldBreak (const FPBDJointSettings &JointSettings, const FReal Dt, const FVec3 &LinearImpulse, const FVec3 &AngularImpulse)
 
bool GetJointIsViolating (const FPBDJointSettings &JointSettings, const FReal LinearViolationSq, const FReal AngularViolation, const int32 It, const int32 NumIts)
 
template<typename SolverType >
void AddBodiesImpl (const TPBDJointContainerSolver< SolverType > &Container, const TArray< int32 > &SolverGlobalIndices, FSolverBodyContainer &SolverBodyContainer, TArray< SolverType > &Solvers)
 
template<typename SolverType >
void GatherInputImpl (const TPBDJointContainerSolver< SolverType > &Container, TArray< SolverType > &Solvers, const TArray< int32 > &SolverGlobalIndices, const FReal Dt, const int32 SolverConstraintBeginIndex, const int32 SolverConstraintEndIndex, const bool bUseLinearSolver)
 
template<typename SolverType >
void ScatterOutputImpl (const TPBDJointContainerSolver< SolverType > &Container, TArray< SolverType > &Solvers, const TArray< int32 > &SolverGlobalIndices, const FReal Dt, const int32 SolverConstraintBeginIndex, const int32 SolverConstraintEndIndex, const bool bUseLinearSolver)
 
template<typename SolverType >
void ApplyPositionConstraintsImpl (const TPBDJointContainerSolver< SolverType > &Container, TArray< SolverType > &Solvers, const FReal Dt, const int32 It, const int32 NumIts)
 
template<typename SolverType >
void ApplyVelocityConstraintsImpl (const TPBDJointContainerSolver< SolverType > &Container, TArray< SolverType > &Solvers, const FReal Dt, const int32 It, const int32 NumIts)
 
const FChaosPhysicsMaterialGetPhysicsMaterial (const TGeometryParticleHandle< FReal, 3 > *Particle, const FShapeInstance *Shape, const int32 ShapeFaceIndex, const TArrayCollectionArray< TSerializablePtr< FChaosPhysicsMaterial > > *PhysicsMaterials, const TArrayCollectionArray< TUniquePtr< FChaosPhysicsMaterial > > *PerParticlePhysicsMaterials, const THandleArray< FChaosPhysicsMaterial > *const SimMaterials)
 
const FChaosPhysicsMaterialGetFirstPhysicsMaterial (const TGeometryParticleHandle< FReal, 3 > *Particle, const TArrayCollectionArray< TSerializablePtr< FChaosPhysicsMaterial > > *PhysicsMaterials, const TArrayCollectionArray< TUniquePtr< FChaosPhysicsMaterial > > *PerParticlePhysicsMaterials, const THandleArray< FChaosPhysicsMaterial > *const SimMaterials)
 
FChaosVDParticleDataWrapper ExtractParticleDataFromBuffer (FSerializedDataBuffer &InSerializedData)
 
template<typename ParticleType >
void WriteParticleDataToBuffer (ParticleType *InParticle, FSerializedDataBuffer &OutSerializedData)
 
FChaosVDJointConstraint ExtractJointConstraintDataFromBuffer (FSerializedDataBuffer &InSerializedData)
 
 DECLARE_CYCLE_STAT (TEXT("Collisions::AddConvex"), STAT_AddConvexToTribox, STATGROUP_ChaosCollision)
 
FORCEINLINE void CompressFaces (TArray< TArray< int32 > > &FaceIndices)
 
 DECLARE_CYCLE_STAT (TEXT("Collisions::MakeConvex"), STAT_MakeTriboxConvex, STATGROUP_ChaosCollision)
 
EImplicitObjectType GetImplicitCollisionType (const FGeometryParticleHandle *Particle, const FImplicitObject *Implicit)
 
FImplicitBoundsTestFlags CalculateImplicitBoundsTestFlags (FGeometryParticleHandle *Particle0, const FImplicitObject *Implicit0, const FPerShapeData *Shape0, FGeometryParticleHandle *Particle1, const FImplicitObject *Implicit1, const FPerShapeData *Shape1, FRealSingle &OutDistanceCheckSize)
 
template<typename ConvexType >
void ProjectOntoAxis (const ConvexType &Convex, const FVec3 &AxisN, const FVec3 &AxisX, FReal &PMin, FReal &PMax, int32 &MinVertexIndex, int32 &MaxVertexIndex, TArrayView< FReal > *VertexDs)
 
void ProjectOntoAxis (const FTriangle &Triangle, const FVec3 &AxisN, const FVec3 &AxisX, FReal &PMin, FReal &PMax, int32 &MinVertexIndex, int32 &MaxVertexIndex)
 
void ProjectOntoAxis (const FCapsule &Capsule, const FVec3 &AxisN, const FVec3 &AxisX, FReal &PMin, FReal &PMax, int32 &MinVertexIndex, int32 &MaxVertexIndex)
 
template<typename ConvexType >
bool GetConvexFeature (const ConvexType &Convex, const FVec3 &Position, const FVec3 &Normal, Private::FConvexFeature &OutFeature)
 
bool GetTriangleFeature (const FTriangle &Triangle, const FVec3 &TriangleNormal, const FVec3 &Position, const FVec3 &Normal, Private::FConvexFeature &OutFeature)
 
template<typename RealType >
bool IsOnMinkowskiSumConvexConvex (const TVec3< RealType > &A, const TVec3< RealType > &B, const TVec3< RealType > &C, const TVec3< RealType > &D, const RealType Tolerance=1.e-2f)
 
bool IsOnMinkowskiSumConvexTriangle (const FVec3 &A, const FVec3 &B, const FVec3 &BA, const FVec3 &C, const FVec3 &DC)
 
template<typename ConvexType >
CHAOS_API bool FindClosestFeatures (const ConvexType &Convex, const FTriangle &Triangle, const FVec3 &TriangleNormal, const FVec3 &ConvexRelativeMovement, const FReal CullDistance, FConvexContactPoint &OutContact)
 
template<>
CHAOS_API bool FindClosestFeatures< FImplicitSphere3 > (const FImplicitSphere3 &Convex, const FTriangle &Triangle, const FVec3 &TriangleNormal, const FVec3 &ConvexRelativeMovement, const FReal CullDistance, FConvexContactPoint &OutContactPoint)
 
template<typename ConvexType >
CHAOS_API void ConvexTriangleManifoldFromContact (const ConvexType &Convex, const FTriangle &Triangle, const FVec3 &TriangleNormal, const FConvexContactPoint &Contact, const FReal CullDistance, FContactPointManifold &OutManifold)
 
void GatherBodyPositionCorrections (const TSolverBodyPtrSimd< 4 > &Body0, const TSolverBodyPtrSimd< 4 > &Body1, TSimdVec3f< 4 > &DP0, TSimdVec3f< 4 > &DQ0, TSimdVec3f< 4 > &DP1, TSimdVec3f< 4 > &DQ1)
 
void ScatterBodyPositionCorrections (const TSimdVec3f< 4 > &DP0, const TSimdVec3f< 4 > &DQ0, const TSimdVec3f< 4 > &DP1, const TSimdVec3f< 4 > &DQ1, const TSolverBodyPtrSimd< 4 > &Body0, const TSolverBodyPtrSimd< 4 > &Body1)
 
void GatherBodyVelocities (const TSolverBodyPtrSimd< 4 > &Body0, const TSolverBodyPtrSimd< 4 > &Body1, TSimdVec3f< 4 > &V0, TSimdVec3f< 4 > &W0, TSimdVec3f< 4 > &V1, TSimdVec3f< 4 > &W1)
 
void ScatterBodyVelocities (const TSimdVec3f< 4 > &V0, const TSimdVec3f< 4 > &W0, const TSimdVec3f< 4 > &V1, const TSimdVec3f< 4 > &W1, const TSolverBodyPtrSimd< 4 > &Body0, const TSolverBodyPtrSimd< 4 > &Body1)
 
bool CalculateBodyShockPropagation (const FSolverBody &Body0, const FSolverBody &Body1, const FSolverReal ShockPropagation, FSolverReal &OutShockPropagation0, FSolverReal &OutShockPropagation1)
 
template<typename ConvexType >
bool SATConvexTriangle (const ConvexType &Convex, const FTriangle &Triangle, const FVec3 &TriangleNormal, const FReal CullDistanceSq, Private::FConvexContactPoint &OutContactPoint)
 
template<typename TParticleFilter , typename TShapeFilter , typename TOverlapCollector >
void SimOverlapBounds (ISpatialAcceleration< FAccelerationStructureHandle, FReal, 3 > *SpatialAcceleration, const FAABB3 &QueryBounds, TParticleFilter &ParticleFilter, TShapeFilter &ShapeFilter, TOverlapCollector &OverlapCollector)
 
template<typename TShapeFilter , typename THitCollector >
void SimSweepParticlePair (const FGeometryParticleHandle *SweptParticle, const FGeometryParticleHandle *OtherParticle, const FVec3 &StartPos, const FRotation3 &Rot, const FVec3 &Dir, const FReal Length, TShapeFilter &ShapeFilter, THitCollector &HitCollector)
 
template<typename TParticleFilter , typename TShapeFilter , typename THitCollector >
void SimSweepParticle (ISpatialAcceleration< FAccelerationStructureHandle, FReal, 3 > *SpatialAcceleration, const FGeometryParticleHandle *SweptParticle, const FVec3 &StartPos, const FRotation3 &Rot, const FVec3 &Dir, const FReal Length, TParticleFilter &ParticleFilter, TShapeFilter &ShapeFilter, THitCollector &HitCollector)
 
bool ParticlePairCollisionAllowed (const FGeometryParticleHandle *Particle1, const FGeometryParticleHandle *Particle2, const FIgnoreCollisionManager &IgnoreCollisionManager, const bool bIsResimming, bool &bOutSwapOrder)
 
CHAOS_API const FChaosPhysicsMaterialGetPhysicsMaterial (const FGeometryParticleHandle *Particle, const FShapeInstance *Shape, const int32 FaceIndex, const TArrayCollectionArray< TSerializablePtr< FChaosPhysicsMaterial > > *PhysicsMaterials, const TArrayCollectionArray< TUniquePtr< FChaosPhysicsMaterial > > *PerParticlePhysicsMaterials, const THandleArray< FChaosPhysicsMaterial > *const SimMaterials)
 
CHAOS_API const FChaosPhysicsMaterialGetFirstPhysicsMaterial (const FGeometryParticleHandle *Particle, const TArrayCollectionArray< TSerializablePtr< FChaosPhysicsMaterial > > *PhysicsMaterials, const TArrayCollectionArray< TUniquePtr< FChaosPhysicsMaterial > > *PerParticlePhysicsMaterials, const THandleArray< FChaosPhysicsMaterial > *const SimMaterials)
 
FORCEINLINE bool SimdAnyTrue (const FSimd4Selector &InL)
 
FORCEINLINE bool SimdAllTrue (const FSimd4Selector &InL)
 
FORCEINLINE FSimd4Selector SimdNot (const FSimd4Selector &InL)
 
FORCEINLINE FSimd4Selector SimdOr (const FSimd4Selector &InL, const FSimd4Selector &InR)
 
FORCEINLINE FSimd4Selector SimdAnd (const FSimd4Selector &InL, const FSimd4Selector &InR)
 
FORCEINLINE FSimd4Selector SimdEqual (const FSimd4Realf &InL, const FSimd4Realf &InR)
 
FORCEINLINE FSimd4Selector SimdNotEqual (const FSimd4Realf &InL, const FSimd4Realf &InR)
 
FORCEINLINE FSimd4Selector SimdGreaterEqual (const FSimd4Int32 &InL, const FSimd4Int32 &InR)
 
FORCEINLINE FSimd4Selector SimdGreaterEqual (const FSimd4Realf &InL, const FSimd4Realf &InR)
 
FORCEINLINE FSimd4Selector SimdGreater (const FSimd4Int32 &InL, const FSimd4Int32 &InR)
 
FORCEINLINE FSimd4Selector SimdGreater (const FSimd4Realf &InL, const FSimd4Realf &InR)
 
FORCEINLINE FSimd4Selector SimdLess (const FSimd4Int32 &InL, const FSimd4Int32 &InR)
 
FORCEINLINE FSimd4Selector SimdLess (const FSimd4Realf &InL, const FSimd4Realf &InR)
 
FORCEINLINE FSimd4Realf SimdSelect (const FSimd4Selector &InSelector, const FSimd4Realf &InL, const FSimd4Realf &InR)
 
FORCEINLINE FSimd4Realf SimdNegate (const FSimd4Realf &InL)
 
FORCEINLINE FSimd4Realf SimdAdd (const FSimd4Realf &InL, const FSimd4Realf &InR)
 
FORCEINLINE FSimd4Vec3f SimdAdd (const FSimd4Vec3f &L, const FSimd4Vec3f &R)
 
FORCEINLINE FSimd4Realf SimdSubtract (const FSimd4Realf &InL, const FSimd4Realf &InR)
 
FORCEINLINE FSimd4Vec3f SimdSubtract (const FSimd4Vec3f &L, const FSimd4Vec3f &R)
 
FORCEINLINE FSimd4Realf SimdMultiply (const FSimd4Realf &InL, const FSimd4Realf &InR)
 
FORCEINLINE FSimd4Vec3f SimdMultiply (const FSimd4Vec3f &L, const FSimd4Realf &InR)
 
FORCEINLINE FSimd4Vec3f SimdMultiply (const FSimd4Realf &L, const FSimd4Vec3f &R)
 
FORCEINLINE FSimd4Vec3f SimdMultiply (const FSimd4Vec3f &L, const FSimd4Vec3f &R)
 
FORCEINLINE FSimd4Vec3f SimdMultiplyAdd (const FSimd4Vec3f &L, const FSimd4Vec3f &R, const FSimd4Vec3f &Acc)
 
FORCEINLINE FSimd4Realf SimdDivide (const FSimd4Realf &InL, const FSimd4Realf &InR)
 
FORCEINLINE FSimd4Vec3f SimdCrossProduct (const FSimd4Vec3f &L, const FSimd4Vec3f &R)
 
FORCEINLINE FSimd4Realf SimdDotProduct (const FSimd4Vec3f &L, const FSimd4Vec3f &R)
 
FORCEINLINE FSimd4Realf SimdSquare (const FSimd4Realf &InV)
 
FORCEINLINE FSimd4Realf SimdSqrt (const FSimd4Realf &InV)
 
FORCEINLINE FSimd4Realf SimdInvSqrt (const FSimd4Realf &InV)
 
FORCEINLINE FSimd4Realf SimdMin (const FSimd4Realf &InL, const FSimd4Realf &InR)
 
FORCEINLINE FSimd4Realf SimdMax (const FSimd4Realf &InL, const FSimd4Realf &InR)
 
FORCEINLINE FSimd4Vec3f SimdGatherAligned (const FVec3f &InA, const FVec3f &InB, const FVec3f &InC, const FVec3f &InD)
 
FORCEINLINE VectorRegister4Float VectorDot3FastX (const VectorRegister4Float &Vec1, const VectorRegister4Float &Vec2)
 
FORCEINLINE VectorRegister4Float VectorMatrixMultiply (const VectorRegister4Float &Vec, const FMatrix33 &M)
 
FORCEINLINE VectorRegister4Float VectorCrossNoFMA (const VectorRegister4Float &Vec1, const VectorRegister4Float &Vec2)
 
FORCEINLINE VectorRegister4Double VectorCrossNoFMA (const VectorRegister4Double &Vec1, const VectorRegister4Double &Vec2)
 

Variables

FString EmptyParticleName = TEXT("<NoName>")
 
bool bEventManagerDispatchEmptyEvents = true
 
FAutoConsoleVariableRef CVarEventManagerDispatchEmptyEvent (TEXT("p.Chaos.EventManager.DispatchEmptyEvents"), bEventManagerDispatchEmptyEvents, TEXT("Whether to dispatch events even if the event buffers are empty"))
 
constexpr int32 ConstraintGraphNumConstraintTypes = 5
 

Typedef Documentation

◆ FCollisionSortKey

◆ FConvexContactPoint

◆ FConvexContactPointf

◆ FIterationSettings

◆ FIterationSettings16

◆ FIterationSettings8

◆ FSimd4Int32

◆ FSimd4Realf

◆ FSimd4Selector

◆ FSimd4Vec3f

◆ TConstraintPtrSimd

template<int TNumLanes>
using Chaos::Private::TConstraintPtrSimd = typedef TSimdValue<FPBDCollisionConstraint*, TNumLanes>

◆ TConstraintTypeArray

◆ TSolverBodyPtrSimd

template<int TNumLanes>
using Chaos::Private::TSolverBodyPtrSimd = typedef TSimdValue<FSolverBody*, TNumLanes>

Enumeration Type Documentation

◆ ECollisionSolverType

Enumerator
GaussSeidel 
GaussSeidelSimd 
PartialJacobi 

◆ EConvexFeatureType

Enumerator
Unknown 
Vertex 
Edge 
Plane 

Function Documentation

◆ AddBodiesImpl()

template<typename SolverType >
void Chaos::Private::AddBodiesImpl ( const TPBDJointContainerSolver< SolverType > &  Container,
const TArray< int32 > &  SolverGlobalIndices,
FSolverBodyContainer SolverBodyContainer,
TArray< SolverType > &  Solvers 
)

◆ ApplyPositionConstraintsImpl()

template<typename SolverType >
void Chaos::Private::ApplyPositionConstraintsImpl ( const TPBDJointContainerSolver< SolverType > &  Container,
TArray< SolverType > &  Solvers,
const FReal  Dt,
const int32  It,
const int32  NumIts 
)

◆ ApplyVelocityConstraintsImpl()

template<typename SolverType >
void Chaos::Private::ApplyVelocityConstraintsImpl ( const TPBDJointContainerSolver< SolverType > &  Container,
TArray< SolverType > &  Solvers,
const FReal  Dt,
const int32  It,
const int32  NumIts 
)

◆ BuildConvexTriboxes()

FORCEINLINE void Chaos::Private::BuildConvexTriboxes ( const Chaos::FImplicitObjectUnionPtr UnionGeometry,
const FShapesArray UnionShapes,
TUniquePtr< Private::FCollisionObjects > &  CollisionObjects,
FConvexOptimizer::FTriboxNodes RootTriboxes,
int32 NextConvexId,
const TBitArray<> &  bOptimizeConvexes 
)

◆ CalculateBodyShockPropagation()

bool Chaos::Private::CalculateBodyShockPropagation ( const FSolverBody Body0,
const FSolverBody Body1,
const FSolverReal  ShockPropagation,
FSolverReal OutShockPropagation0,
FSolverReal OutShockPropagation1 
)
inline

◆ CalculateImplicitBoundsTestFlags()

CHAOS_API FImplicitBoundsTestFlags Chaos::Private::CalculateImplicitBoundsTestFlags ( FGeometryParticleHandle Particle0,
const FImplicitObject Implicit0,
const FPerShapeData Shape0,
FGeometryParticleHandle Particle1,
const FImplicitObject Implicit1,
const FPerShapeData Shape1,
FRealSingle OutDistanceCheckSize 
)
inline

◆ CompressFaces()

FORCEINLINE void Chaos::Private::CompressFaces ( TArray< TArray< int32 > > &  FaceIndices)

◆ ConvexTriangleContactPoint() [1/7]

template<typename ConvexType >
bool Chaos::Private::ConvexTriangleContactPoint ( const ConvexType Convex,
const FTriangle Triangle,
const FVec3 TriangleNormal,
const FReal  CullDistanceSq,
FConvexContactPoint OutContactPoint 
)

◆ ConvexTriangleContactPoint() [2/7]

template bool Chaos::Private::ConvexTriangleContactPoint ( const FImplicitBox3 Convex,
const FTriangle Triangle,
const FVec3 TriangleNormal,
const FReal  CullDistance,
FConvexContactPoint OutContactPoint 
)

◆ ConvexTriangleContactPoint() [3/7]

template bool Chaos::Private::ConvexTriangleContactPoint ( const FImplicitConvex3 Convex,
const FTriangle Triangle,
const FVec3 TriangleNormal,
const FReal  CullDistance,
FConvexContactPoint OutContactPoint 
)

◆ ConvexTriangleContactPoint() [4/7]

template bool Chaos::Private::ConvexTriangleContactPoint ( const TImplicitObjectInstanced< FImplicitBox3 > &  Convex,
const FTriangle Triangle,
const FVec3 TriangleNormal,
const FReal  CullDistance,
FConvexContactPoint OutContactPoint 
)

◆ ConvexTriangleContactPoint() [5/7]

template bool Chaos::Private::ConvexTriangleContactPoint ( const TImplicitObjectInstanced< FImplicitConvex3 > &  Convex,
const FTriangle Triangle,
const FVec3 TriangleNormal,
const FReal  CullDistance,
FConvexContactPoint OutContactPoint 
)

◆ ConvexTriangleContactPoint() [6/7]

template bool Chaos::Private::ConvexTriangleContactPoint ( const TImplicitObjectScaled< FImplicitBox3 > &  Convex,
const FTriangle Triangle,
const FVec3 TriangleNormal,
const FReal  CullDistance,
FConvexContactPoint OutContactPoint 
)

◆ ConvexTriangleContactPoint() [7/7]

template bool Chaos::Private::ConvexTriangleContactPoint ( const TImplicitObjectScaled< FImplicitConvex3 > &  Convex,
const FTriangle Triangle,
const FVec3 TriangleNormal,
const FReal  CullDistance,
FConvexContactPoint OutContactPoint 
)

◆ ConvexTriangleManifoldFromContact() [1/8]

template<typename ConvexType >
void Chaos::Private::ConvexTriangleManifoldFromContact ( const ConvexType Convex,
const FTriangle Triangle,
const FVec3 TriangleNormal,
const FConvexContactPoint Contact,
const FReal  CullDistance,
FContactPointManifold OutManifold 
)

◆ ConvexTriangleManifoldFromContact() [2/8]

template<typename ConvexType >
CHAOS_API void Chaos::Private::ConvexTriangleManifoldFromContact ( const ConvexType Convex,
const FTriangle Triangle,
const FVec3 TriangleNormal,
const FConvexContactPoint Contact,
const FReal  CullDistance,
FContactPointManifold OutManifold 
)
extern

◆ ConvexTriangleManifoldFromContact() [3/8]

template void Chaos::Private::ConvexTriangleManifoldFromContact ( const FImplicitBox3 Convex,
const FTriangle Triangle,
const FVec3 TriangleNormal,
const FConvexContactPoint Contact,
const FReal  CullDistance,
FContactPointManifold OutManifold 
)

◆ ConvexTriangleManifoldFromContact() [4/8]

template void Chaos::Private::ConvexTriangleManifoldFromContact ( const FImplicitConvex3 Convex,
const FTriangle Triangle,
const FVec3 TriangleNormal,
const FConvexContactPoint Contact,
const FReal  CullDistance,
FContactPointManifold OutManifold 
)

◆ ConvexTriangleManifoldFromContact() [5/8]

template void Chaos::Private::ConvexTriangleManifoldFromContact ( const TImplicitObjectInstanced< FImplicitBox3 > &  Convex,
const FTriangle Triangle,
const FVec3 TriangleNormal,
const FConvexContactPoint Contact,
const FReal  CullDistance,
FContactPointManifold OutManifold 
)

◆ ConvexTriangleManifoldFromContact() [6/8]

template void Chaos::Private::ConvexTriangleManifoldFromContact ( const TImplicitObjectInstanced< FImplicitConvex3 > &  Convex,
const FTriangle Triangle,
const FVec3 TriangleNormal,
const FConvexContactPoint Contact,
const FReal  CullDistance,
FContactPointManifold OutManifold 
)

◆ ConvexTriangleManifoldFromContact() [7/8]

template void Chaos::Private::ConvexTriangleManifoldFromContact ( const TImplicitObjectScaled< FImplicitBox3 > &  Convex,
const FTriangle Triangle,
const FVec3 TriangleNormal,
const FConvexContactPoint Contact,
const FReal  CullDistance,
FContactPointManifold OutManifold 
)

◆ ConvexTriangleManifoldFromContact() [8/8]

template void Chaos::Private::ConvexTriangleManifoldFromContact ( const TImplicitObjectScaled< FImplicitConvex3 > &  Convex,
const FTriangle Triangle,
const FVec3 TriangleNormal,
const FConvexContactPoint Contact,
const FReal  CullDistance,
FContactPointManifold OutManifold 
)

◆ DECLARE_CYCLE_STAT() [1/7]

Chaos::Private::DECLARE_CYCLE_STAT ( TEXT("Collisions::AddConvex")  ,
STAT_AddConvexToTribox  ,
STATGROUP_ChaosCollision   
)

◆ DECLARE_CYCLE_STAT() [2/7]

Chaos::Private::DECLARE_CYCLE_STAT ( TEXT("Collisions::BuildConvexShapes")  ,
STAT_BuildConvexShapes  ,
STATGROUP_ChaosCollision   
)

◆ DECLARE_CYCLE_STAT() [3/7]

Chaos::Private::DECLARE_CYCLE_STAT ( TEXT("Collisions::BuildConvexTriboxes")  ,
STAT_BuildConvexTriboxes  ,
STATGROUP_ChaosCollision   
)

◆ DECLARE_CYCLE_STAT() [4/7]

Chaos::Private::DECLARE_CYCLE_STAT ( TEXT("Collisions::BuildUnionConnectivity")  ,
STAT_BuildUnionConnectivity  ,
STATGROUP_ChaosCollision   
)

◆ DECLARE_CYCLE_STAT() [5/7]

Chaos::Private::DECLARE_CYCLE_STAT ( TEXT("Collisions::MakeConvex")  ,
STAT_MakeTriboxConvex  ,
STATGROUP_ChaosCollision   
)

◆ DECLARE_CYCLE_STAT() [6/7]

Chaos::Private::DECLARE_CYCLE_STAT ( TEXT("Collisions::MergeConnectedShapes")  ,
STAT_MergeConnectedShapes  ,
STATGROUP_ChaosCollision   
)

◆ DECLARE_CYCLE_STAT() [7/7]

Chaos::Private::DECLARE_CYCLE_STAT ( TEXT("Collisions::ResizeCachedTriboxes")  ,
STAT_ResizeCachedTriboxes  ,
STATGROUP_ChaosCollision   
)

◆ ExtractJointConstraintDataFromBuffer()

FChaosVDJointConstraint Chaos::Private::ExtractJointConstraintDataFromBuffer ( FSerializedDataBuffer InSerializedData)

◆ ExtractParticleDataFromBuffer()

FChaosVDParticleDataWrapper Chaos::Private::ExtractParticleDataFromBuffer ( FSerializedDataBuffer InSerializedData)

◆ FindClosestFeatures() [1/9]

template<typename ConvexType >
CHAOS_API bool Chaos::Private::FindClosestFeatures ( const ConvexType Convex,
const FTriangle Triangle,
const FVec3 TriangleNormal,
const FVec3 ConvexRelativeMovement,
const FReal  CullDistance,
FConvexContactPoint OutContact 
)
extern

◆ FindClosestFeatures() [2/9]

template<typename ConvexType >
bool Chaos::Private::FindClosestFeatures ( const ConvexType Convex,
const FTriangle Triangle,
const FVec3 TriangleNormal,
const FVec3 ConvexRelativeMovement,
const FReal  CullDistance,
FConvexContactPoint OutContactPoint 
)

◆ FindClosestFeatures() [3/9]

template bool Chaos::Private::FindClosestFeatures ( const FImplicitBox3 Convex,
const FTriangle Triangle,
const FVec3 TriangleNormal,
const FVec3 ConvexRelativeMovement,
const FReal  CullDistance,
FConvexContactPoint OutContact 
)

◆ FindClosestFeatures() [4/9]

template bool Chaos::Private::FindClosestFeatures ( const FImplicitConvex3 Convex,
const FTriangle Triangle,
const FVec3 TriangleNormal,
const FVec3 ConvexRelativeMovement,
const FReal  CullDistance,
FConvexContactPoint OutContact 
)

◆ FindClosestFeatures() [5/9]

template<>
bool Chaos::Private::FindClosestFeatures ( const FImplicitSphere3 Convex,
const FTriangle Triangle,
const FVec3 TriangleNormal,
const FVec3 ConvexRelativeMovement,
const FReal  CullDistance,
FConvexContactPoint OutContactPoint 
)

◆ FindClosestFeatures() [6/9]

template bool Chaos::Private::FindClosestFeatures ( const TImplicitObjectInstanced< FImplicitBox3 > &  Convex,
const FTriangle Triangle,
const FVec3 TriangleNormal,
const FVec3 ConvexRelativeMovement,
const FReal  CullDistance,
FConvexContactPoint OutContact 
)

◆ FindClosestFeatures() [7/9]

template bool Chaos::Private::FindClosestFeatures ( const TImplicitObjectInstanced< FImplicitConvex3 > &  Convex,
const FTriangle Triangle,
const FVec3 TriangleNormal,
const FVec3 ConvexRelativeMovement,
const FReal  CullDistance,
FConvexContactPoint OutContact 
)

◆ FindClosestFeatures() [8/9]

template bool Chaos::Private::FindClosestFeatures ( const TImplicitObjectScaled< FImplicitBox3 > &  Convex,
const FTriangle Triangle,
const FVec3 TriangleNormal,
const FVec3 ConvexRelativeMovement,
const FReal  CullDistance,
FConvexContactPoint OutContact 
)

◆ FindClosestFeatures() [9/9]

template bool Chaos::Private::FindClosestFeatures ( const TImplicitObjectScaled< FImplicitConvex3 > &  Convex,
const FTriangle Triangle,
const FVec3 TriangleNormal,
const FVec3 ConvexRelativeMovement,
const FReal  CullDistance,
FConvexContactPoint OutContact 
)

◆ FindClosestFeatures< FImplicitSphere3 >()

template<>
CHAOS_API bool Chaos::Private::FindClosestFeatures< FImplicitSphere3 > ( const FImplicitSphere3 Convex,
const FTriangle Triangle,
const FVec3 TriangleNormal,
const FVec3 ConvexRelativeMovement,
const FReal  CullDistance,
FConvexContactPoint OutContactPoint 
)

◆ GatherBodyPositionCorrections()

void Chaos::Private::GatherBodyPositionCorrections ( const TSolverBodyPtrSimd< 4 > &  Body0,
const TSolverBodyPtrSimd< 4 > &  Body1,
TSimdVec3f< 4 > &  DP0,
TSimdVec3f< 4 > &  DQ0,
TSimdVec3f< 4 > &  DP1,
TSimdVec3f< 4 > &  DQ1 
)
inline

◆ GatherBodyVelocities()

void Chaos::Private::GatherBodyVelocities ( const TSolverBodyPtrSimd< 4 > &  Body0,
const TSolverBodyPtrSimd< 4 > &  Body1,
TSimdVec3f< 4 > &  V0,
TSimdVec3f< 4 > &  W0,
TSimdVec3f< 4 > &  V1,
TSimdVec3f< 4 > &  W1 
)
inline

◆ GatherInputImpl()

template<typename SolverType >
void Chaos::Private::GatherInputImpl ( const TPBDJointContainerSolver< SolverType > &  Container,
TArray< SolverType > &  Solvers,
const TArray< int32 > &  SolverGlobalIndices,
const FReal  Dt,
const int32  SolverConstraintBeginIndex,
const int32  SolverConstraintEndIndex,
const bool  bUseLinearSolver 
)

◆ GetConvexFeature()

template<typename ConvexType >
bool Chaos::Private::GetConvexFeature ( const ConvexType Convex,
const FVec3 Position,
const FVec3 Normal,
Private::FConvexFeature OutFeature 
)

◆ GetFirstPhysicsMaterial() [1/2]

CHAOS_API const FChaosPhysicsMaterial * Chaos::Private::GetFirstPhysicsMaterial ( const FGeometryParticleHandle Particle,
const TArrayCollectionArray< TSerializablePtr< FChaosPhysicsMaterial > > *  PhysicsMaterials,
const TArrayCollectionArray< TUniquePtr< FChaosPhysicsMaterial > > *  PerParticlePhysicsMaterials,
const THandleArray< FChaosPhysicsMaterial > *const  SimMaterials 
)
extern

◆ GetFirstPhysicsMaterial() [2/2]

const FChaosPhysicsMaterial * Chaos::Private::GetFirstPhysicsMaterial ( const TGeometryParticleHandle< FReal, 3 > *  Particle,
const TArrayCollectionArray< TSerializablePtr< FChaosPhysicsMaterial > > *  PhysicsMaterials,
const TArrayCollectionArray< TUniquePtr< FChaosPhysicsMaterial > > *  PerParticlePhysicsMaterials,
const THandleArray< FChaosPhysicsMaterial > *const  SimMaterials 
)

◆ GetImplicitCollisionType()

EImplicitObjectType Chaos::Private::GetImplicitCollisionType ( const FGeometryParticleHandle Particle,
const FImplicitObject Implicit 
)
inline

◆ GetIslandParticleSleepThresholds()

bool Chaos::Private::GetIslandParticleSleepThresholds ( const FGeometryParticleHandle Particle,
const TArrayCollectionArray< TSerializablePtr< FChaosPhysicsMaterial > > *  PhysicsMaterials,
const TArrayCollectionArray< TUniquePtr< FChaosPhysicsMaterial > > *  PerParticlePhysicsMaterials,
const THandleArray< FChaosPhysicsMaterial > *  SimMaterials,
FRealSingle OutSleepLinearThreshold,
FRealSingle OutSleepAngularThreshold,
int &  OutSleepCounterThreshold,
FRealSingle OutWakeLinearThreshold,
FRealSingle OutWakeAngularThreshold 
)

◆ GetIsolatedParticleSleepThresholds()

bool Chaos::Private::GetIsolatedParticleSleepThresholds ( const FGeometryParticleHandle Particle,
const TArrayCollectionArray< TSerializablePtr< FChaosPhysicsMaterial > > *  PhysicsMaterials,
const TArrayCollectionArray< TUniquePtr< FChaosPhysicsMaterial > > *  PerParticlePhysicsMaterials,
const THandleArray< FChaosPhysicsMaterial > *  SimMaterials,
FRealSingle OutSleepLinearThreshold,
FRealSingle OutSleepAngularThreshold,
int &  OutSleepCounterThreshold 
)

◆ GetJointFrame()

const FRigidTransform3 & Chaos::Private::GetJointFrame ( FPBDJointConstraints Constraints,
const int32  ContainerConstraintIndex,
const int32  ParticleIndex 
)

◆ GetJointIsViolating()

bool Chaos::Private::GetJointIsViolating ( const FPBDJointSettings JointSettings,
const FReal  LinearViolationSq,
const FReal  AngularViolation,
const int32  It,
const int32  NumIts 
)

◆ GetJointIterationStiffness()

FReal Chaos::Private::GetJointIterationStiffness ( const FPBDJointSolverSettings Settings,
int32  It,
int32  NumIts 
)

◆ GetJointParticle()

FGeometryParticleHandle * Chaos::Private::GetJointParticle ( FPBDJointConstraints Constraints,
const int32  ContainerConstraintIndex,
const int32  ParticleIndex 
)

◆ GetJointShockPropagationInvMassScale()

FReal Chaos::Private::GetJointShockPropagationInvMassScale ( const FConstraintSolverBody Body0,
const FConstraintSolverBody Body1,
const FPBDJointSolverSettings Settings,
const FPBDJointSettings JointSettings,
const int32  It,
const int32  NumIts 
)

◆ GetJointShouldBreak()

bool Chaos::Private::GetJointShouldBreak ( const FPBDJointSettings JointSettings,
const FReal  Dt,
const FVec3 LinearImpulse,
const FVec3 AngularImpulse 
)

◆ GetParticleDisableThresholds()

bool Chaos::Private::GetParticleDisableThresholds ( const FGeometryParticleHandle Particle,
const TArrayCollectionArray< TSerializablePtr< FChaosPhysicsMaterial > > *  PhysicsMaterials,
const TArrayCollectionArray< TUniquePtr< FChaosPhysicsMaterial > > *  PerParticlePhysicsMaterials,
const THandleArray< FChaosPhysicsMaterial > *  SimMaterials,
FRealSingle OutDisableLinearThreshold,
FRealSingle OutDisableAngularThreshold 
)

◆ GetPhysicsMaterial() [1/2]

CHAOS_API const FChaosPhysicsMaterial * Chaos::Private::GetPhysicsMaterial ( const FGeometryParticleHandle Particle,
const FShapeInstance Shape,
const int32  FaceIndex,
const TArrayCollectionArray< TSerializablePtr< FChaosPhysicsMaterial > > *  PhysicsMaterials,
const TArrayCollectionArray< TUniquePtr< FChaosPhysicsMaterial > > *  PerParticlePhysicsMaterials,
const THandleArray< FChaosPhysicsMaterial > *const  SimMaterials 
)
extern

◆ GetPhysicsMaterial() [2/2]

const FChaosPhysicsMaterial * Chaos::Private::GetPhysicsMaterial ( const TGeometryParticleHandle< FReal, 3 > *  Particle,
const FShapeInstance Shape,
const int32  ShapeFaceIndex,
const TArrayCollectionArray< TSerializablePtr< FChaosPhysicsMaterial > > *  PhysicsMaterials,
const TArrayCollectionArray< TUniquePtr< FChaosPhysicsMaterial > > *  PerParticlePhysicsMaterials,
const THandleArray< FChaosPhysicsMaterial > *const  SimMaterials 
)

◆ GetTriangleFeature()

bool Chaos::Private::GetTriangleFeature ( const FTriangle Triangle,
const FVec3 TriangleNormal,
const FVec3 Position,
const FVec3 Normal,
Private::FConvexFeature OutFeature 
)
inline

◆ InitParticleSleepMetrics()

void Chaos::Private::InitParticleSleepMetrics ( TRigidParticleHandle Rigid,
FReal  Dt 
)

◆ InvalidateCachedTriboxes()

FORCEINLINE void Chaos::Private::InvalidateCachedTriboxes ( FConvexOptimizer::FTriboxNodes RootTriboxes)

◆ IsOnMinkowskiSumConvexConvex()

template<typename RealType >
bool Chaos::Private::IsOnMinkowskiSumConvexConvex ( const TVec3< RealType > &  A,
const TVec3< RealType > &  B,
const TVec3< RealType > &  C,
const TVec3< RealType > &  D,
const RealType  Tolerance = 1.e-2f 
)
inline

◆ IsOnMinkowskiSumConvexTriangle()

bool Chaos::Private::IsOnMinkowskiSumConvexTriangle ( const FVec3 A,
const FVec3 B,
const FVec3 BA,
const FVec3 C,
const FVec3 DC 
)
inline

◆ IsParticleDynamic()

bool Chaos::Private::IsParticleDynamic ( const FGeometryParticleHandle Particle)

◆ IsParticleMoving()

bool Chaos::Private::IsParticleMoving ( const FGeometryParticleHandle Particle)

◆ IsParticleSleeping()

bool Chaos::Private::IsParticleSleeping ( const FGeometryParticleHandle Particle)

◆ LowLevelOverlap()

template<typename TContainer , typename THit >
void Chaos::Private::LowLevelOverlap ( const TContainer &  Container,
const FPhysicsGeometry Geom,
const FTransform GeomPose,
FPhysicsHitCallback< THit > &  HitBuffer,
FQueryFlags  QueryFlags,
const FCollisionFilterData Filter,
const ChaosInterface::FQueryFilterData QueryFilterData,
ICollisionQueryFilterCallbackBase QueryCallback,
const ChaosInterface::FQueryDebugParams DebugParams = {} 
)

◆ LowLevelRaycast()

template<typename TContainer , typename THit >
void Chaos::Private::LowLevelRaycast ( const TContainer &  Container,
const FVector Start,
const FVector Dir,
float  DeltaMag,
FPhysicsHitCallback< THit > &  HitBuffer,
EHitFlags  OutputFlags,
FQueryFlags  QueryFlags,
const FCollisionFilterData Filter,
const ChaosInterface::FQueryFilterData QueryFilterData,
ICollisionQueryFilterCallbackBase QueryCallback,
const ChaosInterface::FQueryDebugParams DebugParams = {} 
)

◆ LowLevelSweep()

template<typename TContainer , typename THit >
void Chaos::Private::LowLevelSweep ( const TContainer &  Container,
const FPhysicsGeometry Geom,
const FTransform StartTM,
const FVector Dir,
float  DeltaMag,
FPhysicsHitCallback< THit > &  HitBuffer,
EHitFlags  OutputFlags,
FQueryFlags  QueryFlags,
const FCollisionFilterData Filter,
const ChaosInterface::FQueryFilterData QueryFilterData,
ICollisionQueryFilterCallbackBase QueryCallback,
const ChaosInterface::FQueryDebugParams DebugParams = {} 
)

◆ operator<<() [1/2]

FChaosArchive & Chaos::Private::operator<< ( FChaosArchive Ar,
FImplicitBVH BVH 
)

◆ operator<<() [2/2]

FChaosArchive & Chaos::Private::operator<< ( FChaosArchive Ar,
FImplicitBVHObject BVHObject 
)

◆ ParticlePairCollisionAllowed()

bool Chaos::Private::ParticlePairCollisionAllowed ( const FGeometryParticleHandle Particle1,
const FGeometryParticleHandle Particle2,
const FIgnoreCollisionManager IgnoreCollisionManager,
const bool  bIsResimming,
bool bOutSwapOrder 
)
inline

Check whether the two particles are allowed to collide, and also whether we should flip their order.

◆ ParticlesIslandNeedsResim()

bool Chaos::Private::ParticlesIslandNeedsResim ( const FGeometryParticleHandle Particle)

◆ PrefetchSolvePosition()

FORCEINLINE void Chaos::Private::PrefetchSolvePosition ( const int32  Index,
const TArrayView< TPBDCollisionSolverSimd< 4 > > &  Solvers,
const TArrayView< TPBDCollisionSolverManifoldPointsSimd< 4 > > &  ManifoldPoints,
const TArrayView< TSolverBodyPtrPairSimd< 4 > > &  Bodies 
)

◆ PrefetchSolveVelocity()

FORCEINLINE void Chaos::Private::PrefetchSolveVelocity ( const int32  Index,
const TArrayView< TPBDCollisionSolverSimd< 4 > > &  Solvers,
const TArrayView< TPBDCollisionSolverManifoldPointsSimd< 4 > > &  ManifoldPoints,
const TArrayView< TSolverBodyPtrPairSimd< 4 > > &  Bodies 
)

◆ ProjectOntoAxis() [1/3]

template<typename ConvexType >
void Chaos::Private::ProjectOntoAxis ( const ConvexType Convex,
const FVec3 AxisN,
const FVec3 AxisX,
FReal PMin,
FReal PMax,
int32 MinVertexIndex,
int32 MaxVertexIndex,
TArrayView< FReal > *  VertexDs 
)
inline

◆ ProjectOntoAxis() [2/3]

void Chaos::Private::ProjectOntoAxis ( const FCapsule Capsule,
const FVec3 AxisN,
const FVec3 AxisX,
FReal PMin,
FReal PMax,
int32 MinVertexIndex,
int32 MaxVertexIndex 
)
inline

◆ ProjectOntoAxis() [3/3]

void Chaos::Private::ProjectOntoAxis ( const FTriangle Triangle,
const FVec3 AxisN,
const FVec3 AxisX,
FReal PMin,
FReal PMax,
int32 MinVertexIndex,
int32 MaxVertexIndex 
)
inline

◆ ResizeCachedTriboxes()

FORCEINLINE void Chaos::Private::ResizeCachedTriboxes ( FConvexOptimizer::FTriboxNodes RootTriboxes)

◆ SATConvexTriangle()

template<typename ConvexType >
bool Chaos::Private::SATConvexTriangle ( const ConvexType Convex,
const FTriangle Triangle,
const FVec3 TriangleNormal,
const FReal  CullDistanceSq,
Private::FConvexContactPoint OutContactPoint 
)

◆ ScatterBodyPositionCorrections()

void Chaos::Private::ScatterBodyPositionCorrections ( const TSimdVec3f< 4 > &  DP0,
const TSimdVec3f< 4 > &  DQ0,
const TSimdVec3f< 4 > &  DP1,
const TSimdVec3f< 4 > &  DQ1,
const TSolverBodyPtrSimd< 4 > &  Body0,
const TSolverBodyPtrSimd< 4 > &  Body1 
)
inline

◆ ScatterBodyVelocities()

void Chaos::Private::ScatterBodyVelocities ( const TSimdVec3f< 4 > &  V0,
const TSimdVec3f< 4 > &  W0,
const TSimdVec3f< 4 > &  V1,
const TSimdVec3f< 4 > &  W1,
const TSolverBodyPtrSimd< 4 > &  Body0,
const TSolverBodyPtrSimd< 4 > &  Body1 
)
inline

◆ ScatterOutputImpl()

template<typename SolverType >
void Chaos::Private::ScatterOutputImpl ( const TPBDJointContainerSolver< SolverType > &  Container,
TArray< SolverType > &  Solvers,
const TArray< int32 > &  SolverGlobalIndices,
const FReal  Dt,
const int32  SolverConstraintBeginIndex,
const int32  SolverConstraintEndIndex,
const bool  bUseLinearSolver 
)

◆ SimdAdd() [1/2]

FORCEINLINE FSimd4Realf Chaos::Private::SimdAdd ( const FSimd4Realf InL,
const FSimd4Realf InR 
)

◆ SimdAdd() [2/2]

FORCEINLINE FSimd4Vec3f Chaos::Private::SimdAdd ( const FSimd4Vec3f L,
const FSimd4Vec3f R 
)

◆ SimdAllTrue()

FORCEINLINE bool Chaos::Private::SimdAllTrue ( const FSimd4Selector InL)

◆ SimdAnd()

FORCEINLINE FSimd4Selector Chaos::Private::SimdAnd ( const FSimd4Selector InL,
const FSimd4Selector InR 
)

◆ SimdAnyTrue()

FORCEINLINE bool Chaos::Private::SimdAnyTrue ( const FSimd4Selector InL)

◆ SimdCrossProduct()

FORCEINLINE FSimd4Vec3f Chaos::Private::SimdCrossProduct ( const FSimd4Vec3f L,
const FSimd4Vec3f R 
)

◆ SimdDivide()

FORCEINLINE FSimd4Realf Chaos::Private::SimdDivide ( const FSimd4Realf InL,
const FSimd4Realf InR 
)

◆ SimdDotProduct()

FORCEINLINE FSimd4Realf Chaos::Private::SimdDotProduct ( const FSimd4Vec3f L,
const FSimd4Vec3f R 
)

◆ SimdEqual()

FORCEINLINE FSimd4Selector Chaos::Private::SimdEqual ( const FSimd4Realf InL,
const FSimd4Realf InR 
)

◆ SimdGatherAligned()

FORCEINLINE FSimd4Vec3f Chaos::Private::SimdGatherAligned ( const FVec3f InA,
const FVec3f InB,
const FVec3f InC,
const FVec3f InD 
)

◆ SimdGreater() [1/2]

FORCEINLINE FSimd4Selector Chaos::Private::SimdGreater ( const FSimd4Int32 InL,
const FSimd4Int32 InR 
)

◆ SimdGreater() [2/2]

FORCEINLINE FSimd4Selector Chaos::Private::SimdGreater ( const FSimd4Realf InL,
const FSimd4Realf InR 
)

◆ SimdGreaterEqual() [1/2]

FORCEINLINE FSimd4Selector Chaos::Private::SimdGreaterEqual ( const FSimd4Int32 InL,
const FSimd4Int32 InR 
)

◆ SimdGreaterEqual() [2/2]

FORCEINLINE FSimd4Selector Chaos::Private::SimdGreaterEqual ( const FSimd4Realf InL,
const FSimd4Realf InR 
)

◆ SimdInvSqrt()

FORCEINLINE FSimd4Realf Chaos::Private::SimdInvSqrt ( const FSimd4Realf InV)

◆ SimdLess() [1/2]

FORCEINLINE FSimd4Selector Chaos::Private::SimdLess ( const FSimd4Int32 InL,
const FSimd4Int32 InR 
)

◆ SimdLess() [2/2]

FORCEINLINE FSimd4Selector Chaos::Private::SimdLess ( const FSimd4Realf InL,
const FSimd4Realf InR 
)

◆ SimdMax()

FORCEINLINE FSimd4Realf Chaos::Private::SimdMax ( const FSimd4Realf InL,
const FSimd4Realf InR 
)

◆ SimdMin()

FORCEINLINE FSimd4Realf Chaos::Private::SimdMin ( const FSimd4Realf InL,
const FSimd4Realf InR 
)

◆ SimdMultiply() [1/4]

FORCEINLINE FSimd4Realf Chaos::Private::SimdMultiply ( const FSimd4Realf InL,
const FSimd4Realf InR 
)

◆ SimdMultiply() [2/4]

FORCEINLINE FSimd4Vec3f Chaos::Private::SimdMultiply ( const FSimd4Realf L,
const FSimd4Vec3f R 
)

◆ SimdMultiply() [3/4]

FORCEINLINE FSimd4Vec3f Chaos::Private::SimdMultiply ( const FSimd4Vec3f L,
const FSimd4Realf InR 
)

◆ SimdMultiply() [4/4]

FORCEINLINE FSimd4Vec3f Chaos::Private::SimdMultiply ( const FSimd4Vec3f L,
const FSimd4Vec3f R 
)

◆ SimdMultiplyAdd()

FORCEINLINE FSimd4Vec3f Chaos::Private::SimdMultiplyAdd ( const FSimd4Vec3f L,
const FSimd4Vec3f R,
const FSimd4Vec3f Acc 
)

◆ SimdNegate()

FORCEINLINE FSimd4Realf Chaos::Private::SimdNegate ( const FSimd4Realf InL)

◆ SimdNot()

FORCEINLINE FSimd4Selector Chaos::Private::SimdNot ( const FSimd4Selector InL)

◆ SimdNotEqual()

FORCEINLINE FSimd4Selector Chaos::Private::SimdNotEqual ( const FSimd4Realf InL,
const FSimd4Realf InR 
)

◆ SimdOr()

FORCEINLINE FSimd4Selector Chaos::Private::SimdOr ( const FSimd4Selector InL,
const FSimd4Selector InR 
)

◆ SimdSelect()

FORCEINLINE FSimd4Realf Chaos::Private::SimdSelect ( const FSimd4Selector InSelector,
const FSimd4Realf InL,
const FSimd4Realf InR 
)

◆ SimdSqrt()

FORCEINLINE FSimd4Realf Chaos::Private::SimdSqrt ( const FSimd4Realf InV)

◆ SimdSquare()

FORCEINLINE FSimd4Realf Chaos::Private::SimdSquare ( const FSimd4Realf InV)

◆ SimdSubtract() [1/2]

FORCEINLINE FSimd4Realf Chaos::Private::SimdSubtract ( const FSimd4Realf InL,
const FSimd4Realf InR 
)

◆ SimdSubtract() [2/2]

FORCEINLINE FSimd4Vec3f Chaos::Private::SimdSubtract ( const FSimd4Vec3f L,
const FSimd4Vec3f R 
)

◆ SimOverlapBounds()

void Chaos::Private::SimOverlapBounds ( ISpatialAcceleration< FAccelerationStructureHandle, FReal, 3 > *  SpatialAcceleration,
const FAABB3 QueryBounds,
TParticleFilter ParticleFilter,
TShapeFilter ShapeFilter,
TOverlapCollector OverlapCollector 
)

Produce a set of particles and their shapes that overlap the query bounds and pass the particle and shape filters.

@TParam TParticleFilter a particle that returns true to check a particle for overlaps. Signature bool(const FGeometryParticleHandle*)

@TParam TShapeFilter a shape that returns true to check a particle for overlaps. Signature bool(const FPerShapeData*, const FImplicitObject*)

@TParam TOverlapCollector an overlap collector functor with the signature void(const FSimOverlapParticleShape&)

◆ SimOverlapBoundsAll()

bool Chaos::Private::SimOverlapBoundsAll ( ISpatialAcceleration< FAccelerationStructureHandle, FReal, 3 > *  SpatialAcceleration,
const FAABB3 QueryBounds,
TArray< FSimOverlapParticleShape > &  Overlaps 
)

Collect all the shapes that overlap a bounding box.

◆ SimSweepParticle()

void Chaos::Private::SimSweepParticle ( ISpatialAcceleration< FAccelerationStructureHandle, FReal, 3 > *  SpatialAcceleration,
const FGeometryParticleHandle SweptParticle,
const FVec3 StartPos,
const FRotation3 Rot,
const FVec3 Dir,
const FReal  Length,
TParticleFilter ParticleFilter,
TShapeFilter ShapeFilter,
THitCollector HitCollector 
)

Sweep a particle against all other particles that it may hit. The particles are visited in a semi-random order, depending on how the particles are held in the spatial acceleration. The provided filter policies can be used to reject particle pairs or shape pairs. The collector policy chooses which sweep result(s) to keep.

Template Parameters
TParticleFilterA custom filter functor with the signature bool(const FGeometryParticleHandle* SweptParticle, const FGeometryParticleHandle* OtherParticle) used to accept/reject particle pairs. It should return true if the particle pair should be considered for a sweep check.
See also
FSimSweepParticleFilterBroadPhase which provides the standard broadphase filter used in collision detection.
Template Parameters
TShapeFilterA custom filter functor with the signature bool(const FPerShapeData* SweptShape, const FImplicitObject* SweptImplicit, const FPerShapeData* OtherShape, const FImplicitObject* OtherImplicit) used to accept/reject shapes pairs. It should return true if the pair should be considered for a sweep check.
See also
FSimSweepShapeFilterNarrowPhase which provides the standard narrowphase filter used in collision detection.
Template Parameters
THitCollectorA hit collector functor with signature bool(const FVec3& Dir, const FReal Length, const FSimSweepParticleHit& InHit). It should return true to continue checking further objects, or false to stop any further sweeping.
See also
FSimSweepCollectorFirstHit which keeps the hit with the lowest time of impact and the most opposing normal if there is a tie.
Parameters
SweptParticleThe particle to be swept
StartPosThe start position of the particle to be swept
RotThe rotation to use for the sweep
DirThe direction of the sweep (must be normalized)
LengthThe sweep length
ParticleFilterThe filter to use to accept/reject particle pairs
ShapeFilterThe filter to use to accept/reject shape pairs within the particle pairs
HitCollectorHits are passed to the collector one at a time in a semi-random order (i.e., they are not sorted by TOI)

◆ SimSweepParticleFirstHit()

bool Chaos::Private::SimSweepParticleFirstHit ( ISpatialAcceleration< FAccelerationStructureHandle, FReal, 3 > *  SpatialAcceleration,
FIgnoreCollisionManager IgnoreCollisionManager,
const FGeometryParticleHandle SweptParticle,
const FVec3 StartPos,
const FRotation3 Rot,
const FVec3 Dir,
const FReal  Length,
FSimSweepParticleHit OutHit,
const FReal  InHitDistanceEqualTolerance = UE_KINDA_SMALL_NUMBER 
)

Sweep a particle to find the first impact with another particle that the particle would normally collide with according to the sim filter data on the particles.

Parameters
SpatialAccelerationThe spatial acceleration structure used in the broadphase
IgnoreCollisionManagerThe ignore collision manager used in the main broadphase (or null)
SweptParticleThe particle to be swept
StartPosThe start position of the particle to be swept
RotThe rotation to use for the sweep
DirThe direction of the sweep (must be normalized)
LengthThe sweep length
OutHitOutput set to the first hit if there was one, otherwise invalidated.
Returns
true if there was a hit, otherwise false
Note
This call SimSweepParticle with the FSimSweepParticleFilterCollidable and FSimSweepShapeFilterCollidable filter policies, and the FSimSweepCollectorFirstHit hit collector. If these policies are not what you want, you can create your own policies and/or collector (e.g., to collect all hits) and use SimSweepParticle directly.

◆ SimSweepParticlePair()

void Chaos::Private::SimSweepParticlePair ( const FGeometryParticleHandle SweptParticle,
const FGeometryParticleHandle OtherParticle,
const FVec3 StartPos,
const FRotation3 Rot,
const FVec3 Dir,
const FReal  Length,
TShapeFilter ShapeFilter,
THitCollector HitCollector 
)

Sweep SweptParticle against OtherParticle. The provided filter policy can be used to reject shape pairs. The collector policy chooses which sweep results(s) to keep.

Template Parameters
TShapeFilterA custom filter functor with the signature bool(const FPerShapeData* SweptShape, const FImplicitObject* SweptImplicit, const FPerShapeData* OtherShape, const FImplicitObject* OtherImplicit) used to accept/reject shapes pairs. It should return true if the pair should be considered for a sweep check.
See also
FSimSweepShapeFilterNarrowPhase which provides the standard narrowphase filter used in collision detection.
Template Parameters
THitCollectorA hit collector functor with signature bool(const FVec3& Dir, const FReal Length, const FSimSweepParticleHit& InHit). It should return true to continue checking further objects, or false to stop any further sweeping.
See also
FSimSweepCollectorFirstHit which keeps the hit with the lowest time of impact and the most opposing normal if there is a tie.
Parameters
SweptParticleThe particle to be swept
OtherParticleThe particle to be swept against
StartPosThe start position of the particle to be swept
RotThe rotation to use for the sweep
DirThe direction of the sweep (must be normalized)
LengthThe sweep length
ShapeFilterThe filter to use to accept/reject shape pairs within the particle pairs
HitCollectorHits are passed to the collector one at a time in a random order (i.e., they are not sorted by TOI)
Note
This function does not reset the HitCollector.

◆ UpdateCollisionConstraintFromSolver()

FORCEINLINE_DEBUGGABLE void Chaos::Private::UpdateCollisionConstraintFromSolver ( FPBDCollisionConstraint Constraint,
const Private::FPBDCollisionSolverJacobi Solver,
const FSolverReal  Dt 
)

◆ UpdateCollisionSolverContactPointFromConstraint()

FORCEINLINE_DEBUGGABLE void Chaos::Private::UpdateCollisionSolverContactPointFromConstraint ( Private::FPBDCollisionSolverJacobi Solver,
const int32  SolverPointIndex,
const FPBDCollisionConstraint Constraint,
const int32  ConstraintPointIndex,
const FRealSingle  Dt,
const FSolverBody Body0,
const FSolverBody Body1 
)

◆ UpdateCollisionSolverFromConstraint()

FORCEINLINE_DEBUGGABLE void Chaos::Private::UpdateCollisionSolverFromConstraint ( Private::FPBDCollisionSolverJacobi Solver,
const FPBDCollisionConstraint Constraint,
const FSolverReal  Dt,
const FPBDCollisionSolverSettings SolverSettings,
bool bOutPerIterationCollision 
)

◆ UpdateCollisionSolverManifoldFromConstraint()

FORCEINLINE_DEBUGGABLE void Chaos::Private::UpdateCollisionSolverManifoldFromConstraint ( Private::FPBDCollisionSolverJacobi Solver,
const FPBDCollisionConstraint Constraint,
const FSolverReal  Dt,
const int32  ConstraintPointBeginIndex,
const int32  ConstraintPointEndIndex 
)

◆ UpdateConstraintFromSolver()

template<int TNumLanes>
void Chaos::Private::UpdateConstraintFromSolver ( TConstraintPtrSimd< 4 > &  Constraints,
TPBDCollisionSolverSimd< 4 > &  Solvers,
TSolverBodyPtrPairSimd< 4 > &  Bodies,
const TArrayView< TPBDCollisionSolverManifoldPointsSimd< TNumLanes > > &  ManifoldPointsBuffer,
const FSolverReal  Dt 
)

◆ UpdateParticleSleepMetrics()

void Chaos::Private::UpdateParticleSleepMetrics ( TRigidParticleHandle Rigid,
FReal  Dt 
)

◆ UpdateSolverFromConstraint()

template<int TNumLanes>
void Chaos::Private::UpdateSolverFromConstraint ( TPBDCollisionSolverSimd< 4 > &  Solvers,
TConstraintPtrSimd< 4 > &  Constraints,
TSolverBodyPtrPairSimd< 4 > &  Bodies,
const TArrayView< TPBDCollisionSolverManifoldPointsSimd< TNumLanes > > &  ManifoldPointsBuffer,
const FSolverReal  Dt,
const FPBDCollisionSolverSettings SolverSettings,
bool bOutPerIterationCollision 
)

◆ UpdateSolverManifoldPointFromConstraint()

template<int TNumLanes>
void Chaos::Private::UpdateSolverManifoldPointFromConstraint ( const int32  ManifoldPointIndex,
TPBDCollisionSolverSimd< 4 > &  Solvers,
TConstraintPtrSimd< 4 > &  Constraints,
TSolverBodyPtrPairSimd< 4 > &  Bodies,
const TArrayView< TPBDCollisionSolverManifoldPointsSimd< TNumLanes > > &  ManifoldPointsBuffer,
const FRealSingle  Dt 
)

◆ UpdateSolverManifoldPointsFromConstraint()

template<int TNumLanes>
void Chaos::Private::UpdateSolverManifoldPointsFromConstraint ( TPBDCollisionSolverSimd< 4 > &  Solvers,
TConstraintPtrSimd< 4 > &  Constraints,
TSolverBodyPtrPairSimd< 4 > &  Bodies,
const TArrayView< TPBDCollisionSolverManifoldPointsSimd< TNumLanes > > &  ManifoldPointsBuffer,
const FSolverReal  Dt,
const int32  ManifoldPointBeginIndex,
const int32  ManifoldPointEndIndex 
)

◆ ValidateWakeQueues()

void Chaos::Private::ValidateWakeQueues ( TArray< FPBDIslandParticle * > &  NodeQueue,
TArray< FPBDParticleMomentumSq > &  MomentumQueue 
)
inline

◆ VectorCrossNoFMA() [1/2]

FORCEINLINE VectorRegister4Double Chaos::Private::VectorCrossNoFMA ( const VectorRegister4Double Vec1,
const VectorRegister4Double Vec2 
)

Calculates the cross product of two vectors (XYZ components). W of the input should be 0, and will remain 0. This function is not using FMA for stability reason, rounding with FMA could cause numerical instability.

Parameters
Vec11st vector
Vec22nd vector
Returns
cross(Vec1.xyz, Vec2.xyz). W of the input should be 0, and will remain 0.

◆ VectorCrossNoFMA() [2/2]

FORCEINLINE VectorRegister4Float Chaos::Private::VectorCrossNoFMA ( const VectorRegister4Float Vec1,
const VectorRegister4Float Vec2 
)

Calculates the cross product of two vectors (XYZ components). W of the input should be 0, and will remain 0. This function is not using FMA for stability reason, rounding with FMA could cause numerical instability.

Parameters
Vec11st vector
Vec22nd vector
Returns
cross(Vec1.xyz, Vec2.xyz). W of the input should be 0, and will remain 0.

◆ VectorDot3FastX()

FORCEINLINE VectorRegister4Float Chaos::Private::VectorDot3FastX ( const VectorRegister4Float Vec1,
const VectorRegister4Float Vec2 
)

Calculates the dot product of two vectors and returns a vector with the result in the first component. W values should be set to 0 on the vector input. This function should be used with caution. Only the returned X should be read.

Parameters
Vec11st vector set with W equal to 0
Vec22nd vector set with W equal to 0
Returns
d = dot3X(Vec1.xyz0, Vec2.xyz0), VectorRegister4Float( d, ?, ?, ? )

◆ VectorMatrixMultiply()

FORCEINLINE VectorRegister4Float Chaos::Private::VectorMatrixMultiply ( const VectorRegister4Float Vec,
const FMatrix33 M 
)

◆ VisitCollisionObjects()

void Chaos::Private::VisitCollisionObjects ( const FConvexOptimizer ConvexOptimizer,
const FImplicitObject ImplicitObject,
const FImplicitHierarchyVisitor VisitorFunc 
)

◆ VisitOverlappingObjects()

void Chaos::Private::VisitOverlappingObjects ( const FConvexOptimizer ConvexOptimizer,
const FImplicitObject ImplicitObject,
const FAABB3 LocalBounds,
const FImplicitHierarchyVisitor VisitorFunc 
)

◆ WasParticleAsleep()

bool Chaos::Private::WasParticleAsleep ( const FGeometryParticleHandle Particle)

◆ WriteParticleDataToBuffer()

template<typename ParticleType >
void Chaos::Private::WriteParticleDataToBuffer ( ParticleType *  InParticle,
FSerializedDataBuffer OutSerializedData 
)

Variable Documentation

◆ bEventManagerDispatchEmptyEvents

bool Chaos::Private::bEventManagerDispatchEmptyEvents = true

◆ ConstraintGraphNumConstraintTypes

constexpr int32 Chaos::Private::ConstraintGraphNumConstraintTypes = 5
inlineconstexpr

◆ CVarEventManagerDispatchEmptyEvent

FAutoConsoleVariableRef Chaos::Private::CVarEventManagerDispatchEmptyEvent(TEXT("p.Chaos.EventManager.DispatchEmptyEvents"), bEventManagerDispatchEmptyEvents, TEXT("Whether to dispatch events even if the event buffers are empty")) ( TEXT("p.Chaos.EventManager.DispatchEmptyEvents")  ,
bEventManagerDispatchEmptyEvents  ,
TEXT("Whether to dispatch events even if the event buffers are empty"  
)

◆ EmptyParticleName

CHAOS_API FString Chaos::Private::EmptyParticleName = TEXT("<NoName>")