Use Env3D for a non-interactive, machinima-like 3d application?
I am currently a CS PhD student and my research is on knowledge engineering and particularly on modelling film direction knowledge.
For the purpose of conducting some experiments, I have been searching the web to find a high-level, open-source 3D engine/API, preferably for Java but any other suggestion would be useful, with fair documentation/tutorials and an active community, that will enable me to easily generate some basic "film scene" examples programmatically, without having to go in the deeps of 3D programming. And this has to be done through code, rather than in some 3D platform like 3DMax or Blender.
For example I may need to generate a room, then place some objects (e.g. furniture, everyday-objects) and some human characters in it, and then create basic animations for the characters (e.g walk, sit on a chair or lie on a bed, bend, make simple gestures such as wave, point, hug or grab an object, etc). I will also need to move the characters around, so I need to be able to create motion paths (straight or curved) for translating the characters and the camera in space.
I have spent a lot of time checking out a large number of 3d/game engines and the truth is I have got quite confused... I don’t have any experience in 3D programming and for that reason I need the API to be as high-level and easy-to-understand as possible. Note that I don’t care about audio, networking or high rendering quality. Also I don’t want this to be interactive at all (as opposed to games). I just need to generate a rendered clip through code, according to a number of specific directives.
I came across Env3D and it sounds really promising! But I am wondering whether Env3D would be the optimal solution for what I need to do. Is it high-level enough to easily tackle this task? Or maybe it would be overkill? And, in that case, should I be looking for a simpler, higher-level 3D/Game Engine, or maybe some other type of Virtual Reality API? Any specific suggestions?
I will very much appreciate any help/tip/hint!
Hi Yannis, thanks for the interest. Env3D is pretty high-level (it has to be in order to be accessible to first year students). All of the 3D details are pretty much all abstracted away from the user, so it sounds like on that front, Env3D would be a good fit.
The models and animation, however, would still need to be created in a 3D modeling program like Blender, and then imported into Env3D. You can look at the lesson on "Models and Animation" for details, but it is pretty straight forward.
I don't see any reason why you cannot use Env3D to create real-time animated "films". You can certainly move the objects in the 3d environment on a pre-calculated path.
With the new version, you can even use the scene creator to create your initial scene using drag-and-drop.
Your project sounds very interesting, if you need any more help, please feel free to ask.
Env3D is built on top of jME, so it is definitely at a higher level of abstraction. Env3D also allows access to the underlying jME engine, so if you want to do something fancy, you can always use jME directly from Env3D.
I recommend using the OBJ format for 3D models, but since Env3D is based on jME, you can use any jME formats -- which means you can use the Ogre format or even Blender directly.
The lessons are pretty easy to pick up and should give you a good base to implement your ideas. I check the forums regularly (as well as many of my students) so you should get a pretty quick response if you run into trouble.
Blender can import COLLADA format and export OBJ. I use blender all the time to transform models into env3d. There is a bit of a learning curve but it is the best open-source 3d modeliing software out there :)
Many times when you import and export models, you'll also need to move and/or scale the models also to make sure that it fits inside your 3d environment. You will also need to export the models with the correct parameters. That's why it is important to have at least a basic understanding of Blender.
Env3D does not have any motion paths built-in. However, jME has a cinematics subsystem which you may want to look at. I suspect that it should be pretty easy to invoke the cinematics subsystem from env3d, if you so desire.
I have not looked at the cinematics function myself, but I have been able to expose the jME particle system as well as Nifty GUI to env3d, so I think it should be straight forward to access the cinematics function as well. Basically, all of jME classes are available to env3d. You can access the jME scenegraph in env3d by calling the "getJme_node()" method from any EnvNode object.
Everything in env3d is done from code. The scene creator GUI simply generate a code template that you can fill in. The initial position information is stored in a text file, but you can see the loading code in the generated Game class. It is very simple.
Not sure what you mean by "frame-by-frame", but each object in the env3d has positional as well as rotational components. You can definitely write some code to read in a frame by frame state information and render the result one frame at a time.
As far as animation is concerned, 3d formats are generally very difficult to get right. jME has the ability to load various formats with or without animation. OBJ is what I used in env3d for pedagogical reasons. You'll need to check with the jME guys to see what animation format is best. I do know for a fact that jME can activate multiple animations at the same time, so you are safe there.