All posts by Remnant

World Machine Author

Build 3016

Hi folks,

Build 3016 is almost ready to go. I’ve been trying to rotate areas that get attention with each release, in an effort to evenly hit various pain points, requested new features, and features that you didn’t know you needed until you seen em. 😉 There’s still a lot of exciting things to come regarding rivers, texturing, new erosion models, etc, but I wanted to address a few other areas with this build.

One underlying goal is to be able to move the Dev channel build over to Release channel soon. Thus, a number of the changes are aimed at enabling you to create good results faster and with a better experience. Without further ado, here’s what’s new, improved, and changed, large and small:

Blueprints

 

Blueprints are a snippet of connected devices that you can quickly paste into your world. The intention is to speed development of common tasks of world creation, while still keeping all of the various parts visible and tweak-able at will.

This contrasts with macros, which intentionally hide their contents away and present themselves as an abstract, black box. This goal is complementary to Blueprints, which can make connecting and setting up your macros quicker and easier.

The uses are many, but especially:  Rapid creation of your world by dropping prefabricated “bricks”,  quickly placing sets of commonly used-together devices, standard file I/O blueprint for your project’s needs (directory structure, what to export, low and high res exports, etc), etc etc.

Blueprint files are simply TMDs stored within the Documents\Blueprints library folder, so they are easy for you to edit and share. You can create them either by saving worlds into the Blueprints folder, or using the handy drag-and-save blueprint creation tool within WM:

3016 will ship with some basic blueprints, but this is definitely an area where you will hopefully find  yourself quickly creating a custom set of blueprints, as the bar to creation a useful blueprint is intentionally much lower than macros.

New Library Interface

 

 

Build 3016 promotes both Macros and Blueprints to the same level as devices: Any favorite macro/blueprints are now available in the menubar as well as the right-click context menu. The improved library dialog fixes a regression where favorites were not being saved or handled properly, and now allows you to mark an entire folder as a favorite as well.

New Examples

 

The “Load Example World” command now also uses the library dialog, making it easier to browse the library of example files.

The library of how-to files and scenes  is being revised and fleshed out with an eye towards the next build becoming the standard Release channel build that is downloaded by new users.

I’m experimenting with making the Load Examples function more visible by promoting it to the menubar. This may or may not persist, but I want to make browsing and experimenting with examples as easy as possible for new users.

Bugfixes

Several very important bugs have been fixed in this version, including finally tracking down a crash & build problem that has lingered in the dev builds for quite a while revolving around state corruption after undo/redo, device deletion, etc.  And in case you still run into a crash bug, World Machine now has:

Autosave

The current state of your world is kept saved at all times; if World Machine crashes or your machine otherwise has an interruption, WM can reload your work on its next start.  This has been unexpectedly helpful to me during the development of WM itself, and it should continue to be useful to ya’ll in the field.

Copy/paste between instances

You can now copy/paste between multiple running instances of WM, as WM now uses the windows clipboard rather than its previous internal one. This may also prove useful for 3rd party utility authors, as the clipboard format used is simply the WM file format.

Misc small changes

  • Deleting a group now deletes all of its contents, including other groups
  • Instance scatter bugfix so that its placement mask does not move with the device origin
  • Checkpoint device ports can now be named by the user

Basic Perlin revamped

The Basic Perlin device was previously a “vestigial” device, as it was simply the older fractal noise generator and wasn’t necessarily simpler or easier to use than the Advanced Perlin that replaced it.

There’s now a reason for it to exist : going forward, Basic Perlin can/will be your go-to device for simple noise, reserving the Advanced Perlin device for when you needs its more sophisticated tools (multifractals, guide maps, custom fractals, etc).

Basic Perlin has been both simplified and had some very much needed improvements like output elevation controls (including an option to specify the typical slope of the output instead of the height range).

Advanced Perlin and Voronoi will in the future also receive a number of updates soon as all of the primitive devices get a once-over, but  that will have to wait until build 3017…

Roughness Selector

Saving the best for last, perhaps one of the most transformative features is the new Roughness Selector, which promises to almost certainly find its way into your texturing schemes.

