p.Chaos.ImmPhys.Collision.DeferNarrowPhase

p.Chaos.ImmPhys.Collision.DeferNarrowPhase

#Overview

name: p.Chaos.ImmPhys.Collision.DeferNarrowPhase

This variable is created as a Console Variable (cvar).

It is referenced in 4 C++ source files.

#Summary

#Usage in the C++ source code

The purpose of p.Chaos.ImmPhys.Collision.DeferNarrowPhase is to control the narrow phase collision detection in the Chaos physics engine’s immediate physics simulation. It is specifically used for the legacy solver to determine whether to create contacts for all broadphase pairs and perform the narrow phase later.

This setting variable is primarily used in the Chaos physics engine, which is part of Unreal Engine’s physics simulation system. It is specifically utilized in the ImmediatePhysics module, which is responsible for real-time physics simulations.

The value of this variable is set through the Unreal Engine console variable system. It is associated with the ChaosImmediate_Collision_DeferNarrowPhase variable, which is initialized with a default value of 1 (enabled).

This variable interacts with other collision-related settings, such as ChaosImmediate_Collision_UseManifolds, to configure the collision detection behavior in the immediate physics simulation.

Developers should be aware that this setting is specific to the legacy solver in the Chaos physics engine. Changing this variable will affect how collision detection is performed, potentially impacting performance and accuracy of physics simulations.

Best practices when using this variable include:

  1. Only modify it if you understand the implications on physics performance and accuracy.
  2. Test thoroughly after changing this setting, as it can significantly affect collision behavior.
  3. Consider the trade-offs between performance and accuracy when enabling or disabling this feature.

Regarding the associated variable ChaosImmediate_Collision_DeferNarrowPhase:

The purpose of ChaosImmediate_Collision_DeferNarrowPhase is to store the actual value used by the physics simulation to determine whether to defer the narrow phase collision detection.

This variable is directly used in the ImmediatePhysics_Chaos namespace, specifically in the FSimulation class constructor and the Simulate function. It is used to configure the FCollisionDetectorSettings, which controls the behavior of the collision detection system.

The value of this variable is set through the console variable system and can be modified at runtime.

ChaosImmediate_Collision_DeferNarrowPhase interacts closely with ChaosImmediate_Collision_UseManifolds to determine the overall collision detection strategy.

Developers should be aware that this variable directly affects the physics simulation behavior and should be modified cautiously.

Best practices for using this variable include:

  1. Monitor performance impacts when changing this setting.
  2. Use in conjunction with other collision-related settings for optimal results.
  3. Consider the specific requirements of your game or simulation when deciding whether to enable or disable this feature.

#References in C++ code

#Callsites

This variable is referenced in the following C++ source code:

#Loc: <Workspace>/Engine/Source/Runtime/Engine/Private/PhysicsEngine/ImmediatePhysics/ImmediatePhysicsChaos/ImmediatePhysicsSimulation_Chaos.cpp:85

Scope: file

Source code excerpt:

FAutoConsoleVariableRef CVarChaosImmPhysCollisionRestitutionThresholdMultiplier(TEXT("p.Chaos.ImmPhys.Collision.RestitutionThresholdMultiplier"), ChaosImmediate_Collision_RestitutionThresholdMultiplier, TEXT("Collision Restitution Threshold (Acceleration) = Multiplier * Gravity"));
FAutoConsoleVariableRef CVarChaosImmPhysCollisionRestitutionEnabled(TEXT("p.Chaos.ImmPhys.Collision.RestitutionEnabled"), ChaosImmediate_Collision_RestitutionEnabled, TEXT("Collision Restitution Enable/Disable"));
FAutoConsoleVariableRef CVarChaosImmPhysCollisionDeferNarrowPhase(TEXT("p.Chaos.ImmPhys.Collision.DeferNarrowPhase"), ChaosImmediate_Collision_DeferNarrowPhase, TEXT("[Legacy Solver] Create contacts for all broadphase pairs, perform NarrowPhase later."));
FAutoConsoleVariableRef CVarChaosImmPhysCollisionUseManifolds(TEXT("p.Chaos.ImmPhys.Collision.UseManifolds"), ChaosImmediate_Collision_UseManifolds, TEXT("[Legacy Solver] Enable/Disable use of manifoldes in collision."));

Chaos::FRealSingle ChaosImmediate_Joint_SwingTwistAngleTolerance = 1.0e-6f;
Chaos::FRealSingle ChaosImmediate_Joint_PositionTolerance = 0.025f;
Chaos::FRealSingle ChaosImmediate_Joint_AngleTolerance = 0.001f;
int32 ChaosImmediate_Joint_NumShockPropagationIterations = -1;

#Associated Variable and Callsites

This variable is associated with another variable named ChaosImmediate_Collision_DeferNarrowPhase. They share the same value. See the following C++ source code.

#Loc: <Workspace>/Engine/Source/Runtime/Engine/Private/PhysicsEngine/ImmediatePhysics/ImmediatePhysicsChaos/ImmediatePhysicsSimulation_Chaos.cpp:77

Scope: file

Source code excerpt:

Chaos::FRealSingle ChaosImmediate_Collision_RestitutionThresholdMultiplier = 1.5f;
int32 ChaosImmediate_Collision_RestitutionEnabled = true;
int32 ChaosImmediate_Collision_DeferNarrowPhase = 1;
int32 ChaosImmediate_Collision_UseManifolds = 0;
FAutoConsoleVariableRef CVarChaosImmPhysCollisionDisable(TEXT("p.Chaos.ImmPhys.Collision.Enabled"), ChaosImmediate_Collision_Enabled, TEXT("Enable/Disable collisions in Immediate Physics."));
FAutoConsoleVariableRef CVarChaosImmPhysCollisionPriority(TEXT("p.Chaos.ImmPhys.Collision.Priority"), ChaosImmediate_Collision_Priority, TEXT("Set the Collision constraint sort order (Joints have priority 0)"));
FAutoConsoleVariableRef CVarChaosImmPhysCollisionCullDistance(TEXT("p.Chaos.ImmPhys.Collision.CullDistance"), ChaosImmediate_Collision_CullDistance, TEXT("Set the collision CullDistance (if >= 0)"));
FAutoConsoleVariableRef CVarChaosImmPhysCollisionMaxDepenetrationVelocity(TEXT("p.Chaos.ImmPhys.Collision.MaxDepenetrationVelocity"), ChaosImmediate_Collision_MaxDepenetrationVelocity, TEXT("Set the collision Max Depenetration Velocity (if >= 0)"));
FAutoConsoleVariableRef CVarChaosImmPhysCollisionRestitutionThresholdMultiplier(TEXT("p.Chaos.ImmPhys.Collision.RestitutionThresholdMultiplier"), ChaosImmediate_Collision_RestitutionThresholdMultiplier, TEXT("Collision Restitution Threshold (Acceleration) = Multiplier * Gravity"));
FAutoConsoleVariableRef CVarChaosImmPhysCollisionRestitutionEnabled(TEXT("p.Chaos.ImmPhys.Collision.RestitutionEnabled"), ChaosImmediate_Collision_RestitutionEnabled, TEXT("Collision Restitution Enable/Disable"));
FAutoConsoleVariableRef CVarChaosImmPhysCollisionDeferNarrowPhase(TEXT("p.Chaos.ImmPhys.Collision.DeferNarrowPhase"), ChaosImmediate_Collision_DeferNarrowPhase, TEXT("[Legacy Solver] Create contacts for all broadphase pairs, perform NarrowPhase later."));
FAutoConsoleVariableRef CVarChaosImmPhysCollisionUseManifolds(TEXT("p.Chaos.ImmPhys.Collision.UseManifolds"), ChaosImmediate_Collision_UseManifolds, TEXT("[Legacy Solver] Enable/Disable use of manifoldes in collision."));

Chaos::FRealSingle ChaosImmediate_Joint_SwingTwistAngleTolerance = 1.0e-6f;
Chaos::FRealSingle ChaosImmediate_Joint_PositionTolerance = 0.025f;
Chaos::FRealSingle ChaosImmediate_Joint_AngleTolerance = 0.001f;
int32 ChaosImmediate_Joint_NumShockPropagationIterations = -1;

#Loc: <Workspace>/Engine/Source/Runtime/Engine/Private/PhysicsEngine/ImmediatePhysics/ImmediatePhysicsChaos/ImmediatePhysicsSimulation_Chaos.cpp:366

Scope (from outer to inner):

file
namespace    ImmediatePhysics_Chaos
function     FSimulation::FSimulation

Source code excerpt:

		DetectorSettings.bFilteringEnabled = false;
		DetectorSettings.bAllowManifoldReuse = false;
		DetectorSettings.bDeferNarrowPhase = (ChaosImmediate_Collision_DeferNarrowPhase != 0);
		DetectorSettings.bAllowManifolds = (ChaosImmediate_Collision_UseManifolds != 0);
		DetectorSettings.bAllowCCD = false;
		DetectorSettings.bAllowMACD = false;
		Implementation->Collisions.SetDetectorSettings(DetectorSettings);
	}

#Loc: <Workspace>/Engine/Source/Runtime/Engine/Private/PhysicsEngine/ImmediatePhysics/ImmediatePhysicsChaos/ImmediatePhysicsSimulation_Chaos.cpp:912

Scope (from outer to inner):

file
namespace    ImmediatePhysics_Chaos
function     void FSimulation::Simulate

Source code excerpt:

			FCollisionDetectorSettings DetectorSettings = Implementation->Collisions.GetDetectorSettings();
			DetectorSettings.bAllowManifoldReuse = false;
			DetectorSettings.bDeferNarrowPhase = (ChaosImmediate_Collision_DeferNarrowPhase != 0);;
			DetectorSettings.bAllowManifolds = (ChaosImmediate_Collision_UseManifolds != 0);;
			Implementation->Collisions.SetDetectorSettings(DetectorSettings);

			if (ChaosImmediate_Evolution_StepTime > 0)
			{
				StepTime = ChaosImmediate_Evolution_StepTime;