The Minie Project is about improving the integration of Bullet real-time physics simulation and Khaled Mamou's V-HACD Library into the jMonkeyEngine (JME) game engine.
It contains 6 subprojects:
The DacWizard
application, formerly a subproject,
is now a separate project at GitHub.
The VhacdTuner
application, formerly a subproject,
is now a separate project at GitHub.
Complete source code (in Java) is provided under a 3-clause BSD license.
jMonkeyEngine comes with jme3-jbullet
,
its own Bullet integration library.
Why use Minie instead of jme3-jbullet
?
jme3-jbullet
.Summary of added features:
DynamicAnimControl
btSoftBody
and btSoftRigidDynamicsWorld
,
including anchors and soft-body jointsbtMultiBody
and btMultiBodyDynamicsWorld
New6Dof
physics joints based on btGeneric6DofSpring2Constraint
btDantzigSolver
,
btLemkeSolver
, btSolveProjectedGaussSeidel
, and btNNCGConstraintSolver
MultiSphere
shapes based on btMultiSphereShape
Box2dShape
shapes based on btBox2dShape
Convex2dShape
shapes based on btConvex2dShape
EmptyShape
shape based on btEmptyShape
BulletAppState
, PhysicsSpace
,
CollisionShape
, or MultiBody
JmeCloneable
and Comparable
interfacesPhysicsJoint
RigidBodyControl
Some jme3-jbullet classes that Minie omits:
KinematicRagdollControl
, HumanoidRagdollPreset
, and RagdollPreset
:
use DynamicAnimControl
insteadRagdollUtils
: not neededOther important differences:
PhysicsSpace.addAll()
and PhysicsSpace.removeAll()
add/remove collision
objects only; they do not add/remove joints.RagdollCollisionListener
interface changed and moved
from the com.jme3.bullet.collision
package
to the com.jme3.bullet.animation
package.Newer releases (since v0.5.0) can be downloaded from GitHub.
Older releases (v0.1.1 through v0.4.5) can be downloaded from the Jme3-utilities Project.
Maven artifacts since v3.1.0 are available from MavenCentral.
Package names begin with jme3utilities.
(if Stephen Gold holds the copyright) or
com.jme3.
/jme3test.
(if the jMonkeyEngine Project holds the copyright).
The source code and pre-built libraries are compatible with JDK 8.
Most computer games don't require detailed physics simulation.
Other games require physics simulation, either because detailed physics is integral to gameplay (as in bowling or auto racing) or else to enhance the verisimilitude of effects such as collapsing buildings and/or people. For such games, a real-time physics library such as Minie should prove useful.
The computational cost of collision detection grows rapidly with the number of collision objects and the complexity of their shapes. To simulate physics in real time, with modest CPUs, it's vital to keep the physics simple:
For a physics simulation, it might seem natural to choose kilograms and meters as the units of mass and distance, respectively. However, this is not a requirement, and for many games, MKS units are not the best choice.
Bullet documentation recommends that dynamic bodies have masses as close as possible to 1.
Also, to improve the performance and reliability of collision detection, Bullet applies a margin to most collision objects. By default, this margin is 0.04 physics-space units (psu). While the margin is configurable, Bullet documentation recommends against doing so. For some collision shapes, margin increases the effective size of the object and distorts its effective shape. For this reason, it's undesirable to have a collision object with any radius smaller than about 0.2 psu.
Dynamic bodies in forced contact tend to jiggle. Jiggling is mostly noticeable for sharp-edged bodies (such as boxes) resting on uneven surfaces, under high gravity. The higher the gravity (in psu per second squared), the shorter the time step (in seconds) needs to be. For efficient and realistic simulation of Earth-like gravity (9.8 m/s^2) with the default margin (0.04 psu) and time step (0.0167 seconds), the psu should be 0.3 meters or larger. This puts a soft lower limit on the dimensions (in psu) of dynamic bodies.
Since Minie's debug visualization assumes that physics coordinates are equivalent to world coordinates, these recommendations could impact model creation and scene-graph design. Physics units should therefore be chosen with care, preferably early in the development process.
How to build Minie from source
An overview of the demo applications
YouTube videos about Minie:
MultiSphere
shape)
watch (0:13)
source codeDynamicAnimControl
ragdolls)
watch (2:49)
source codeThe evolution of this project is chronicled in its release log.
Most of Minie was originally forked from jme3-bullet
,
a library in the jMonkeyEngine Game Engine.
From January to November 2018, Minie was a subproject of the Jme3-utilities Project.
Since November 2018, Minie has been a separate project, hosted at GitHub.
Like most projects, the Minie Project builds on the work of many who have gone before. I therefore acknowledge the following artists and software developers:
jme3-bullet
library
(on which Minie is based) and also for helpful insightsKinematicRagdollControl
(on which DynamicAnimControl
is based),
for creating the Jaime model, and also for many helpful insightsPhysicsRigidBody
bug and helping me pin it downConveyorDemo
applicationI am grateful to GitHub, Sonatype, JFrog, Travis, MacStadium, YouTube, and Imgur for providing free hosting for this project and many other open-source projects.
I'm also grateful to my dear Holly, for keeping me sane.
If I've misattributed anything or left anyone out, please let me know, so I can correct the situation: sgold@sonic.net