Controlling Kinematic contact impuluse strength

I have a user controller Kinematic body and I’d like to be able to control how much force or impulse is applied when the Kinematic body collides with a Dynamic body.

Here’ demo of what I’m trying to do.

I’d like to control how the ball reacts when touched by the Kinematic box. It’s way too strong for me now.


I don’t know how to fundammentally correct this, but you can alleviate the symptoms by using lower restitution factors in materials, and/or defining judicious ball’s linear damping.

As Tournicoti stated, adjusting things like restitution can help. The strength of the impulse applied will be proportional to the input velocity, which for kinematics is proportional to the delta between the current and target pose divided by time-step. If you have a very small time-step or move the kinematic by a large amount, the input velocity could be very large. Additionally, a large amount of motion may cause significant penetration between the shapes.

Which version of PhysX are you currently using? Are you familiar with contact modification? Contact modification allows you to modify a number of contact properties prior to the solver being run, including a per-contact field called maxImpulse. This can be used to restrict the magnitude of the impulse that the solver can apply for a given contact. In earlier versions of PhysX, e.g. 3.0, 3.1 and 3.2, this was only partially supported so it only allowed you to make the SDK ignore contacts by setting the maxImpulse to 0; any other value did not affect the response. As of PhysX 3.3, this modification is fully-functional for discrete simulation. This may be useful to you if you can’t find a way to tune your simulation to reduce the input velocity from the kinematics.

Hi, I have simmilar problem. I have one object which vibrates. I set the position by setKinematicTarget(). Other dynamic actors slides on my vibrating object. But sometimes the impulse (force) is so strong that throw away. How to set this maxImpulse in PhysX 3.3?

You can set the maxImpulse as part of a contact modification callback using PxContactSet::setMaxImpulse(PxU32 i, PxReal s). PhysX 3.3 supports any positive value you pass and will clamp the strength of the collision response based on this value. All earlier versions of the SDK do not have full support for maxImpulse.