The Roughness Selector is a natural, powerful complement to height, slope, and erosion mask-based texturing. In a nutshell, it does what it says : Produce a mask that indicates what areas of your terrain are rough, and what areas are smooth.

Roughness Selector Output

So simple, and yet — I’ve already found the Roughness Selector useful enough to rethink my entire basic texturing scheme, and I’m sure you will discover even more uses!

The Roughness Selector produces output that cannot be achieved by the Slope and/or Convexity Selector, as seen below. In this comparison, each selector is simply fed into a Colorizer to texture the terrain based upon its action. The roughness selector picks out rocky areas while leaving smooth meadows alone, even if they are steeply sloping.

Slope-based on top, Roughness-based on bottom

 

This seemingly simple device was actually much harder to tune than expected, as many of the methods you might think of to identify roughness (such as std deviation of elevation or slopes, for example), don’t produce aesthetically pleasing output or are too highly correlated with the terrain slope to be useful. The output mask can range from smooth to relatively “noisy”, which is actually very useful as the noise is correlated to terrain features and looks good, much like the erosion masks.

As hinted previously, one perfect use case is identifying areas of the terrain that contain rock vs soil. There are many natural locations that will have smooth but steep soil-mantled terrain right next to jagged rocky cliffs — we can now analyze our terrain for these and treat them differently.

Color by roughness — smooth hillsides interpreted as vegetation, rough hillsides as rock

This is pretty much as good as it gets right now, short of a full scale soil evolution model. Ahem. 😉

This is a masking/texturing primitive that I’ve always wanted to have available, so I’m very happy it is finally making an appearance. Individually or in concert with the existing selectors, you will find it a very powerful tool for texturing.

 

That’s it for now! Build 3016 should come out next week, and Build 3017 should follow along a little ways after that. Cheers

Build 3015

Hi folks,

Build 3015 has been released! Besides fixing some bugs, and a few smaller tweaks, the primary focus is improving a device I’ve never been completely happy with: the Thermal Weathering device.

The old version of Thermal Weathering had its uses, particularly in concert with the erosion device to help shape the sometimes over-steep slopes produced. However it never fully achieved its primary goal: to simulate the way freeze/thaw cycles break down rock faces and produce talus slopes.

I’m happy to say that the new version excels at that task!

Let’s take a quick look.  This is one of the example files included with Build 3015. Here’s a  canyon-type terrain:

Standard Erosion Only

Right off the bat, we can see that this is not a situation where WM’s erosion model traditionally excels. None of the natural forces that would dominate in this situation are being simulated, leading to a result that doesn’t look realistic. Among the problems are the lack of debris at the base of the cliffs, unrealistic streamlines down the cliff faces, and more.

So let’s try to fix it, using classic World Machine 2 Thermal Weathering:

Old Style Thermal

In some ways this is an improvement, but in others, a step backwards. Talus and other debris have begun accumulating on the slopes, but not in a consistent way or in a location that is actually where you would expect. This is due to a variety of reasons I won’t go into here, but the short version is that we still don’t get our talus slopes.

What’s worse, all of the nice erosional detail in the rocks that we created in the first world has been smoothed away. Sometimes this is desirable… but typically not.

So. Let’s take a look at the new version:

New Thermal Weathering

Hopefully you can see why I’m quite excited and proud of the new device. 🙂

Convincing talus slopes have been generated under the cliff faces. These slopes have a consistent (and controllable) angle of repose, as much volume as you want, and best of all not only preserve but even enhance the original erosion detail present.

The new device works great with or without traditional erosion. It’s also much more controllable than the old device (which was often a bit tweaky), has controllable mask inputs for both talus generation and talus sinks (where things like rivers can remove the talus), and, by the way, scales dramatically better than the old device in high resolution worlds — you’ll find some huge build time improvements.

In short, for most general purpose work, this device represents a giant leap forward, and finally deserves to be used on an equal basis with the regular erosion model. I’m excited that it’s now available, and look forward to hearing if you find it useful!

 

State of the World (Machine) 2017

Hi folks,

It’s been quite a long time since the last post here!

The latest development build (3014) of World Machine is available today, and that will be a whole topic of its own. Briefly, the two most notable and immediately useful new features are a major reworking of the River device to fully support multiple rivers and hierarchical river systems, and a usability improvement that lets you view the “before and after” of any device in the 3D View.

 

