[SOLVED] Possible bug in physics

I am working on a tool to detect intersections based on JME (3.2.2-stable). Testing my tool I hit a bad case, which seems like a JME or Bullet bug. Basically I can get two objects to intersect without the library detecting it. At some point, transforming one of the objects will cause JME to detect again collisions between these two.
Here you can see code to replicate the issue JME undetected overlap. - Pastebin.com

If you change the angle or location of the objects by a tiny-but-not-too-tiny bit (say 1e-2), the program will detect the collision, print and exit. However, with the current values the collision goes undetected and the program never closes.

What I am trying to do is to accurately detect overlap between objects. Performance is not a priority, but accuracy is. This is why I am scaling up objects so much, as the distance error at which the overlap is detected does not increase with the object size.
The issue I am reporting raises concerns on whether the collision detection I perform is trustworthy, and it would be valuable to me to know why this happens, as well as how to solve it.

2 Likes

I put the your code here for ease of use:

import com.jme3.app.SimpleApplication;
import com.jme3.bullet.BulletAppState;
import com.jme3.bullet.PhysicsSpace;
import com.jme3.bullet.collision.PhysicsCollisionEvent;
import com.jme3.bullet.collision.PhysicsCollisionListener;
import com.jme3.bullet.control.RigidBodyControl;
import com.jme3.material.Material;
import com.jme3.math.ColorRGBA;
import com.jme3.math.Quaternion;
import com.jme3.math.Vector3f;
import com.jme3.scene.Geometry;
import com.jme3.scene.Mesh;
import com.jme3.scene.Node;
import com.jme3.scene.VertexBuffer;
import com.jme3.scene.shape.Box;

public class Bug extends SimpleApplication implements PhysicsCollisionListener {
  private int ticks = 0;

  public static void main(String[] args) {
    Bug bug = new Bug();
    bug.showSettings = false;
    bug.start();
  }

  @Override
  public void simpleInitApp() {
    BulletAppState bulletAppState = new BulletAppState(PhysicsSpace.BroadphaseType.SIMPLE);
    this.stateManager.attach(bulletAppState);
    bulletAppState.getPhysicsSpace().addCollisionListener(this);
    bulletAppState.getPhysicsSpace().setBroadphaseType(PhysicsSpace.BroadphaseType.SIMPLE);

    /*
     Here the original code builds the cube from coordinates.
     The issue does not happen with JMonkey's Box at least for these particular values, 
     possibly because a btBoxShape is used for Bullet, which works different to a triangle mesh.
     I need this to work fine with any convex mesh.
     */
    Mesh mesh = new Mesh();
    Box q = new Box(2000,2000,2000);
    for(VertexBuffer origin : q.getBufferList()) {
      mesh.setBuffer(origin.getBufferType(), origin.getNumComponents(), origin.getFormat(), origin.getData());
    }
    mesh.updateBound();

    Material mat = new Material(assetManager,
        "Common/MatDefs/Misc/Unshaded.j3md");
    mat.setColor("Color", ColorRGBA.Blue);
    final boolean isKinematic = true;

    // Create first box
    Geometry spatial1 = new Geometry("Box", mesh);
    RigidBodyControl control1 = new RigidBodyControl(1.0f);
    spatial1.setMaterial(mat);
    spatial1.addControl(control1);
    control1.setKinematic(isKinematic);
    Node node1 = new Node();
    node1.attachChild(spatial1);
    rootNode.attachChild(node1);
    bulletAppState.getPhysicsSpace().add(control1);

    // Create second box
    Geometry spatial2 = new Geometry("Box2", mesh);
    RigidBodyControl control2 = new RigidBodyControl(1.0f);
    spatial2.setMaterial(mat);
    spatial2.addControl(control2);
    control2.setKinematic(isKinematic);
    Node node2 = new Node();
    node2.attachChild(spatial2);
    rootNode.attachChild(node2);
    bulletAppState.getPhysicsSpace().add(control2);

    // Rotate the boxes some magic angles, if these values vary the boxes will be detected to collide.
    // 8% randomly-generated angle pairs will trigger the problem.
    final Quaternion q1 = new Quaternion().fromAngles(3.6280732f,5.2767496f,5.40851f);
    final Quaternion q2 = new Quaternion().fromAngles(3.1379673f,5.9316964f,0.8267426f);
    node1.setLocalRotation(q1);
    node2.setLocalRotation(q2);
    node1.setLocalTranslation(Vector3f.ZERO);
    node2.setLocalTranslation(Vector3f.ZERO);
    bulletAppState.startPhysics();
  }

  @Override
  public void simpleUpdate(float tpf) {
    super.simpleUpdate(tpf);
    ticks++;
  }

  @Override
  public void collision(PhysicsCollisionEvent event) {
    System.out.println("Collision event lifetime: " + event.getLifeTime());
    System.out.println("Number of ticks: " + ticks);
    System.exit(0);
  }
}

You are applying the rotation and transformation on the scene graph object, and not on the physics object.
If you want to update the position of the physical object, use setPhysicsLocation and setPhysicsRotation on the RigidBodyControl.

You can enable the physics debug view, this way you can actually see the positions of your physical objects.
To do this, attach the BulletDebugState to the state manager.

also: the bulletAppState.startPhysics() call is actually redundant. The physics simulation will start as soon as you attach the state to the state manager. You should only call this method if for some very mysterious reason you want to start the physics simulation before that.

But if you’re hoping to get triangle-mesh to triangle-mesh intersections from bullet then I think you’re going to have a bad time.

2 Likes

If you want to update the position of the physical object, use setPhysicsLocation and setPhysicsRotation on the RigidBodyControl .

Thanks for the comments!
I tried replacing m_node.setLocal… to m_control.setPhysics…
However nothing changes (even the collision models on the debug view stay).
If I do it in both setLocal… and setPhysics… everything works the exact same.

But if you’re hoping to get triangle-mesh to triangle-mesh intersections from bullet then I think you’re going to have a bad time.

I probably will. Is there any good alternative?

  1. Which physics library(ies) are you using: jme3-bullet & jme3-bullet-native (based on C++ Bullet) OR jme3-jbullet (based on JBullet)?
  2. If you change physics libraries, do you still see this issue?

I’m aware of 3 physics libraries for jMonkeyEngine:

  1. The jme3-jbullet library, which incorporates a Java port of Bullet physics dating from circa 2010.
  2. The jme3-bullet library, which uses JNI to access a recent release of the official (C++) Bullet physics library.
  3. The Minie library, which I’m developing at the moment to replace (1) and (2).

