UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
GeometryCollectionPhysicsProxy.cpp File Reference
#include "PhysicsProxy/GeometryCollectionPhysicsProxy.h"
#include "PhysicsProxy/FieldSystemProxyHelper.h"
#include "PhysicsSolver.h"
#include "ChaosStats.h"
#include "Chaos/ArrayCollectionArray.h"
#include "Chaos/BVHParticles.h"
#include "Chaos/Transform.h"
#include "Chaos/ParallelFor.h"
#include "Chaos/GeometryParticles.h"
#include "Chaos/Particles.h"
#include "Chaos/TriangleMesh.h"
#include "Chaos/MassProperties.h"
#include "ChaosSolversModule.h"
#include "Chaos/PBDCollisionConstraintsUtil.h"
#include "Chaos/PerParticleGravity.h"
#include "Chaos/PhysicsObjectInternalInterface.h"
#include "Chaos/ImplicitObject.h"
#include "Chaos/ImplicitObjectScaled.h"
#include "Chaos/ImplicitObjectUnion.h"
#include "Chaos/Convex.h"
#include "Chaos/Serializable.h"
#include "Chaos/ErrorReporter.h"
#include "Chaos/PBDRigidClustering.h"
#include "GeometryCollection/GeometryCollectionAlgo.h"
#include "GeometryCollection/GeometryCollectionUtility.h"
#include "GeometryCollection/GeometryCollectionSizeSpecificUtility.h"
#include "GeometryCollection/GeometryCollectionSimulationTypes.h"
#include "GeometryCollection/ManagedArrayCollection.h"
#include "GeometryCollection/ManagedArrayAccessor.h"
#include "Modules/ModuleManager.h"
#include "Chaos/PullPhysicsDataImp.h"
#include "Chaos/PBDRigidsEvolution.h"
#include "Chaos/PhysicsObjectInternal.h"
#include "Chaos/PhysicsObjectInterface.h"
#include "GeometryCollection/Facades/CollectionAnchoringFacade.h"
#include "GeometryCollection/Facades/CollectionConnectionGraphFacade.h"
#include "Chaos/DebugDrawQueue.h"

Classes

struct  FResultInterpolator
 

Namespaces

namespace  Chaos
 
namespace  GeometryCollectionPhysicsProxy
 
namespace  GeometryCollectionPhysicsProxy::Private
 

Macros

#define GC_PHYSICSPROXY_CHECK_FOR_NAN_ENABLED   0
 
#define GC_PHYSICSPROXY_CHECK_FOR_NAN(Vec)
 

Enumerations

enum  EOverrideGCCollisionSetupForTraces { GCCSFT_Property = -1 , GCCSFT_ForceSM = 0 , GCCSFT_ForceGC = 1 }
 

Functions

 DEFINE_LOG_CATEGORY_STATIC (UGCC_LOG, Error, All)
 
template<typename TLambda >
void ExecuteOnPhysicsThread (FGeometryCollectionPhysicsProxy &Proxy, TLambda &&Lambda)
 
TUniquePtr< Chaos::FTriangleMeshCreateTriangleMesh (const int32 FaceStart, const int32 FaceCount, const TManagedArray< bool > &Visible, const TManagedArray< FIntVector > &Indices, bool bRotateWinding)
 
TArray< int32ComputeTransformToGeometryMap (const FGeometryCollection &Collection)
 
void SetImplicitToPTParticles (Chaos::TPBDRigidParticleHandle< Chaos::FReal, 3 > *Handle, const FSharedSimulationParameters &SharedParams, const FCollisionStructureManager::FSimplicial *Simplicial, Chaos::FImplicitObjectPtr Implicit, const FCollisionFilterData SimFilterIn, const FCollisionFilterData QueryFilterIn, const FTransform &WorldTransform, float CollisionParticlesPerObjectFraction)
 
 DECLARE_CYCLE_STAT (TEXT("FGeometryCollectionPhysicsProxy::PopulateSimulatedParticle"), STAT_PopulateSimulatedParticle, STATGROUP_Chaos)
 
void PopulateSimulatedParticle (Chaos::TPBDRigidParticleHandle< Chaos::FReal, 3 > *Handle, const FSharedSimulationParameters &SharedParams, const FCollisionStructureManager::FSimplicial *Simplicial, Chaos::FImplicitObjectPtr Implicit, const FCollisionFilterData SimFilterIn, const FCollisionFilterData QueryFilterIn, Chaos::FReal MassIn, Chaos::TVec3< Chaos::FRealSingle > InertiaTensorVec, const FTransform &WorldTransform, const uint8 DynamicState, const int16 CollisionGroup, float CollisionParticlesPerObjectFraction)
 
CHAOS_API bool GeometryCollectionPhysicsProxy::Private::BuildGeometryForChildrenOnPT (const FSimulationParameters &Params)
 
bool GeometryCollectionPhysicsProxy::Private::BuildGeometryForChildrenOnGT (const FSimulationParameters &Params)
 