The next blog post will be about using the new modification to the River device.

But this post is about something else. The last post on this blog was about 14 months ago — what happened to 2016?

Seemingly a little, actually a  lot, and many lessons learned the hard way.


The Bad, and What I Learned From It

Let’s face facts – I, more than anyone else, am painfully aware that I seem to have disappeared off the grid in 2016. This manifested in two main ways. First, there were no new releases in 2016. Second, I wasn’t active in the forums. To make matters worse, there was no public information as to why. Yeesh. I heard from a lot of folks via support tickets and emails during that time: some were concerned (are you ok?), some confused (does World Machine still exist?), some frustrated (dude, are you ignoring us?).

The short version: I’m OK (thankfully), World Machine absolutely still exists and is what I exclusively work on, and for that last part, I sincerely apologize, but am taking steps so that this sort of absence doesn’t happen again, starting with this blog post.

Everyone knows running a business is challenging, but what I didn’t expect is that it continually becomes challenging in new ways I wasn’t expecting. I started World Machine as a side project because I love mountains, computers, and the act of creation. Then I realized I had made something people could get a lot of use out of, and devoted myself entirely to running this business, quitting my corporate job. Since then, that’s been World Machine – me at my computer and lots of coffee, exploring how to make this software I love ever better. I created the forums with the vision of having a community of people all passionate about creating worlds, that could support and inspire each other, and enjoyed being a part of that same community myself. I looked forward to interacting with any customer that came along, happily answering questions, even if they were just teaching new users the features. It was fun and I could run the whole thing while still having plenty of time for big sprints of development.

But here’s what I never saw coming. All that was easily doable when there were a couple hundred users. But as World Machine continued to grow, the time devoted to handling the administrative and support side grew with it and sorely tested my ability to handle everything as a one-man shop. I’m amazed and grateful at the success World Machine has seen, but its success greatly reduced the time available for each part of the business – development, customer support, forum engagement, and generally keeping users updated (like the website and this blog). And those last two were the first things to drop.

I’ve finally realized this, and am looking to adapt to the new realities of World Machine’s growth. Here’s a breakdown of what I’ve learned and how things are changing.

Let’s go back to that first most obvious disappearance. After a long cadence of multiple releases per year, there were zero releases in 2016. This left anyone who had purchased a license upgrade expecting to receive, well, upgrades, likely quite upset, and understandably so. In an ideal world, I would aim for quarterly releases, but it’s not always that simple. For example, 2016 was a year with substantial time poured into speculative R&D projects, trying to do things that haven’t been done before. Some of that effort has yielded extremely promising early results; however, other efforts consumed month after month of work, ultimately never producing a viable product. To make matters worse, since much of that speculative R&D work was entangled with the changes to the River device, it impeded my ability to get any other features out that were production ready.

What I’ve learned and what’s changing

  • The first major business update is to make sure the upgrade policy is fair to everyone. Going forward, if World Machine does not release a new version within 12 months of purchasing your license upgrade, you’ll receive the next (Development) version once it is available, even if it’s beyond the 12-month upgrade timeline. Also, anyone who purchased a license upgrade between December 2015 and December 2016 has already automatically received all 2017 updates free of charge, not just Build 3014, just to say thanks for your patience and support last year. I can’t promise how often I can get new features in your hands, but I can promise that a 12-month license upgrade will actually provide at least one upgrade!
  • Next, I’ll be making additional efforts to keep the speculative R&D efforts on separate development branches so regular releases can still go forward despite stalled experimental progress. I’m also going to be better about splitting dev time more equally between near-term and long-term improvements. So if there’s a feature you’ve been wishing for, I’d love to hear what it is. I’ll be looking at the forum under the “New Feature Requests” topic to see where there might be things I can get into your hands more quickly.

Now let’s address the second part of my disappearance: no activity on the forums. This was very different than previous years, and made it seem like World Machine had been abandoned. While I was able to (mostly..) keep up with support tickets, emails, and other administrative requests, that plus development just flat out didn’t leave me time to nurture and provide support to the community that I longed to create and be a part of.

