PxRigidDynamic actors clip through other actors (CCD enabled)

My PxRigidDynamic actors intersect with other actors and I can’t figure out why. There are still collisions between them, but the rigid dynamic slightly clips through them and is ‘pushed’ back. Here’s a video of it ingame/in the PVD:

The box is a PxRigidDynamic actor.
The player is a PxCapsuleController.
All other actors are PxRigidStatic.

Having CCD disabled or enabled seems to make no difference. (CCD should only affect high-velocity objects anyway, so I doubt that’s the cause here)

The collisions between the controller and the static actors are fine, so I don’t see why the rigid dynamic would behave any differently.

I’m using PhysX-3.3.0_Beta-2 (16402319)

I’m experiencing the same thing with the official 3.3.0 release. I upgraded from 3.2 and in that version, CCD collision between RigidDynamic actors were resolved correctly without inter-penetration. The objects in question are not even moving that fast in my example

However, it seems the behavior is not deterministic, verified with PVD, and the same scenario, sometimes the contact get resolved with no interpenetration and sometimes it doesn’t.

Ran a few more test cases with my scenario, with the following result. With a simulation update rate of 30Hz ( 1/30 ), CCD is hit/miss wrt to resolving interpenetration. However, with a 60Hz (1/60) update rate, I no longer get object interpenetrating.


I dont know if you read some of my threads or answers, but I often talking about the importance of the
right simulation stepping.

Look at one of my post: https://devtalk.nvidia.com/default/topic/632332/desired-deterministic-movment-of-pxcontroller-time-stepping-or-something-similiar-/

You find there the right setup for the semi fixed timestepping.

The right timestepping is needed for a stable simulation of Physics, as you see what happens with a fixed rate (30 or 60hz). Most problems of suddendly tunneling or no getting trigger / contacts is due to a wrong time stepping I guess.

Maybe its the same here - sadly you didnt post code here espacilly your simulation update loop.

Just dig some in my profile to find the right thread where I explain most of the simulation loop - it was maybe 5 months ago where I explained a lot why you MUST use a semi fixed timestepping.

Ah, here is a much smaler version to read:


My simulation stepping was pretty much ripped from the PhysX guide. Its the same strategy I’ve been using since 3.2, like I’ve mentioned before. BTW, I do follow your post, in fact I think you’ve helped me resolved a few issues in the past…thanks.