bool GeometryCollectionPhysicsProxy::Private::CreateGTParticleForChildren (const FSimulationParameters &Params)
 
bool GeometryCollectionPhysicsProxy::Private::RemoveImplicitsInDynamicCollections (const FSimulationParameters &Params)
 
 DECLARE_CYCLE_STAT (TEXT("FGeometryCollectionPhysicsProxy::BuildClusters"), STAT_BuildClusters, STATGROUP_Chaos)
 
 DECLARE_CYCLE_STAT (TEXT("FGeometryCollectionPhysicsProxy::BuildClusters:GlobalMatrices"), STAT_BuildClustersGlobalMatrices, STATGROUP_Chaos)
 
 DECLARE_CYCLE_STAT (TEXT("FGeometryCollectionPhysicsProxy::SetUseStaticMeshCollisionForTraces_External"), STAT_SetUseStaticMeshCollisionForTraces_External, STATGROUP_Chaos)
 
 DECLARE_CYCLE_STAT (TEXT("FGeometryCollectionPhysicsProxy::UpdatePerParticleFilterData_External"), STAT_GeometryCollectionPhysicsProxyUpdatePerParticleFilterData, STATGROUP_Chaos)
 
void IdentifySimulatableElements (Chaos::FErrorReporter &ErrorReporter, FGeometryCollection &GeometryCollection)
 
void BuildSimulationData (Chaos::FErrorReporter &ErrorReporter, FGeometryCollection &GeometryCollection, const FSharedSimulationParameters &SharedParams)
 

Variables

float CollisionParticlesPerObjectFractionDefault = 1.0f
 
FAutoConsoleVariableRef CVarCollisionParticlesPerObjectFractionDefault (TEXT("p.CollisionParticlesPerObjectFractionDefault"), CollisionParticlesPerObjectFractionDefault, TEXT("Fraction of verts"))
 
bool DisableGeometryCollectionGravity = false
 
FAutoConsoleVariableRef CVarGeometryCollectionDisableGravity (TEXT("p.GeometryCollectionDisableGravity"), DisableGeometryCollectionGravity, TEXT("Disable gravity for geometry collections"))
 
bool GeometryCollectionCollideAll = false
 
FAutoConsoleVariableRef CVarGeometryCollectionCollideAll (TEXT("p.GeometryCollectionCollideAll"), GeometryCollectionCollideAll, TEXT("Bypass the collision matrix and make geometry collections collide against everything"))
 
bool bGeometryCollectionEnabledNestedChildTransformUpdates = true
 
FAutoConsoleVariableRef CVarEnabledNestedChildTransformUpdates (TEXT("p.GeometryCollection.EnabledNestedChildTransformUpdates"), bGeometryCollectionEnabledNestedChildTransformUpdates, TEXT("Enable updates for driven, disabled, child bodies. Used for line trace results against geometry collections.[def: true]"))
 
bool bGeometryCollectionAlwaysGenerateGTCollisionForClusters = true
 
FAutoConsoleVariableRef CVarGeometryCollectionAlwaysGenerateGTCollisionForClusters (TEXT("p.GeometryCollection.AlwaysGenerateGTCollisionForClusters"), bGeometryCollectionAlwaysGenerateGTCollisionForClusters, TEXT("When enabled, always generate a game thread side collision for clusters.[def: true]"))
 
bool bGeometryCollectionAlwaysGenerateConnectionGraph = false
 
FAutoConsoleVariableRef CVarGeometryCollectionAlwaysGenerateConnectionGraph (TEXT("p.GeometryCollection.AlwaysGenerateConnectionGraph"), bGeometryCollectionAlwaysGenerateConnectionGraph, TEXT("When enabled, always generate the cluster's connection graph instead of using the rest collection stored one - Note: this should only be used for troubleshooting.[def: false]"))
 
int32 GeometryCollectionAreaBasedDamageThresholdMode = 0
 
FAutoConsoleVariableRef CVarGeometryCollectionAreaBasedDamageThresholdMode (TEXT("p.GeometryCollection.AreaBasedDamageThresholdMode"), GeometryCollectionAreaBasedDamageThresholdMode, TEXT("Area based damage threshold computation mode (0: sum of areas | 1: max of areas | 2: min of areas | 3: average of areas) [def: 0]"))
 
int32 GeometryCollectionLocalInertiaDropOffDiagonalTerms = 0
 
FAutoConsoleVariableRef CVarGeometryCollectionLocalInertiaDropOffDiagonalTerms (TEXT("p.GeometryCollection.LocalInertiaDropOffDiagonalTerms"), GeometryCollectionLocalInertiaDropOffDiagonalTerms, TEXT("When true, force diagonal inertia for GCs in their local space by simply dropping off-diagonal terms"))
 
float GeometryCollectionTransformTolerance = 0.001f
 
