The next incremental version of Worldbuilder is now out. No huge changes to planet generation itself, but the user interface has received some significant improvements in terms of usability. Some of this stuff is really standard, and sort of feel bad that it wasn’t already in early versions, so I apologize that it took this long to become available. But the program continues to get polished up, a little here, a little there, so I hope your experience will keep getting better.
As always, a demo is available for download, and the full product can be purchased from the store page. (Once purchased, you’ll continue to have free access to future updates.) If you have already purchased Worldbuilder, the downloads can be found here.
The one notable change made to planet generation itself is the reintroduction of irregular grids. Last year, one of the major features of my web prototype and associated blog post was that instead of being stuck with a hexagonal grid and twelve evenly distributed pentagons marring the otherwise uniform pattern, the tiles were a random mix of pentagons, hexagons, and heptagons. This feature didn’t make it into Worldbuilder until this release. But now it is more efficient, more robust, supports quadrilaterals and octagons, and includes an additional variable to adjust the aesthetic quality of the random tiles.
Below you can see the effect of this aesthetic parameter. The left image strongly favors making each tile highly regular, so that all the polygon sides are nearly equal in length, and all the angles for each polygon are nearly equal. The result is that polygons with more sides are necessarily larger than polygons with fewer sides. The right image strongly favors making all tiles nearly equal in area, with the side effect that most of them have highly irregular shapes, variable side lengths, and variable angles. The middle image is an attempt to balance between the two extremes. This parameter can be adjusted in very fine increments to favor one extreme or the other for whatever balance produces the most desirable aesthetic effect.
As for the improvements to usability, those were mostly in the form of finally persisting configuration settings across sessions of running the program (and therefore adding a few more settings that would only be useful with persistence), and improving the interface for exporting images and other forms of data.
I suspect that the most prominent persisted setting for most users will be the recently-opened list of world generators, and the option to auto-load the most recent of those when the program starts (off by default; check Help->Configuration to enable). Also useful, the image export dialog will also remember the most recently used image sizes, along with other newly available image export options.
For exporting data, the limited options in the File menu have been partially superseded by the new Export menu, which lists all the individual items that can be exported, letting you export just the parts you want. More options for file types have also been added, for both images (BMP, JPEG, PNG, and TIFF) and text-based structured data (JSON, Lua, XML, and YAML). For the moment, only data that is used by the graphics system is available for export. This means textures, cube maps, triangle lists, and the viewport showing the final rendered planet with all the chosen view settings. I’ll need to go back and include all the non-graphics data in a future release, but the above four categories cover most of the valuable stuff.
Exporting viewports now lets you specify the amount of supersampling you desire, up to 4×4 (which was the default and unconfigurable value since 0.2.2). Non-viewport images (textures and cube maps) don’t let you choose an image size or supersampling level, since the image data already has a well defined size. But they do let you specify how the numeric ranges map to color values, since the numeric values often represent some value completely unrelated to color. For example, elevation might be anywhere from -1.0 to +1.5, with 0.0 being sea level, while a distance field goes from 0.0 to 1.0, but in practice might never go higher than 0.1. You can see the difference in the two cube maps below between exporting with the range 0.0 to 1.0 on the left and 0.0 to 0.1 on the right. Since I can’t predict ahead of time what these ranges will be for any given texture, I leave it up to the user to maximize precision by manually selecting the range.
Here are the recorded changes for this version. Or check out the full history.
- Added a system to persist configuration settings.
- Existing options, such as logging and compiler settings, are now persisted.
- Recently opened generators are remembered, and the most recent one can be optionally set to open on startup.
- Window state is remembered and restored on startup.
- Export settings are remembered.
- Improved the export system.
- The new Export menu categorized individual data elements that can be exported independently of other data.
- Exportable elements include viewports, textures, cube maps, and triangle lists.
- Viewport supersampling levels can be chosen.
- Recently used viewport output sizes are remembered and easily selectable.
- Texture and cube map data with floating point numeric elements can have their data ranges specified when mapping to the red, green, blue, and alpha channels of the output image.
- Multiple image file formats are supported: BMP, PNG, JPEG, and TIFF.
- PNG files can have their compression level chosen, and can optionally be saved as interlaced PNGs.
- JPEG files can have their compression level chosen, and can optionally be saved as progress JPEGs. An additional step can also be taken to optimize the compression tables.
- Multiple structured data file formats are supported: JSON, Lua, XML, YAML. This currently only applies to triangle lists.
- When opening or saving files, the default directory will be based on the specific type of file being saved, and will not simply default to the last directory viewed from anywhere in the application.
- Disruptions to the highly regular hexagonal grid are now supported.
- The amount of disruption is configurable through the rate and iteration parameters.
- The shape of the polygons can be weighted toward regular polygons at the expense of inequal area per polygon, toward equal area for all polygons at the expense of increased irregularity, or some balance between these two ends of the spectrum.
- The minimum and maximum number of sides of polygons can be adjusted, down to 4 as the minimum, and up to 8 as the maximum.
- Minor improvements to distance field generation.
- Fixed duplicate polygon generation when one tectonic plate was completely surrounded by a single other tectonic plate, creating a hole in the second tectonic plate.
- A certain class of memory leaks which persisted until opening a different world generator has been eliminated.
- Fixed a memory leak when saving an image to a file.
- The faceFaceIndices array accessible from script modules now correctly stores the indices of neighboring faces for each face in a mesh.