I apologize for being quiet for so long. I’ve been working hard on my Worldbuilder random planet generator, as well as preparing my website for Worldbuilder’s eventual release. Today that release has finally arrived, and Worldbuilder is now available for purchase from the Experilous Store!

It’s a long ways off from what I envision it could become, but it’s already got a lot of potential value. If you are an author of speculative fiction, a map enthusiast, or a programmer interested in procedural generation, read on to find out what Worldbuilder is already capable of, and where I hope to go with it in the future. Or grab the free demo here and try it out yourself.

What can Worldbuilder Version 0.1.0 do?

On the surface, it is very similar in functionality to the prototype I made last year. It starts by generating tectonic plates and uses the geological stresses caused by tectonic movements to generate elevation data. On top of this it creates wind patterns which distribute heat and moisture around the globe. This data is finally used to produce sensible biomes on the landmasses which are above sea level.

Under the hood, it’s an entirely new beast. Using the awesome capabilities of the LuaJIT compiler, and far more efficient data representations than I had in the JavaScript prototype, this version runs much more quickly. It is also built on top of an architectural model which enables significant modularity, improved cache usage, and the potential to squeeze a lot of performance out of multi-core systems once I find time to improve the execution engine.

Another feature that was often requested but absent in last year’s prototype is the ability to view the planet as a flat map. Worldbuilder now supports a small collection of rectangular map projections. These maps can be exported as PNG images at whatever resolution is desired, up to a maximum imposed by your graphics adapter. (On my system, I can get up to 16384×16384.) The PNG export also works for the globe view, and it leaves the background transparent so that you can easily place the planet on top of any background you wish, such as a starfield.

Mercator projection
equal-area projection

While the user interface and infrastructure code will remain closed source, the procedural generation code is being released under the permissive Apache License, Version 2.0. Have a stab at tweaking the available algorithms or adding your own. And feel free to port the source code or otherwise adapt the algorithms for your own projects. (You can find this source code in the ModuleSuites folder of the demo or full product.)

What does the future hold?

I don’t want to commit myself to too many promises just yet, but here are some of my thoughts regarding features I hope to implement, in no particular order.

Stylized Rendering: Instead of colored polygons, I’d like to support multiple modes of artistic presentations with more interesting details, shading, and coloring. A mode to mimic real satellite photos. A mode akin to a parchment map. Curvy lines and arrows for a wind map. The possibilities are naturally endless, but even just a few options beyond the current bland hexagons would go a long way. Related to the subject of presentation, I think it would be really cool to support many of the non-rectangular map projections that have been devised.

Manual Modifications: A randomly generated planet might be close to what you want, but once your imagination has had a shot at processing the map, I bet there will be some tweaks you’d like to make. Extend that island chain a bit further; add a solitary mountain in the middle of this barren wasteland; decrease the size of the desert over there or forest over here. I hope to add controls of this variety to enable you to massage the random planet into precisely the shape you desire.

Annotations and Illustrations: Continuing the above thought, there is also obvious use in being able to add textual annotations and graphical illustrations to the planet surface, especially when using a flat map projection. This could include labels for geographical features, pictures for cities, and more intricate details for plotting a travel route.

More Generation Algorithms: The current version is limited to a single overall method of generation, only allowing quick modifications through the exposed parameters. It is also missing a lot of relevant geographical details, most notably rivers and other inland bodies of water. I would very much like to expand on this. Fortunately for all of us, the open and modular nature of my generation system will hopefully give others a chance to contribute in this area too. I’m only one person, so there’s only so much that I can implement. But the power of a community can be an amazing thing! I look forward to what other people can do with the tools I am offering.

Improved Performance: As noted above, my execution engine has the capacity to thoroughly parallelize many of the algorithms used in procedural generation, but it’s simply not doing so at the moment. Once I take the time to implement basic parallelization, many of these improvements will come almost for free. Further improvements are likely possible through the use of highly optimized code for specific functionality (such as vector/matrix operations), and maybe even the utilization of GPGPU computation pipeline. I have no doubt that these optimizations will be crucial to enabling greater detail and advanced generation algorithms without sacrificing the ease of use that comes from quick execution.

Better User Interface: I’ll admit it; the user interface of the current version is subpar. I want to even call it shameful, but I should resist being too hard on myself. I’ve no doubt seen far worse UIs. Regardless, as I work on the other more exciting features, I full intend to continue improving and polishing the user interface also. Better map navigation being the most urgent.

What do you get with your purchase?

The pricing model that I am using for this product, and likely most others I release in the future, is heavily influenced by the article Freeloadable content – an alternative to paid DLC, written by Lars Doucet. In simple terms, after buying the product, all future versions and additional packages will be available to you for no additional charge, regardless of any difference between the price you originally paid and any later price attached to the product for new purchasers. As an entrepreneur, it is important that I make money to stay in business, but I wish to do so primarily by maximizing the value I provide to an ever-increasing audience, rather than by repeatedly extracting the maximum amount of money from each member of a stagnant customer base.

At the same time, I want to emphasize a distinction between my implementation of this model and a similar funding model which is far more common currently: alpha funding/early access. I’m not selling promises of a hypothetical product, some future version that’s going to be awesome and will totally justify the price I’m asking right now, even while the current version is worth significantly less. I humbly request that my customers view their purchases as entitling them to precisely what is available at the time of purchase, no more. That’s why I’ll keep my early prices low, and only increase them as the product grows and improves. I hope that this will serve as a high quality compromise that grants my customers the respect for their expenditures which they deserve while allowing me to retain a flexibility critical to navigating the risky and unpredictable waters of early entrepreneurship.