FAutoConsoleVariableRef CVarGeometryCollectionTransformTolerance (TEXT("p.GeometryCollection.TransformTolerance"), GeometryCollectionTransformTolerance, TEXT("Tolerance to detect if a transform has changed"))
 
float GeometryCollectionPositionUpdateTolerance = UE_KINDA_SMALL_NUMBER
 
FAutoConsoleVariableRef CVarGeometryCollectionPositionUpdateTolerance (TEXT("p.GeometryCollection.PositionUpdateTolerance"), GeometryCollectionPositionUpdateTolerance, TEXT("Tolerance to detect if particle position has changed has changed when syncing PT to GT"))
 
float GeometryCollectionRotationUpdateTolerance = UE_KINDA_SMALL_NUMBER
 
FAutoConsoleVariableRef CVarGeometryCollectionRotationUpdateTolerance (TEXT("p.GeometryCollection.RotationUpdateTolerance"), GeometryCollectionRotationUpdateTolerance, TEXT("Tolerance to detect if particle rotation has changed has changed when syncing PT to GT"))
 
bool bGeometryCollectionUseRootBrokenFlag = true
 
FAutoConsoleVariableRef CVarGeometryCollectionUseRootBrokenFlag (TEXT("p.GeometryCollection.UseRootBrokenFlag"), bGeometryCollectionUseRootBrokenFlag, TEXT("If enabled, check if the root transform is broken in the proxy and disable the GT particle if so. Should be enabled - cvar is a failsafe to revert behaviour"))
 
bool bPropagateInternalClusterDisableFlagToChildren = true
 
FAutoConsoleVariableRef CVarPropagateInternalClusterDisableFlagToChildren (TEXT("p.GeometryCollection.PropagateInternalClusterDisableFlagToChildren"), bPropagateInternalClusterDisableFlagToChildren, TEXT("If enabled, disabled internal clusters will propagate their disabled flag to their children when buffering instead of implicitly activating the children."))
 
bool bGeometryCollectionScaleClusterGeometry = true
 
FAutoConsoleVariableRef CVarGeometryCollectionScaleClusterGeometry (TEXT("p.GeometryCollection.ScaleClusterGeometry"), bGeometryCollectionScaleClusterGeometry, TEXT("If enabled, update the cluster geometry if the scale has changed"))
 
bool bEmptyUniqueIndicesOnGT = false
 
FAutoConsoleVariableRef CVarEmptyUniqueIndicesOnGT (TEXT("p.GeometryCollection.EmptyUniqueIndicesOnGT"), bEmptyUniqueIndicesOnGT, TEXT("If enabled, immediately free particle unique indices after particle initialisation"))
 
int32 ForceOverrideGCCollisionSetupForTraces = GCCSFT_Property
 
FAutoConsoleVariableRef CVarForceOverrideGCCollisionSetupForTraces (TEXT("p.GeometryCollection.ForceOverrideGCCollisionSetupForTraces"), ForceOverrideGCCollisionSetupForTraces, TEXT("Force the usage of a specific type of collision for traces on the game thread when creating new GC physics representations (-1: use the value of the property | 0: force to use SM collision | 1: force to use GC collision) [def: -1]"))
 
float ReportHighParticleFraction = -1.f
 
FAutoConsoleVariableRef CVarReportHighParticleFraction (TEXT("p.gc.ReportHighParticleFraction"), ReportHighParticleFraction, TEXT("Report any objects with particle fraction above this threshold"))
 
bool bBuildGeometryForChildrenOnPT = true
 
FAutoConsoleVariableRef CVarbBuildGeometryForChildrenOnPT (TEXT("p.gc.BuildGeometryForChildrenOnPT"), bBuildGeometryForChildrenOnPT, TEXT("DEPRECATED : use the 'Optimize For Memory' option from project settings instead - " "If true build all children geometry on Physics Thread at initilaization time, otherwise wait until destruction occurs."))
 
bool bBuildGeometryForChildrenOnGT = true
 
FAutoConsoleVariableRef CVarbBuildGeometryForChildrenOnGT (TEXT("p.gc.BuildGeometryForChildrenOnGT"), bBuildGeometryForChildrenOnGT, TEXT("DEPRECATED : use the 'Optimize For Memory' option from project settings instead - " "If true build all children geometry on Game Thread at initilaization time, otherwise wait until destruction occurs."))
 
bool bCreateGTParticleForChildren = true
 
FAutoConsoleVariableRef CVarCreateGTParticleForChildren (TEXT("p.gc.CreateGTParticlesForChildren"), bCreateGTParticleForChildren, TEXT("DEPRECATED : use the 'Optimize For Memory' option from project settings instead - " "If true create all children particles at initilaization time, otherwise wait until destruction occurs."))
 
bool bRemoveImplicitsInDynamicCollections = false
 
