Introducing DynamicAnimControl

The code used in today’s buoyancy video is online at https://github.com/stephengold/Minie/blob/master/MinieExamples/src/main/java/jme3utilities/minie/test/BuoyDemo.java

Minie v0.7.6 was released tonight. You can find the JARs on GitHub at:
https://github.com/stephengold/Minie/releases/tag/0.7.6
and on Bintray at:
https://bintray.com/stephengold/jme3utilities/Minie/0.7.6

For a summary of the recent changes, consult the release notes:
https://github.com/stephengold/Minie/blob/master/MinieLibrary/release-notes.md

Also, I’ve updated Minie’s README.md to clearly explain why you might want to use Minie instead of jme3-bullet or jme3-jbullet: https://github.com/stephengold/Minie/blob/master/README.md

6 Likes

Today I submitted a pull request to add DynamicAnimControl to jme3-bullet and jme3-jbullet.

The PR implements a very pared-down version of DynamicAnimControl, corresponding roughly to its feature set in Minie as of October 2018. It doesn’t support:

  • attachments,
  • physics links without vertices,
  • frozen dynamic links,
  • bound/amputated kinematic links,
  • link volumes and densities,
  • centering heuristics,
  • shape heuristics,
  • inverse kinematics, nor
  • footprint estimation.

Many of these features will be very difficult to add to jme3-jbullet without access to the source code.

The good news is that it seems feasible to transition Minie to the new animation system. The port will probably take place in a new branch of the Minie repo, and for a while each release of Minie will be double: one version for JME 3.2 and one for JME 3.3. Since branching implies duplication of effort, I hope to make the transition period as short as possible. I haven’t decided when this should happen.

7 Likes

if noone really have jme3-jbullet sourcecode (but i remember someone provied link to some old fork) then i belive we should drop support for it, or “if someone is able”, then write a new one based on some older versions.

by drop i mean at least for DynamicAnimControl, because its like dead end because of jBullet.

because it block a lot. you are physics specialist here now :wink:

1 Like

The physics specialist wants to drop both jme3-bullet and jme3-jbullet. Minie is the future of physics in JMonkeyEngine—unless @pspeed publishes a physics engine.

1 Like

I guess we were given the link to the modified code that JME uses and then no one did anything with it. I’m asking if I can have the link again.

jbullet still works better for me. native bullet has a weird bug with the catch-up stuff that means I always have to run it single step. It’s weird because I’ve looked through the C++ code and I can’t spot the problem.

2 Likes

Source code for jbullet:

2 Likes

It’s great that you found the source code. You’re probably right that maintaining 3 libraries will be difficult for one person.

As for which libraries should be included in JME 3.3, I think that discussion belongs in a different Forum topic.

2 Likes

The pull request is integrated into jMonkeyEngine’s master branch!

Quazi reminded me that DynamicAnimControl (DAC) ought to have a page in the JME Wiki. To that end, I would like a few new users—alpha testers, in other words—to help me see the software with fresh eyes. The usual deal: as long as you’re using the software and providing feedback, I’ll support you as best I can. Send me a private message if you’re interested.

I expect the main hurdle to using DynamicAnimControl at the moment is configuring it for new models. In parallel with the documentation effort, I plan to write a configuration tool. The current tool (TuneDac) is an ugly hack, not worth documenting. And while I am gradually adding DAC tuning to Maud, Maud is a general-purpose editor, which makes it unnecessarily complex for this task. (Maud is also a long way from supporting the new animation system.) I foresee an immediate need for a tuning tool that’s simple and easy-to-use and can be made to work with the new animation system.

7 Likes

I hope not. Some of us cannot use jbullet.

2 Likes

Minie have updated/fixed bullet native library(same as JME have). No need drop, just update with Minie changes into it.

As i understand @sgold added jme3-bullet package classes for a DAC, but to have more features from Minie, why not just update [jme3-bullet-native] and state that all features from “some new minie related package” require use of jme3-bullet-native and will not work with jme3-jbullet.

its like “for android use android packages”, because also non android will not work… or “dont use both native and jbullet because it will not work correctly”. So same could be here “dont use minie package with jbullet”

Because as i see, jme3-bullet-native is not updated to required changes. In Minie there were not just changes to allow use of Minie, but there also were some fixes for physics. (that even if someone will not use Minei features, it will fix some problems for physics itself)

@sgold, i will check everything later myself, because what i need are ragdolls(half ragdolls, legs positioning and some nice features) as you already know, but after i will finish what i started.

2 Likes

Please take your discussion of physics libraries to another topic. This topic is about DynamicAnimControl.

A first draft of the DacWizard tuning tool is available from GitHub:
https://github.com/stephengold/Minie/tree/master/DacWizard

Current status: a cute toy. The “easy” parts are done: load a model from the filesystem, select which bones to link, configure the links, and write (Java) configuration code to a file.

Now comes the “interesting” part: automatically estimate range-of-motion from animation data…

5 Likes

I solved the interesting part. DacWizard is now ready for use.

I uploaded a walk-through video to YouTube. Take a look:

Puppet model was created by Nathan Vegdahl http://www.cessen.com
and is © Copyright Blender Foundation durian.blender.org

The Blender Foundation released Puppet under a Creative Commons Attribution 3.0
license.

5 Likes

re: your video: two forearm bones help simulate arm twist more cleanly, the low bone is usually constrained to only rotate with the hand on one axis to allow arm twist…long and short of it, the upper bone is the controller

1 Like

That makes sense.

Hi,

I have been experimenting with this lately and I noticed that in the required Minie physics replacement library the update method of PhysicsSpace has no access modifier anymore (see Minie Source) where it was public before (JME Bullet Source).

/**
 * Update this space. Invoked (by the Bullet app state) once per frame while
 * the app state is attached and enabled.
 *
 * @param time time-per-frame multiplied by speed (in seconds, ≥0)
 */
void update(float time) {
    assert time >= 0f : time;
    update(time, maxSubSteps);
}

This will make this method accessible only by classes in the same package (like BulletAppState) but not by user code. So it is essentially not possible anymore to step your own physics space without using a Bullet app state.

Why has this been changed and could this be made public again?

1 Like

Thank you for trying Minie and for getting in touch regarding this issue.

I changed the scope back in August, at 7f04d261. I did so because (at that time) I believed update() should only ever be invoked by BulletAppState and I wanted to avoid unnecessarily exposing library methods to application code.

However, as you point out, it’s very useful to be able to single-step a PhysicsSpace. Doing so from application code seems unlikely to cause issues. I’ll change the scope back to public.

Also essential from a server that doesn’t bother to run “all of JME” just to get app states.

2 Likes

Done. The change is in the newly released v0.9.0 of Minie.

1 Like

Awesome, thanks a lot! :beers:

Being able to step my own physics space is specifically useful for me because I roll my own app state management.

By the way your Dynamic Anim Control works well so far on my side, at least with the pre-configured models :+1:t3:

I think having a working Inverse Kinematics solution should be a large benefit for JME for stuff like putting feet on the ground, make characters grab onto things etc.

Keep up the good work!

1 Like