Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up

Integrate Bullet Physics and V-HACD into jMonkeyEngine projects (code has New BSD license)

License

NotificationsYou must be signed in to change notification settings

stephengold/Minie

Repository files navigation

Minie Project logo

TheMinie Project is about improving the integration ofBullet real-time physics simulationandKhaled Mamou's V-HACD Library intothe jMonkeyEngine (JME) game engine.

It contains 6 subprojects:

  1. MinieLibrary: the Minie runtime library and its automated tests
  2. TutorialApps: tutorial apps
  3. MinieExamples: demos, examples, and non-automated test software
  4. MinieAssets: generate assets used in MinieExamples
  5. MinieDump: a command-line utility to dump J3O assets
  6. Jme3Examples: physics examples from jme3-examples

TheDacWizard application, formerly a subproject,is nowa separate project at GitHub.

TheVhacdTuner application, formerly a subproject,is nowa separate project at GitHub.

Complete source code (in Java) is provided undera 3-clause BSD license.

Contents of this document

Why use Minie?

jMonkeyEngine comes withjme3-jbullet,its own Bullet integration library.Why use Minie instead ofjme3-jbullet?

  • Minie has many more features. (See the feature list below.)
  • Minie fixes many bugs found injme3-jbullet.
  • Due to its shorter release cycle, future features and bug fixeswill probably appear first in Minie.
  • Minie uses automated testing to reduce the risk of regressions and new bugs.
  • Minie's classes are better encapsulated, with fewer public/protected fieldsand less aliasing of small objects like vectors. This reduces the riskof accidentally corrupting its internal data structures.
  • Minie validates method arguments. This helps detect usage errors thatcan lead to subtle bugs.
  • Minie's source code is more readable and better documented.

Summary of added features:

  • Extensions toDynamicAnimControl
  • Soft-body simulation based onbtSoftBody andbtSoftRigidDynamicsWorld,including anchors and soft-body joints
  • Multi-body simulation based onbtMultiBody andbtMultiBodyDynamicsWorld
  • Convex decomposition of meshes usingKhaled Mamou's V-HACD Library,including progress listeners
  • New6Dof physics joints based onbtGeneric6DofSpring2Constraint
  • Alternative contact-and-constraint solvers based onbtDantzigSolver,btLemkeSolver,btSolveProjectedGaussSeidel, andbtNNCGConstraintSolver
  • collision shapes:
    • MultiSphere shapes based onbtMultiSphereShape
    • Box2dShape shapes based onbtBox2dShape
    • Convex2dShape shapes based onbtConvex2dShape
    • EmptyShape shape based onbtEmptyShape
  • debugging aids:
    • dump the contents of aBulletAppState,PhysicsSpace,CollisionShape, orMultiBody
    • visualize physics objects in multiple viewports
    • customize debug material per collision object
    • visualize the local axes, velocities, bounding boxes, CCD swept spheres,and gravity vectors of collision objects
    • visualize the children of compound collision shapes
    • optional high-resolution debug meshes for convex shapes
    • options to generate debug meshes that include indices,normals (for shading), and/or texture coordinates (for texturing)
  • all joints, shapes, collision objects, and multibodiesimplement theJmeCloneable andComparable interfaces
  • enable/disable aPhysicsJoint
  • single-ended physics joints
  • ignore lists for collision objects
  • application-specific data for collision objects
  • access more parameters of rigid bodies, vehicles, characters, joints,collision shapes, contact/constraint solvers, etcetera
  • option to apply scaling with aRigidBodyControl

Some jme3-jbullet classes that Minie omits:

  • KinematicRagdollControl,HumanoidRagdollPreset, andRagdollPreset:useDynamicAnimControl instead
  • RagdollUtils: not needed

Other important differences:

  • PhysicsSpace.addAll() andPhysicsSpace.removeAll() add/remove collisionobjects only; they do not add/remove joints.
  • RagdollCollisionListener interface changed and movedfrom thecom.jme3.bullet.collision packageto thecom.jme3.bullet.animation package.

Jump to the table of contents

Downloads

Newer releases (since v0.5.0) can be downloaded fromGitHub.

Older releases (v0.1.1 through v0.4.5) can be downloaded fromthe Jme3-utilities Project.

