As I mentioned earlier this month, I’ve been encouraged by the interest in my planet generator experiment. In particular, I was surprised and excited by the wide diversity of interest outside of strict gaming and game development circles. This interest led a friend to suggest the possibility of developing a fully functional professional tool based on the experiment that had been predominantly intended for use in a strategy game.

After recovering from this month’s Ludum Dare game jam, followed by research, planning, and some early development, it appears that I’m definitely proceeding with this project. In terms of determining core features and priorities, I’m taking fantasy/sci-fi authors as my primary target audience, to aid them in their worldbuilding efforts. But the intention is that the software will be quite engaging for worldbuilders and map aficionados in general, as well as for those interested in procedural generation.

I’m presently working on implementing a rough vertical slice of all functionality. This vertical slice will include a Lua-scripted module system which will support the combination of various generators for different content, such as geological, hydrological, meteorological, ecological, cultural, and political data. A minimal selection of basic generators for some of this content will be developed. Presentation will also be designed to be flexible, to enable the visualization of different types of data, different styles of display, and different geometries (such as various map projections; that was a frequently requested feature). A few basic methods of exporting data and images will be implemented, since I am sure that people will want to use the results of this tool in ways that other software will handle far more effectively than anything I could develop. Finally, I hope to include some measure of control over tweaking specific aspects of the generated planet after the fact, for cases such as when a continent is almost perfect for a desired plot point but simply needs a little help to conform to an author’s vision.

Once that rough vertical slice is completed, I’ll be going back through each section to expand the available features and add plenty of polish. For example, I’d like to provide a few different elevation generators with plenty of configurable parameters. The tectonic plate system is likely to remain my favorite, but plenty of other algorithms exist to generate topology with a wide variety of characteristics. Presentation will certainly have plenty of room for expansion, also, as there are an untold number of map styles in existence, plenty of data to visualize, and a number of useful map projections. Export (and possibly some import) capabilities will similarly benefit from making multiple options available.

The current implementation has some basic generation semi-ported to C++ from my JavaScript experiment, a bare-bones start on the user interface, a single 2D map projection (the easy to implement equirectangular projection), and the ability to save the 2D or 3D view to an image file of (almost) any size. The elevation generation algorithm I’m using right now is far from perfect, and isn’t a direct port of my prior code, but here’s the result so far, projected to a 2D map:

Elevation data of a procedurally generated planet, projected onto a 2D surface using the equirectangular projection.

Elevation data of a procedurally generated planet, projected onto a 2D surface using the equirectangular projection.


Comment by labsenpai — 2014/12/31 @ 17:21

As a pen-n-paper scenario designer, all I would ask for are exportable, printing resolution images easy to key with text and icons. The details from generation are great for when the setting departs from pure fantasy.

Comment by Warren Knight — 2015/01/19 @ 15:18

I was(and am) inspired by your work on this. I have been playing around with the ideas a bit and although I am nowhere near the mathematician you are I have gotten a C# program working using a subdivided icosahedron in WPF3D. I have gotten the performance to where I can tesellate the icosahedron 6 times into 81920 triangles in about 16 seconds. I have done it up to 8 times which is around 1.3 million but the time becomes very long (on the order of 4 minutes) and I cant display a wire frame or I run out of memory (I have 16GBs on my machine) The problem I am having is assigning the triangles (in your case it would be the hexagons) to specific plates. I have tried looping through the triangles and assigning to the nearest plate which is very fast but comes out way too uniform. I have tried cycling through the plates adding a random adjacent triangle each time which looks okay (not great, you can get some odd shapes) but it’s dreadfully slow. Anyhow, I will keep banging on it and hopefully get it figured out :) I want to thank YOU very much for your inspiring work.

Leave a comment