Research Questions around JMonkey Engine 3

I am trying to research the best 3D Java Library for my use needs. I have honed in on JMonkeyEngine 3, and would like the following questions answered.

I have knowledge of how Java3D 1.7 and earlier works. However, when comparing it to something like OSG, even though that is in a separate language, Java3D lacks additional features such as special effects.

I have been hoping to find something more advanced than JavaFX 3D, at the same time.

1) I believe I want something which uses a Node Graph or Tree to assemble, hold, manipulate and process 3D related object phenomena. How does JMonkeyEngine 3 work in this regard?

2) Does JMonkeyEngine 3 have a capabilities system, which must be used, (or capabilities “compiling”), or not? How does JMonkeyEngine 3 work in relation to that regard?

3) I will probably like file format support, definitely reading by maybe also writing, for different 3D graphics toolkits, particularly Blender3D. What 3D design screen objects and file types does JMonkeyEngine 3 understand?

4) I would like a pre-movement/collision detection system for the outsides of 3D objects. Does JMonkeyEngine 3 support this?

5) I seek support for 3D visual effects, certainly at or very similar to the extent that OSG, for C++, does. What does JMonkeyEngine 3 offer here?

6) Naturally it all needs to be able enough to paint on a Java Swing JComponent or a JPanel, somehow. This is of course the case?

7) There is a total Javadoc documentation included for use of the entire library?

8) I want a product that is debugged, complete, Free Open Source Software, with online Forum support for free, which can be used in a commercial context for free, that is a professional level library. Is JMonkeyEngine 3 this?

9) In JMonkeyEngine 3’s own view, how does it compare to the other Java 3D libraries out there, for Professional 3 Dimensional graphics, as well as for Game or Modelling purposes, all via one library set?

10) Do things like BIS Guard work successfully on the JMonkey Enge 3 .jar files successfully?

I have no idea what your needs are but the simple answer would be: „yes“

Please also read the tutorials, most questions will be answered there. The tutorials will give you an idea about how you could use jMonkeyEngine for your project.

First of all you must know that JME is engine(toolkit) over LWJGL.

  1. yes, its Scene Graph you mean here i assume

  2. yes CAPS are there(if im not wrong it comes from lwjgl)

  3. best GLTF/FBX you can import/export in Blender, since this formats support animations and GLTF is new standard.

  4. Yes, it have physics lib, but best if you will use Minie library (its same lib, but more expanded/fixed). It support cloth physics / ragdolls / advanced vehicles etc too.

  5. JME have default Particle Emitter, but i would suggest use one of Community projects for Effects system. For example Effekseer

  6. This is possible, but strongly not advised. You should use proper in-render GUI library like Lemur.
    You can paint over textures OFC if you want, but i suggest you use Lemur or other in-render(not separate render system) GUI lib. There is also Nifty implementations that are nice, but still i think Lemur is best way to go.

  7. Yes, see above menu links on this site.

  8. YES, no fee, open, for commercial, debugged and about completed: it have all needed for simple games, you would just need some community library for ECS and you can replace any default JME system with another, for example pathfinging(ai) or physics.
    Myself i would suggest you to use Gradle in ANY IDE you like and JME-SDK just for assets

  9. Well, there is no compare, i were looking for Java 3D libs and JME is only way here.

  10. Sorry, im not specialist with BIS Guard, but if you want code protection, there are many ways to do so, but you need implement it yourself. Myself i were thinking about providing custom JVM that will read coded files or something like that. But fact is, if someone will really want, he will hack it anyway.

Here you should rather explain why you need it.

If its about avoid game hacks, then for example Steam itself provide tools for it, or you can use external tools.

If its about avoid pirate copy, well, you can always do like RED studio(Witcher 3) - it is DRM system that they needed to remove anyway, since people were angry.

I think 10) point is a big topic here.

-Is JMonkey Engine 3 a Java Library contained in one or more .jar files?

-Is JMonkey Engine 3 Free, Open Source Software (FOSS)?


1 Like

yes, and it have repository packages prepared(compiled + source + javadocs), so for example if you are using Gradle + some IDE like Netbeans, you can just 2-click on project dependencies and select “download sources” and it will cache source for you.