Go forth and generate!

I won’t hide that I’m super-nervous about selling my first product, but that nervousness is offset by the excitement of all the uses people might extract from the tools I have produced. I would love to hear and see what you come up with, or any suggestions you have. Feel free to email me or leave comments here on my blog. I thoroughly enjoy the process of working on this tool (most of the time, heh), but ultimately I’m making it for you, so I welcome any input about how it isn’t quite solving the particular problems that you face. If anything goes wrong with the software or the purchase process, or if you encounter anything that is unclear or confusing, don’t hesitate to contact me at support@experilous.com.

Once again, here are links for your convenience, to purchase Worldbuilder or try the demo.

Thank you, and happy genesis!


Comment by Andrea — 2015/03/31 @ 09:51

I’m so excited about Worldbuilder, and I think it has some great features. Thank you for offering it at a really good price.

Comment by Michael Jones — 2015/04/01 @ 15:49


Awesome! Already purchased a copy.

Your blog post here: http://experilous.com/1/blog/post/procedural-planet-generation

Was the inspiration for me to create an entirely new D20 system campaign setting for my friends and I, and I was just mulling over whether to use your notes in an effort to provide a tool similar to what I just purchased from you!

Two things you might be interested to know.

1) WorldBuilder.exe doesn’t seem to work properly in WINE on Gentoo Linux. Obviously this isn’t your fault, as it’s clearly stated in the product page that only Windows is supported. Just wanted to let you know where compatibility stands. I think it actually generated a world, but the display portion is failing and only rendering a black window.

2) You’re charging far too little for this product. Frankly, I would have been willing to pay $20 or more JUST to be able to generate flat maps of the worlds I was able to generate with the JS tool I linked above.

In fact, would you be willing to lend me a hand on converting the seed I decided on for your original tool to WorldBuilder?

I noticed that WorldBuilder calls some .Net code. I assume that you’re using it for the GUI? Have you considered looking into the Qt framework for GUI work? It’s quite powerful and works on all the major platforms.


Comment by Andy Gainey2015/04/01 @ 21:08

@Michael, You are too kind! Thank you for the support, and the purchase. That’s cool that you’re using it for a campaign; I hope it goes well.

I’m afraid the seeds from my prototype are completely incompatible with Worldbuilder. While they both use conceptually similar algorithms, the details are vastly different, and thus the random results of one cannot be reproduced on the other. But I am going to finally commit to adding a flat map view to my old prototype. I might not get to it this week, but sometime in April should be easily doable.

As for price, I deeply appreciate the vote of confidence. Just consider yourself lucky that you threw in your support while the price was low. :-) As I add features and bring it closer to the vision my perfectionist brain has created, I’ll indeed be increasing the price.

I’m kinda curious about the .NET code, as I didn’t expect that. I’m using wxWidgets for the GUI, so I do hope to port this to Linux/Mac in the future. Perhaps some small bit of that or another library is pulling in a .NET DLL for whatever reason.

Comment by Patrick — 2015/04/05 @ 14:20

Looking through the source, it’s clear I’d have to rebuild a good amount of C++ infrastructure to get it to work on its own. Which I can do, but…a request: could you add a world exporter? Nothing fancy or well-optimized, just spit out all the generated data as a few JSON arrays, or whatever makes the most sense.

Looking forward to seeing how this develops. The modular generation system you’ve set up is super cool.

Comment by Andy Gainey2015/04/05 @ 15:59

@Patrick, indeed, exporting the raw data is on the todo list, and shouldn’t be too hard to implement. Thanks for the feedback! It’ll probably bump the priority on that feature up a bit too. If I get clever, I might even figure out a good way to get the exporter to be yet another module. That way, if none of the shipped exporters give you a format you like, you could write one yourself in Lua. But if that’s too idealistic in the short term, I’ll still make sure to provide a basic exporter before long.

Comment by Solar — 2015/05/25 @ 03:41

This really looks interesting.
One thing that I would like to see in a world map generator that I haven’t seen in my search so far is ocean depth mapping for underwater settings.

Ocean floor topography is different enough from land topography that just going for a waterless world won’t do. Also, the biomes simply don’t work underwater.

Well, in the interest of promoting the eventual development of such a feature and the fact that even without it has plenty of use, I’ve gone and purchased this extremely low priced work-in-progress. Really can’t go wrong at that price, especially with your promise of no-additional-cost updates!

Comment by Andy Gainey2015/05/25 @ 15:14

@Solar, thanks for your purchase! And you are right, ocean floor mapping would be really cool. Fortunately, I have plenty of data to work with to generate features such as continental shelves, trenches, and underwater mountain ranges. At some point I also would like to add ocean currents and underwater biomes like coral reefs.

My next batch of features will mostly have to do with visual presentation, but next on the agenda after that will be higher quality and more detailed elevation generation. I’ll definitely keep ocean elevation in mind when I get to this.

Comment by Shawn Fisher — 2015/09/05 @ 00:27

I am very excited by this product, but It will not start up for me. It tells me, after a minute or so, that the program has stopped working. Drat! I really want to use this!

Comment by Andy Gainey2015/09/05 @ 01:16

@Shawn, sorry for the difficulties! Does it do nothing before the error message? Or is that after about a minute of using it normally? If the former, that just further emphasizes to me that I really need to add a log file so that there might be more information about specifically what the program was doing just before it crashed. Though most crash reports I’ve received have so far been related to the graphics system. Do you know what graphics card you have in your system? Also, which version of Windows?

If it only crashes after you’ve been using the program normally for a minute, then is there any particular action that seems to reliably precede the crash, or is it seemingly random?

Leave a comment