UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
PBDRigidsEvolution.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2#pragma once
3
10#include "Chaos/Transform.h"
12#include "HAL/Event.h"
15#include "Chaos/PBDRigidsSOAs.h"
20#include "Chaos/Defines.h"
23#include "RewindData.h"
25
26// Enable support for Collision Test Mode (reset particle positions and constraints every tick for debugging)
27#define CHAOS_EVOLUTION_COLLISION_TESTMODE (!UE_BUILD_TEST && !UE_BUILD_SHIPPING)
28
33
34namespace Chaos
35{
37
71
72extern CHAOS_API FBroadPhaseConfig BroadPhaseConfig;
73
75
76class FChaosArchive;
77
78template <typename TPayload, typename T, int d>
79class ISpatialAccelerationCollection;
80
110
111struct FSpatialAccelerationCacheHandle;
112
115{
116public:
118
120 {
121 AddArray(&MHasBoundingBoxes);
122 AddArray(&MBounds);
123 AddArray(&MPayloads);
124
125#if PARTICLE_ITERATOR_RANGED_FOR_CHECK
126 MDirtyValidationCount = 0;
127#endif
128 }
129
133 , MHasBoundingBoxes(MoveTemp(Other.MHasBoundingBoxes))
134 , MBounds(MoveTemp(Other.MBounds))
135 , MPayloads(MoveTemp(Other.MPayloads))
136 {
137 ResizeHelper(Other.MSize);
138 Other.MSize = 0;
139
140 AddArray(&MHasBoundingBoxes);
141 AddArray(&MBounds);
142 AddArray(&MPayloads);
143#if PARTICLE_ITERATOR_RANGED_FOR_CHECK
144 MDirtyValidationCount = 0;
145#endif
146 }
147
149 {
150 if (&Other != this)
151 {
152 MHasBoundingBoxes = MoveTemp(Other.MHasBoundingBoxes);
153 MBounds = MoveTemp(Other.MBounds);
154 MPayloads = MoveTemp(Other.MPayloads);
155 ResizeHelper(Other.MSize);
156 Other.MSize = 0;
157#if PARTICLE_ITERATOR_RANGED_FOR_CHECK
158 MDirtyValidationCount = 0;
159 ++Other.MDirtyValidationCount;
160#endif
161 }
162
163 return *this;
164 }
165
166#if PARTICLE_ITERATOR_RANGED_FOR_CHECK
167 int32 DirtyValidationCount() const { return MDirtyValidationCount; }
168#endif
169
171 {
173 IncrementDirtyValidation();
174 }
175
176 void DestroyElement(const int32 Idx)
177 {
179 IncrementDirtyValidation();
180 }
181
182 bool HasBounds(const int32 Idx) const { return MHasBoundingBoxes[Idx]; }
183 bool& HasBounds(const int32 Idx) { return MHasBoundingBoxes[Idx]; }
184
185 const FAABB3& Bounds(const int32 Idx) const { return MBounds[Idx]; }
186 FAABB3& Bounds(const int32 Idx) { return MBounds[Idx]; }
187
188 const FAccelerationStructureHandle& Payload(const int32 Idx) const { return MPayloads[Idx]; }
189 FAccelerationStructureHandle& Payload(const int32 Idx) { return MPayloads[Idx]; }
190
191private:
192 void IncrementDirtyValidation()
193 {
194#if PARTICLE_ITERATOR_RANGED_FOR_CHECK
195 ++MDirtyValidationCount;
196#endif
197 }
198
199 TArrayCollectionArray<bool> MHasBoundingBoxes;
202
203#if PARTICLE_ITERATOR_RANGED_FOR_CHECK
204 int32 MDirtyValidationCount;
205#endif
206};
207
210{
213
218
219 template <typename TPayloadType>
220 TPayloadType GetPayload(int32 Idx) const
221 {
222 return Cache->Payload(EntryIdx);
223 }
224
225 bool HasBoundingBox() const
226 {
227 return Cache->HasBounds(EntryIdx);
228 }
229
230 const FAABB3& BoundingBox() const
231 {
232 return Cache->Bounds(EntryIdx);
233 }
234
235 bool LightWeightDisabled() const { return false; }
236
237 union
238 {
239 FSpatialAccelerationCache* GeometryParticles; //using same name as particles SOA for template reuse, should probably rethink this
241 };
242
243 union
244 {
245 int32 ParticleIdx; //same name for template reasons. Not really a particle idx
247 };
248};
249
251{
252 //Create an empty acceleration collection with the desired buckets. Chaos enqueues acceleration structure operations per bucket
254
255 // Determines if bucket implements time slicing.
256 virtual bool IsBucketTimeSliced(uint16 BucketIdx) const = 0;
257
258 //Chaos creates new acceleration structures per bucket. Factory can change underlying type at runtime as well as number of buckets to AB test
260
261 //Mask indicating which bucket is active. Spatial indices in inactive buckets fallback to bucket 0. Bit 0 indicates bucket 0 is active, Bit 1 indicates bucket 1 is active, etc...
262 virtual uint8 GetActiveBucketsMask() const = 0;
263
264 //Serialize the collection in and out
266
268};
269
271{
272public:
274
281
284
286 {
287 auto NewParticles = Particles.CreateStaticParticles(NumParticles, ExistingIndices, Params);
288 for (auto& Particle : NewParticles)
289 {
290 DirtyParticle(*Particle);
291 }
292 return NewParticles;
293 }
294
296 {
297 auto NewParticles = Particles.CreateKinematicParticles(NumParticles, ExistingIndices, Params);
298 for (auto& Particle : NewParticles)
299 {
300 DirtyParticle(*Particle);
301 }
302 return NewParticles;
303 }
304
306 {
307 auto NewParticles = Particles.CreateDynamicParticles(NumParticles, ExistingIndices, Params);
308 for (auto& Particle : NewParticles)
309 {
310 DirtyParticle(*Particle);
311 }
312 return NewParticles;
313 }
314
316 {
317 auto NewParticles = Particles.CreateClusteredParticles(NumParticles, ExistingIndices, Params);
318 for (auto& Particle : NewParticles)
319 {
320 DirtyParticle(*Particle);
321 }
322 return NewParticles;
323 }
324
326 {
327 auto NewParticles = Particles.CreateGeometryCollectionParticles(NumParticles, ExistingIndices, Params);
328 for (auto& Particle : NewParticles)
329 {
330 DirtyParticle(*Particle);
331 }
332 return NewParticles;
333 }
334
340
343
345 const FPBDRigidsSOAs& GetParticles() const { return Particles; }
346
349 virtual void ResetCollisions() {};
350
363
371
379
387
395
403
411
418 {
419 // Add to the graph if necessary. Only enabled dynamic particles are added at this stage. Kinematics
420 // and statics are ignored until referenced by a constraint.
422 {
423 if (Rigid->IsDynamic() && !Rigid->Disabled())
424 {
425 IslandManager.AddParticle(Particle);
426 }
427 }
428
429 CVD_TRACE_PARTICLE(Particle);
430
431 // Flag as dirty to update the spatial query acceleration structures
432 DirtyParticle(*Particle);
433 }
434
446
451 {
452#if CHAOS_EVOLUTION_COLLISION_TESTMODE
453 TestModeParticleDisabled(Particle);
454#endif
455
456 // NOTE: kinematics must visit their graph edges to determine what islands they are in, so we must remove the
457 // particle from the graph before we disable its constraints or we don't know what island(s) to wake.
459
461 Particles.DisableParticle(Particle);
462 DisableConstraints(Particle);
464
466 {
467 // This flag is only updated for moving kinematics, so make sure
468 // we don't leave a residual value if we get enabled again
469 Rigid->ClearIsMovingKinematic();
470 }
471
472 CVD_TRACE_PARTICLE(Particle);
473 }
474
479 {
480 // Remove all constraints (collisions, joints etc) from the graph
482
483 // Destroy all the transient constraints (collisions) because the particle has changed somehow (e.g. new shapes) and they may have cached the previous state
484 // @todo(chaos): if any other types depended on geometry, they would also need to be notified here. Maybe make this more specific and tell all types...
486 }
487
489
491 {
492 for (FGeometryParticleHandle* Particle : ParticlesIn)
493 {
494 DisableParticle(Particle);
495 }
496 }
497
498 template <bool bPersistent>
500 {
502 if (AsRigid && AsRigid->Disabled())
503 {
505
506 if (AsClustered)
507 {
508 // For clustered particles, they may appear disabled but they're being driven by an internal (solver-owned) cluster parent.
509 // If this is the case we let the spatial data update with those particles, otherwise skip.
510 // Alternatively, the particle may be being driven by a cluster union. Disabled children of a cluster union should not be added
511 // to the SQ.
512 // #BGTODO consider converting MDisabled into a bitfield for multiple disable types (Disabled, DisabledDriven, etc.)
514 {
516 {
517 if (!ClusterParent->InternalCluster())
518 {
519 return true;
520 }
521
522 // We know we're an internal cluster now. If this was a GC internal proxy, we'd expect the
523 // parent's proxy to be the same as the input particle's. If this is not the case, we know
524 // we're in a cluster union.
525 if (ClusterParent->PhysicsProxy() != Particle.PhysicsProxy())
526 {
527 return true;
528 }
529 }
530 else
531 {
532 // There's probably no way we get here since if we're clustering the parent should always be a clustered.
533 ensure(false);
534 return true;
535 }
536 }
537 else
538 {
539 // Disabled cluster particle that doesn't have a parent cluster. MUST BE IGNORED.
540 return true;
541 }
542 }
543 else
544 {
545 // Disabled particles take no immediate part in sim or query so shouldn't be added to the acceleration
546 return true;
547 }
548 }
549 return false;
550 }
551
552 template <bool bPersistent>
554 {
555 ensure(Op != EPendingSpatialDataOperation::Delete); // Don't use the function to delete particles
556
557 if (IsADisableCluster(Particle))
558 {
559 return;
560 }
561
562 //only add to acceleration structure if it has collision
563 if (Particle.HasCollision() || ForceNoCollisionIntoSQ)
564 {
565 //TODO: distinguish between new particles and dirty particles - Adds and updates are treated the same right now
566 const FUniqueIdx UniqueIdx = Particle.UniqueIdx();
567 FPendingSpatialData& PendingData = InternalAccelerationQueue.Add(0, UniqueIdx);
568 PendingData.Operation = Op;
569 PendingData.AccelerationHandle = FAccelerationStructureHandle(Particle);
570 PendingData.SpatialIdx = Particle.SpatialIdx();
571
572
574 AsyncSpatialData = PendingData;
575 // ensure(AsyncSpatialData.Operation != EPendingSpatialDataOperation::Delete); // TODO: This may be hit: Potentially due to UniqueIdx reuse?
576 }
577 }
578
579 template <bool bPersistent>
581 {
582 ensure(Op != EPendingSpatialDataOperation::Delete); // Don't use the function to delete particles
583
584 if (IsADisableCluster(Particle))
585 {
586 return;
587 }
588
589 //only add to acceleration structure if it has collision
590 if (Particle.HasCollision() || ForceNoCollisionIntoSQ)
591 {
592 //TODO: distinguish between new particles and dirty particles - Adds and updates are treated the same right now
593 const FUniqueIdx UniqueIdx = Particle.UniqueIdx();
594
595
598 AsyncSpatialData.AccelerationHandle = FAccelerationStructureHandle(Particle);
599 AsyncSpatialData.SpatialIdx = Particle.SpatialIdx();
600
601 // ensure(AsyncSpatialData.Operation != EPendingSpatialDataOperation::Delete); // TODO: This may be hit: Potentially due to UniqueIdx reuse?
602 }
603 }
604
606 {
607#if CHAOS_EVOLUTION_COLLISION_TESTMODE
608 TestModeParticleDisabled(Particle);
609#endif
610
611 if (MRewindData)
612 {
613 MRewindData->RemoveObject(Particle);
614 }
615
620 Particles.DestroyParticle(Particle);
621 }
622
633
635
636 // Wake a dynamic particle and reset sleep counters for its island
638
640
642
645 {
646 if (ConstraintHandle->IsInConstraintGraph())
647 {
648 IslandManager.RemoveConstraint(ConstraintHandle);
649 }
650 }
651
654 {
655 for (FConstraintHandle* ConstraintHandle : Constraints)
656 {
657 RemoveConstraintFromConstraintGraph(ConstraintHandle);
658 }
659 }
660
669 {
671 {
672 Container->DisconnectConstraints(RemovedParticles);
673 }
674
675 for (FGeometryParticleHandle* ParticleHandle : RemovedParticles)
676 {
677 RemoveConstraintsFromConstraintGraph(ParticleHandle->ParticleConstraints());
678 ParticleHandle->ParticleConstraints().Reset();
679 }
680 }
681
690 {
692 {
693 Container->OnDisableParticle(ParticleHandle);
694 }
695
697 }
698
704 {
706 {
707 Container->OnEnableParticle(ParticleHandle);
708 }
709 }
710
715 {
716 // Remove all the constraints from the graph
718
719 // Clear all particle lists of collisions and constraints
720 // (this could be performed by the constraint containers
721 // but it would be unnecessarily expensive to remove them
722 // one by one)
723 for (auto& Particle : Particles.GetAllParticlesView())
724 {
725 Particle.ParticleConstraints().Reset();
726 Particle.ParticleCollisions().Reset();
727 }
728
729 // Remove all constraints from the containers
731 {
732 Container->ResetConstraints();
733 }
734 }
735
741
743
745
747
749
755
757 {
758 check(!Particle->AuxilaryValue(PerParticlePhysicsMaterials)); //shouldn't be setting non unique material if a unique one already exists
761 }
762
764 {
766 {
767 Container->PrepareTick();
768 }
769 }
770
772 {
774 {
775 Container->UnprepareTick();
776 }
777 }
778
779 virtual void ApplyKinematicTargets(const FReal Dt, const FReal StepFraction) {}
780
784
786
789
792
793 /* Ticks computation of acceleration structures. Normally handled by Advance, but if not advancing can be called to incrementally build structures.*/
795
796 UE_DEPRECATED(5.2, "Renamed to GetIslandManager")
797 const Private::FPBDIslandManager& GetConstraintGraph() const { return IslandManager; }
798 UE_DEPRECATED(5.2, "Renamed to GetIslandManager")
799 Private::FPBDIslandManager& GetConstraintGraph() { return IslandManager; }
800
804
805
807 const bool IsResimming() const { return bIsResim; }
808
810 const bool IsResetting() const { return bIsReset; }
811
812 void Serialize(FChaosArchive& Ar);
813
815 {
816 // NOTE: this should be thread safe since evolution has already been initialized on GT
817 FUniqueIdx Result;
818
819 // This uses thread safe atomics, so we have to do it in the open.
820 UE_AUTORTFM_OPEN { Result = Particles.GetUniqueIndices().GenerateUniqueIdx(); };
821
822 // But if we abort, we need to release the now unused index.
823 AutoRTFM::OnAbort([this, Result] { this->ReleaseUniqueIdx(Result); });
824
825 return Result;
826 }
827
829 {
830 UniqueIndicesPendingRelease.Add(UniqueIdx);
831 }
832
834 {
835 return UniqueIndicesPendingRelease.Contains(UniqueIdx) || PendingReleaseIndices.Contains(UniqueIdx);
836 }
837
845
851
856
857 void SetRewindData(FRewindData* RewindData)
858 {
859 MRewindData = RewindData;
860 }
861
863 {
864 return MRewindData;
865 }
866
870
871 virtual void SetName(const FString& InName) { EvolutionName = FSharedDebugName(InName); }
872 const FString& GetName() const { return EvolutionName.Value(); }
873
874 // Internal used only
875 UE_INTERNAL virtual void WaitIntegrationComplete() { check(false); };
876
877protected:
879 {
882 {
883 NumConstraints += Container->GetNumConstraints();
884 }
885 return NumConstraints;
886 }
887
888public:
889 template <bool bPersistent>
891 {
892 //TODO: at the moment we don't distinguish between the first time a particle is created and when it's just moved
893 // If we had this distinction we could simply remove the entry for the async queue
894 const FUniqueIdx UniqueIdx = ParticleHandle.UniqueIdx();
896
898 SpatialData.SpatialIdx = ParticleHandle.SpatialIdx();
899 SpatialData.AccelerationHandle = FAccelerationStructureHandle(ParticleHandle);
900
901 //Internal acceleration has all moves pending, so cancel them all now
903
904 //remove particle immediately for intermediate structure
905 //TODO: if we distinguished between first time adds we could avoid this. We could also make the RemoveElementFrom more strict and ensure when it fails
906 InternalAcceleration->RemoveElementFrom(SpatialData.AccelerationHandle, SpatialData.SpatialIdx);
907 }
908
909
910protected:
911
913 {
914 // If any constraint container state depends on particle state, it gets updated here.
915 // E.g., we can create constraints between close particles etc. Collision detection
916 // could be called from here, but currently is called explicitly elsewhere
917 for (FPBDConstraintContainer* ConstraintContainer : ConstraintContainers)
918 {
919 ConstraintContainer->UpdatePositionBasedState(Dt);
920 }
921 }
922
924 {
925 // Update the current state of the graph based on existing particles and constraints.
926 // Any new particles (from this tick) should have been added when they were enabled.
928
929 // Add all constraints to the graph.
930 // NOTE: in PersistentGraph mode, only new constraints need to be added and expired ones should be removed.
931 // In non-peristent mode, all constraints in awake islands are removed every tick and so all would need to be re-added here.
932 // @todo(chaos): it feels a bit inconsistent that particles are added when enabled, but constraints
933 // are added here. Currently it needs to be this way to properly support user changes to sleep state
934 // of particles, but we could probably make this cleaner.
935 for (FPBDConstraintContainer* ConstraintContainer : ConstraintContainers)
936 {
937 ConstraintContainer->AddConstraintsToGraph(GetIslandManager());
938 }
939 }
940
942 {
943 // Package the constraints and particles into islands
945 }
946
953
966
973
974 //internal thread will push into this and external thread will consume
976
977 //external thread will push into this when done with structure
978 //internal thread will pop from this to generate new structure
980
981 //the backing buffer for all acceleration structures
984
985 // Allows us to tell evolution to stop starting async tasks if we are trying to cleanup solver/evo.
987
989
991public:
992 //The latest external timestamp we consumed inputs from, assigned to evolution when solver task executes, is used to stamp output data.
994
995protected:
996
999
1002
1004
1005
1006 /*void SerializePendingMap(FChaosArchive& Ar, TMap<FGeometryParticleHandle*, FPendingSpatialData>& Map)
1007 {
1008 TArray<FGeometryParticleHandle*> Keys;
1009 if (!Ar.IsLoading())
1010 {
1011 Map.GenerateKeyArray(Keys);
1012 }
1013 Ar << AsAlwaysSerializableArray(Keys);
1014 for (auto Key : Keys)
1015 {
1016 FPendingSpatialData& PendingData = Map.FindOrAdd(Key);
1017 PendingData.Serialize(Ar);
1018 }
1019 //TODO: fix serialization
1020 }*/
1021
1024
1026
1028
1062
1064
1067
1068 void ReleaseIdx(FUniqueIdx Idx);
1069 void ReleasePendingIndices();
1070
1071 TArray<FUniqueIdx> PendingReleaseIndices; //for now just assume a one frame delay, but may need something more general
1072 bool bIsResim = false;
1073 bool bIsReset = false;
1074
1075 // Useful name for debugging. E.g., Indicates whether we are on client or server
1077
1078#if CHAOS_EVOLUTION_COLLISION_TESTMODE
1079 // Test Mode for Collision issues (resets particle positions every tick for repeatable testing)
1087
1089 {
1092 };
1094#endif
1095};
1096
1097
1098}
OODEFFUNC typedef void(OODLE_CALLBACK t_fp_OodleCore_Plugin_Free)(void *ptr)
#define FORCEINLINE
Definition AndroidPlatform.h:140
#define check(expr)
Definition AssertionMacros.h:314
#define ensure( InExpression)
Definition AssertionMacros.h:464
#define CVD_TRACE_PARTICLE(ParticleHandle)
Definition ChaosVDTraceMacros.h:230
@ INDEX_NONE
Definition CoreMiscDefines.h:150
#define UE_INTERNAL
Definition CoreMiscDefines.h:345
#define FORCEINLINE_DEBUGGABLE
Definition CoreMiscDefines.h:74
#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
@ Num
Definition MetalRHIPrivate.h:234
int32 ChaosNumPushOutIterationsOverride
Definition PBDRigidsEvolution.cpp:20
int32 ChaosRigidsEvolutionApplyAllowEarlyOutCVar
Definition PBDRigidsEvolution.cpp:14
int32 ChaosNumContactIterationsOverride
Definition PBDRigidsEvolution.cpp:23
int32 ChaosRigidsEvolutionApplyPushoutAllowEarlyOutCVar
Definition PBDRigidsEvolution.cpp:17
UE_INTRINSIC_CAST UE_REWRITE constexpr std::remove_reference_t< T > && MoveTemp(T &&Obj) noexcept
Definition UnrealTemplate.h:520
uint8_t uint8
Definition binka_ue_file_header.h:8
uint16_t uint16
Definition binka_ue_file_header.h:7
Definition ParticleHandle.h:213
Definition ChaosArchive.h:167
Definition Defines.h:85
Base class for constraint handles.
Definition ConstraintHandle.h:102
bool IsInConstraintGraph() const
Definition ConstraintHandle.h:139
Definition PBDConstraintContainer.h:19
static FORCEINLINE ENamedThreads::Type GetDesiredThread()
Definition PBDRigidsEvolution.cpp:288
bool bIsSingleThreaded
Definition PBDRigidsEvolution.h:1051
FAccelerationStructure * InternalStructure
Definition PBDRigidsEvolution.h:1048
static FORCEINLINE TStatId GetStatId()
Definition PBDRigidsEvolution.cpp:283
void DoTask(ENamedThreads::Type CurrentThread, const FGraphEventRef &MyCompletionGraphEvent)
Definition PBDRigidsEvolution.cpp:524
bool bNeedsReset
Definition PBDRigidsEvolution.h:1052
bool IsForceFullBuild
Definition PBDRigidsEvolution.h:1050
std::atomic< bool > bKillTask
Definition PBDRigidsEvolution.h:1054
std::atomic< bool > bStarted
Definition PBDRigidsEvolution.h:1053
FAccelerationStructure * ExternalStructure
Definition PBDRigidsEvolution.h:1049
ISpatialAccelerationCollectionFactory & SpatialCollectionFactory
Definition PBDRigidsEvolution.h:1046
const TMap< FSpatialAccelerationIdx, TUniquePtr< FSpatialAccelerationCache > > & SpatialAccelerationCache
Definition PBDRigidsEvolution.h:1047
static FORCEINLINE ESubsequentsMode::Type GetSubsequentsMode()
Definition PBDRigidsEvolution.cpp:299
Definition PBDRigidsEvolution.h:271
FSharedDebugName EvolutionName
Definition PBDRigidsEvolution.h:1076
CHAOS_API void ComputeIntermediateSpatialAcceleration(bool bBlock=false)
Definition PBDRigidsEvolution.cpp:780
void InvalidateParticle(FGeometryParticleHandle *Particle)
Definition PBDRigidsEvolution.h:478
TFunction< void(TTransientPBDRigidParticleHandle< FReal, 3 > &Particle, const FReal)> FForceRule
Definition PBDRigidsEvolution.h:275
TArray< TPBDGeometryCollectionParticleHandle< FReal, 3 > * > CreateGeometryCollectionParticles(int32 NumParticles, const FUniqueIdx *ExistingIndices=nullptr, const FPBDRigidParticleParameters &Params=FPBDRigidParticleParameters())
Definition PBDRigidsEvolution.h:325
TArray< FUniqueIdx > PendingReleaseIndices
Definition PBDRigidsEvolution.h:1071
void KillSafeAsyncTasks()
Definition PBDRigidsEvolution.h:838
void DisableParticles(TSet< FGeometryParticleHandle * > &ParticlesIn)
Definition PBDRigidsEvolution.h:490
TArray< FGeometryParticleHandle * > CreateStaticParticles(int32 NumParticles, const FUniqueIdx *ExistingIndices=nullptr, const FGeometryParticleParameters &Params=FGeometryParticleParameters())
Definition PBDRigidsEvolution.h:285
void SetResim(bool bInResim)
Definition PBDRigidsEvolution.h:806
static void CopyPristineAccelerationStructures(const TMap< FSpatialAccelerationIdx, TUniquePtr< FSpatialAccelerationCache > > &SpatialAccelerationCache, FAccelerationStructure *FromStructure, FAccelerationStructure *ToStructure, bool CheckPristine)
Definition PBDRigidsEvolution.cpp:948
Private::FPBDIslandManager IslandManager
Definition PBDRigidsEvolution.h:961
static void CopyUnBuiltDynamicAccelerationStructures(const TMap< FSpatialAccelerationIdx, TUniquePtr< FSpatialAccelerationCache > > &SpatialAccelerationCache, FAccelerationStructure *InternalAcceleration, FAccelerationStructure *AsyncInternalAcceleration, FAccelerationStructure *AsyncExternalAcceleration)
Definition PBDRigidsEvolution.cpp:901
void CreateIslands()
Definition PBDRigidsEvolution.h:941
CHAOS_API void TestModeSaveParticle(FGeometryParticleHandle *Particle)
void SetNumProjectionIterations(int32 InNumIterations)
Definition PBDRigidsEvolution.h:399
FUpdatePositionRule ParticleUpdatePosition
Definition PBDRigidsEvolution.h:956
void UpdateConstraintPositionBasedState(FReal Dt)
Definition PBDRigidsEvolution.h:912
void SetCaptureRewindKinematicTargetFunction(FCaptureRewindKinematicTargetRule Rule)
Definition PBDRigidsEvolution.h:339
const FString & GetName() const
Definition PBDRigidsEvolution.h:872
int32 GetNumVelocityIterations() const
Definition PBDRigidsEvolution.h:391
TArray< FUniqueIdx > UniqueIndicesPendingRelease
Definition PBDRigidsEvolution.h:988
CHAOS_API void TestModeRestoreParticle(FGeometryParticleHandle *Particle)
FGraphEventRef AccelerationStructureTaskComplete
Definition PBDRigidsEvolution.h:1059
FORCEINLINE_DEBUGGABLE void DirtyParticle(TGeometryParticleHandleImp< FReal, 3, bPersistent > &Particle, const EPendingSpatialDataOperation Op=EPendingSpatialDataOperation::Update)
Definition PBDRigidsEvolution.h:553
TArray< FPBDRigidParticleHandle * > CreateDynamicParticles(int32 NumParticles, const FUniqueIdx *ExistingIndices=nullptr, const FPBDRigidParticleParameters &Params=FPBDRigidParticleParameters())
Definition PBDRigidsEvolution.h:305
CHAOS_API const FChaosPhysicsMaterial * GetFirstPhysicsMaterial(const FGeometryParticleHandle *Particle) const
Definition PBDRigidsEvolution.cpp:1256
void SetReset(bool bInReset)
Definition PBDRigidsEvolution.h:809
void ResetConstraints()
Definition PBDRigidsEvolution.h:714
virtual void SetName(const FString &InName)
Definition PBDRigidsEvolution.h:871
TArray< FKinematicGeometryParticleHandle * > CreateKinematicParticles(int32 NumParticles, const FUniqueIdx *ExistingIndices=nullptr, const FKinematicGeometryParticleParameters &Params=FKinematicGeometryParticleParameters())
Definition PBDRigidsEvolution.h:295
TArrayCollectionArray< bool > Collided
Definition PBDRigidsEvolution.h:965
virtual void ApplyKinematicTargets(const FReal Dt, const FReal StepFraction)
Definition PBDRigidsEvolution.h:779
void EnableConstraints(FGeometryParticleHandle *ParticleHandle)
Definition PBDRigidsEvolution.h:703
void AddImpulseFunction(FForceRule ImpulseFunction)
Definition PBDRigidsEvolution.h:336
const Private::FPBDIslandManager & GetIslandManager() const
Definition PBDRigidsEvolution.h:802
FORCEINLINE_DEBUGGABLE void RemoveParticleFromAccelerationStructure(TGeometryParticleHandleImp< FReal, 3, bPersistent > &ParticleHandle)
Definition PBDRigidsEvolution.h:890
void EnableParticle(FGeometryParticleHandle *Particle)
Definition PBDRigidsEvolution.h:439
int32 GetNumProjectionIterations() const
Definition PBDRigidsEvolution.h:407
FRewindData * GetRewindData()
Definition PBDRigidsEvolution.h:862
bool bIsSingleThreaded
Definition PBDRigidsEvolution.h:983
TMap< FSpatialAccelerationIdx, TUniquePtr< FSpatialAccelerationCache > > SpatialAccelerationCache
Definition PBDRigidsEvolution.h:1025
void WaitOnAccelerationStructure()
Definition PBDRigidsEvolution.cpp:751
ISpatialAccelerationCollection< FAccelerationStructureHandle, FReal, 3 > FAccelerationStructure
Definition PBDRigidsEvolution.h:273
const TArray< FRemovalData > & GetAllRemovals()
Definition PBDRigidsEvolution.h:868
FRewindData * MRewindData
Definition PBDRigidsEvolution.h:972
TFunction< void(TParticleView< FPBDRigidParticles > &)> FCaptureRewindKinematicTargetRule
Definition PBDRigidsEvolution.h:280
FORCEINLINE_DEBUGGABLE void DirtyParticleAsync(TGeometryParticleHandleImp< FReal, 3, bPersistent > &Particle, const EPendingSpatialDataOperation Op=EPendingSpatialDataOperation::Update)
Definition PBDRigidsEvolution.h:580
void SetNumPositionIterations(int32 InNumIterations)
Definition PBDRigidsEvolution.h:367
TArray< TUniquePtr< FAccelerationStructure > > AccelerationBackingBuffer
Definition PBDRigidsEvolution.h:982
void DisableParticle(FGeometryParticleHandle *Particle)
Definition PBDRigidsEvolution.h:450
FAccelerationStructure * GetFreeSpatialAcceleration_Internal()
Definition PBDRigidsEvolution.cpp:762
CHAOS_API void TestModeRestoreParticles()
void SetCaptureRewindDataFunction(FCaptureRewindRule Rule)
Definition PBDRigidsEvolution.h:338
FORCEINLINE_DEBUGGABLE bool IsADisableCluster(TGeometryParticleHandleImp< FReal, 3, bPersistent > &Particle)
Definition PBDRigidsEvolution.h:499
TSerializablePtr< FChaosPhysicsMaterial > GetPhysicsMaterial(const FGeometryParticleHandle *Particle) const
Definition PBDRigidsEvolution.h:744
FORCEINLINE_DEBUGGABLE void ApplyParticlePendingData(const FPendingSpatialData &PendingData, FAccelerationStructure &SpatialAcceleration, bool bUpdateCache, bool bUpdateDynamicTrees)
Definition PBDRigidsEvolution.cpp:549
TArray< FPBDConstraintContainer * > ConstraintContainers
Definition PBDRigidsEvolution.h:960
CHAOS_API void UpdateExternalAccelerationStructure_External(ISpatialAccelerationCollection< FAccelerationStructureHandle, FReal, 3 > *&ExternalStructure, FPendingSpatialDataQueue &PendingExternal)
Definition PBDRigidsEvolution.cpp:972
virtual void DestroyTransientConstraints()
Definition PBDRigidsEvolution.h:740
FAccelerationStructure * AsyncExternalAcceleration
Definition PBDRigidsEvolution.h:971
void SetRewindData(FRewindData *RewindData)
Definition PBDRigidsEvolution.h:857
bool bCanStartAsyncTasks
Definition PBDRigidsEvolution.h:986
TGeometryParticleHandles< FReal, 3 > & GetParticleHandles()
Definition PBDRigidsEvolution.h:341
int32 LatestExternalTimestampConsumed_Internal
Definition PBDRigidsEvolution.h:993
void AddForceFunction(FForceRule ForceFunction)
Definition PBDRigidsEvolution.h:335
TUniquePtr< ISpatialAccelerationCollectionFactory > SpatialCollectionFactory
Definition PBDRigidsEvolution.h:1063
void PruneInternalPendingData(FAccelerationStructure &AccelerationStructure)
Definition PBDRigidsEvolution.cpp:625
void SetNumVelocityIterations(int32 InNumIterations)
Definition PBDRigidsEvolution.h:383
FPBDRigidsSOAs & Particles
Definition PBDRigidsEvolution.h:967
bool bIsResim
Definition PBDRigidsEvolution.h:1072
TFunction< void(const TArray< FGeometryParticleHandle * > &, const FReal)> FUpdateVelocityRule
Definition PBDRigidsEvolution.h:276
const bool IsResetting() const
Definition PBDRigidsEvolution.h:810
void DisableConstraints(FGeometryParticleHandle *ParticleHandle)
Definition PBDRigidsEvolution.h:689
TArrayCollectionArray< TUniquePtr< FChaosPhysicsMaterial > > PerParticlePhysicsMaterials
Definition PBDRigidsEvolution.h:964
CHAOS_API void WakeParticle(FPBDRigidParticleHandle *Particle)
Definition PBDRigidsEvolution.cpp:1174
void FlushAsyncAccelerationQueue()
Definition PBDRigidsEvolution.cpp:678
TFunction< void(TParticleView< FPBDRigidParticles > &)> FCaptureRewindRule
Definition PBDRigidsEvolution.h:279
void SetPhysicsMaterial(FGeometryParticleHandle *Particle, TSerializablePtr< FChaosPhysicsMaterial > InMaterial)
Definition PBDRigidsEvolution.h:756
virtual void DestroyTransientConstraints(FGeometryParticleHandle *Particle)
Definition PBDRigidsEvolution.h:739
const Private::FPBDIslandManager & GetConstraintGraph() const
Definition PBDRigidsEvolution.h:797
TArray< TPBDRigidClusteredParticleHandle< FReal, 3 > * > CreateClusteredParticles(int32 NumParticles, const FUniqueIdx *ExistingIndices=nullptr, const FPBDRigidParticleParameters &Params=FPBDRigidParticleParameters())
Definition PBDRigidsEvolution.h:315
std::atomic< bool > * bAccelerationStructureTaskSignalKill
Definition PBDRigidsEvolution.h:1061
CHAOS_API void TestModeSaveParticles()
CHAOS_API void TestModeParticleDisabled(FGeometryParticleHandle *Particle)
const TUniquePtr< FChaosPhysicsMaterial > & GetPerParticlePhysicsMaterial(const FGeometryParticleHandle *Particle) const
Definition PBDRigidsEvolution.h:748
void ReleaseUniqueIdx(FUniqueIdx UniqueIdx)
Definition PBDRigidsEvolution.h:828
CHAOS_API void SetParticleSleepType(FPBDRigidParticleHandle *Particle, ESleepType InSleepType)
Definition PBDRigidsEvolution.cpp:1190
void SetPerParticlePhysicsMaterial(FGeometryParticleHandle *Particle, TUniquePtr< FChaosPhysicsMaterial > &InMaterial)
Definition PBDRigidsEvolution.h:750
CHAOS_API void RebuildSpatialAccelerationForPerfTest()
Definition PBDRigidsEvolution.cpp:1004
FAccelerationStructure * AsyncInternalAcceleration
Definition PBDRigidsEvolution.h:970
TArrayCollectionArray< TSerializablePtr< FChaosPhysicsMaterial > > PhysicsMaterials
Definition PBDRigidsEvolution.h:963
TFunction< void(FPBDRigidParticles &, const FReal, const FReal, const int32)> FKinematicUpdateRule
Definition PBDRigidsEvolution.h:278
FAccelerationStructure * InternalAcceleration
Definition PBDRigidsEvolution.h:969
TArray< FForceRule > ForceRules
Definition PBDRigidsEvolution.h:954
TSpscQueue< FAccelerationStructure * > ExternalStructuresQueue
Definition PBDRigidsEvolution.h:975
const TParticleView< FPBDRigidClusteredParticles > & GetNonDisabledClusteredView() const
Definition PBDRigidsEvolution.h:742
FPendingSpatialDataQueue AsyncAccelerationQueue
Definition PBDRigidsEvolution.h:1001
CHAOS_API void FlushExternalAccelerationQueue(FAccelerationStructure &Acceleration, FPendingSpatialDataQueue &ExternalQueue)
Definition PBDRigidsEvolution.cpp:705
const bool IsResimming() const
Definition PBDRigidsEvolution.h:807
void DestroyParticle(FGeometryParticleHandle *Particle)
Definition PBDRigidsEvolution.h:605
ISpatialAccelerationCollection< FAccelerationStructureHandle, FReal, 3 > * GetSpatialAcceleration()
Definition PBDRigidsEvolution.h:785
void SetParticleUpdatePositionFunction(FUpdatePositionRule ParticleUpdate)
Definition PBDRigidsEvolution.h:337
void ReserveParticles(const int32 Num)
Definition PBDRigidsEvolution.h:626
void DisconnectConstraints(const TSet< FGeometryParticleHandle * > &RemovedParticles)
Definition PBDRigidsEvolution.h:668
Private::FTaskDispatcherEvolution TaskDispatcher
Definition PBDRigidsEvolution.h:1003
TArray< FForceRule > ImpulseRules
Definition PBDRigidsEvolution.h:955
const TGeometryParticleHandles< FReal, 3 > & GetParticleHandles() const
Definition PBDRigidsEvolution.h:342
FPBDRigidsSOAs & GetParticles()
Definition PBDRigidsEvolution.h:344
void SetCanStartAsyncTasks(bool bInCanStartAsyncTasks)
Definition PBDRigidsEvolution.h:852
virtual CHAOS_API ~FPBDRigidsEvolutionBase()
Definition PBDRigidsEvolution.cpp:241
int32 NumConstraints() const
Definition PBDRigidsEvolution.h:878
void RegisterParticle(FGeometryParticleHandle *Particle)
Definition PBDRigidsEvolution.h:417
bool IsUniqueIndexPendingRelease(FUniqueIdx UniqueIdx) const
Definition PBDRigidsEvolution.h:833
TArray< FRemovalData > MAllRemovals
Definition PBDRigidsEvolution.h:990
void ReleasePendingIndices()
Definition PBDRigidsEvolution.cpp:1027
CHAOS_API void SetParticleObjectState(FPBDRigidParticleHandle *Particle, EObjectStateType ObjectState)
Definition PBDRigidsEvolution.cpp:1109
void FreeSpatialAcceleration_External(FAccelerationStructure *Structure)
Definition PBDRigidsEvolution.cpp:774
const Private::FPBDIslandGroupManager & GetIslandGroupManager() const
Definition PBDRigidsEvolution.h:803
virtual UE_INTERNAL void WaitIntegrationComplete()
Definition PBDRigidsEvolution.h:875
TSpscQueue< FAccelerationStructure * > ExternalStructuresPool
Definition PBDRigidsEvolution.h:979
void ResetAllRemovals()
Definition PBDRigidsEvolution.h:869
void CreateConstraintGraph()
Definition PBDRigidsEvolution.h:923
Private::FPBDIslandGroupManager IslandGroupManager
Definition PBDRigidsEvolution.h:962
void RemoveConstraintsFromConstraintGraph(const FConstraintHandleArray &Constraints)
Definition PBDRigidsEvolution.h:653
void RemoveConstraintFromConstraintGraph(FConstraintHandle *ConstraintHandle)
Definition PBDRigidsEvolution.h:644
FPendingSpatialInternalDataQueue InternalAccelerationQueue
Definition PBDRigidsEvolution.h:998
bool AreAnyTasksPending() const
Definition PBDRigidsEvolution.h:846
const FPBDRigidsSOAs & GetParticles() const
Definition PBDRigidsEvolution.h:345
FCaptureRewindRule CaptureRewindData
Definition PBDRigidsEvolution.h:958
TArrayAsMap< FUniqueIdx, uint32 > ParticleToCacheInnerIdx
Definition PBDRigidsEvolution.h:1023
CHAOS_API void DisableParticleWithRemovalEvent(FGeometryParticleHandle *Particle)
Definition PBDRigidsEvolution.cpp:1227
void PrepareTick()
Definition PBDRigidsEvolution.h:763
CHAOS_API void FlushSpatialAcceleration()
Definition PBDRigidsEvolution.cpp:996
TFunction< void(const TParticleView< FPBDRigidParticles > &, const FReal)> FUpdatePositionRule
Definition PBDRigidsEvolution.h:277
void AddConstraintContainer(FPBDConstraintContainer &InContainer, const int32 Priority=0)
Definition PBDRigidsEvolution.h:355
THandleArray< FChaosPhysicsMaterial > & SolverPhysicsMaterials
Definition PBDRigidsEvolution.h:968
Private::FPBDIslandManager & GetIslandManager()
Definition PBDRigidsEvolution.h:801
void ReleaseIdx(FUniqueIdx Idx)
Definition PBDRigidsEvolution.cpp:1022
CHAOS_API void TestModeUpdateSavedParticle(FGeometryParticleHandle *Particle)
void UnprepareTick()
Definition PBDRigidsEvolution.h:771
FKinematicUpdateRule KinematicUpdate
Definition PBDRigidsEvolution.h:957
int32 GetNumPositionIterations() const
Definition PBDRigidsEvolution.h:375
FCaptureRewindKinematicTargetRule CaptureRewindKinematicTarget
Definition PBDRigidsEvolution.h:959
std::atomic< bool > * bAccelerationStructureTaskStarted
Definition PBDRigidsEvolution.h:1060
TMap< FPBDRigidParticleHandle *, FTestModeParticleData > TestModeData
Definition PBDRigidsEvolution.h:1093
void FlushInternalAccelerationQueue()
Definition PBDRigidsEvolution.cpp:663
FUniqueIdx GenerateUniqueIdx()
Definition PBDRigidsEvolution.h:814
virtual void ResetCollisions()
Definition PBDRigidsEvolution.h:349
bool bIsReset
Definition PBDRigidsEvolution.h:1073
Definition PBDRigidsSOAs.h:269
void DestroyParticle(FGeometryParticleHandle *Particle)
Definition PBDRigidsSOAs.h:440
TArray< FGeometryParticleHandle * > CreateStaticParticles(int32 NumParticles, const FUniqueIdx *ExistingIndices=nullptr, const FGeometryParticleParameters &Params=FGeometryParticleParameters())
Definition PBDRigidsSOAs.h:335
TArray< FKinematicGeometryParticleHandle * > CreateKinematicParticles(int32 NumParticles, const FUniqueIdx *ExistingIndices=nullptr, const FKinematicGeometryParticleParameters &Params=FKinematicGeometryParticleParameters())
Definition PBDRigidsSOAs.h:343
auto & GetUniqueIndices()
Definition PBDRigidsSOAs.h:1012
const TGeometryParticleHandles< FReal, 3 > & GetParticleHandles() const
Definition PBDRigidsSOAs.h:953
void DisableParticle(FGeometryParticleHandle *Particle)
Definition PBDRigidsSOAs.h:496
TArray< FPBDRigidClusteredParticleHandle * > CreateClusteredParticles(int32 NumParticles, const FUniqueIdx *ExistingIndices=nullptr, const FPBDRigidParticleParameters &Params=FPBDRigidParticleParameters())
Definition PBDRigidsSOAs.h:393
const TParticleView< FPBDRigidClusteredParticles > & GetNonDisabledClusteredView() const
Definition PBDRigidsSOAs.h:928
const TParticleView< FGeometryParticles > & GetAllParticlesView() const
Definition PBDRigidsSOAs.h:938
void EnableParticle(FGeometryParticleHandle *Particle)
Definition PBDRigidsSOAs.h:543
TArray< FPBDRigidParticleHandle * > CreateDynamicParticles(int32 NumParticles, const FUniqueIdx *ExistingIndices=nullptr, const FPBDRigidParticleParameters &Params=FPBDRigidParticleParameters())
Definition PBDRigidsSOAs.h:351
TArray< TPBDGeometryCollectionParticleHandle< FReal, 3 > * > CreateGeometryCollectionParticles(int32 NumParticles, const FUniqueIdx *ExistingIndices=nullptr, const FPBDRigidParticleParameters &Params=FPBDRigidParticleParameters())
Definition PBDRigidsSOAs.h:364
Definition RewindData.h:1650
void RemoveObject(const FGeometryParticleHandle *Particle, const EAllowShrinking AllowShrinking=EAllowShrinking::Default)
Definition RewindData.h:1693
Definition ChaosDebugName.h:17
const FString & Value() const
Definition ChaosDebugName.h:42
Definition PBDRigidsEvolution.h:115
FSpatialAccelerationCache(FSpatialAccelerationCache &&Other)
Definition PBDRigidsEvolution.h:131
const FAccelerationStructureHandle & Payload(const int32 Idx) const
Definition PBDRigidsEvolution.h:188
bool HasBounds(const int32 Idx) const
Definition PBDRigidsEvolution.h:182
void DestroyElement(const int32 Idx)
Definition PBDRigidsEvolution.h:176
FSpatialAccelerationCache()
Definition PBDRigidsEvolution.h:119
FSpatialAccelerationCache(const FSpatialAccelerationCache &)=delete
void AddElements(const int32 Num)
Definition PBDRigidsEvolution.h:170
FAccelerationStructureHandle & Payload(const int32 Idx)
Definition PBDRigidsEvolution.h:189
FSpatialAccelerationCache & operator=(FSpatialAccelerationCache &&Other)
Definition PBDRigidsEvolution.h:148
bool & HasBounds(const int32 Idx)
Definition PBDRigidsEvolution.h:183
FAABB3 & Bounds(const int32 Idx)
Definition PBDRigidsEvolution.h:186
const FAABB3 & Bounds(const int32 Idx) const
Definition PBDRigidsEvolution.h:185
Definition ISpatialAccelerationCollection.h:23
virtual bool RemoveElementFrom(const TPayloadType &Payload, FSpatialAccelerationIdx Idx)
Definition ISpatialAcceleration.h:323
Definition IslandGroupManager.h:77
const FIterationSettings & GetIterationSettings() const
Definition IslandGroupManager.h:130
CHAOS_API void AddConstraintContainer(FPBDConstraintContainer &ConstraintContainer, const int32 Priority=0)
Definition IslandGroupManager.cpp:85
void SetNumPositionIterations(const int32 InNumIterations)
Definition IslandGroupManager.h:120
void SetNumProjectionIterations(const int32 InNumIterations)
Definition IslandGroupManager.h:122
void SetNumVelocityIterations(const int32 InNumIterations)
Definition IslandGroupManager.h:121
Definition IslandManager.h:453
CHAOS_API void AddConstraintContainer(const FPBDConstraintContainer &Container)
Definition IslandManager.cpp:645
CHAOS_API void AddParticle(FGeometryParticleHandle *Particle)
Definition IslandManager.cpp:957
CHAOS_API void UpdateParticles()
Definition IslandManager.cpp:984
CHAOS_API void UpdateIslands()
Definition IslandManager.cpp:1133
CHAOS_API void RemoveParticle(FGeometryParticleHandle *Particle)
Definition IslandManager.cpp:963
CHAOS_API void RemoveParticleConstraints(FGeometryParticleHandle *Particle)
Definition IslandManager.cpp:1069
CHAOS_API int32 ReserveParticles(const int32 InNumParticles)
Definition IslandManager.cpp:709
CHAOS_API void UpdateParticleMaterial(FGeometryParticleHandle *Particle)
Definition IslandManager.cpp:725
CHAOS_API void RemoveConstraint(FConstraintHandle *ConstraintHandle)
Definition IslandManager.cpp:1050
CHAOS_API void Reset()
Definition IslandManager.cpp:689
Definition TaskDispatcherEvolution.h:15
int32 GetNumVelocityIterations() const
Definition IterationSettings.h:61
int32 GetNumPositionIterations() const
Definition IterationSettings.h:60
int32 GetNumProjectionIterations() const
Definition IterationSettings.h:62
Definition ISpatialAcceleration.h:509
Definition ArrayCollectionArray.h:15
Definition ArrayCollection.h:10
int32 AddArray(TArrayCollectionArrayBase *Array)
Definition ArrayCollection.h:36
void ResizeHelper(const int32 Num)
Definition ArrayCollection.h:93
void RemoveAtSwapHelper(const int32 Index)
Definition ArrayCollection.h:119
void AddElementsHelper(const int32 Num)
Definition ArrayCollection.h:84
Definition ParticleIterator.h:577
Definition ParticleHandle.h:436
const TPBDRigidParticleHandleImp< T, d, bPersistent > * CastToRigidParticle() const
Definition ParticleHandle.h:1697
FUniqueIdx UniqueIdx() const
Definition ParticleHandle.h:561
const auto & AuxilaryValue(const Container &AuxContainer) const
Definition ParticleHandle.h:720
bool HasCollision() const
Definition ParticleHandle.h:596
FConstraintHandleArray & ParticleConstraints()
Definition ParticleHandle.h:827
const TPBDRigidClusteredParticleHandleImp< T, d, bPersistent > * CastToClustered() const
Definition ParticleHandle.h:1703
const IPhysicsProxyBase * PhysicsProxy() const
Definition ParticleHandle.h:695
FSpatialAccelerationIdx SpatialIdx() const
Definition ParticleHandle.h:681
Definition ParticleHandle.h:2663
Definition Handles.h:152
Definition ParticleHandle.h:1500
Definition ParticleHandle.h:987
Definition PBDRigidParticles.h:22
Definition ParticleIterator.h:639
Definition Serializable.h:10
Definition Constraints.Build.cs:6
bool IsComplete() const
Definition TaskGraphInterfaces.h:529
Definition Array.h:670
void Reset(SizeType NewSize=0)
Definition Array.h:2246
Definition AndroidPlatformMisc.h:14
Definition UnrealString.h.inl:34
UE_FORCEINLINE_HINT ReferencedType * GetReference() const
Definition RefCounting.h:584
Definition SpscQueue.h:18
Definition UniquePtr.h:107
Definition SkeletalMeshComponent.h:307
CHAOS_API int32 ForceNoCollisionIntoSQ
Definition SingleParticlePhysicsProxy.cpp:58
FRealDouble FReal
Definition Real.h:22
EObjectStateType
Definition ObjectState.h:10
EPendingSpatialDataOperation
Definition PendingSpatialData.h:15
@ Delete
Definition PendingSpatialData.h:16
@ Add
Definition PendingSpatialData.h:18
@ Update
Definition PendingSpatialData.h:19
float FRealSingle
Definition Real.h:14
CHAOS_API FBroadPhaseConfig BroadPhaseConfig
Definition PBDRigidsEvolution.cpp:59
CHAOS_API int32 FixBadAccelerationStructureRemoval
Definition PBDRigidsEvolution.cpp:34
ESleepType
Definition RigidParticles.h:23
Type
Definition TaskGraphInterfaces.h:57
Type
Definition TaskGraphInterfaces.h:249
Definition OverriddenPropertySet.cpp:45
Definition PBDRigidsEvolution.h:39
int32 AABBMaxChildrenInLeaf
Definition PBDRigidsEvolution.h:54
int32 BVNumCells
Definition PBDRigidsEvolution.h:51
int32 MaxTreeDepth
Definition PBDRigidsEvolution.h:53
int32 AABBMaxTreeDepth
Definition PBDRigidsEvolution.h:55
FRealSingle MaxPayloadSize
Definition PBDRigidsEvolution.h:56
@ Grid
Definition PBDRigidsEvolution.h:42
@ TreeAndGrid
Definition PBDRigidsEvolution.h:45
@ Tree
Definition PBDRigidsEvolution.h:43
@ TreeOfGrid
Definition PBDRigidsEvolution.h:44
@ TreeOfGridAndGrid
Definition PBDRigidsEvolution.h:46
int32 IterationsPerTimeSlice
Definition PBDRigidsEvolution.h:57
int32 BroadphaseType
Definition PBDRigidsEvolution.h:50
int32 MaxChildrenInLeaf
Definition PBDRigidsEvolution.h:52
FBroadPhaseConfig()
Definition PBDRigidsEvolution.h:59
Definition PBDRigidsEvolution.h:82
int32 CollisionPointsForAllConstraints
Definition PBDRigidsEvolution.h:86
int32 ActiveCollisionPoints
Definition PBDRigidsEvolution.h:83
FEvolutionStats & operator+=(const FEvolutionStats &Other)
Definition PBDRigidsEvolution.h:101
int32 ActiveShapes
Definition PBDRigidsEvolution.h:84
FEvolutionStats()
Definition PBDRigidsEvolution.h:88
int32 ShapesForAllConstraints
Definition PBDRigidsEvolution.h:85
void Reset()
Definition PBDRigidsEvolution.h:93
Definition ParticleHandle.h:47
Definition ParticleHandle.h:57
Definition ParticleHandle.h:67
Definition PBDRigidsEvolution.h:1089
FVec3 W
Definition PBDRigidsEvolution.h:1090
FVec3 X
Definition PBDRigidsEvolution.h:1090
FRotation3 Q
Definition PBDRigidsEvolution.h:1091
FRotation3 R
Definition PBDRigidsEvolution.h:1091
FVec3 V
Definition PBDRigidsEvolution.h:1090
FVec3 P
Definition PBDRigidsEvolution.h:1090
Definition PendingSpatialData.h:184
FPendingSpatialData & FindOrAdd(const FUniqueIdx UniqueIdx, EPendingSpatialDataOperation Operation=EPendingSpatialDataOperation::Add)
Definition PendingSpatialData.h:199
TArray< FPendingSpatialData > PendingData
Definition PendingSpatialData.h:185
int32 Num() const
Definition PendingSpatialData.h:194
Definition PendingSpatialData.h:25
FAccelerationStructureHandle AccelerationHandle
Definition PendingSpatialData.h:26
FSpatialAccelerationIdx SpatialIdx
Definition PendingSpatialData.h:27
EPendingSpatialDataOperation Operation
Definition PendingSpatialData.h:29
Definition PendingSpatialData.h:65
void Remove(const FUniqueIdx UniqueIdx)
Definition PendingSpatialData.h:136
FPendingSpatialData & Add(int32 BatchIndex, const FUniqueIdx UniqueIdx, EPendingSpatialDataOperation Operation=EPendingSpatialDataOperation::Add)
Definition PendingSpatialData.h:99
Definition PBDRigidsEvolution.h:210
bool HasBoundingBox() const
Definition PBDRigidsEvolution.h:225
FSpatialAccelerationCache * Cache
Definition PBDRigidsEvolution.h:240
FSpatialAccelerationCache * GeometryParticles
Definition PBDRigidsEvolution.h:239
int32 ParticleIdx
Definition PBDRigidsEvolution.h:245
int32 EntryIdx
Definition PBDRigidsEvolution.h:246
const FAABB3 & BoundingBox() const
Definition PBDRigidsEvolution.h:230
FSpatialAccelerationCacheHandle(FSpatialAccelerationCache *InCache=nullptr, int32 InEntryIdx=INDEX_NONE)
Definition PBDRigidsEvolution.h:214
TPayloadType GetPayload(int32 Idx) const
Definition PBDRigidsEvolution.h:220
bool LightWeightDisabled() const
Definition PBDRigidsEvolution.h:235
Definition GeometryParticlesfwd.h:59
Definition GeometryParticlesfwd.h:87
Definition PBDRigidsEvolution.h:251
virtual bool IsBucketTimeSliced(uint16 BucketIdx) const =0
virtual TUniquePtr< ISpatialAcceleration< FAccelerationStructureHandle, FReal, 3 > > CreateAccelerationPerBucket_Threaded(const TConstParticleView< FSpatialAccelerationCache > &Particles, uint16 BucketIdx, bool ForceFullBuild, bool bDynamicTree, bool bBuildOverlapCache)=0
virtual uint8 GetActiveBucketsMask() const =0
virtual void Serialize(TUniquePtr< ISpatialAccelerationCollection< FAccelerationStructureHandle, FReal, 3 > > &Ptr, FChaosArchive &Ar)=0
virtual ~ISpatialAccelerationCollectionFactory()=default
virtual TUniquePtr< ISpatialAccelerationCollection< FAccelerationStructureHandle, FReal, 3 > > CreateEmptyCollection()=0
Definition LightweightStats.h:416