I was able to reproduce your issue with jme3-jbullet, but not with jme3-bullet or Minie, so I suspect you’re using jme3-jbullet.

If you switch to jme3-bullet or Minie, you should expect reliable mesh-to-mesh collisions.

Switching to jme3-bullet is easy, since its API is nearly identical to jme3-jbullet. Here are the steps (for an Ant-based project in the SDK):

  1. In the “Projects” window, right-click on your project and select “Properties” to open the “Project Properties” dialog.
  2. Left-click to select the “Libraries” category.
  3. Left-click to select the “Compile” tab.
  4. Left-click to highlight the “jme3-jbullet” library under “Compile-time libraries”.
  5. Left-click on the “Remove” button.
  6. Left-click on the “Add library” button to open the “Add Library” dialog.
  7. Left-click to highlight the “jme3-bullet” library.
  8. Control left-click to also highlight the “jme3-bullet-native” library.
  9. Left-click on the “Add Library” button.
  10. Left-click on the “OK” button to update your project.

Switching to Minie is a bit more complex, since it doesn’t come bundled with the SDK. I can point you to more information if you’re interested.

1 Like

Thanks for your kind and extensive reply, sgold. However I am fairly sure my code is running jme3-bullet and jme3-bullet-native. I checked disabling them in gradle to make sure jbullet is not accidentally being loaded.
Could be that we have different versions of Jmonkey?

1 Like

I’ve been unable to reproduce your issue with 3.2.2-stable in my environment (64-bit Windows 7). Or else I’ve misunderstood the issue.

I copy-pasted your code from pastebin into my Banana project, added package banana; at the top, configured the build script to use org.jmonkeyengine:jme3-bullet:3.2.2-stable and org.jmonkeyengine:jme3-bullet-native:3.2.2-stable, and ran it. It terminated quickly with the following output:

Jun 19, 2019 9:09:55 AM com.jme3.system.JmeDesktopSystem initialize
INFO: Running on jMonkeyEngine 3.2-stable
 * Branch: HEAD
 * Git Hash: ea23b6a
 * Build Date: 2018-12-31
Jun 19, 2019 9:09:56 AM com.jme3.system.lwjgl.LwjglContext printContextInitInfo
INFO: LWJGL 2.9.3 context running on thread jME3 Main
 * Graphics Adapter: nvd3dumx,nvwgf2umx,nvwgf2umx
 * Driver Version: 23.21.13.8873
 * Scaling Factor: 1
Jun 19, 2019 9:09:56 AM com.jme3.renderer.opengl.GLRenderer loadCapabilitiesCommon
INFO: OpenGL Renderer Information
 * Vendor: NVIDIA Corporation
 * Renderer: GeForce GT 545/PCIe/SSE2
 * OpenGL Version: 4.6.0 NVIDIA 388.73
 * GLSL Version: 4.60 NVIDIA
 * Profile: Compatibility
Jun 19, 2019 9:09:57 AM com.jme3.asset.AssetConfig loadText
WARNING: Cannot find loader com.jme3.scene.plugins.ogre.MeshLoader
Jun 19, 2019 9:09:57 AM com.jme3.asset.AssetConfig loadText
WARNING: Cannot find loader com.jme3.scene.plugins.ogre.SkeletonLoader
Jun 19, 2019 9:09:57 AM com.jme3.asset.AssetConfig loadText
WARNING: Cannot find loader com.jme3.scene.plugins.ogre.MaterialLoader
Jun 19, 2019 9:09:57 AM com.jme3.asset.AssetConfig loadText
WARNING: Cannot find loader com.jme3.scene.plugins.ogre.SceneLoader
Jun 19, 2019 9:09:57 AM com.jme3.asset.AssetConfig loadText
WARNING: Cannot find loader com.jme3.scene.plugins.blender.BlenderModelLoader
Jun 19, 2019 9:09:57 AM com.jme3.asset.AssetConfig loadText
WARNING: Cannot find loader com.jme3.scene.plugins.fbx.FbxLoader
Jun 19, 2019 9:09:57 AM com.jme3.asset.AssetConfig loadText
WARNING: Cannot find loader com.jme3.scene.plugins.gltf.GltfLoader
Jun 19, 2019 9:09:57 AM com.jme3.asset.AssetConfig loadText
WARNING: Cannot find loader com.jme3.scene.plugins.gltf.BinLoader
Jun 19, 2019 9:09:57 AM com.jme3.asset.AssetConfig loadText
WARNING: Cannot find loader com.jme3.scene.plugins.gltf.GlbLoader
Jun 19, 2019 9:09:57 AM com.jme3.asset.AssetConfig loadText
WARNING: Cannot find loader com.jme3.audio.plugins.OGGLoader
Jun 19, 2019 9:09:57 AM com.jme3.audio.openal.ALAudioRenderer initOpenAL
INFO: Audio Renderer Information
 * Device: OpenAL Soft
 * Vendor: OpenAL Community
 * Renderer: OpenAL Soft
 * Version: 1.1 ALSOFT 1.15.1
 * Supported channels: 64
 * ALC extensions: ALC_ENUMERATE_ALL_EXT ALC_ENUMERATION_EXT ALC_EXT_CAPTURE ALC_EXT_DEDICATED ALC_EXT_disconnect ALC_EXT_EFX ALC_EXT_thread_local_context ALC_SOFT_loopback
 * AL extensions: AL_EXT_ALAW AL_EXT_DOUBLE AL_EXT_EXPONENT_DISTANCE AL_EXT_FLOAT32 AL_EXT_IMA4 AL_EXT_LINEAR_DISTANCE AL_EXT_MCFORMATS AL_EXT_MULAW AL_EXT_MULAW_MCFORMATS AL_EXT_OFFSET AL_EXT_source_distance_model AL_LOKI_quadriphonic AL_SOFT_buffer_samples AL_SOFT_buffer_sub_data AL_SOFTX_deferred_updates AL_SOFT_direct_channels AL_SOFT_loop_points AL_SOFT_source_latency
Jun 19, 2019 9:09:57 AM com.jme3.audio.openal.ALAudioRenderer initOpenAL
WARNING: Pausing audio device not supported.
Jun 19, 2019 9:09:57 AM com.jme3.audio.openal.ALAudioRenderer initOpenAL
INFO: Audio effect extension version: 1.0
Jun 19, 2019 9:09:57 AM com.jme3.audio.openal.ALAudioRenderer initOpenAL
INFO: Audio max auxiliary sends: 4
Bullet-Native: Initializing java classes
Collision event lifetime: 4
Number of ticks: 1
AL lib: (EE) alc_cleanup: 1 device not closed

