Domain Distortion


Still working with noise generation on planetGenesis. I found a mistake in my previous effort. I had been assuming that the domain distortion Combiners(Disturb, Warp and Turbulence) worked by sampling the left side noise at coordinates shifted by the noise in the right hand side. I had this backwards as shown here. This was important, as my attempts to control the strength of the domain distortion were doomed…

All of the files referenced here are contained in this zip file.

I have made a few changes to the program itself. Firstly, I’ve changed some of the slider step sizes, as they were inappropriately large. A minor modification, and I am sure there are still some peculiar slider step sizes that need some work. Also, in order to make noises more controllable, especially when they are controlling other functions, I made an attempt to internally scale the basic Perlin and Multifractal noises to a range of (-1, 1). I decided to leave the Modified Multifractal unscaled for now, as determining exactly what the per-octave amplitude is is exceedingly complicated. I seem to have been completely successful with the Perlin node, and somewhat successful with the Multifractal node(the the Ridged and Billowy Perlin and Simplex noise types don’t scale properly. The basic Perlin and Simplex noises and the Sine Wave “noise” all seem to scale well, though, both in Perlin and Multifractal). The Fractallize functions are not yet scaled…

The scaling is reliable(within the limitations specified), no values will be outside of the range (-1,1), but it is not guaranteed, or even terribly likely, to produce values that fill the range between (-1,1). I frequently find output ranges on the order of [-0.3…,0.9…] or [-0.9…,0.3…] or even smaller ranges.

Additive nodes(Add, Subtract, Warp and Turbulence Combiners for example) work well with signed inputs. Multiplicative nodes(Multiply, Divide, Power, Disturb, etc.) often work better with unsigned inputs, (0,1). Except for Musgrave Ridged Fractallize, the Fractallize nodes seem to digest signed and unsigned inputs equally well.

The SignedToUnsigned.pG graph demonstrates a set of nodes that convert a (-1,1) input to a (0,1) output. UnsignedToSigned.pG takes the unsigned output from an SU-like subtree and convert it back to (-1,1). Basically SU(x) = 0.5 * (x+1), and US(x) = 2*x – 1. These are useful tools in predictable graph creation.



The noLatitude.pG graph is an attempt to use the new capabilities of planetGenesis301 and what I have learned to make effective clouds more easily. The cluster of nodes is a domain distortion noise constrained to a (0,1) range. The two Constant Value nodes on the left control the domain distortion. The top node is the strength and the lower node is an offset that may or may not be necessary when using a Disturb node.

There’s also, off disconnected to the right, another experimental Voronoi graph. Never mind that.

The WithLatitude.pG graph uses a Position Y gradient node to control the strength of



the swirling effect with latitude. One thing I’ve observed is that even with predictable inputs it’s very hard to control the frequency of a domain distorted noise. Although this was written with the Bryce program in mind, I think the “phase” section describes the interaction between distorting noise scale, noise scale and strength of distortion pretty well…

I’ll need some time to work out how these interactions work with Warp, Disturb and Turbulence Combiners. In the meantime, thank you for reading.

The Astrographer

This entry was posted in Mapping, World Building and tagged , , , , , , . Bookmark the permalink.

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s