I am fairly new to jme and i have always wanted to make a minecraft like game just for fun. What level of knowledge(jme knowlege, java etx…) do i need to make a voxel engine with jme. And should i use a already built voxel engine and if so what engines should i use?
Well you could start off by going through the JME tutorials, all in java if you already know java. Then depending on what you want to do, there is an existing cubes framework that gives the bloxel engine look to JME, though for some odd reason I can’t find the url link. But if you want to go about implementing it yourself there some tutorials out there that can provide a good insight in how to make a bloxel engine, here is the link for a tutorial I followed a while back to create a bloxel prototype:
Even though the tutorial is in Unity, the concepts and the general outline of the code should be the same. There may be other algorithms that you may need to know such as greedy meshing, as shown in this video:
There is a link to some JME code that does greedy meshing in the video description. Also as a side-note, the JME documentation is very helpful, so have that open at all times when your doing JME development.
May seem like a wall of text I sent you, but I think everything I listed should be enough to get you started on creating your own bloxel engine.
Note: if game development were swimming then making a block game right from the start is like learning to swim in the deep shark-infested end of the pool. Just because the graphics are “simpler” looking doesn’t make the engine easier. In fact, they are one of the harder types of games to make because of the flexibility and having to do nearly everything from scratch.
Versus something like an FPS where you create a level, create some models, load it up, and go.
I started on studying about Voxel Engines almost 2 years ago (after played a lot Minecraft). Until now, I tried Unity3D, Java FX, Java LWJGL, WebGL, C++ with GLUT and Unreal Engine. After many researches, reading tons of sources codes and a lot of math, I’m still stucked with Lighting (I hope I’ll finish it today).
The main problem developing a Voxel Engine is, as @pspeed stated, you have to do almost everything from scrat. JME3 helps you a lot, with basic maths, camera, physics and rendering pipeline and such. This is a huge help, because you can focus on engine itself, but conventional lights don’t work, conventional materials doesn’t work, conventional batching doesn’t work, conventional texturing doesn’t work and so on.
Before working on a Voxel Engine, I tought I was an Advanced Java Developer, because I was able to develop many corporative softwares, all very fast and stable. But when I started to develop on Voxel Engine I got myself lost on many basic things, like GC, Memory Management, Class Instantiation, Multithread and so on.
Now days I can develop even better corporative applications because I’m surviving the development process of a Voxel Engine, so I got many spare points on Java Skill…
As a last tip I can say to you: You are on right engine to do a Voxel Engine, now it’s just a matter of reading a lot about it and start coding! Go on!!
Thanks guys you helped alot. I think ill stick to the tut’s make a few basic games then try to make a voxel engine. And whats the chances of the jme developers on making voxel support in the engine?
The chances are: 0%. There is a plugin already, called Cubes. JME3 can’t support native Voxel Engine because Voxel Engines are unique and hard to make generic and most ppls who start a Voxel Engine, doesn’t finish it. So it’s pointless to support it (IMHO).
I really doubt there should be a “native” voxel support in jme. Moreover, it’s nearly impossible to use an extern library for your own voxel-game. As mentioned, there is the plugin Cubes, which can be used to build a block world with basically zero effort on your side. BUT you have to keep in mind: Each of these minecraft/bloxel/whateveryoucallit games will have different needs or features. After a certain time, you will find yourself at a point, where the library doesn’t exactly fit those needs anymore. And from there on, you will have to create your own voxel engine.
Cubes is fine as starting point to see how things can be done or for projects that want a little block world (I created a puzzle game in a really tiny block environment, like 20x20x20 or something - I could just add the library, create the block world and everything was fine. But if I really wanted to excessively use voxel features ingame, I propably would’ve created a custom/adapted engine for that).
I hope this helps you - Feel free to check out the source code of existing voxel engines to get an idea how everything works, when you take the challenge. But for the start, try to stick to a few easier applications, as hard as this might be for a programmer.
Okay good advice. Now one more thing. what is the difference between a voxel block and a regular geometry block(jme)? Like i know the performance gap is really big between them but i haven’t really found a definition i can fully understand.
A Voxel is a virtual block. A voxel doesn’t need to have a mesh. So you can’t associate a Voxel with a Mesh. For example, you can have a Air Voxel, which has no mesh, but have other data, like lighting.
Normally, a Chunk, which is a bunch of Voxels, can have a mesh. In JME3 isn’t different. You normally have Voxels and Chunks as logic class and when a Chunk needs to be renderer, you create a Geometry for that.
I thought a mesh was the shape and like color, texture, etx… of a block? what would the mesh be because the define of a mesh on google is the shape and something about polygons of a object?
Ohh and where could i find some good tut’s on how to use that Cube you guys were talking about?
EDIT: Damn, a few minutes too late.
Your answer was better
I mean like where i can learn how to use the framework? like i haven’t found anything like that on the jMonkeyEngine wiki?
Okay thank you. I feel kind of dumb not noticing that haha.
I’ve been building one for the last few months. It works good for a play project. Has dynamic lighting including day/night cycles, procedural terrain gen, infinite terrain, doors, torches, ladders and most basic Minecraft blocks. My code started with the cubes framework then I refactored it and added some features. My code on github if you are interested.
Ohh an another thing. what type of java Stuff should i read up on/learn before trying to write something like bloxel engine or use cubes? ex/ ArrayLists etc.