BUILD SUCCESSFUL in 5s
2 actionable tasks: 1 executed, 1 up-to-date

If I understand your issue, it was that no collision was detected.
If I understand your code, the behavior I observed indicates that a collision was detected.

Did I miss something?

Did you get collision detection to work for you?

1 Like

No, sorry I have been off for a while. I still can’t make it work. I think you are running the code the same way I do, so I am surprised you don’t see the same issue. Could it be that our binaries were compiled differently? I get mine from artifactory.

1 Like

I get my JME artifacts from bintray.

I checked bintray, they seem not to ship 3.2.2 but 3.2.0, right?
I tried with 3.2.0 and surely it detected the collision, however the bug is still present, it just needs another combination of angles to be triggered. Maybe this is why you cannot replicate? I tested random angles again and also about 8% of combinations trigger the error. These are some combinations that I found work on 3.2.0. Even if we need different combinations to trigger the error, at least one of these is likely to trigger the error assuming the 8% of them works in your machine.

final Quaternion q1 = new Quaternion().fromAngles(1.9202292582402283f, 3.265782669465039f, 0.31295268615491734f);
final Quaternion q2 = new Quaternion().fromAngles(4.104867324230158f, 5.960536204046108f, 3.189006547765162f);

final Quaternion q1 = new Quaternion().fromAngles(5.6475198657f, 6.1126752918f, 0.40953245f);
final Quaternion q2 = new Quaternion().fromAngles(2.4801053245f, 1.7665440511f, 2.0794554881f);

final Quaternion q1 = new Quaternion().fromAngles(0.020919119917721964f, 0.25812438548761585f, 0.5398280836479407f);
final Quaternion q2 = new Quaternion().fromAngles(2.975480542751137f, 3.5379015372833664f, 3.746266288066606f);

final Quaternion q1 = new Quaternion().fromAngles(4.954227664541126f, 3.244260885597589f, 2.092768360488026f);
final Quaternion q2 = new Quaternion().fromAngles(4.336473818318873f, 4.916055362790038f, 5.905450614484043f);

final Quaternion q1 = new Quaternion().fromAngles(5.6922459185824525f, 5.449148029551832f, 1.8465549439689515f);
final Quaternion q2 = new Quaternion().fromAngles(0.28420166199001196f, 1.3148519034214279f, 4.321773174038078f);

final Quaternion q1 = new Quaternion().fromAngles(6.096419781990822f, 3.847553111753629f, 6.0521399058357295f);
final Quaternion q2 = new Quaternion().fromAngles(3.1853619556362562f, 3.3155806185291787f, 3.1086358960406395f);

final Quaternion q1 = new Quaternion().fromAngles(5.534769065349896f, 6.1570817193888f, 2.1696418567555344f);
final Quaternion q2 = new Quaternion().fromAngles(4.418547517589555f, 4.58161979890607f, 0.08762111364009759f);

final Quaternion q1 = new Quaternion().fromAngles(1.120786131944786f, 3.993084133745931f, 4.782561823108675f);
final Quaternion q2 = new Quaternion().fromAngles(5.46032086037379f, 1.1465234272969678f, 0.12071458827365783f);

final Quaternion q1 = new Quaternion().fromAngles(1.2264005650693672f, 6.189969891493885f, 3.997402379929958f);
final Quaternion q2 = new Quaternion().fromAngles(1.171087727320511f, 5.38120835651054f, 2.8123610562671786f);

final Quaternion q1 = new Quaternion().fromAngles(0.3206681833334249f, 4.9010204540220705f, 5.451250433781237f);
final Quaternion q2 = new Quaternion().fromAngles(4.631377231885581f, 1.3160748403267675f, 6.186087551197642f);

final Quaternion q1 = new Quaternion().fromAngles(3.329550568028914f, 3.970319174852079f, 4.249759098375211f);
final Quaternion q2 = new Quaternion().fromAngles(1.5014438625082298f, 0.419857386048787f, 5.363044269175889f);

final Quaternion q1 = new Quaternion().fromAngles(3.605284421200154f, 0.5559452477127267f, 5.06674272119106f);
final Quaternion q2 = new Quaternion().fromAngles(4.987599834190317f, 6.191627938166735f, 2.663709983482374f);

final Quaternion q1 = new Quaternion().fromAngles(5.36719518456798f, 1.3064548584639812f, 0.40515838172906704f);
final Quaternion q2 = new Quaternion().fromAngles(2.209740908971888f, 4.786997711507192f, 0.6488769269998385f);

final Quaternion q1 = new Quaternion().fromAngles(2.8289225335962946f, 5.516006782909098f, 5.4682199221621905f);
final Quaternion q2 = new Quaternion().fromAngles(1.7761256730800263f, 3.5109721976977792f, 0.9339782401136686f);

You’re confusing me. Here’s the link to jme3-bullet at Bintray:
Package jme3-bullet - jmonkeyengine

As you can see, the latest version at Bintray is 3.3.0-alpha2. The latest stable version is 3.2.3-stable. If you really wish to report a bug, you should use one of those versions, not 3.2.2 and certainly not 3.2.0.

Also, you should submit a test case that reproduces the issue 100% of the time, not 8% of the time.

Also, provide complete output of your test run, as I did previously.

I am sorry, I did not make myself clear. The code I post fails 100% of the times on my machine. What I learnt just before writnig the last post is that this bug is sensitive to numeric accuracy, and will manifest itself for different values of q1 and q2 depending on version (maybe even build) of jme3 or bullet.

I tested the bug on 3.3.0-alpha2, here is the output (the program never ends, I just close the window at the end):