Despite my desire to help every customer with questions, it really is too much for one person. So for the first time, I’m looking to bring on some help with the creation of a part-time position: Community Liaison. If you’re already a pro at World Machine and are looking to help people out and bring in some extra income, shoot me an email at stephen@world-machine.com.  My vision would be for this person to help run the forums and a few other points of customer contact, answer questions and brief me on how things are going there, as well as to help keep lines of communication up during long development pushes on my part. Hopefully, this will help keep the community informed and help me more efficiently wade through that data.

The Good, And What I’m Really Excited About

Not all of the R&D efforts were futile. I’ve developed some incredibly promising new functionality, but haven’t ironed out all the issues yet. This is what’s both so exhilarating but also demoralizing with new possibilities – there’s no clear path to follow to make it work the way you envision it.

But regardless of big and exciting new developments, I’m committed to working on the easier, smaller features as well. That way, even as I pursue what sometimes seems like rabbit hole after rabbit hole.. only to find zero rabbits, there are still upgrades to be shared.

To give you a little taste of what I’ve been so excited about that I spent months of 2016 pursuing it, here’s a basic World Machine world transformed by the application of some of the new devices:

 

Basic Terrain, Basic Coverage

 

After a few new features are applied 😉

 

So. although 2016 was a rough year for World Machine progress, 2017 will get to enjoy the fruits of that labor. And that’s a great thing.

 

Undo Support? Could it be?

Yes. Riverpreview 2 should be out tonight and includes a basic undo/redo stack. You’re welcome. 🙂

It also fixes a number of other issues that have been found so far. Let me know if you run into any problems, including actions that are not undoable, etc.

Further afield, there’s some very exciting new potential features coming up on the dev branch, too. My next post will detail a few of them…

 

A few more things on Erosion

I mentioned in the last post that there are several improvements to Erosion coming, including a hardness input.

But that’s not the only improvement..

Better Masking

The mask input on Erosion previously did a simple alpha-blend between the results and the input. This is.. adequate. One consequence is that the mask is not actually used to guide the erosion itself, ie the masked area doesn’t “sit” well against the rest of the eroded terrain.

Under the next version, the Mask input is an “active” mask. That is, it actually participates in the erosion process:

  • Fully masked areas will be completely unaffected, as with previous.
  • Areas outside the mask will now be eroded accounting for the masked area. This is probably what you figured it should do in the first place 🙂 The difference is hard to describe, but profound; for example, a masked area in a low basin that would previously have been filled quickly with sediment will instead stay unfilled, acting as a “sediment sink” for surrounding areas.
  • Areas that are completely masked will no longer generate any waterflow. This means that masked erosion will be much faster.  Fully masked-off areas take relatively negligible time to process.

The main thing that prompted this change was to make terrain with rivers work better with erosion. Now you can simply take the river channel mask, pipe it (inverted) into the erosion mask, and boom!

Overhead view of a mountain river
Overhead View of a mountain river, showing the improved integration behavior

The river now “sits” much nicer into an eroded terrain. As a nice bonus, the hero-river systems will effectively transport away sediment for the hillslope erosion, just like in real life…

We forced the river channel to stay at the masked height; as a result, the surrounding valley becomes carved with gullies
Sediment transport has caused gullies to form

In the last picture above, you can see the effect of the river transporting sediment; the surrounding valley becomes steeply carved with gullies as the river effectively participates in the erosion process! Not bad for a simple mask input 😉

 

Quick Update on Latest Release

Just figured I’d write a quick note about what’s happening with the latest dev channel release.

A current version with the river tool has dropped to the alpha testing team a week ago; changes and additions are still being added at this point before the Dev Channel release.

Beyond the river tool itself, I wanted to take a quick look at a few other things that will be showing up soon:

Scene View Device

 

Water surface display
Water surface display in the Scene View device

The Scene View device is an extension of the Overlay View, that accepts additional inputs over and above a simple terrain/bitmap combo. The first additional input is what is shown above: you can supply a water depth or watertable map which will be superimposed upon the terrain, allowing you to preview the water surface of your rivers instead of just the riverbed.

