What is GeoGen?
GeoGen is a programmable height map generator. It runs a text script and renders a beautiful height map.
The generator can be used both as a stand-alone application and as a library integrated into other projects. It is open source, under the GPLv3 license.
Expressive scripting language
GeoGen features a custom scripting language designed to be very expressive, but also familiar to developers experienced with popular C-like languages. It features conditions, loops, functions and other familiar concepts, but also syntax very specific to map scripts.
Map scripts are each self-contained in a single text file, so they are very easy to work with and share with others.
Infinite maps, arbitrary cutouts and level-of-detail
GeoGen does incredible optimization and execution analysis magic™ to allow you to render arbitrary portion of of any map, at any scale! This means you can render any map piece by piece, and these pieces can even be rendered at different resolutions.
Natural extension of this feature is support for infinite maps - a script can declare that the map is unbounded, the renderer will then be able to calculate height at any coordinates. Using this, you can create maps millions of pixels across, as long as the individual tiles fit into memory.
This also makes the generator very easy to parallelize - you can split a map into multiple tiles and render each in parallel.
Stand-alone interactive application
While there is no graphical application available currently, the GeoGen interactive console allows you to access most of the features of the generator - you can compile, customize their parameters and execute them. For script developers, a script debugger is available - stepping, stack traces and other features are available. Rendered maps are saved into PNGs, either in grayscale height map form, or in topographically colorified form.
Elegant C++ API
It is very easy to include GeoGen into your C++ application. You can launch the generator using just a few lines of code, or you can go deeper and access the very internals of the virtual machine.
The API also allows the host expose custom classes and functions to the scripts.
Bindings for other languages and platforms are planned.