/usr/lib/jvm/java-1.8.0-openjdk-amd64/bin/java -javaagent:/home/user/.local/share/JetBrains/Toolbox/apps/IDEA-C/ch-0/191.7479.19/lib/idea_rt.jar=38189:/home/user/.local/share/JetBrains/Toolbox/apps/IDEA-C/ch-0/191.7479.19/bin -Dfile.encoding=UTF-8 -classpath /usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/charsets.jar:/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/ext/cldrdata.jar:/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/ext/dnsns.jar:/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/ext/icedtea-sound.jar:/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/ext/jaccess.jar:/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/ext/java-atk-wrapper.jar:/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/ext/localedata.jar:/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/ext/nashorn.jar:/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/ext/sunec.jar:/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/ext/sunjce_provider.jar:/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/ext/sunpkcs11.jar:/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/ext/zipfs.jar:/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/jce.jar:/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/jsse.jar:/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/management-agent.jar:/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/resources.jar:/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/rt.jar:/home/user/Perforce/user_all/utils/javautils2/collisionlib/main/out/production/classes:/home/user/Perforce/user_all/utils/javautils2/collisionlib/main/out/production/resources:/home/user/.gradle/caches/modules-2/files-2.1/org.jmonkeyengine/jme3-lwjgl/3.3.0-alpha2/2f8c92e0f76f4d1851d811c944ecb89c408b1b7e/jme3-lwjgl-3.3.0-alpha2.jar:/home/user/.gradle/caches/modules-2/files-2.1/org.jmonkeyengine/jme3-blender/3.3.0-alpha2/bbbb865a4808e9dcc1f8b940c6bed16449cd4018/jme3-blender-3.3.0-alpha2.jar:/home/user/.gradle/caches/modules-2/files-2.1/org.jmonkeyengine/jme3-desktop/3.3.0-alpha2/8c9fcea2c6702ef9d187deae1a0e15271b60df8c/jme3-desktop-3.3.0-alpha2.jar:/home/user/.gradle/caches/modules-2/files-2.1/org.jmonkeyengine/jme3-bullet-native/3.3.0-alpha2/ad86b62f2fede98bd644eefe37a1c628afd69270/jme3-bullet-native-3.3.0-alpha2.jar:/home/user/.gradle/caches/modules-2/files-2.1/org.jmonkeyengine/jme3-bullet/3.3.0-alpha2/6424a539a5447407bcaa53269ff2208cd6b41956/jme3-bullet-3.3.0-alpha2.jar:/home/user/.gradle/caches/modules-2/files-2.1/org.jmonkeyengine/jme3-terrain/3.3.0-alpha2/87d1a36ee894d2cf14e455fe830c8751d521b249/jme3-terrain-3.3.0-alpha2.jar:/home/user/.gradle/caches/modules-2/files-2.1/org.jmonkeyengine/jme3-effects/3.3.0-alpha2/518d7034117255846c0ee1989656b6ec4af548/jme3-effects-3.3.0-alpha2.jar:/home/user/.gradle/caches/modules-2/files-2.1/org.jmonkeyengine/jme3-core/3.3.0-alpha2/31f8f6a9bdc73b0b182204e056e2b4da93674316/jme3-core-3.3.0-alpha2.jar:/home/user/.gradle/caches/modules-2/files-2.1/com.google.guava/guava/22.0/3564ef3803de51fb0530a8377ec6100b33b0d073/guava-22.0.jar:/home/user/.gradle/caches/modules-2/files-2.1/org.apache.commons/commons-math3/3.6.1/e4ba98f1d4b3c80ec46392f25e094a6a2e58fcbf/commons-math3-3.6.1.jar:/home/user/.gradle/caches/modules-2/files-2.1/external.com.github.riccardobl/jme3-bullet-vhacd/1.0/96327c3992b6af277b1a80ae8a7b5bee1d441935/jme3-bullet-vhacd-1.0.jar:/home/user/.gradle/caches/modules-2/files-2.1/external.com.github.riccardobl/vhacd-native/1.1.1/7ce06b1a0dc09c69a5739174b96dd2cfb77f3f68/vhacd-native-1.1.1.jar:/home/user/.gradle/caches/modules-2/files-2.1/org.lwjgl.lwjgl/lwjgl/2.9.3/3df168ac74e4a8c96562cdff24ad352e255bf89c/lwjgl-2.9.3.jar:/home/user/.gradle/caches/modules-2/files-2.1/org.ejml/simple/0.27/957fc40035f6a084304d64b28febcbe66c0994c7/simple-0.27.jar:/home/user/.gradle/caches/modules-2/files-2.1/org.ejml/dense64/0.27/ea70271f286016777ac079a5b33941d4e2b56d00/dense64-0.27.jar:/home/user/.gradle/caches/modules-2/files-2.1/org.ejml/denseC64/0.27/2529c9f8ffa12e15a1d7a21ad8d05f4a6cddfc0c/denseC64-0.27.jar:/home/user/.gradle/caches/modules-2/files-2.1/org.ejml/core/0.27/21d79552c6e103a850e82bfe3a5cb7294d1870b2/core-0.27.jar:/home/user/.gradle/caches/modules-2/files-2.1/com.google.code.findbugs/jsr305/1.3.9/40719ea6961c0cb6afaeb6a921eaa1f6afd4cfdf/jsr305-1.3.9.jar:/home/user/.gradle/caches/modules-2/files-2.1/com.google.errorprone/error_prone_annotations/2.0.18/5f65affce1684999e2f4024983835efc3504012e/error_prone_annotations-2.0.18.jar:/home/user/.gradle/caches/modules-2/files-2.1/com.google.j2objc/j2objc-annotations/1.1/976d8d30bebc251db406f2bdb3eb01962b5685b3/j2objc-annotations-1.1.jar:/home/user/.gradle/caches/modules-2/files-2.1/org.codehaus.mojo/animal-sniffer-annotations/1.14/775b7e22fb10026eed3f86e8dc556dfafe35f2d5/animal-sniffer-annotations-1.14.jar:/home/user/.gradle/caches/modules-2/files-2.1/org.lwjgl.lwjgl/lwjgl-platform/2.9.3/fbc2afb3e288578e9942578decb6291a490549a0/lwjgl-platform-2.9.3-natives-windows.jar:/home/user/.gradle/caches/modules-2/files-2.1/org.lwjgl.lwjgl/lwjgl-platform/2.9.3/b1eafe80093381c56415731e1d64279e6140bcd0/lwjgl-platform-2.9.3-natives-linux.jar:/home/user/.gradle/caches/modules-2/files-2.1/org.lwjgl.lwjgl/lwjgl-platform/2.9.3/6686cf6ddaa20b4290aa6599a09bc0d17369be05/lwjgl-platform-2.9.3-natives-osx.jar:/home/user/.gradle/caches/modules-2/files-2.1/net.java.jinput/jinput/2.0.5/39c7796b469a600f72380316f6b1f11db6c2c7c4/jinput-2.0.5.jar:/home/user/.gradle/caches/modules-2/files-2.1/net.java.jutils/jutils/1.0.0/e12fe1fda814bd348c1579329c86943d2cd3c6a6/jutils-1.0.0.jar:/home/user/.gradle/caches/modules-2/files-2.1/net.java.jinput/jinput-platform/2.0.5/7ff832a6eb9ab6a767f1ade2b548092d0fa64795/jinput-platform-2.0.5-natives-linux.jar:/home/user/.gradle/caches/modules-2/files-2.1/net.java.jinput/jinput-platform/2.0.5/385ee093e01f587f30ee1c8a2ee7d408fd732e16/jinput-platform-2.0.5-natives-windows.jar:/home/user/.gradle/caches/modules-2/files-2.1/net.java.jinput/jinput-platform/2.0.5/53f9c919f34d2ca9de8c51fc4e1e8282029a9232/jinput-platform-2.0.5-natives-osx.jar com.xxx.Bug
Jul 01, 2019 10:08:20 AM com.jme3.system.JmeDesktopSystem initialize
INFO: Running on jMonkeyEngine 3.3-alpha2
 * Branch: HEAD
 * Git Hash: 3f1f2e8
 * Build Date: 2019-05-22