gradle example(in dependencies {):

compile "org.jmonkeyengine:jme3-core:$jmeVersion"

JME SDK tho have prepared packages contained within it(with sources), but in ANT you can also upgrade it yourself as i remember.

you can find basic template on jMonkeyEngine | Quick Start, but you will probably need more packages from JME anyway.

For more advanced people, if you have own repository server for example using Nexus repository, and you have alias for this packages, you can “copy” source into it just by doing above, so it will never be lost.

Thanks for your addressal answers to my questions so far. I still need clearer and more specific responses for the following questions, originally posed at the top of my discussion thread here. All of these still apply to JMonkey Engine 3:

2#) Is the option not to use capabilities present, while being able to surpass them? If so, what is it? Is there a compile() command, like Java3D? Is such a secondary approach too slow, how fast does it tend to work?

3#.a) Do .GLTF, .FBX file formats (what are their file extensions?) work with, from Blender 3D:
3D objects including, polygon surfaces, edges and vertices, NURBS curves, smooth surfaces,
3D solid objects, materials, textures, lights, camera(s)?

3#.b) If not, what JMonkeyEngine 3 file formats are suggested?

3#.c) Does Blender support does .GLTF, .FBX have by default, or does it need a Blender plugin? If so what is the name of the Blender plugin?

3#.d) Can someone please include a list here of all JMonkey Engine 3D, 3D object supporting file formats, compatible with all of 3.a), for Blender3D or for other (64 bit Windows)/(64 bit Linux) 3D computer graphics toolsets?

10#) Does BisGuard work on the JMonkey Engine 3 .jar files? Is there someone who specifically knows if this is true or not, or could quickly test verify this, and reply to me again, here, kindly, please?

Hi @Z1234, good to meet you. It would be good to understand what you’re trying to do, just so we can understand the context

3#.a) Do .GLTF, .FBX file formats (what are their file extensions?) work with, from Blender 3D:
3D objects including, polygon surfaces, edges and vertices, NURBS curves, smooth surfaces,
3D solid objects, materials, textures, lights, camera(s)?

The j3o format is the most performant (that is a JMonkey specific format) but a number of standard formats are supported if the org.jmonkeyengine:jme3-plugins dependency is added. I suggest using that and seeing if the file types you are looking for are supported (just try loading things with the assetManager). I personally start with GLTF files (and then convert then to .j3o using the BinaryExporter class)

3#.c) Does Blender support does .GLTF, .FBX have by default, or does it need a Blender plugin? If so what is the name of the Blender plugin?

That’s really a blender question, but I can see GLTF and FBX in my copy of blender (I’d suggest having a look at these applications and seeing what they do, it may be quicker than asking)

Greetings, Forum Participants! :bow_and_arrow:

I am trying to research, separately and beforehand, that which is most pertinent and required
by I/we at this end, for our Java 3-Dimensional software project needs. I have been considering JReality or Ardor, but I seem to so far be forming the view that JMonkey Engine 3D may be the best for an all-options, total java library.

Can someone please get back to my discussion thread here and reply to the remaining questions
with specific, addressal answers, please?

2#) Aparently, JMonkey Engine 3 supports a capabilities system. But if you don’t want to involve capabilities, how can things still work? Is there a .compile(); method in there, to acheive this?

3#) What is the difference between .GLTF and .FBX? What do they indeed, and not, support? In terms of 3D object phenomena, and then, Blender 3D? Does Blender 3D come with .j3o support, or is a free Blender plugin available to grant it to Blender? Is .j3o the ideal, default, total including, best model file format between Blender 3D (or any toolset) to JMonkey Engine 3? Does the JMonkey Engine 3 Javadoc include a list of all Model File formats that the included fileloading support defaltedly supportes? (I ask
all this here because I presume that the Javadoc might already hold the answers).

10#) Does BisGuard work on the JMonkey Engine 3 .jar files with project or an executable .jar file? Is there someone who specifically knows if this is true or not, or could quickly test verify this, and reply to me again, here, kindly, please?

Although the engine technically support a few formats, the only one that is reliable that you should use is GLTF (unless you have some specific project requirement forcing you to do otherwise), and then you convert gltf models to j3o format in the engine. GLTF is inarguably the best format that JME can convert to j3o.

Jmonkey has an SDK (as well as a standalone plugin) for converting your GLTF model to j3o. Converting models in the SDK is as easy as double-clicking a file with a .gltf extension, and then within a few seconds you will have a .j3o version of that same model that can be used in JME. So j3o is not a format that Blender or any other programs will be able to read, but it is optimized specifically for use in JME.

I am not sure exactly what the difference is between FBX and GLTF - however this is not really an important question to ask, because neither format supports more game dev features than the other. If you have a FBX model that you want to use in JME, then you would want to import it to blender as FBX, then export it as GLTF, and then finally convert from gltf to j3o in the engine. Blender will allow you to turn most 3D formats into GLTF, and then JME allows you to turn that GLTF into j3o.