FAutoConsoleVariableRef CVarbRemoveImplicitsInDynamicCollections (TEXT("p.gc.RemoveImplicitsInDynamicCollections"), bRemoveImplicitsInDynamicCollections, TEXT("DEPRECATED : use the 'Optimize For Memory' option from project settings instead - " "This cvar has an impact only if geometry are not added for children. It removes implicits from the Dynamic Collections, and recreate then from the rest collection. " "Using this cvar could have an impact if geometry are updated from the dynamic collection on the GT, then those changes won't be ported to the PT."))
 
int32 ReportTooManyChildrenNum = -1
 
FAutoConsoleVariableRef CVarReportTooManyChildrenNum (TEXT("p.ReportTooManyChildrenNum"), ReportTooManyChildrenNum, TEXT("Issue warning if more than this many children exist in a single cluster"))
 
int32 ReportNoLevelsetCluster = 0
 
FAutoConsoleVariableRef CVarReportNoLevelsetCluster (TEXT("p.gc.ReportNoLevelsetCluster"), ReportNoLevelsetCluster, TEXT("Report any cluster objects without levelsets"))
 
int32 GlobalMaxSimulatedLevel = 100
 
FAutoConsoleVariableRef CVarGlobalMaxSimulatedLevel (TEXT("p.gc.GlobalMaxSimulatedLevel"), GlobalMaxSimulatedLevel, TEXT("Allow to set the Global Maximum Simulated Level for Geoemtry Collection. The min between the MaxSimulatedLevel and the GlobalMaxSimulatedLevel will be used. "))
 

Macro Definition Documentation

◆ GC_PHYSICSPROXY_CHECK_FOR_NAN

#define GC_PHYSICSPROXY_CHECK_FOR_NAN (   Vec)

◆ GC_PHYSICSPROXY_CHECK_FOR_NAN_ENABLED

#define GC_PHYSICSPROXY_CHECK_FOR_NAN_ENABLED   0

Enumeration Type Documentation

◆ EOverrideGCCollisionSetupForTraces

Enumerator
GCCSFT_Property 
GCCSFT_ForceSM 
GCCSFT_ForceGC 

Function Documentation

◆ BuildSimulationData()

void BuildSimulationData ( Chaos::FErrorReporter ErrorReporter,
FGeometryCollection GeometryCollection,
const FSharedSimulationParameters SharedParams 
)

◆ ComputeTransformToGeometryMap()

TArray< int32 > ComputeTransformToGeometryMap ( const FGeometryCollection Collection)

◆ CreateTriangleMesh()

TUniquePtr< Chaos::FTriangleMesh > CreateTriangleMesh ( const int32  FaceStart,
const int32  FaceCount,
const TManagedArray< bool > &  Visible,
const TManagedArray< FIntVector > &  Indices,
bool  bRotateWinding 
)

◆ DECLARE_CYCLE_STAT() [1/5]

DECLARE_CYCLE_STAT ( TEXT("FGeometryCollectionPhysicsProxy::BuildClusters")  ,
STAT_BuildClusters  ,
STATGROUP_Chaos   
)

◆ DECLARE_CYCLE_STAT() [2/5]

DECLARE_CYCLE_STAT ( TEXT("FGeometryCollectionPhysicsProxy::BuildClusters:GlobalMatrices")  ,
STAT_BuildClustersGlobalMatrices  ,
STATGROUP_Chaos   
)

◆ DECLARE_CYCLE_STAT() [3/5]

DECLARE_CYCLE_STAT ( TEXT("FGeometryCollectionPhysicsProxy::PopulateSimulatedParticle")  ,
STAT_PopulateSimulatedParticle  ,
STATGROUP_Chaos   
)

◆ DECLARE_CYCLE_STAT() [4/5]

DECLARE_CYCLE_STAT ( TEXT("FGeometryCollectionPhysicsProxy::SetUseStaticMeshCollisionForTraces_External")  ,
STAT_SetUseStaticMeshCollisionForTraces_External  ,
STATGROUP_Chaos   
)

◆ DECLARE_CYCLE_STAT() [5/5]

DECLARE_CYCLE_STAT ( TEXT("FGeometryCollectionPhysicsProxy::UpdatePerParticleFilterData_External")  ,
STAT_GeometryCollectionPhysicsProxyUpdatePerParticleFilterData  ,
STATGROUP_Chaos   
)

◆ DEFINE_LOG_CATEGORY_STATIC()

DEFINE_LOG_CATEGORY_STATIC ( UGCC_LOG  ,
Error  ,
All   
)

◆ ExecuteOnPhysicsThread()

template<typename TLambda >
void ExecuteOnPhysicsThread ( FGeometryCollectionPhysicsProxy Proxy,
TLambda &&  Lambda 
)

◆ IdentifySimulatableElements()

void IdentifySimulatableElements ( Chaos::FErrorReporter ErrorReporter,
FGeometryCollection GeometryCollection 
)

◆ PopulateSimulatedParticle()