Jul 01, 2019 10:08:21 AM com.jme3.system.lwjgl.LwjglContext printContextInitInfo
INFO: LWJGL 2.9.3 context running on thread jME3 Main
 * Graphics Adapter: null
 * Driver Version: null
 * Scaling Factor: 1
Jul 01, 2019 10:08:21 AM com.jme3.renderer.opengl.GLRenderer loadCapabilitiesCommon
INFO: OpenGL Renderer Information
 * Vendor: Intel Open Source Technology Center
 * Renderer: Mesa DRI Intel(R) UHD Graphics 620 (Kabylake GT2) 
 * OpenGL Version: 3.0 Mesa 18.2.8
 * GLSL Version: 1.30
 * Profile: Compatibility
Jul 01, 2019 10:08:21 AM com.jme3.asset.AssetConfig loadText
WARNING: Cannot find loader com.jme3.scene.plugins.ogre.MeshLoader
Jul 01, 2019 10:08:21 AM com.jme3.asset.AssetConfig loadText
WARNING: Cannot find loader com.jme3.scene.plugins.ogre.SkeletonLoader
Jul 01, 2019 10:08:21 AM com.jme3.asset.AssetConfig loadText
WARNING: Cannot find loader com.jme3.scene.plugins.ogre.MaterialLoader
Jul 01, 2019 10:08:21 AM com.jme3.asset.AssetConfig loadText
WARNING: Cannot find loader com.jme3.scene.plugins.ogre.SceneLoader
Jul 01, 2019 10:08:21 AM com.jme3.asset.AssetConfig loadText
WARNING: Cannot find loader com.jme3.scene.plugins.fbx.FbxLoader
Jul 01, 2019 10:08:21 AM com.jme3.asset.AssetConfig loadText
WARNING: Cannot find loader com.jme3.scene.plugins.gltf.GltfLoader
Jul 01, 2019 10:08:21 AM com.jme3.asset.AssetConfig loadText
WARNING: Cannot find loader com.jme3.scene.plugins.gltf.BinLoader
Jul 01, 2019 10:08:21 AM com.jme3.asset.AssetConfig loadText
WARNING: Cannot find loader com.jme3.scene.plugins.gltf.GlbLoader
Jul 01, 2019 10:08:21 AM com.jme3.asset.AssetConfig loadText
WARNING: Cannot find loader com.jme3.audio.plugins.OGGLoader
Jul 01, 2019 10:08:22 AM com.jme3.audio.openal.ALAudioRenderer initOpenAL
INFO: Audio Renderer Information
 * Device: OpenAL Soft
 * Vendor: OpenAL Community
 * Renderer: OpenAL Soft
 * Version: 1.1 ALSOFT 1.15.1
 * Supported channels: 64
 * ALC extensions: ALC_ENUMERATE_ALL_EXT ALC_ENUMERATION_EXT ALC_EXT_CAPTURE ALC_EXT_DEDICATED ALC_EXT_disconnect ALC_EXT_EFX ALC_EXT_thread_local_context ALC_SOFT_loopback
 * AL extensions: AL_EXT_ALAW AL_EXT_DOUBLE AL_EXT_EXPONENT_DISTANCE AL_EXT_FLOAT32 AL_EXT_IMA4 AL_EXT_LINEAR_DISTANCE AL_EXT_MCFORMATS AL_EXT_MULAW AL_EXT_MULAW_MCFORMATS AL_EXT_OFFSET AL_EXT_source_distance_model AL_LOKI_quadriphonic AL_SOFT_buffer_samples AL_SOFT_buffer_sub_data AL_SOFTX_deferred_updates AL_SOFT_direct_channels AL_SOFT_loop_points AL_SOFT_source_latency
Jul 01, 2019 10:08:22 AM com.jme3.audio.openal.ALAudioRenderer initOpenAL
WARNING: Pausing audio device not supported.
Jul 01, 2019 10:08:22 AM com.jme3.audio.openal.ALAudioRenderer initOpenAL
INFO: Audio effect extension version: 1.0
Jul 01, 2019 10:08:22 AM com.jme3.audio.openal.ALAudioRenderer initOpenAL
INFO: Audio max auxiliary sends: 4
Bullet-Native: Initializing java classes

Furthermore, since my test code is sensitive to the values of q1 and q2, I write a new example that will find angles that show the bug. I’d appreciate if you could run this in your machine, as it should trigger the error AND find a quaternion for which the error always happens in your machine.
This time one of the boxes is added with no rotation and other is created with a random rotation vector. If a collision is detected the box is removed and re-introduced at another angle, until the collision is not detected. I also fixed the lighting and removed some irrelevant stuff.
Here is the code:

import com.jme3.app.SimpleApplication;
import com.jme3.bullet.BulletAppState;
import com.jme3.bullet.collision.PhysicsCollisionEvent;
import com.jme3.bullet.collision.PhysicsCollisionListener;
import com.jme3.bullet.control.RigidBodyControl;
import com.jme3.light.DirectionalLight;
import com.jme3.material.Material;
import com.jme3.math.ColorRGBA;
import com.jme3.math.Quaternion;
import com.jme3.math.Vector3f;
import com.jme3.scene.Geometry;
import com.jme3.scene.Mesh;
import com.jme3.scene.Node;
import com.jme3.scene.Spatial;
import com.jme3.scene.VertexBuffer;
import com.jme3.scene.shape.Box;

import static java.lang.Math.PI;

