Introduction
I've been fascinated by large-scale procedural 3D worlds for many years. After taking a class on 3D graphics that brought me some deeper insights last year, I felt very motivated for digging deeper into the whole thing.
I had made many experiences with raw OpenGL programming. I think this is good because it is important to understand what is going on under the hood in order to achieve great results even when working with some sort of abstraction layers.
Framework
So I looked around for a 3D engine that I could built upon. Let me outline shortly what my criteria have been. The engine should have been free and preferably open-source, because I wanted to learn more about 3D engines and how they are designed. It should have a broad users base and community, so I wouldn't end up on my own if I get stucked at some point. And it should be modern and preferably lightweight.
I dumped Ogre and Irrlicht quite fast because both have became somewhat "dusty" and bloated over the years. Before looking closer on Unity, I stumbled over JMonkey. My decision arised kind of from a comparison of these two candidates that wasn't easy, but the aspects of being open-source and more lightweight tipped the scales in favor of the JMonkey Engine 3, JME3 briefly. Furthermore JMonkey is said to be an "engine by the book" which is very important at the sight of my desire to learn.
I consider it as a benefit that I can (must) use Java when working with JMonkey for two reasons. First, I know Java well, although I am very familiar with C++ either. Second, prototyping is just much more efficient with high level languages like Java. I consider myself somewhat inexperienced in the field of 3D applications that complex. At some point, when I have gotten a feeling for good and bad decisions in the design process of such 3D applications, I could still take the leap towards porting the whole thing to C++ and raw OpenGL.
First Results
I started maybe three or four weeks ago and here is what I got so far:
The solar systems are generated randomly at start up. For each star and planet a set of parameters (i.e. the color, the size, ...) is diced. All textures are then generated procedurally by the shaders. Also the "nebulae" are generated procedurally. They are rendered through ray marching, which is the main reason why the frame rate is somewhat meagre. Maybe I will switch to a particle system later.
Every star and every planet can be approached:
Let me state that at this point I'm very happy with JMonkey. I like most how well it is structured. I plan on sharing my experiences on JME3 and this little project in particular from time to time.