This is important because the water level slider presently available works fine for simulating an ocean height but lousy for rivers that have gradients! This ability to display arbitrary water levels is pretty critical and useful; and if it gets you excited about other devices that could export water levels, it should.. 🙂

Another key eventual purpose is to help with workflows using splat maps, where it’s hard to visualize the final result within WM itself. The Scene View will eventually accept your splat (guide) map and also the set of textures you intend to use in-engine and display them appropriately; this should give you less round-trips to the game engine when doing basic map design.

Better Curves

The rough control possible in the Curves device has been a complaint of everyone (including myself!) for a long time now. The Layout curve editor was better but still only let you have linear segments.

I finally took the time to improve the Curve Editor; crucially, the editor is shared between the Layout Generator and the Curves device now, and drastically improved:

Editing a profile curve
Editing a profile curve

 

This change makes the Curve Filter device about 10x more useful! Presets are shared universally, letting you use the same curve for a layout shape that you might apply to a heightfield.

And oh, did i mention that Curves are now a separate datatype that can be wired to devices? 🙂 Eventually, devices will be retrofitted to accept curves to specify their behavior in all the various ways you can imagine that would be useful…

Device Versioning

The Curve Filter is also the first device to show off the new way that we’ll handle device improvement.

In the past, when device functionality changed, an import path was attempted to be created, but sometimes it was impossible to capture the old behavior while still allowing the new.

The new method is to preserve old behavior in a deprecated version that will load by default in older worlds, which you can switch to a new version when you like.

curves_deprecate
Switching to the new Curves device…

Note that I can’t guarantee that a deprecated version won’t go away at some point; but you’ll at least have fair warning that you’re using an old version now.

 

Erosion Improvements

The erosion device has gained two new inputs: A rock hardness map input, and a sediment capture input. Combined, they work to provide more control and nuance than the simple mask input provides. Here’s how they work:

Rock hardness does what you expect, and modulates the resistance of the underlying substrate to erosion. Here’s an example image, where the hardness varies from very hard to very soft as you move left-to-right across the heightfield:

Variable hardness erosion
Variable hardness erosion

 

This is pretty simple, but useful! I originally didn’t include this input because I didn’t think it made a large enough difference — but especially with geologic time enabled, it can certainly be a very powerful thing to control.

Here’s another example. In this one, a simple gradient slope is being extremely  eroded. Guess what area contains a big dollop of resistant rock 😉

Extreme erosion with underlying resistant rock
Extreme erosion with underlying resistant rock

 

So, that’s some exciting new stuff. The big question is, when does it drop to everyone not on the alpha team?

I’m inclined to say “sooner than later”; the whole point after all of the Dev Channel is that things can be in an unpolished state with some rough edges and weird behavior still. But there’s still at least some minor things that should be done, like adding icons still for all the new devices…

A bit hard to tell what's what at the moment...
A bit hard to tell what’s what at the moment…

But once that’s done and a few other loose ends are wrapped up, it’s probably time to drop the very first version of the river tool to the Dev Channel — I’m sure there’s going to be a million questions and suggestions once that happens, and it’s better to make that sooner than later 🙂

 

 

Rivers

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

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:

River-Snapshot
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-Snapshot-3
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.

 

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…

Simplication

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…

The Big Post about Development Models

The next development release is going to be released very soon, and with it the first in a major change of how World Machine is developed and released.

I’m going to go into some detail about something a little different — the business side of software development.

Let’s Review

World Machine originally was released on a “big release schedule” — every ~3  years there would be a version packing a bunch of changes together and being made available, usually for an upgrade fee. Earlier this year, my frustration with this kind of development model prompted me to put effort into streamlining and adopting a new model that is becoming very popular;  that of frequent updates.

Having frequent and rapid feature releases is:

  • Good for you: You get to use new features and fixes immediately rather than having things be finished but not used by anyone for months or years until a Big Version is released.
  • Good for me: I receive satisfaction when the things I’m creating make an immediate impact on how you can do your work.
  • Good for World Machine: Being able to quickly get feedback and iterate on ideas makes every feature significantly better.

What’s not to love? The downside is figuring out  how to deal with everyone’s favorite bugaboo…

charging folks for software.