public class Bug2 extends SimpleApplication implements PhysicsCollisionListener {
  private int ticks = 0;
  private int lastCollisionTick = 0;
  private Mesh boxMesh;
  private Material mat;
  private BulletAppState bulletAppState;
  private Node box2;

  public static void main(String[] args) {
    Bug2 bug = new Bug2();
    bug.showSettings = false;
    bug.start();
  }

  @Override
  public void simpleInitApp() {
    bulletAppState = new BulletAppState();
    this.stateManager.attach(bulletAppState);
    bulletAppState.getPhysicsSpace().addCollisionListener(this);

    viewPort.setBackgroundColor(ColorRGBA.Gray);
    viewPort.getCamera().setLocation(new Vector3f(0,0,-10000));
    viewPort.getCamera().lookAt(Vector3f.ZERO, Vector3f.UNIT_Y);
    viewPort.getCamera().setFrustumFar(20000);
    /*
     Here the original code builds the cube from coordinates.
     The issue does not happen with JMonkey's Box at least for these particular values.
     */
    boxMesh = new Mesh();
    Box q = new Box(2000,2000,2000);
    for(VertexBuffer origin : q.getBufferList()) {
      boxMesh.setBuffer(origin.getBufferType(), origin.getNumComponents(), origin.getFormat(), origin.getData());
    }
    boxMesh.updateBound();

    mat = new Material(assetManager, "Common/MatDefs/Light/Lighting.j3md");
    mat.setColor("Diffuse", ColorRGBA.Blue);
    final DirectionalLight light = new DirectionalLight();
    light.setDirection(new Vector3f(0.5f, -0.7f, 1.0f));
    rootNode.addLight(light);

    createBoxGivenRotation(new Quaternion());
    box2 = createBoxGivenRotation(randomQuaternion());

  }

  private Node createBoxGivenRotation(Quaternion q) {
    Geometry spatial = new Geometry("Box", boxMesh);
    RigidBodyControl control = new RigidBodyControl(1.0f);
    spatial.setMaterial(mat);
    spatial.addControl(control);
    control.setKinematic(true);
    Node node = new Node();
    node.attachChild(spatial);
    rootNode.attachChild(node);
    bulletAppState.getPhysicsSpace().add(control);

    node.setLocalRotation(q);
    node.setLocalTranslation(Vector3f.ZERO);

    return node;
  }

  private static Quaternion randomQuaternion() {
    return new Quaternion().fromAngles(randomAngle(), randomAngle(), randomAngle());
  }

  private static float randomAngle() {
    return (float)(Math.random() * 2 * PI);
  }

  @Override
  public void simpleUpdate(float tpf) {
    super.simpleUpdate(tpf);
    /* If no collision is detected we abort (collisions are detected in 1 tick, 200 is an overkill) */
    if(ticks - lastCollisionTick > 200){
      System.out.println("Bug in physics! You can replace the random quaternion for the one printed on the previous line.");
      System.exit(0);
    }
    ticks++;
  }

  /* If a collision is detected, remove the second cube and try again with another random rotation. */
  @Override
  public void collision(PhysicsCollisionEvent event) {
    Quaternion q = randomQuaternion();
    int ticksSinceLastCollision = ticks - lastCollisionTick;
    System.out.println("Collision event in " + ticksSinceLastCollision + " ticks : retry with rotation quat " + q);
    lastCollisionTick = ticks;
    destroyBox(box2);
    box2 = createBoxGivenRotation(q);
  }

  private void destroyBox(Node box) {
    Spatial spatial = box.getChildren().get(0);
    RigidBodyControl control = (RigidBodyControl) spatial.getControl(0);
    control.getPhysicsSpace().removeCollisionObject(control);
    box.getChildren().get(0).removeFromParent();
  }
}

It takes 5-30 seconds to hit a bad angle, here is the output:

/usr/lib/jvm/java-1.8.0-openjdk-amd64/bin/java -javaagent:/home/user/.local/share/JetBrains/Toolbox/apps/IDEA-C/ch-0/191.7479.19/lib/idea_rt.jar=34091:/home/user/.local/share/JetBrains/Toolbox/apps/IDEA-C/ch-0/191.7479.19/bin -Dfile.encoding=UTF-8 -classpath /usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/charsets.jar:/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/ext/cldrdata.jar:/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/ext/dnsns.jar:/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/ext/icedtea-sound.jar:/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/ext/jaccess.jar:/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/ext/java-atk-wrapper.jar:/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/ext/localedata.jar:/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/ext/nashorn.jar:/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/ext/sunec.jar:/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/ext/sunjce_provider.jar:/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/ext/sunpkcs11.jar:/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/ext/zipfs.jar:/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/jce.jar:/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/jsse.jar:/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/management-agent.jar:/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/resources.jar:/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/rt.jar:/home/user/Perforce/user_all/utils/javautils2/collisionlib/main/out/production/classes:/home/user/Perforce/user_all/utils/javautils2/collisionlib/main/out/production/resources:/home/user/.gradle/caches/modules-2/files-2.1/org.jmonkeyengine/jme3-lwjgl/3.3.0-alpha2/2f8c92e0f76f4d1851d811c944ecb89c408b1b7e/jme3-lwjgl-3.3.0-alpha2.jar:/home/user/.gradle/caches/modules-2/files-2.1/org.jmonkeyengine/jme3-blender/3.3.0-alpha2/bbbb865a4808e9dcc1f8b940c6bed16449cd4018/jme3-blender-3.3.0-alpha2.jar:/home/user/.gradle/caches/modules-2/files-2.1/org.jmonkeyengine/jme3-desktop/3.3.0-alpha2/8c9fcea2c6702ef9d187deae1a0e15271b60df8c/jme3-desktop-3.3.0-alpha2.jar:/home/user/.gradle/caches/modules-2/files-2.1/org.jmonkeyengine/jme3-bullet-native/3.3.0-alpha2/ad86b62f2fede98bd644eefe37a1c628afd69270/jme3-bullet-native-3.3.0-alpha2.jar:/home/user/.gradle/caches/modules-2/files-2.1/org.jmonkeyengine/jme3-bullet/3.3.0-alpha2/6424a539a5447407bcaa53269ff2208cd6b41956/jme3-bullet-3.3.0-alpha2.jar:/home/user/.gradle/caches/modules-2/files-2.1/org.jmonkeyengine/jme3-terrain/3.3.0-alpha2/87d1a36ee894d2cf14e455fe830c8751d521b249/jme3-terrain-3.3.0-alpha2.jar:/home/user/.gradle/caches/modules-2/files-2.1/org.jmonkeyengine/jme3-effects/3.3.0-alpha2/518d7034117255846c0ee1989656b6ec4af548/jme3-effects-3.3.0-alpha2.jar:/home/user/.gradle/caches/modules-2/files-2.1/org.jmonkeyengine/jme3-core/3.3.0-alpha2/31f8f6a9bdc73b0b182204e056e2b4da93674316/jme3-core-3.3.0-alpha2.jar:/home/user/.gradle/caches/modules-2/files-2.1/com.google.guava/guava/22.0/3564ef3803de51fb0530a8377ec6100b33b0d073/guava-22.0.jar:/home/user/.gradle/caches/modules-2/files-2.1/org.apache.commons/commons-math3/3.6.1/e4ba98f1d4b3c80ec46392f25e094a6a2e58fcbf/commons-math3-3.6.1.jar:/home/user/.gradle/caches/modules-2/files-2.1/external.com.github.riccardobl/jme3-bullet-vhacd/1.0/96327c3992b6af277b1a80ae8a7b5bee1d441935/jme3-bullet-vhacd-1.0.jar:/home/user/.gradle/caches/modules-2/files-2.1/external.com.github.riccardobl/vhacd-native/1.1.1/7ce06b1a0dc09c69a5739174b96dd2cfb77f3f68/vhacd-native-1.1.1.jar:/home/user/.gradle/caches/modules-2/files-2.1/org.lwjgl.lwjgl/lwjgl/2.9.3/3df168ac74e4a8c96562cdff24ad352e255bf89c/lwjgl-2.9.3.jar:/home/user/.gradle/caches/modules-2/files-2.1/org.ejml/simple/0.27/957fc40035f6a084304d64b28febcbe66c0994c7/simple-0.27.jar:/home/user/.gradle/caches/modules-2/files-2.1/org.ejml/dense64/0.27/ea70271f286016777ac079a5b33941d4e2b56d00/dense64-0.27.jar:/home/user/.gradle/caches/modules-2/files-2.1/org.ejml/denseC64/0.27/2529c9f8ffa12e15a1d7a21ad8d05f4a6cddfc0c/denseC64-0.27.jar:/home/user/.gradle/caches/modules-2/files-2.1/org.ejml/core/0.27/21d79552c6e103a850e82bfe3a5cb7294d1870b2/core-0.27.jar:/home/user/.gradle/caches/modules-2/files-2.1/com.google.code.findbugs/jsr305/1.3.9/40719ea6961c0cb6afaeb6a921eaa1f6afd4cfdf/jsr305-1.3.9.jar:/home/user/.gradle/caches/modules-2/files-2.1/com.google.errorprone/error_prone_annotations/2.0.18/5f65affce1684999e2f4024983835efc3504012e/error_prone_annotations-2.0.18.jar:/home/user/.gradle/caches/modules-2/files-2.1/com.google.j2objc/j2objc-annotations/1.1/976d8d30bebc251db406f2bdb3eb01962b5685b3/j2objc-annotations-1.1.jar:/home/user/.gradle/caches/modules-2/files-2.1/org.codehaus.mojo/animal-sniffer-annotations/1.14/775b7e22fb10026eed3f86e8dc556dfafe35f2d5/animal-sniffer-annotations-1.14.jar:/home/user/.gradle/caches/modules-2/files-2.1/org.lwjgl.lwjgl/lwjgl-platform/2.9.3/fbc2afb3e288578e9942578decb6291a490549a0/lwjgl-platform-2.9.3-natives-windows.jar:/home/user/.gradle/caches/modules-2/files-2.1/org.lwjgl.lwjgl/lwjgl-platform/2.9.3/b1eafe80093381c56415731e1d64279e6140bcd0/lwjgl-platform-2.9.3-natives-linux.jar:/home/user/.gradle/caches/modules-2/files-2.1/org.lwjgl.lwjgl/lwjgl-platform/2.9.3/6686cf6ddaa20b4290aa6599a09bc0d17369be05/lwjgl-platform-2.9.3-natives-osx.jar:/home/user/.gradle/caches/modules-2/files-2.1/net.java.jinput/jinput/2.0.5/39c7796b469a600f72380316f6b1f11db6c2c7c4/jinput-2.0.5.jar:/home/user/.gradle/caches/modules-2/files-2.1/net.java.jutils/jutils/1.0.0/e12fe1fda814bd348c1579329c86943d2cd3c6a6/jutils-1.0.0.jar:/home/user/.gradle/caches/modules-2/files-2.1/net.java.jinput/jinput-platform/2.0.5/7ff832a6eb9ab6a767f1ade2b548092d0fa64795/jinput-platform-2.0.5-natives-linux.jar:/home/user/.gradle/caches/modules-2/files-2.1/net.java.jinput/jinput-platform/2.0.5/385ee093e01f587f30ee1c8a2ee7d408fd732e16/jinput-platform-2.0.5-natives-windows.jar:/home/user/.gradle/caches/modules-2/files-2.1/net.java.jinput/jinput-platform/2.0.5/53f9c919f34d2ca9de8c51fc4e1e8282029a9232/jinput-platform-2.0.5-natives-osx.jar com.xxx.Bug2
Jul 01, 2019 11:03:24 AM com.jme3.system.JmeDesktopSystem initialize
INFO: Running on jMonkeyEngine 3.3-alpha2
 * Branch: HEAD
 * Git Hash: 3f1f2e8
 * Build Date: 2019-05-22
Jul 01, 2019 11:03:25 AM com.jme3.system.lwjgl.LwjglContext printContextInitInfo
INFO: LWJGL 2.9.3 context running on thread jME3 Main
 * Graphics Adapter: null
 * Driver Version: null
 * Scaling Factor: 1
Jul 01, 2019 11:03:25 AM com.jme3.renderer.opengl.GLRenderer loadCapabilitiesCommon
INFO: OpenGL Renderer Information
 * Vendor: Intel Open Source Technology Center
 * Renderer: Mesa DRI Intel(R) UHD Graphics 620 (Kabylake GT2) 
 * OpenGL Version: 3.0 Mesa 18.2.8
 * GLSL Version: 1.30
 * Profile: Compatibility
