From e5e1f945ea03ffa0b493abedc42538f22715cca4 Mon Sep 17 00:00:00 2001 From: Olly Rybak Date: Wed, 17 Jul 2024 10:04:14 +1000 Subject: [PATCH 1/2] Added eDETECT_CCD_CONTACT to PairFlags, hopefully properly enabling CCD --- Source/Engine/Physics/PhysX/PhysicsBackendPhysX.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Source/Engine/Physics/PhysX/PhysicsBackendPhysX.cpp b/Source/Engine/Physics/PhysX/PhysicsBackendPhysX.cpp index 80d264857..ea05851a6 100644 --- a/Source/Engine/Physics/PhysX/PhysicsBackendPhysX.cpp +++ b/Source/Engine/Physics/PhysX/PhysicsBackendPhysX.cpp @@ -666,6 +666,8 @@ PxFilterFlags FilterShader( { const bool maskTest = (filterData0.word0 & filterData1.word1) && (filterData1.word0 & filterData0.word1); + auto& settings = *PhysicsSettings::Get(); + // Let triggers through if (PxFilterObjectIsTrigger(attributes0) || PxFilterObjectIsTrigger(attributes1)) { @@ -697,6 +699,8 @@ PxFilterFlags FilterShader( pairFlags |= PxPairFlag::eNOTIFY_TOUCH_LOST; pairFlags |= PxPairFlag::ePOST_SOLVER_VELOCITY; pairFlags |= PxPairFlag::eNOTIFY_CONTACT_POINTS; + if (!settings.DisableCCD) + pairFlags |= PxPairFlag::eDETECT_CCD_CONTACT; return PxFilterFlag::eDEFAULT; } From 529de24da474f28e04de7fae0804d2ada0e2d765 Mon Sep 17 00:00:00 2001 From: Wojtek Figat Date: Thu, 18 Jul 2024 12:39:15 +0200 Subject: [PATCH 2/2] Cache `DisableCCD` locally in physics backend #2768 --- Source/Engine/Physics/PhysX/PhysicsBackendPhysX.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Source/Engine/Physics/PhysX/PhysicsBackendPhysX.cpp b/Source/Engine/Physics/PhysX/PhysicsBackendPhysX.cpp index 58b416cac..3439fa27e 100644 --- a/Source/Engine/Physics/PhysX/PhysicsBackendPhysX.cpp +++ b/Source/Engine/Physics/PhysX/PhysicsBackendPhysX.cpp @@ -569,6 +569,7 @@ namespace Array DeleteObjects; bool _queriesHitTriggers = true; + bool _enableCCD = true; PhysicsCombineMode _frictionCombineMode = PhysicsCombineMode::Average; PhysicsCombineMode _restitutionCombineMode = PhysicsCombineMode::Average; @@ -671,8 +672,6 @@ PxFilterFlags FilterShader( { const bool maskTest = (filterData0.word0 & filterData1.word1) && (filterData1.word0 & filterData0.word1); - auto& settings = *PhysicsSettings::Get(); - // Let triggers through if (PxFilterObjectIsTrigger(attributes0) || PxFilterObjectIsTrigger(attributes1)) { @@ -704,7 +703,7 @@ PxFilterFlags FilterShader( pairFlags |= PxPairFlag::eNOTIFY_TOUCH_LOST; pairFlags |= PxPairFlag::ePOST_SOLVER_VELOCITY; pairFlags |= PxPairFlag::eNOTIFY_CONTACT_POINTS; - if (!settings.DisableCCD) + if (_enableCCD) pairFlags |= PxPairFlag::eDETECT_CCD_CONTACT; return PxFilterFlag::eDEFAULT; } @@ -1229,6 +1228,7 @@ void PhysicsBackend::Shutdown() void PhysicsBackend::ApplySettings(const PhysicsSettings& settings) { _queriesHitTriggers = settings.QueriesHitTriggers; + _enableCCD = !settings.DisableCCD; _frictionCombineMode = settings.FrictionCombineMode; _restitutionCombineMode = settings.RestitutionCombineMode;