All formats (aside from j3o) will hold a lot of extra data that is essentially useless to a game engine. When you eventually get around to using Blender, you will find that there are many features that are designed for video production or other non-game related uses, and these types of features will usually never convert over into any game engine. When you turn a GLTF model into j3o, you are really only converting the models vertex buffers, bone and morph animations, and material. Anything else (such as particle emitters, filters, and special modifiers that were made in blender) will not be included when you convert to j3o, but instead you would use the engine’s built in particle system or filters which are optimized for a game.


I don’t think GLTF and FBX support the same features. It’s mostly the same, yes, but there are things like e.g. PBR where GLTF includes the actual roughness and metallics values and with FBX you would have to bake it etc. I don’t think FBX supports saving those properties.

Long story short: Use GLTF, it’s from Chronos aka the guys who created OpenGL and Vulkan themselves, with the goal of it being a format that every software can use.

2#) Given that JME3 has a capabilities system, is it possible to always work without capabilities? For example, the Java 3D library has a .compile(); command. Does JME3 have this, or similar?

4#) Does JME3 have a collision system, particularly? Does it include support for the force of gravity?

5#) What sorts of special effects does JME3 possess, as an overview?

10#) Can someone over there verify that a JME3 project, with the project .class files inside a .jar file,
with the necessary JME3 files, can all be protected with BisGuard, and the software will execute
all the same?

Here’s the best list jME3 Special Effects Overview :: jMonkeyEngine Docs
And you can of course make your own custom shaders and filters if you need to do something more unique.

Yes to both. Jmonkey has two thorough physics libraries.
Here’s some in depth info on JME’s bullet physics library: Physics: Gravity, Collisions, Forces :: jMonkeyEngine Docs
And here’s some info on JME’s minie physics library (my personal preference) Project overview :: The Minie project

You an also detect collisions without a physics system by using Rays and BoundingVolumes jMonkeyEngine 3 Tutorial (8) - Hello Picking :: jMonkeyEngine Docs

I must admit I am confused as to what a “capabilities system” is. Are you referring to JME’s SDK? If so, then no you do not have to use the JME SDK, and it is possible to build/compile your game in whichever IDE you like, or also by using a command line build tool like Gradle

I get the feeling that a lot of your questions could be answered if you just played with JME for an hour or two and worked through some of the tutorials.


2#) The Java 3D library, be it v1.5 or v.17, normalises certain abilities of the object away to save memory and speed things up. In order to keep one such ability, there is a system of Java methods which notifies the normaliser that you wish to keep such an ability. The entire subject exists under the heading of a
"capability", a subject that occurs in the following intro treatise on the Java3D SceneGraph:

The question is: does JME3 also requires the use of capability bit settings? How does JME3 work, in this exact area?

At least I can’t really infer what Java 3D is doing with the bit you mentioned. But I don’t think jME has something like that. In OpenGL (jME) you can hint that some geometries are static and some dynamic, but that is also just a hint to the GPU I suppose. That is the closest I can understand this. jME scene graph can be modified always.

Where would you need this capability bit set? Is this a requirement in your project?

O, I remember capabilities from java 3d. They were really horrible. Before you did something (like dynamically moving a node each frame) you had to say you wanted to be able to do that.

Isnt this an x vs y problem? What you really want is good performance; java 3d chose to use capabilities to achieve good performance (and a confusing api) but capabilities were not an end in themselves. Why do you particularly want capabilities? As opposed to good performance in general

Honestly, at this point: Try it out.
Not meant in a rude way, but rather in a time- and confusion-saving way.


I have one remaining question, and it pertains to the presence or absence of capabilities settings in
JMonkey Engine 3. Earlier on in this whole discussion here, some replied to my original capabilities question, question 2#), that:

yes CAPS are there(if im not wrong it comes from lwjgl)

-Can someone reconfirm whether JME3 possesses a capabilities system or not? If it does,
can someone reply with as to whether JME3 capabilities have to be used, or not, or if they
have a much simpler and successful secondary approach (or not)?

-Whichever the story is, can someone reply with a live html link to an example of a JME3 capability equivalent function call in the JME3 Javadoc, or the equivalent, if any such exists?

JME supports what “everyone else on the planet” calls a capabilities system. Meaning: you can query to see what capabilities the GPU has.

JME does not have a capabilities system like the busted Java3D API because JME requires no separate “make it fast” compile step because it is already fast.

Java3D’s ‘compile’ was a hack to work around the fact that it was a super super slow scene graph otherwise. The industry left this sort of mode switch behind a long time ago (10+ years? Edit: closer to 20 I guess.)

It is not required in JME. You make your scene graph and it is already optimized for the GPU.

Edit: that being said, if you make super crazy scene graphs of 1,000,000 of tiny objects then JME does have a way to batch that stuff into instances. This would be similar but 1000x more flexible than Java3D’s compile().