Feb Updates

Originally published at: https://www.world-machine.com/blog/?p=938

A series of posts describing the changes afoot for the Long Term Evolution of World Machine.

The ‘Mt Rainier’ release of World Machine (Build 4015) hit final just before the new year, and became the standard Basic Edition download as well as to existing customers.

That release precipitated the following month and a half of work: two rounds of follow-up bugfixes. It’s expected… but always impressive… to see the different kinds of bugs encountered ‘in the wild’ once a broader population starts using a new builds!

Judging by the rate of crash and bug reports coming in, the latest Build 4017.2 is a good endpoint for that bugfixing focus. It is quite stable, enough for attention to move to other areas for a while.

Upcoming 4018

The next build will bring more substantive feature and ergonomic changes. It should be available on the Dev channel within a few weeks.

These are the areas where 4018 has improved things:

  1. High-res Interactive Previews
  2. Workview wire routing display
  3. Workview ergonomics
  4. Memory paging

Let’s take a look at them in order.

High Res Interactive Preview

As a refresher, World Machine has two preview engines: The interactive preview shows you output while you are actively manipulating a control, and the refining preview builds in the background for each committed change.

The interactive preview has so far always operated at the base resolution you specify (defaults to 128px). But we can do better…

When editing fast-to-build components, there’s no reason why we shouldn’t do the interactive preview at higher qualities if they fit within our timing budget. And night became day, and lo, it was so:

![](upload://eMVjQE8jT3H6grXLY114r9D1oKi.png)

When this feature is enabled, WM will dynamically adjust the interactive preview resolution to hit the framerate you specify. When modifying basic components like noises or combiners, you’ll probably be able to preview the results at 512-1k resolution instead of 128. This is really nice for precise editing! Erosions and long chains of devices will likely preview at base resolution still. Of course the more CPU cores you can throw at the situation, the better it will do. I’ll try to add a video of this in action later!

A very useful extra

This change brings another very important update along for the ride. When WM builds a high-res version of a device, it will now downsample that result and replace all of the lower-res build results.

Why does this matter?

If you’ve built high-res worlds with Erosion before, you know that you can often get different outputs at your final build res than you do at the preview resolution. This makes tweaking colormaps from erosion maps, etc quite finicky, as the preview doesn’t match the final result.

This is now fixed. As an example: If you build an erosion device at 8k, attach a colorizer to the wear mask output, and start working on your color map, what you see in the preview window as you edit is based on the actual final mask output. This can be a real life-saver. Less tweaks, more fun.


Wire Routing Updates

Now let’s turn to ergonomics.

4018 fixes a long-standing annoyance in WM: The wire routing algorithm sometimes makes very poor choices. In particular, wiring “backwards”, where a device feeds in any direction but to its right, has always been ugly and hard to read.

In addition, the old algorithm for routing through route points often created poor looking wires. Both of these have been improved substantially:

This is how it was:

![](upload://6QC8UIu3WOP15fQJus1oG53fab7.png)

And this is the updated version of the same world:

![](upload://AtBp0L0scM0k9QBuBzMGuaAiW0I.png)

This is a small change that really has a big impact in how you place devices in your world! It’s now quite possible to stack and “read” devices vertically instead of horizontally.

Workview Ergonomics

I’ve taken a bit of time to tackle a few other workview related features. I’ll review them in turn:

Prefer single-device add

There’s been some discussion on the forum about WM’s existing idiom of “add mode” versus adding one device and going back to selection mode.

Add mode has been around forever in WM, and it can be very useful. On reflection though: Most of the time, you’re only adding a single device. That means you have an extra cancel keystroke or right-click, on every add. For new users, they may not understand why they keep adding devices as they click.

Adding a device now defaults to only a single add. You can still get the old behavior: Just hold down shift when clicking for “multi-add” and you’ll stay in add mode after that placement, just like before.

This new default plays well with…

Auto-connect when adding onto a device/port

Now if your add click is over an existing device or port, it it wired up and placed relative to its target.

This ability actually already existed before within World Machine, but it was not discoverable (you’d have to hold down CTRL when adding to trigger it). It’s now the default, which makes it much more useful. This couldn’t be the default behavior before, because one of the easy ways out of add-mode was to click on an existing device, which led to surprises…

Finally:

Align Horizontal/Vertical command

These suggestions from the forums are simple but useful commands to align a group of devices along the X or Y axis.


Memory Paging

Some of the remaining crash reports coming in for 4017 involve out-of-memory situations where the packet paging process was in play. This mechanism was due for an update!

The old version would “stop the world” and page everything out to disk when you hit your memory limits. In a big build, this would lead to extremely long pauses where it would seem like WM had crashed, as it paged many gigabytes of data to disk. In addition, there were some bugs in the paging system that weren’t entirely thread-safe, so sometimes it would in fact, have actually crashed 🙂

I’ve re-worked the memory paging system with three changes:

  1. WM will now aggressively dump old build results from your history when it needs more memory, before trying to page out packets
  2. It will page results to disk only to the extent necessary to allocate more memory
  3. There’s a new “health status” indicator in the lower-right corner of the status bar that informs you when paging is occurring. Without this information, it would be hard to understand why WM suddenly got slower.
![](upload://w0o8MLT94sBLgle4qMhzSMxxqnv.png)![](upload://dakpp1BfDiR9IkaKTFQNCYDyvx4.png)

The new paging system should be much more robust in the face of memory starvation, and should fix one of the last remaining categories of crash reports.


Build 4018 was supposed to just be a few minor feature changes. Oops 🙂

Until next time,

Stephen

3 Likes

@Stephen Love the performance and wire routing updates!

About the “add mode” behavior though, I happen to like it. It’s very useful, especially while copying devices for repetitive tasks. For example: Adding “height” outputs for exporting masks, and adding noise generators in the beginning. (I know about the export dialog, I like to stay within node graph for everything. One thing that has always been on my wishlist, “world settings” as a node!)

I propose: leave the add mode code as an option, and add a toggle in the preferences to switch back the default behavior.

Does feel like a “how have I lived without it” kinda feature! :nerd_face: :rofl:

All excellent updates! Looking forward to it!

This sounds really interesting! When aligning to the X-axis, does it align the top of the devices to the X-axis, creating a nice straight line, or does it centre the devices on the X-axis?

It aligns the first port on each device onto the same gridline so that you’ll have a nice straight line.

2 Likes