Jul 01, 2019 11:03:25 AM com.jme3.asset.AssetConfig loadText
WARNING: Cannot find loader com.jme3.scene.plugins.ogre.MeshLoader
Jul 01, 2019 11:03:25 AM com.jme3.asset.AssetConfig loadText
WARNING: Cannot find loader com.jme3.scene.plugins.ogre.SkeletonLoader
Jul 01, 2019 11:03:25 AM com.jme3.asset.AssetConfig loadText
WARNING: Cannot find loader com.jme3.scene.plugins.ogre.MaterialLoader
Jul 01, 2019 11:03:25 AM com.jme3.asset.AssetConfig loadText
WARNING: Cannot find loader com.jme3.scene.plugins.ogre.SceneLoader
Jul 01, 2019 11:03:25 AM com.jme3.asset.AssetConfig loadText
WARNING: Cannot find loader com.jme3.scene.plugins.fbx.FbxLoader
Jul 01, 2019 11:03:25 AM com.jme3.asset.AssetConfig loadText
WARNING: Cannot find loader com.jme3.scene.plugins.gltf.GltfLoader
Jul 01, 2019 11:03:25 AM com.jme3.asset.AssetConfig loadText
WARNING: Cannot find loader com.jme3.scene.plugins.gltf.BinLoader
Jul 01, 2019 11:03:25 AM com.jme3.asset.AssetConfig loadText
WARNING: Cannot find loader com.jme3.scene.plugins.gltf.GlbLoader
Jul 01, 2019 11:03:25 AM com.jme3.asset.AssetConfig loadText
WARNING: Cannot find loader com.jme3.audio.plugins.OGGLoader
Jul 01, 2019 11:03:26 AM com.jme3.audio.openal.ALAudioRenderer initOpenAL
INFO: Audio Renderer Information
 * Device: OpenAL Soft
 * Vendor: OpenAL Community
 * Renderer: OpenAL Soft
 * Version: 1.1 ALSOFT 1.15.1
 * Supported channels: 64
 * ALC extensions: ALC_ENUMERATE_ALL_EXT ALC_ENUMERATION_EXT ALC_EXT_CAPTURE ALC_EXT_DEDICATED ALC_EXT_disconnect ALC_EXT_EFX ALC_EXT_thread_local_context ALC_SOFT_loopback
 * AL extensions: AL_EXT_ALAW AL_EXT_DOUBLE AL_EXT_EXPONENT_DISTANCE AL_EXT_FLOAT32 AL_EXT_IMA4 AL_EXT_LINEAR_DISTANCE AL_EXT_MCFORMATS AL_EXT_MULAW AL_EXT_MULAW_MCFORMATS AL_EXT_OFFSET AL_EXT_source_distance_model AL_LOKI_quadriphonic AL_SOFT_buffer_samples AL_SOFT_buffer_sub_data AL_SOFTX_deferred_updates AL_SOFT_direct_channels AL_SOFT_loop_points AL_SOFT_source_latency
Jul 01, 2019 11:03:26 AM com.jme3.audio.openal.ALAudioRenderer initOpenAL
WARNING: Pausing audio device not supported.
Jul 01, 2019 11:03:26 AM com.jme3.audio.openal.ALAudioRenderer initOpenAL
INFO: Audio effect extension version: 1.0
Jul 01, 2019 11:03:26 AM com.jme3.audio.openal.ALAudioRenderer initOpenAL
INFO: Audio max auxiliary sends: 4
Bullet-Native: Initializing java classes
Collision event in 1 ticks : retry with rotation quat (-0.32744917, -0.21652637, 0.3380672, -0.85533845)
Collision event in 1 ticks : retry with rotation quat (0.37618935, 0.37625277, -0.78039175, -0.32848758)
Collision event in 1 ticks : retry with rotation quat (0.101112604, 0.48361745, 0.5124898, -0.7023137)
Collision event in 4 ticks : retry with rotation quat (0.71556497, -0.18872455, -0.40624976, -0.5360139)
Collision event in 1 ticks : retry with rotation quat (0.28006914, -0.56971985, 0.6337262, -0.44200873)
Collision event in 1 ticks : retry with rotation quat (-0.733985, -0.5282083, -0.40346587, 0.13956141)
Collision event in 1 ticks : retry with rotation quat (0.81895703, 0.4648125, 0.25438598, -0.22033261)
Collision event in 1 ticks : retry with rotation quat (0.57673204, 0.59146553, -0.39953756, -0.39738956)
Collision event in 1 ticks : retry with rotation quat (-0.12692942, 0.7286861, 0.5379135, -0.40441895)
Collision event in 1 ticks : retry with rotation quat (-0.17857423, -0.18616566, 0.23010072, 0.9383535)
Collision event in 1 ticks : retry with rotation quat (-0.6680585, -0.70620763, 0.21943428, 0.08256641)
Collision event in 1 ticks : retry with rotation quat (-0.7338361, -0.6498605, 0.106110305, 0.16705249)
Collision event in 1 ticks : retry with rotation quat (0.01515869, 0.3795779, 0.92501026, 0.006858067)
Bug in physics! You can replace the random quaternion for the one printed on the previous line.
AL lib: (EE) alc_cleanup: 1 device not closed

Process finished with exit code 0
1 Like

Using the Bug2 application, I’ve reproduced the bug. I haven’t yet identified a root cause. The bug might be related to issue #1120, though the trigger appears to be different.

I ran Bug2 without failure for 18 minutes using a current build of the Minie physics library, so perhaps Minie will provide a workaround. Unfortunately, Bug2 fails on the latest (22-day old, v0.9.3) release of Mine.

I’ll issue a v0.9.4 release of Minie ASAP, so you can try it yourself.

Here it is: Release Minie 0.9.4 · stephengold/Minie · GitHub
If you build with Gradle, here’s a snippet:

repositories {
    maven { url 'https://dl.bintray.com/stephengold/jme3utilities' }
    jcenter()
}

dependencies {
   implementation 'jme3utilities:Minie:0.9.4'
}

For more information about Minie:

1 Like

Thank you very much, sgold. The issue seems to be gone with Minie! I am doing more fuzz tests, but so far I haven’t ran into any issue :slight_smile: . Are there plans to publish Minie on JCenter?

1 Like

I’m happy to hear Minie is working for you. I tried publishing it on JCenter and ran into a snag, namely that it (and one of the libraries it depends on) don’t follow Maven’s naming conventions. I plan to address that issue and try again … but not right away.

I’m still curious about the root cause of your issue. I’m convinced issue 1120 is related, and yet … current master-branch builds of the jme3-bullet library include a fix for issue 1120, and they still fail your test. I’ll open a new issue at GitHub so I don’t forget.

PS: It’s issue 1134: missing collisions for some rotations of a GImpact shape · Issue #1134 · jMonkeyEngine/jmonkeyengine · GitHub