I’m going to broach this subject for  a bit as the business side of software is incredibly important — it’s what puts food on the table for me personally, and allows World Machine Software to continue as a small business.

The Problem

The traditional development model relies on collecting  your new features into a glittering pile of goodies, which people are then asked to pay for. This works pretty well; and I have been able to devote myself full time to World Machine for a while now as a positive consequence.

However, it is fundamentally incompatible with the new feature release schedule.

If every new feature is immediately made available to current customers, there will never be a World Machine 3, since all features are instead added to the current version. That’s not quite what I had in mind! Making it even trickier is how to deal with payment for updates and upgrades.  We’ve not charged anyone for an  upgrade since 2008.  Many of the changes since then have been bug fixes that I feel should always be made available.. but the new features since then certainly could have been part of a new release.

I’ve spent much time over the past several months thinking about ways around this dilemma, including options like feature packs, subscriptions, and more. Each route was evaluated by these two guiding criteria :

  1. Strive to provide the most value to you the customer as possible
  2. Produce enough revenue to allow World Machine to prosper as a business

With those in mind…

The Solution

here is the outline of the direction we are pursuing. Some of these are new, and others are simply codifying the way we’ve always done things:

  •  World Machine purchases come with one year of free upgrades. During this time every new feature or release created is available to you for free. I plan on quarterly releases of useful improvements.
  • Your software never expires. After your first year of upgrades is over, you will no longer receive the latest and greatest features. But unlike a subscription, nothing stops functioning.  You can also access and re-download any versions you’re entitled to, whenever you like.
  • You can pay a small fee to keep upgrading. You can buy another years’ worth of free upgrades any time you like. The renewal price is basically the cost of a major upgrade, but spread out over a number of years.
  • You don’t have to stay “caught up” if you don’t want to. People using World Machine constantly for their business or pleasure will likely want to always have an active update plan, but for others, you can come and go as you please. If none of the new features being produced are compelling to you, you can wait to pay until we produce something that is.
  • The upgrade purchase is valid for both major and minor releases. Whether its minor improvements or something big enough to cause me to change the Big Number (ie World Machine 3), while your upgrade license is active you will receive it for no additional charge.

I believe that this represents a favorable blend of the best parts of traditional and the more modern “software as subscription” business models. I firmly believe it provides the most benefit to both you as customer, and me as developer. I hope all of you agree!

When does this start?

The first development release of World Machine 3 will be available this monday under the new model.

WM3.0.dev1 is not the end-state of World Machine 3; rather, it marks the beginning of its development. Over the next year, many new and exciting features will be added to WM3 on the dev channel.

What’s even more exciting is that you, the terrain artist, will be instrumental in guiding what features you most want to see appear in WM3. The major version number will be incremented much more quickly than before; I would hope that within another few years we will see World Machine 4 start the same development process…

I can’t wait!

More Reasons to be Excited about the Scatter Device

As I mentioned in my last post, I’m currently doing a  pass through the Instance Scatter device, making sure that it works as intended before release.

Why Fractal Distribution Rocks

Someone asked me in email what I meant about the placement device accepting a height object as a fractal basis function. Here’s a great example to illustrate:

We’re going to take this linear gradient and circular alpha mask:

Linear Gradient and Mask
Linear Gradient and Mask

And use the Instance Scatter device with its fractal distribution turned on (persistence : .5, lacunarity: .5, octaves: 8) to produce this:

Instanced Geometry | Erosion
Instanced Geometry | Erosion

When you get to examine this yourself in the next release, you’ll see it has all kinds of interesting features reminiscent of a tilted sedimentary type terrain.

This is a super quick example with pretty basic inputs, but it shows how the scatter device is useful for so much more than just placing craters and volcanos.

Here’s one more, which is just slightly modified from the above:

Directional Ridges and Strata
Directional Ridges and Strata

To be honest, I didn’t  plan this custom-fractal ability originally; but once the idea to allow fractal distribution happened, it emerged. You’ll find yourself creating all kinds of interesting rock types and textures using the scatter device. Another nice perk is that these fractals are stable across space, and thus are fully tile-able and explore-able.

I fully expect to see lots of user-created custom terrain type macros grow out of this!

Very Soon…