When colliding a dynamic convex hull body with a static triangle mesh body at a very specific angle, no contacts get generated
and the convex hull passes through the triangle mesh.
It happens only with very specific transforms. The following code snippet can reliably reproduce the bug.
(A large portion of the snippet is just vertex data, posted separately below, for better readability. The code itself is very straighforward).
//Vertices for static triangle mesh
PxVec3 BLOCK_VERTICES[] = {
{ 1.000000f, -1.000000f, -2.000000f },
{ 1.000000f, -1.000000f, 0.000000f },
{ -1.000000f, -1.000000f, 0.000000f },
{ -1.000000f, 1.000000f, -2.000000f },
{ 1.000000f, 1.000000f, -2.000000f },
{ 1.000000f, -1.000000f, -2.000000f },
{ 1.000000f, 1.000000f, -2.000000f },
{ 1.000000f, 1.000000f, 0.000000f },
{ 1.000000f, -1.000000f, 0.000000f },
{ -1.000000f, 1.000000f, -2.000000f },
{ -1.000000f, 1.000000f, 0.000000f },
{ 1.000000f, 1.000000f, 0.000000f },
{ 1.000000f, 1.000000f, 0.000000f },
{ -1.000000f, 1.000000f, 0.000000f },
{ -1.000000f, -1.000000f, 0.000000f },
{ -1.000000f, -1.000000f, 0.000000f },
{ -1.000000f, 1.000000f, 0.000000f },
{ -1.000000f, 1.000000f, -2.000000f },
{ -1.000000f, -1.000000f, 0.000000f },
{ -1.000000f, 1.000000f, -2.000000f },
{ -1.000000f, -1.000000f, -2.000000f },
{ -1.000000f, 1.000000f, -2.000000f },
{ 1.000000f, -1.000000f, -2.000000f },
{ -1.000000f, -1.000000f, -2.000000f },
{ 1.000000f, 1.000000f, -2.000000f },
{ 1.000000f, -1.000000f, 0.000000f },
{ 1.000000f, -1.000000f, -2.000000f },
{ 1.000000f, 1.000000f, 0.000000f },
{ -1.000000f, -1.000000f, 0.000000f },
{ 1.000000f, -1.000000f, 0.000000f },
{ 1.000000f, -1.000000f, -2.000000f },
{ -1.000000f, -1.000000f, 0.000000f },
{ -1.000000f, -1.000000f, -2.000000f },
{ -1.000000f, 1.000000f, -2.000000f },
{ 1.000000f, 1.000000f, 0.000000f },
{ 1.000000f, 1.000000f, -2.000000f },
};
//Vertices for dynamic convex hull
PxVec3 STICK_VERTICES[] = {
{ -0.000000f, 0.014162f, -0.875579f },
{ -0.010471f, 0.010471f, -0.057488f },
{ -0.000000f, 0.014162f, -0.057488f },
{ -0.014162f, -0.000000f, -0.875579f },
{ -0.010471f, -0.010471f, -0.057488f },
{ -0.014162f, -0.000000f, -0.057488f },
{ -0.000000f, -0.014162f, -0.875579f },
{ 0.010471f, -0.010471f, -0.057488f },
{ -0.000000f, -0.014162f, -0.057488f },
{ 0.014162f, 0.000000f, -0.875579f },
{ 0.010471f, 0.010471f, -0.057488f },
{ 0.014162f, 0.000000f, -0.057488f },
{ 0.000000f, 0.000000f, 0.163186f },
{ 0.010471f, -0.010471f, 0.163186f },
{ 0.014162f, 0.000000f, 0.163186f },
{ -0.000000f, 0.000000f, -0.875579f },
{ 0.010471f, 0.010471f, -0.875579f },
{ 0.014162f, 0.000000f, -0.875579f },
{ -0.010471f, 0.010471f, -0.875579f },
{ -0.000000f, 0.000000f, -0.875579f },
{ -0.014162f, -0.000000f, -0.875579f },
{ -0.010471f, -0.010471f, 0.163186f },
{ 0.000000f, 0.000000f, 0.163186f },
{ -0.014162f, -0.000000f, 0.163186f },
{ -0.010471f, -0.010471f, -0.875579f },
{ -0.000000f, -0.014162f, -0.057488f },
{ -0.010471f, -0.010471f, -0.057488f },
{ 0.010471f, 0.010471f, -0.875579f },
{ -0.000000f, 0.014162f, -0.057488f },
{ 0.010471f, 0.010471f, -0.057488f },
{ -0.010471f, 0.010471f, 0.163186f },
{ 0.000000f, 0.000000f, 0.163186f },
{ -0.000000f, 0.014162f, 0.163186f },
{ -0.010471f, -0.010471f, -0.875579f },
{ -0.000000f, 0.000000f, -0.875579f },
{ -0.000000f, -0.014162f, -0.875579f },
{ -0.000000f, 0.000000f, -0.875579f },
{ 0.010471f, -0.010471f, -0.875579f },
{ -0.000000f, -0.014162f, -0.875579f },
{ 0.000000f, 0.000000f, 0.163186f },
{ 0.010471f, 0.010471f, 0.163186f },
{ -0.000000f, 0.014162f, 0.163186f },
{ 0.010471f, -0.010471f, -0.875579f },
{ 0.014162f, 0.000000f, -0.057488f },
{ 0.010471f, -0.010471f, -0.057488f },
{ -0.010471f, 0.010471f, -0.875579f },
{ -0.014162f, -0.000000f, -0.057488f },
{ -0.010471f, 0.010471f, -0.057488f },
{ -0.010471f, 0.010471f, 0.055888f },
{ -0.014162f, -0.000000f, 0.163186f },
{ -0.010471f, 0.010471f, 0.163186f },
{ 0.010471f, 0.010471f, 0.055888f },
{ -0.000000f, 0.019385f, 0.050058f },
{ -0.000000f, 0.014162f, 0.055888f },
{ 0.010471f, -0.010471f, 0.055888f },
{ 0.014162f, 0.000000f, 0.163186f },
{ 0.010471f, -0.010471f, 0.163186f },
{ 0.010471f, -0.010471f, -0.057488f },
{ -0.000000f, -0.019385f, -0.051658f },
{ -0.000000f, -0.014162f, -0.057488f },
{ 0.010471f, 0.010471f, 0.163186f },
{ -0.000000f, 0.014162f, 0.055888f },
{ -0.000000f, 0.014162f, 0.163186f },
{ 0.010471f, -0.010471f, -0.057488f },
{ 0.019385f, 0.000000f, -0.051658f },
{ 0.014332f, -0.014333f, -0.051658f },
{ -0.010471f, -0.010471f, 0.055888f },
{ 0.000000f, -0.014162f, 0.163186f },
{ -0.010471f, -0.010471f, 0.163186f },
{ 0.010471f, -0.010471f, 0.055888f },
{ -0.000000f, -0.019385f, 0.050058f },
{ 0.014333f, -0.014333f, 0.050058f },
{ 0.014162f, 0.000000f, 0.055888f },
{ 0.010471f, 0.010471f, 0.163186f },
{ 0.014162f, 0.000000f, 0.163186f },
{ 0.010471f, -0.010471f, 0.055888f },
{ 0.019385f, 0.000000f, 0.050058f },
{ 0.014162f, 0.000000f, 0.055888f },
{ 0.000000f, -0.014162f, 0.163186f },
{ 0.010471f, -0.010471f, 0.055888f },
{ 0.010471f, -0.010471f, 0.163186f },
{ 0.010471f, 0.010471f, -0.057488f },
{ 0.019385f, 0.000000f, -0.051658f },
{ 0.014162f, 0.000000f, -0.057488f },
{ -0.014162f, -0.000000f, 0.163186f },
{ -0.010471f, -0.010471f, 0.055888f },
{ -0.010471f, -0.010471f, 0.163186f },
{ -0.010471f, 0.010471f, -0.057488f },
{ -0.019385f, -0.000000f, -0.051658f },
{ -0.014333f, 0.014333f, -0.051658f },
{ -0.000000f, 0.014162f, 0.055888f },
{ -0.010471f, 0.010471f, 0.163186f },
{ -0.000000f, 0.014162f, 0.163186f },
{ 0.010471f, 0.010471f, 0.055888f },
{ 0.019385f, 0.000000f, 0.050058f },
{ 0.014333f, 0.014333f, 0.050058f },
{ -0.014333f, 0.014333f, -0.051658f },
{ -0.019385f, -0.000000f, 0.050058f },
{ -0.014333f, 0.014333f, 0.050058f },
{ 0.014333f, -0.014333f, 0.050058f },
{ 0.019385f, 0.000000f, -0.051658f },
{ 0.019385f, 0.000000f, 0.050058f },
{ 0.014332f, 0.014333f, -0.051658f },
{ -0.000000f, 0.019385f, 0.050058f },
{ 0.014333f, 0.014333f, 0.050058f },
{ -0.014333f, -0.014333f, 0.050058f },
{ -0.000000f, -0.019385f, -0.051658f },
{ -0.000000f, -0.019385f, 0.050058f },
{ 0.019385f, 0.000000f, -0.051658f },
{ 0.014333f, 0.014333f, 0.050058f },
{ 0.019385f, 0.000000f, 0.050058f },
{ -0.000000f, -0.019385f, 0.050058f },
{ 0.014332f, -0.014333f, -0.051658f },
{ 0.014333f, -0.014333f, 0.050058f },
{ -0.019385f, -0.000000f, -0.051658f },
{ -0.014333f, -0.014333f, 0.050058f },
{ -0.019385f, -0.000000f, 0.050058f },
{ -0.000000f, 0.019385f, -0.051658f },
{ -0.014333f, 0.014333f, 0.050058f },
{ -0.000000f, 0.019385f, 0.050058f },
{ -0.010471f, -0.010471f, 0.055888f },
{ -0.019385f, -0.000000f, 0.050058f },
{ -0.014333f, -0.014333f, 0.050058f },
{ 0.010471f, 0.010471f, -0.057488f },
{ -0.000000f, 0.019385f, -0.051658f },
{ 0.014332f, 0.014333f, -0.051658f },
{ -0.010471f, -0.010471f, -0.057488f },
{ -0.019385f, -0.000000f, -0.051658f },
{ -0.014162f, -0.000000f, -0.057488f },
{ -0.010471f, -0.010471f, 0.055888f },
{ -0.000000f, -0.019385f, 0.050058f },
{ -0.000000f, -0.014162f, 0.055888f },
{ -0.010471f, 0.010471f, 0.055888f },
{ -0.000000f, 0.019385f, 0.050058f },
{ -0.014333f, 0.014333f, 0.050058f },
{ -0.010471f, -0.010471f, -0.057488f },
{ -0.000000f, -0.019385f, -0.051658f },
{ -0.014333f, -0.014333f, -0.051658f },
{ -0.010471f, 0.010471f, 0.055888f },
{ -0.019385f, -0.000000f, 0.050058f },
{ -0.014162f, -0.000000f, 0.055888f },
{ -0.010471f, 0.010471f, -0.057488f },
{ -0.000000f, 0.019385f, -0.051658f },
{ -0.000000f, 0.014162f, -0.057488f },
{ -0.000000f, 0.014162f, -0.875579f },
{ -0.010471f, 0.010471f, -0.875579f },
{ -0.010471f, 0.010471f, -0.057488f },
{ -0.014162f, -0.000000f, -0.875579f },
{ -0.010471f, -0.010471f, -0.875579f },
{ -0.010471f, -0.010471f, -0.057488f },
{ -0.000000f, -0.014162f, -0.875579f },
{ 0.010471f, -0.010471f, -0.875579f },
{ 0.010471f, -0.010471f, -0.057488f },
{ 0.014162f, 0.000000f, -0.875579f },
{ 0.010471f, 0.010471f, -0.875579f },
{ 0.010471f, 0.010471f, -0.057488f },
{ 0.000000f, 0.000000f, 0.163186f },
{ 0.000000f, -0.014162f, 0.163186f },
{ 0.010471f, -0.010471f, 0.163186f },
{ -0.000000f, 0.000000f, -0.875579f },
{ -0.000000f, 0.014162f, -0.875579f },
{ 0.010471f, 0.010471f, -0.875579f },
{ -0.010471f, 0.010471f, -0.875579f },
{ -0.000000f, 0.014162f, -0.875579f },
{ -0.000000f, 0.000000f, -0.875579f },
{ -0.010471f, -0.010471f, 0.163186f },
{ 0.000000f, -0.014162f, 0.163186f },
{ 0.000000f, 0.000000f, 0.163186f },
{ -0.010471f, -0.010471f, -0.875579f },
{ -0.000000f, -0.014162f, -0.875579f },
{ -0.000000f, -0.014162f, -0.057488f },
{ 0.010471f, 0.010471f, -0.875579f },
{ -0.000000f, 0.014162f, -0.875579f },
{ -0.000000f, 0.014162f, -0.057488f },
{ -0.010471f, 0.010471f, 0.163186f },
{ -0.014162f, -0.000000f, 0.163186f },
{ 0.000000f, 0.000000f, 0.163186f },
{ -0.010471f, -0.010471f, -0.875579f },
{ -0.014162f, -0.000000f, -0.875579f },
{ -0.000000f, 0.000000f, -0.875579f },
{ -0.000000f, 0.000000f, -0.875579f },
{ 0.014162f, 0.000000f, -0.875579f },
{ 0.010471f, -0.010471f, -0.875579f },
{ 0.000000f, 0.000000f, 0.163186f },
{ 0.014162f, 0.000000f, 0.163186f },
{ 0.010471f, 0.010471f, 0.163186f },
{ 0.010471f, -0.010471f, -0.875579f },
{ 0.014162f, 0.000000f, -0.875579f },
{ 0.014162f, 0.000000f, -0.057488f },
{ -0.010471f, 0.010471f, -0.875579f },
{ -0.014162f, -0.000000f, -0.875579f },
{ -0.014162f, -0.000000f, -0.057488f },
{ -0.010471f, 0.010471f, 0.055888f },
{ -0.014162f, -0.000000f, 0.055888f },
{ -0.014162f, -0.000000f, 0.163186f },
{ 0.010471f, 0.010471f, 0.055888f },
{ 0.014333f, 0.014333f, 0.050058f },
{ -0.000000f, 0.019385f, 0.050058f },
{ 0.010471f, -0.010471f, 0.055888f },
{ 0.014162f, 0.000000f, 0.055888f },
{ 0.014162f, 0.000000f, 0.163186f },
{ 0.010471f, -0.010471f, -0.057488f },
{ 0.014332f, -0.014333f, -0.051658f },
{ -0.000000f, -0.019385f, -0.051658f },
{ 0.010471f, 0.010471f, 0.163186f },
{ 0.010471f, 0.010471f, 0.055888f },
{ -0.000000f, 0.014162f, 0.055888f },
{ 0.010471f, -0.010471f, -0.057488f },
{ 0.014162f, 0.000000f, -0.057488f },
{ 0.019385f, 0.000000f, -0.051658f },
{ -0.010471f, -0.010471f, 0.055888f },
{ -0.000000f, -0.014162f, 0.055888f },
{ 0.000000f, -0.014162f, 0.163186f },
{ 0.010471f, -0.010471f, 0.055888f },
{ -0.000000f, -0.014162f, 0.055888f },
{ -0.000000f, -0.019385f, 0.050058f },
{ 0.014162f, 0.000000f, 0.055888f },
{ 0.010471f, 0.010471f, 0.055888f },
{ 0.010471f, 0.010471f, 0.163186f },
{ 0.010471f, -0.010471f, 0.055888f },
{ 0.014333f, -0.014333f, 0.050058f },
{ 0.019385f, 0.000000f, 0.050058f },
{ 0.000000f, -0.014162f, 0.163186f },
{ -0.000000f, -0.014162f, 0.055888f },
{ 0.010471f, -0.010471f, 0.055888f },
{ 0.010471f, 0.010471f, -0.057488f },
{ 0.014332f, 0.014333f, -0.051658f },
{ 0.019385f, 0.000000f, -0.051658f },
{ -0.014162f, -0.000000f, 0.163186f },
{ -0.014162f, -0.000000f, 0.055888f },
{ -0.010471f, -0.010471f, 0.055888f },
{ -0.010471f, 0.010471f, -0.057488f },
{ -0.014162f, -0.000000f, -0.057488f },
{ -0.019385f, -0.000000f, -0.051658f },
{ -0.000000f, 0.014162f, 0.055888f },
{ -0.010471f, 0.010471f, 0.055888f },
{ -0.010471f, 0.010471f, 0.163186f },
{ 0.010471f, 0.010471f, 0.055888f },
{ 0.014162f, 0.000000f, 0.055888f },
{ 0.019385f, 0.000000f, 0.050058f },
{ -0.014333f, 0.014333f, -0.051658f },
{ -0.019385f, -0.000000f, -0.051658f },
{ -0.019385f, -0.000000f, 0.050058f },
{ 0.014333f, -0.014333f, 0.050058f },
{ 0.014332f, -0.014333f, -0.051658f },
{ 0.019385f, 0.000000f, -0.051658f },
{ 0.014332f, 0.014333f, -0.051658f },
{ -0.000000f, 0.019385f, -0.051658f },
{ -0.000000f, 0.019385f, 0.050058f },
{ -0.014333f, -0.014333f, 0.050058f },
{ -0.014333f, -0.014333f, -0.051658f },
{ -0.000000f, -0.019385f, -0.051658f },
{ 0.019385f, 0.000000f, -0.051658f },
{ 0.014332f, 0.014333f, -0.051658f },
{ 0.014333f, 0.014333f, 0.050058f },
{ -0.000000f, -0.019385f, 0.050058f },
{ -0.000000f, -0.019385f, -0.051658f },
{ 0.014332f, -0.014333f, -0.051658f },
{ -0.019385f, -0.000000f, -0.051658f },
{ -0.014333f, -0.014333f, -0.051658f },
{ -0.014333f, -0.014333f, 0.050058f },
{ -0.000000f, 0.019385f, -0.051658f },
{ -0.014333f, 0.014333f, -0.051658f },
{ -0.014333f, 0.014333f, 0.050058f },
{ -0.010471f, -0.010471f, 0.055888f },
{ -0.014162f, -0.000000f, 0.055888f },
{ -0.019385f, -0.000000f, 0.050058f },
{ 0.010471f, 0.010471f, -0.057488f },
{ -0.000000f, 0.014162f, -0.057488f },
{ -0.000000f, 0.019385f, -0.051658f },
{ -0.010471f, -0.010471f, -0.057488f },
{ -0.014333f, -0.014333f, -0.051658f },
{ -0.019385f, -0.000000f, -0.051658f },
{ -0.010471f, -0.010471f, 0.055888f },
{ -0.014333f, -0.014333f, 0.050058f },
{ -0.000000f, -0.019385f, 0.050058f },
{ -0.010471f, 0.010471f, 0.055888f },
{ -0.000000f, 0.014162f, 0.055888f },
{ -0.000000f, 0.019385f, 0.050058f },
{ -0.010471f, -0.010471f, -0.057488f },
{ -0.000000f, -0.014162f, -0.057488f },
{ -0.000000f, -0.019385f, -0.051658f },
{ -0.010471f, 0.010471f, 0.055888f },
{ -0.014333f, 0.014333f, 0.050058f },
{ -0.019385f, -0.000000f, 0.050058f },
{ -0.010471f, 0.010471f, -0.057488f },
{ -0.014333f, 0.014333f, -0.051658f },
{ -0.000000f, 0.019385f, -0.051658f },
};
The stick (convex hull) should bounce off the cube (triangle mesh).
The stick passes right through the cube with out any contacts being generated.
This issue was first discovered in PhysX 4.0 and persists up until the most recent version of PhysX 5.
Slight changes to the position or rotation values of the convex body can already change the behavior, the bug only occurs at very specific angles.
Enabling/Disabling vertex welding has no effect.
Library and Version
PhysX v5.6.1 and older
Operating System
Windows 10/11
Description
When colliding a dynamic convex hull body with a static triangle mesh body at a very specific angle, no contacts get generated
and the convex hull passes through the triangle mesh.
It happens only with very specific transforms. The following code snippet can reliably reproduce the bug.
(A large portion of the snippet is just vertex data, posted separately below, for better readability. The code itself is very straighforward).
Expected Behavior
The stick (convex hull) should bounce off the cube (triangle mesh).
Actual Behavior
The stick passes right through the cube with out any contacts being generated.
Additional information
This issue was first discovered in PhysX 4.0 and persists up until the most recent version of PhysX 5.
Slight changes to the position or rotation values of the convex body can already change the behavior, the bug only occurs at very specific angles.
Enabling/Disabling vertex welding has no effect.