void PopulateSimulatedParticle ( Chaos::TPBDRigidParticleHandle< Chaos::FReal, 3 > *  Handle,
const FSharedSimulationParameters SharedParams,
const FCollisionStructureManager::FSimplicial Simplicial,
Chaos::FImplicitObjectPtr  Implicit,
const FCollisionFilterData  SimFilterIn,
const FCollisionFilterData  QueryFilterIn,
Chaos::FReal  MassIn,
Chaos::TVec3< Chaos::FRealSingle InertiaTensorVec,
const FTransform WorldTransform,
const uint8  DynamicState,
const int16  CollisionGroup,
float  CollisionParticlesPerObjectFraction 
)

◆ SetImplicitToPTParticles()

void SetImplicitToPTParticles ( Chaos::TPBDRigidParticleHandle< Chaos::FReal, 3 > *  Handle,
const FSharedSimulationParameters SharedParams,
const FCollisionStructureManager::FSimplicial Simplicial,
Chaos::FImplicitObjectPtr  Implicit,
const FCollisionFilterData  SimFilterIn,
const FCollisionFilterData  QueryFilterIn,
const FTransform WorldTransform,
float  CollisionParticlesPerObjectFraction 
)

Variable Documentation

◆ bBuildGeometryForChildrenOnGT

bool bBuildGeometryForChildrenOnGT = true

◆ bBuildGeometryForChildrenOnPT

bool bBuildGeometryForChildrenOnPT = true

◆ bCreateGTParticleForChildren

bool bCreateGTParticleForChildren = true

◆ bEmptyUniqueIndicesOnGT

bool bEmptyUniqueIndicesOnGT = false

◆ bGeometryCollectionAlwaysGenerateConnectionGraph

bool bGeometryCollectionAlwaysGenerateConnectionGraph = false

◆ bGeometryCollectionAlwaysGenerateGTCollisionForClusters

bool bGeometryCollectionAlwaysGenerateGTCollisionForClusters = true

◆ bGeometryCollectionEnabledNestedChildTransformUpdates

bool bGeometryCollectionEnabledNestedChildTransformUpdates = true

◆ bGeometryCollectionScaleClusterGeometry

bool bGeometryCollectionScaleClusterGeometry = true

◆ bGeometryCollectionUseRootBrokenFlag

bool bGeometryCollectionUseRootBrokenFlag = true

◆ bPropagateInternalClusterDisableFlagToChildren

bool bPropagateInternalClusterDisableFlagToChildren = true

◆ bRemoveImplicitsInDynamicCollections

bool bRemoveImplicitsInDynamicCollections = false

◆ CollisionParticlesPerObjectFractionDefault

float CollisionParticlesPerObjectFractionDefault = 1.0f

◆ CVarbBuildGeometryForChildrenOnGT

