World Machine Development News

What’s in Progress At the Moment

Hi folks,

I realize things have been pretty slow/uncommunicative lately, for which I do apologize. It’s probably well overdue for me to lift the veil a little bit and show what’s in progress.

If there’s a theme to the next release of WM, it’s this:

Framework Changes: Generalize to Specialize

Cryptic? Here’s what it means.

All of the changes below are changes to the way World Machine works on the inside. These changes have been made to allow for new planned devices and features. Many of those new features have not been written yet, but I will discuss them anyways to provide the context for why the change was made.

Goodbye Layout Generator?

One of the major framework changes is allowing many more “Layout-type devices”, not just the Layout Generator. In WM 2.x the layout generator and the view are intimately linked.

No longer!

The Layout Generator will be renamed “Layout Shapes”, reflecting that many more Layout devices will be on the way. A new “Layout” tab will be added to the toolbar, and any device (including plugins by other authors!) can now potentially expose a layout UI.

This will immediately be useful in the River Generator device described later. But in the future, other exciting abilities would easily include:

  • Layout Faults (create specific terraces/fault lines at a location)
  • Layout Roads (an enhancement of the path tool that could better model roads by including concepts like banked turns, etc)
  • Layout Segments (let you create segment maps interactively — for example, quickly create a mask for a particular valley by clicking anywhere in it)

I’m sure you can think of many more specialized layout devices that would be useful! And I’d love to hear your ideas. The main thing that has held this back in the past was that the layout interface was only available to the layout generator; that will no longer be true.

Curve Datatype

This is a simple but powerful extension — there are now a variety of devices that produce and manipulate 1D curves. More will appear with time.  Eventually the existing devices will be retrofitted to accept them — making the existing Curves device much more useful since it won’t just be hand-sketching curves anymore.

More Macro-like things?

The macro device is also quite special in WM 2.x. It’s special-ness has been extracted, and can now be extended into new devices. Why would you want to do this?

  • A Repetition (or Loop) Device would apply its internal network multiple times, looping the result of the first application back into the input for the next time around. This lets you do things like apply a “little bit” of erosion of one type, then a bit of another, repeated over and over to create novel effects.
  • Devices can now have “internal networks.” This is like a mini-macro where you can override and provide more sophisticated effects than are built in to the device — for example, the Scatter device is planned to have a “User Specified” compositing type that would let you create the merge operation with an internal network rather than than using the default alpha blended/max/etc options.

User-defined Datatypes

I can already imagine the head scratching on this one — Not exactly the kind of headline that gets you racing out of bed to use World Machine. And yet, this is a really powerful framework feature, and I’ll explain why below.

There are lots of places within World Machine where you really need more than one piece of data to make sense of something.

Essentially, it’s now possible to create custom datatypes that are a bunch of existing World Machine datatypes (heightfield, RGB, parameter, etc) glued together.

This is roughly equivalent to creating a “struct” in a regular programming language. What’s more, the same code allows for treating an arbitrary number  of the same datatype as one thing — roughly an”array” in a programming language.

What does this enable?

Composite Things

Common things you might want to specify that previously would take two or more wires can now be carried around as a single thing. Some examples include:

  • Distortion amounts (specified as either an X and Y distortion amount map, or angle and amount maps — what’s more, you could throw in a parameter as well to let you tell apart which one you have on your hands!)
  • RGBA (RGB and an alpha mask)
  • Texture weightmaps (rather than a bunch of individual wires, you can treat textures and their weights as one unit)

Collections of Things

“Collections”  of heightfields/textures/etc that can be treated as a single entity. This lets you do things like:

  • “Execute for All” macro device that could perform all of its internal operations on each element of the collection. For example, if you imported a whole library of textures and want to color-correct all of them the same way (or, have each one automatically adjusted according to the network you’ve set internally). I haven’t pushed in this direction yet much at all, but it certainly would enable “batch processing” type workflows..
  • Provide bulk variations to the Instance Scatter device — if you have a whole library of individual things you want to scatter, you can just connect the library to the scatter device rather than 20 individual wires…


How does a complex feature like this actually make your life easier? In lots of ways. For example:

  • Remove clutter from the workview by having groups collapse all of the wires from devices in one group heading to another group into a single “cable bundle”.
  • Macro and plugin authors can transfer large numbers of settings between several different devices without exposing any of them to the user, making things much cleaner and intuitive for the end user — keep all the spaghetti inside the black box where it belongs.

So far, I’ve talked about framework changes. I should emphasize again that at least half of what I’ve talked about here is still in the future. What’s been made so far is the framework to enable them.

The Loop Device doesn’t exist yet, for example, but with the new framework in place it is trivial to create. The focus so far has been in designing the generalizations that will allow better specialization in the future.

In the next post, I’ll talk about the major new feature that inspired and leverages these changes, the River Generator…

By Stephen

Founder of World Machine

7 replies on “What’s in Progress At the Moment”

As far the Layout ideas go. What I would like to see is a way to want to paint with a soft brush that is custom set to work in a isolated zone only. If I want to paint a 2048 by 2048 area and not drift outside that zone, that would be nice for creating soft masks rather then having to do this in Photoshop. Also the idea to use the edges of a mask with a warp and or fractal blender. I want to blend the edges with an erosion input that only works on the edges. Of course the option to bleed the effect larger along the edge mask would be great. Another thing in mind is an advanced warper without the marbelizing issues. One last thing is i device for converting a terrain over to a equirectangular map for planets would be good.

Thanxs for the update.
New Layout .WOW
I would love to see a update. Make more detail on smaller maps. 5Km*5Km , It is not easy to add 100 meter detail onto a 4096*4096 map…It probably need to update the 3D view also..

You can use non-square builds to generate a 2:1 terrain so that you can map it onto a sphere?

Thanks for putting this up Stephen, much appreciated 🙂
I will have to read it all a few times again to properly understand and distill the useful/most interesting information from it.

I like the sounds of the new layout functions, new curve data type and “collections of things”.
To me they sound like the type of things which potentially allow me to do things with WM I couldn’t before: making more varied and realistic terrains more easily.

Regarding the River Generator: You definitely know how to create a cliffhanger 😉

If you are working on how to represent vector data in world machine, please keep in mind that it could be huge amount of data in a project. Ideally, you should create input vector device which is similar to tiled file input device. In other words this device should be able to dynamically load data part by part in dependent on current extent.
Also it would be perfect to support georeferencing of image and vector data. For example, it would be user friendly when loading geotiff for elevation data and OSM format for roads, rivers and lakes data without any hard tuning of data arrangement.

Hi Stephen,

It’s almost a month later now and I’m getting sleepless nights over the river system 😉

Care to lift the tip of the veil a bit? 😀


Comments are closed.