So, it’s definitely time to talk about the River device in the next dev version of WM.

The river device is a major expansion of World Machine’s path tool, providing a huge amount of new flexibility in terms of creating “hero” rivers; that is, major rivers that should be under artist control, as opposed to those created by an automatic simulation-type process.

The best way to describe the new river tool is “semi-automatic”. That is, you will draw in the essential path you want the river to take, much like you might currently do with the Layout Generator’s path tool…

From there however, things become different.

You’ll set some additional  basic parameters associated with the river, for example the typical river channel width. The real power is in the river variation model; The river device accepts a new datatype called a  “Geomorphic Covariance Structure”, or GCS, which is a description of how the river is shaped in different scenarios. These can be as simple or as complicated as you like; they are created by new devices and/or macros that you or others create to describe river behavior.

The hope is to ship WM with a collection of macros that allow you to plug-and-play GCSes, for archetypal rivers. For example, a lowland valley river vs a fast moving mountain stream.

Some River Geology


To describe what parameters are under the control of the GCS, we’ll have to cover the basic geologic features of a river valley. This includes things like:

(All geology pictures below are wikimedia creative commons sourced)


Meanders are an emergent behavior of the fluid dynamics of a river, causing the river’s path to oscillate back and forth across the general downstream direction.

A meandering stream

From your specified river path, meanders are added. These can be specified in all manner of realistic (and non-) ways. Although the model is deterministic rather than simulating hydrodynamics, it does an admirable job of recreating river meanders.

Thalweg Behavior

The thalweg of a river is the deepest part of the channel. Our river model captures the repetitive pool and rapids behavior of a river as well as the lateral movement of the thalweg back and forth across the channel due to meander bends of the river.

Cutbanks and point bars

This includes cut-banks (eroded areas on the outer sweep of a meander), slip-off slopes (shallow areas of deposition at the inside of the river bend), and point bars.

River Width

Although you specify the average river width as part of the creation process, the GCS will vary the width of the river in a pattern relative to the meanders and thalweg.

This is very important, as wide/narrow points of the river are often strongly correlated with deep or shallow areas of the river.

Floodplain/Valley Shape

Finally, the GCS can also describe oscillations of the valley walls relative to the meanders/etc. Although the shape of the valley is more influenced by factors not specifically related to the river itself (such as hillslope erosion), including this in the GCS lets you correlate things like narrow points in the valley to the behavior of the river channel itself.


So, that’s the geology primer, now let’s look at the actual implementation in World Machine!

The River Model

Here’s a quick walkthrough in pictures of the River Model in action:

A basic river and floodplain


Above, you can see a basic straight channel with a simple but powerful River GCS applied; the river moderately meanders back and forth across the gently rising floodplain, with all of the other parameters (depth, width, riverbank cut, etc) all varying in concert to model a basic river.


Here’s a slightly more complicated river that also includes a surrounding valley:

River, Floodplain, Valley walls

The valley walls are included in this GCS; also, note that a distinct meander belt is present at the base of the floodplain (the shelf present near the river channel itself that, in reality, represents the area that the river continuously migrates within).


Finally, unlike the last few images that feature the river by itself, here’s a more complete example that shows the river embedded within an actual terrain:

Textured River Generator Example

This example uses a number of additional river model mask outputs useful for texturing, including masks indicates where the channel, floodplains, and valley exist, as well as a depthmap that can be used to identify deep pools or shallow riffles. This example also includes using the new sedimentation mask input of the erosion device to erode the terrain while preserving the river channel area itself.

The last thing I’ll mention about this upcoming release is that it represents a starting point; Hero rivers were the logical place to start this process, but I can certainly envision extensions to allow a “click to spawn a river from here” method within the Layout View, and perhaps even an eventual fully-automatic river mode that can turn the basic “river networks” created by flowmaps into fully detailed individual rivers. But that’s a post for another day.


7 thoughts on “Rivers”

  1. Looks amazing!

    I always ended up using hacky methods to create rivers. I’m working on a new terrain right now, wouldn’t mind waiting a while for the new device! Looking forward to the upcoming dev release!

  2. Fantastic! Really looking forward to playing with this.

    For my game development work World Machine is great because it lets me architect environments at a macro level while leaving the details to procedural generation. Rivers are a macro-scale feature that were really hard to pull off before though, very welcome.

  3. Veeeery nice and interesting development Stephen!

    I absolutely love the last ‘complete’ examples and the various visible masks there.
    So many opportunities there!

    Would you think it is possible to create branching creeks/rivers, a *bit* like this, to illustrate:

    It’s that I recently upgraded my license, otherwise this blog post would really qualify for this meme 🙂


    1. Those types of rivers are often referred to as “braided” rivers, occurring due to high sediment load in the river. That’s not something currently possible, but when I was talking with Greg, my geologist collaborator, that was one of the first things I asked too. 🙂 There are some straightforward methods to actually implement it, but in order to create realistic braids there’s probably some unknown research that needs to be done.

      1. Thanks Stephen 🙂

        The example is probably a bit too much…just a few braids would already be very interesting to have in a scene, but I guess it might not matter that much for the code/algorithm anymore once it’s in place(?).

        I’m really excited by what you have shown so far!
        Now it should be much easier to create terrains similar to these:

        So I can’t refrain myself from asking the impatient question:

        When’ish? 😀


        1. Btw…I searched for GCS and found work of Gregory Pasternack.
          I suppose he’s the ‘Greg’ you referred to as your collaborator?
          If so, my compliments to you for addressing development for this feature by seeking out collaboration with scientists instead of trying to invent the wheel yourself.

  4. Super cool to see folks interested in this. I developed the science behind this as part of my PhD with Greg Pasternack, who was my PhD adviser.

    I have some ideas for braiding, but haven’t gotten to publishing them, yet. Essentially, one way you can do it is by creating a control function for the model cross section that has braid channels. Or, you could draw more channels and connect them. Braids have anistropiy all over, so there are aspects we haven’t even come close to. This may be an area where erosion over the terrain may get us closer. You can see work by Murry and Paola to show a simple, celllular automata model for creating braided rivers.

    If you want more information on the science here is the paper that describes it all:


    You can email me if you want a copy.

    Also, Greg and I both have websites you can check out.

    Lastly, Greg is a big video game fan (also the reason why the collaboration started with WM) and I’m sure would appreciate if any of you use any of this in video games.

    Take care,

Comments are closed.