Maven artifacts since v3.1.0 are available fromMavenCentral.

Jump to the table of contents

Conventions

Package names begin withjme3utilities.(if Stephen Gold holds the copyright) orcom.jme3./jme3test. (if the jMonkeyEngine Project holds the copyright).

The source code and pre-built libraries are compatible with JDK 8.

Jump to the table of contents

Overview and design considerations

The role of physics simulation in games

Most computer games don't require detailed physics simulation.

  • Canned animations usually suffice to illustrate characters walking,jumping, and fighting.
  • Detecting when a character enters a fixed zoneor comes into range of another character is a simple geometric calculation,provided the zone or range has a box or sphere shape.
  • For outer-space games, the equations of motion (Newton's 3rd Law) are easilyimplemented from scratch.

Other games require physics simulation, either because detailed physics isintegral to gameplay (as in bowling or auto racing) or else to enhance theverisimilitude of effects such as collapsing buildings and/or people.For such games, a real-time physics library such as Minie should prove useful.

How Minie works

How Minie works

Computational efficiency

The computational cost of collision detection grows rapidly withthe 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:

  • Use very simple collision shapes (such as boxes, capsules, and spheres)wherever possible.
  • Minimize the number of collision objects bymerging static bodies together andsimulating only the most relevant moving bodies.
  • Minimize the number of nodes in each soft body.

Scaling the world

For a physics simulation, it might seem natural to choose kilograms and metersas 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 havemasses 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 documentationrecommends against doing so.For some collision shapes, margin increases the effective size of the objectand distorts its effective shape.For this reason, it's undesirable to have a collision objectwith 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 areequivalent to world coordinates, these recommendations could impactmodel creation and scene-graph design.Physics units should therefore be chosen with care,preferably early in the development process.

Jump to the table of contents

How to build Minie from source

How to build Minie from source

Jump to the table of contents

Tutorials

Jump to the table of contents

An overview of the demo applications

An overview of the demo applications

Jump to the table of contents

External links

YouTube videos about Minie:

Jump to the table of contents

History

The evolution of this project is chronicled inits release log.

Most of Minie was originally forked fromjme3-bullet,a library in thejMonkeyEngine Game Engine.

From January to November 2018, Minie was a subproject ofthe Jme3-utilities Project.

Since November 2018, Minie has been a separate project, hosted atGitHub.

Jump to the table of contents

Acknowledgments

Like most projects, the Minie Project builds on the work of many whohave gone before. I therefore acknowledge the followingartists and software developers:

  • Normen Hansen (aka "normen") for creating most of thejme3-bullet library(on which Minie is based) and also for helpful insights
  • Rémy Bouquet (aka "nehon") for co-creatingKinematicRagdollControl (on whichDynamicAnimControl is based),for creating the Jaime model, and also for many helpful insights
  • Jules (aka "dokthar") for creatingthe soft-body fork of jMonkeyEnginefrom which Minie's soft-body support is derived
  • Khaled Mamou for creating and licensing theV-HACD Libraryfor decomposing meshes into convex hulls
  • Riccardo Balbo (aka "riccardo") for creating and licensingtheV-HACD Java Bindings Project
  • "ndebruyn" for early testing of Minie on Android platforms
  • Pavly Gerges (aka "Pavl_G") for testing Minie on Raspberry Pi
  • Adam T. Ryder (aka "tryder") for creating and licensingthejME-TTF rendering system
  • [Paul Speed (aka "pspeed42")][pspeed], for creating theSimMath library
  • "oxplay2", for reporting aPhysicsRigidBody bug and helping me pin it down
  • "duncanj", for pull request #15
  • "qwq", for suggesting changes to how rigid-body contacts are managedand for authoring theConveyorDemo application
  • Nathan Vegdahl, for creating the Puppet model
  • Tobias Jung, for distributingProFont
  • plus the creators of (and contributors to) the following software:

I am grateful toGitHub,Sonatype,JFrog,Travis,MacStadium,YouTube, andImgurfor providing free hosting for this projectand 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 cancorrect the situation:sgold@sonic.net

Jump to the table of contents


[8]ページ先頭

©2009-2025 Movatter.jp