FAutoConsoleVariableRef CVarbBuildGeometryForChildrenOnGT(TEXT("p.gc.BuildGeometryForChildrenOnGT"), bBuildGeometryForChildrenOnGT, TEXT("DEPRECATED : use the 'Optimize For Memory' option from project settings instead - " "If true build all children geometry on Game Thread at initilaization time, otherwise wait until destruction occurs.")) ( TEXT("p.gc.BuildGeometryForChildrenOnGT")  ,
bBuildGeometryForChildrenOnGT  ,
TEXT("DEPRECATED : use the 'Optimize For Memory' option from project settings instead - " "If true build all children geometry on Game Thread at initilaization time, otherwise wait until destruction occurs."  
)

◆ CVarbBuildGeometryForChildrenOnPT

FAutoConsoleVariableRef CVarbBuildGeometryForChildrenOnPT(TEXT("p.gc.BuildGeometryForChildrenOnPT"), bBuildGeometryForChildrenOnPT, TEXT("DEPRECATED : use the 'Optimize For Memory' option from project settings instead - " "If true build all children geometry on Physics Thread at initilaization time, otherwise wait until destruction occurs.")) ( TEXT("p.gc.BuildGeometryForChildrenOnPT")  ,
bBuildGeometryForChildrenOnPT  ,
TEXT("DEPRECATED : use the 'Optimize For Memory' option from project settings instead - " "If true build all children geometry on Physics Thread at initilaization time, otherwise wait until destruction occurs."  
)

◆ CVarbRemoveImplicitsInDynamicCollections

FAutoConsoleVariableRef CVarbRemoveImplicitsInDynamicCollections(TEXT("p.gc.RemoveImplicitsInDynamicCollections"), bRemoveImplicitsInDynamicCollections, TEXT("DEPRECATED : use the 'Optimize For Memory' option from project settings instead - " "This cvar has an impact only if geometry are not added for children. It removes implicits from the Dynamic Collections, and recreate then from the rest collection. " "Using this cvar could have an impact if geometry are updated from the dynamic collection on the GT, then those changes won't be ported to the PT.")) ( TEXT("p.gc.RemoveImplicitsInDynamicCollections")  ,
bRemoveImplicitsInDynamicCollections  ,
TEXT("DEPRECATED : use the 'Optimize For Memory' option from project settings instead - " "This cvar has an impact only if geometry are not added for children. It removes implicits from the Dynamic Collections, and recreate then from the rest collection. " "Using this cvar could have an impact if geometry are updated from the dynamic collection on the GT, then those changes won't be ported to the PT."  
)

◆ CVarCollisionParticlesPerObjectFractionDefault

FAutoConsoleVariableRef CVarCollisionParticlesPerObjectFractionDefault(TEXT("p.CollisionParticlesPerObjectFractionDefault"), CollisionParticlesPerObjectFractionDefault, TEXT("Fraction of verts")) ( TEXT("p.CollisionParticlesPerObjectFractionDefault")  ,
CollisionParticlesPerObjectFractionDefault  ,
TEXT("Fraction of verts"  
)

◆ CVarCreateGTParticleForChildren

FAutoConsoleVariableRef CVarCreateGTParticleForChildren(TEXT("p.gc.CreateGTParticlesForChildren"), bCreateGTParticleForChildren, TEXT("DEPRECATED : use the 'Optimize For Memory' option from project settings instead - " "If true create all children particles at initilaization time, otherwise wait until destruction occurs.")) ( TEXT("p.gc.CreateGTParticlesForChildren")  ,
bCreateGTParticleForChildren  ,
TEXT("DEPRECATED : use the 'Optimize For Memory' option from project settings instead - " "If true create all children particles at initilaization time, otherwise wait until destruction occurs."  
)

◆ CVarEmptyUniqueIndicesOnGT

FAutoConsoleVariableRef CVarEmptyUniqueIndicesOnGT(TEXT("p.GeometryCollection.EmptyUniqueIndicesOnGT"), bEmptyUniqueIndicesOnGT, TEXT("If enabled, immediately free particle unique indices after particle initialisation")) ( TEXT("p.GeometryCollection.EmptyUniqueIndicesOnGT")  ,
bEmptyUniqueIndicesOnGT  ,
TEXT("If enabled, immediately free particle unique indices after particle initialisation"  
)

◆ CVarEnabledNestedChildTransformUpdates

FAutoConsoleVariableRef CVarEnabledNestedChildTransformUpdates(TEXT("p.GeometryCollection.EnabledNestedChildTransformUpdates"), bGeometryCollectionEnabledNestedChildTransformUpdates, TEXT("Enable updates for driven, disabled, child bodies. Used for line trace results against geometry collections.[def: true]")) ( TEXT("p.GeometryCollection.EnabledNestedChildTransformUpdates")  ,
bGeometryCollectionEnabledNestedChildTransformUpdates  ,
TEXT("Enable updates for driven, disabled, child bodies. Used for line trace results against geometry collections.[def: true]")   
)

◆ CVarForceOverrideGCCollisionSetupForTraces

FAutoConsoleVariableRef CVarForceOverrideGCCollisionSetupForTraces(TEXT("p.GeometryCollection.ForceOverrideGCCollisionSetupForTraces"), ForceOverrideGCCollisionSetupForTraces, TEXT("Force the usage of a specific type of collision for traces on the game thread when creating new GC physics representations (-1: use the value of the property | 0: force to use SM collision | 1: force to use GC collision) [def: -1]")) ( TEXT("p.GeometryCollection.ForceOverrideGCCollisionSetupForTraces")  ,
ForceOverrideGCCollisionSetupForTraces  ,
TEXT("Force the usage of a specific type of collision for traces on the game thread when creating new GC physics representations (-1: use the value of the property | 0: force to use SM collision | 1: force to use GC collision) [def: -1]")   
)

◆ CVarGeometryCollectionAlwaysGenerateConnectionGraph

FAutoConsoleVariableRef CVarGeometryCollectionAlwaysGenerateConnectionGraph(TEXT("p.GeometryCollection.AlwaysGenerateConnectionGraph"), bGeometryCollectionAlwaysGenerateConnectionGraph, TEXT("When enabled, always generate the cluster's connection graph instead of using the rest collection stored one - Note: this should only be used for troubleshooting.[def: false]")) ( TEXT("p.GeometryCollection.AlwaysGenerateConnectionGraph")  ,
bGeometryCollectionAlwaysGenerateConnectionGraph  ,
TEXT("When enabled, always generate the cluster's connection graph instead of using the rest collection stored one - Note: this should only be used for troubleshooting.[def: false]")   
)

◆ CVarGeometryCollectionAlwaysGenerateGTCollisionForClusters

FAutoConsoleVariableRef CVarGeometryCollectionAlwaysGenerateGTCollisionForClusters(TEXT("p.GeometryCollection.AlwaysGenerateGTCollisionForClusters"), bGeometryCollectionAlwaysGenerateGTCollisionForClusters, TEXT("When enabled, always generate a game thread side collision for clusters.[def: true]")) ( TEXT("p.GeometryCollection.AlwaysGenerateGTCollisionForClusters")  ,
bGeometryCollectionAlwaysGenerateGTCollisionForClusters  ,
TEXT("When enabled, always generate a game thread side collision for clusters.[def: true]")   
)

◆ CVarGeometryCollectionAreaBasedDamageThresholdMode

FAutoConsoleVariableRef CVarGeometryCollectionAreaBasedDamageThresholdMode(TEXT("p.GeometryCollection.AreaBasedDamageThresholdMode"), GeometryCollectionAreaBasedDamageThresholdMode, TEXT("Area based damage threshold computation mode (0: sum of areas | 1: max of areas | 2: min of areas | 3: average of areas) [def: 0]")) ( TEXT("p.GeometryCollection.AreaBasedDamageThresholdMode")  ,
GeometryCollectionAreaBasedDamageThresholdMode  ,
TEXT("Area based damage threshold computation mode (0: sum of areas | 1: max of areas | 2: min of areas | 3: average of areas) [def: 0]")   
)

◆ CVarGeometryCollectionCollideAll

FAutoConsoleVariableRef CVarGeometryCollectionCollideAll(TEXT("p.GeometryCollectionCollideAll"), GeometryCollectionCollideAll, TEXT("Bypass the collision matrix and make geometry collections collide against everything")) ( TEXT("p.GeometryCollectionCollideAll")  ,
GeometryCollectionCollideAll  ,
TEXT("Bypass the collision matrix and make geometry collections collide against everything"  
)

◆ CVarGeometryCollectionDisableGravity

FAutoConsoleVariableRef CVarGeometryCollectionDisableGravity(TEXT("p.GeometryCollectionDisableGravity"), DisableGeometryCollectionGravity, TEXT("Disable gravity for geometry collections")) ( TEXT("p.GeometryCollectionDisableGravity")  ,
DisableGeometryCollectionGravity  ,
TEXT("Disable gravity for geometry collections"  
)

◆ CVarGeometryCollectionLocalInertiaDropOffDiagonalTerms

FAutoConsoleVariableRef CVarGeometryCollectionLocalInertiaDropOffDiagonalTerms(TEXT("p.GeometryCollection.LocalInertiaDropOffDiagonalTerms"), GeometryCollectionLocalInertiaDropOffDiagonalTerms, TEXT("When true, force diagonal inertia for GCs in their local space by simply dropping off-diagonal terms")) ( TEXT("p.GeometryCollection.LocalInertiaDropOffDiagonalTerms")  ,
GeometryCollectionLocalInertiaDropOffDiagonalTerms  ,
TEXT("When true, force diagonal inertia for GCs in their local space by simply dropping off-diagonal terms"  
)

◆ CVarGeometryCollectionPositionUpdateTolerance

FAutoConsoleVariableRef CVarGeometryCollectionPositionUpdateTolerance(TEXT("p.GeometryCollection.PositionUpdateTolerance"), GeometryCollectionPositionUpdateTolerance, TEXT("Tolerance to detect if particle position has changed has changed when syncing PT to GT")) ( TEXT("p.GeometryCollection.PositionUpdateTolerance")  ,
GeometryCollectionPositionUpdateTolerance  ,
TEXT("Tolerance to detect if particle position has changed has changed when syncing PT to GT"  
)

◆ CVarGeometryCollectionRotationUpdateTolerance

FAutoConsoleVariableRef CVarGeometryCollectionRotationUpdateTolerance(TEXT("p.GeometryCollection.RotationUpdateTolerance"), GeometryCollectionRotationUpdateTolerance, TEXT("Tolerance to detect if particle rotation has changed has changed when syncing PT to GT")) ( TEXT("p.GeometryCollection.RotationUpdateTolerance")  ,
GeometryCollectionRotationUpdateTolerance  ,
TEXT("Tolerance to detect if particle rotation has changed has changed when syncing PT to GT"  
)

◆ CVarGeometryCollectionScaleClusterGeometry

FAutoConsoleVariableRef CVarGeometryCollectionScaleClusterGeometry(TEXT("p.GeometryCollection.ScaleClusterGeometry"), bGeometryCollectionScaleClusterGeometry, TEXT("If enabled, update the cluster geometry if the scale has changed")) ( TEXT("p.GeometryCollection.ScaleClusterGeometry")  ,
bGeometryCollectionScaleClusterGeometry  ,
TEXT("If enabled, update the cluster geometry if the scale has changed"  
)

◆ CVarGeometryCollectionTransformTolerance

FAutoConsoleVariableRef CVarGeometryCollectionTransformTolerance(TEXT("p.GeometryCollection.TransformTolerance"), GeometryCollectionTransformTolerance, TEXT("Tolerance to detect if a transform has changed")) ( TEXT("p.GeometryCollection.TransformTolerance")  ,
GeometryCollectionTransformTolerance  ,
TEXT("Tolerance to detect if a transform has changed"  
)

◆ CVarGeometryCollectionUseRootBrokenFlag

FAutoConsoleVariableRef CVarGeometryCollectionUseRootBrokenFlag(TEXT("p.GeometryCollection.UseRootBrokenFlag"), bGeometryCollectionUseRootBrokenFlag, TEXT("If enabled, check if the root transform is broken in the proxy and disable the GT particle if so. Should be enabled - cvar is a failsafe to revert behaviour")) ( TEXT("p.GeometryCollection.UseRootBrokenFlag")  ,
bGeometryCollectionUseRootBrokenFlag  ,
TEXT("If enabled, check if the root transform is broken in the proxy and disable the GT particle if so. Should be enabled - cvar is a failsafe to revert behaviour"  
)

◆ CVarGlobalMaxSimulatedLevel

FAutoConsoleVariableRef CVarGlobalMaxSimulatedLevel(TEXT("p.gc.GlobalMaxSimulatedLevel"), GlobalMaxSimulatedLevel, TEXT("Allow to set the Global Maximum Simulated Level for Geoemtry Collection. The min between the MaxSimulatedLevel and the GlobalMaxSimulatedLevel will be used. ")) ( TEXT("p.gc.GlobalMaxSimulatedLevel")  ,
GlobalMaxSimulatedLevel  ,
TEXT("Allow to set the Global Maximum Simulated Level for Geoemtry Collection. The min between the MaxSimulatedLevel and the GlobalMaxSimulatedLevel will be used. ")   
)

◆ CVarPropagateInternalClusterDisableFlagToChildren

FAutoConsoleVariableRef CVarPropagateInternalClusterDisableFlagToChildren(TEXT("p.GeometryCollection.PropagateInternalClusterDisableFlagToChildren"), bPropagateInternalClusterDisableFlagToChildren, TEXT("If enabled, disabled internal clusters will propagate their disabled flag to their children when buffering instead of implicitly activating the children.")) ( TEXT("p.GeometryCollection.PropagateInternalClusterDisableFlagToChildren")  ,
bPropagateInternalClusterDisableFlagToChildren  ,
TEXT("If enabled, disabled internal clusters will propagate their disabled flag to their children when buffering instead of implicitly activating the children."  
)

◆ CVarReportHighParticleFraction

FAutoConsoleVariableRef CVarReportHighParticleFraction(TEXT("p.gc.ReportHighParticleFraction"), ReportHighParticleFraction, TEXT("Report any objects with particle fraction above this threshold")) ( TEXT("p.gc.ReportHighParticleFraction")  ,
ReportHighParticleFraction  ,
TEXT("Report any objects with particle fraction above this threshold"  
)

◆ CVarReportNoLevelsetCluster

FAutoConsoleVariableRef CVarReportNoLevelsetCluster(TEXT("p.gc.ReportNoLevelsetCluster"), ReportNoLevelsetCluster, TEXT("Report any cluster objects without levelsets")) ( TEXT("p.gc.ReportNoLevelsetCluster")  ,
ReportNoLevelsetCluster  ,
TEXT("Report any cluster objects without levelsets"  
)

◆ CVarReportTooManyChildrenNum

FAutoConsoleVariableRef CVarReportTooManyChildrenNum(TEXT("p.ReportTooManyChildrenNum"), ReportTooManyChildrenNum, TEXT("Issue warning if more than this many children exist in a single cluster")) ( TEXT("p.ReportTooManyChildrenNum")  ,
ReportTooManyChildrenNum  ,
TEXT("Issue warning if more than this many children exist in a single cluster"  
)

◆ DisableGeometryCollectionGravity

bool DisableGeometryCollectionGravity = false

◆ ForceOverrideGCCollisionSetupForTraces

int32 ForceOverrideGCCollisionSetupForTraces = GCCSFT_Property

◆ GeometryCollectionAreaBasedDamageThresholdMode

int32 GeometryCollectionAreaBasedDamageThresholdMode = 0

◆ GeometryCollectionCollideAll

bool GeometryCollectionCollideAll = false

◆ GeometryCollectionLocalInertiaDropOffDiagonalTerms

int32 GeometryCollectionLocalInertiaDropOffDiagonalTerms = 0

◆ GeometryCollectionPositionUpdateTolerance

float GeometryCollectionPositionUpdateTolerance = UE_KINDA_SMALL_NUMBER

◆ GeometryCollectionRotationUpdateTolerance

float GeometryCollectionRotationUpdateTolerance = UE_KINDA_SMALL_NUMBER

◆ GeometryCollectionTransformTolerance

float GeometryCollectionTransformTolerance = 0.001f

◆ GlobalMaxSimulatedLevel

int32 GlobalMaxSimulatedLevel = 100

◆ ReportHighParticleFraction

float ReportHighParticleFraction = -1.f

◆ ReportNoLevelsetCluster

int32 ReportNoLevelsetCluster = 0

◆ ReportTooManyChildrenNum

int32 ReportTooManyChildrenNum = -1