2
$\begingroup$

I found both the Wave texture node and the Noise texture node have the parameter distortion, but I can't understand how it works.

I think both nodes use the Perlin noise field to distort the texture, so I linked the Noise texture node to these two nodes respectively, but I can't simulate this parameter.

Noise texture node(maybe it is correct?): enter image description here enter image description here

Wave texture node, the patterns are different enter image description here enter image description here

$\endgroup$

2 Answers 2

4
$\begingroup$

This is how you can recreate the distortion using regular noise textures:

enter image description here

enter image description here

enter image description here

As you see, the biggest problem is knowing the offset of noises, that you may know only from source code.

You can get this blend file and 1D-4D setups here, from the patch's developer (actual for 2.80, to make it work in 2.81+ you have to add a multiply add node like in my setup):

https://developer.blender.org/D6177

Currently Noise and Wave texture nodes use noise functions within [0,1] range for distortion effect. We either add or subtract noise from coordinates, never do both at same time. This leads to texture drastically shifting on diagonal axis of a plane / cube. This behavior makes Distortion input hard to control or animate. Capabilities of driving it with other texture are also limited, diagonal shifting is very apparent. This can be easily fixed by offsetting noise function to signed range and make it zero-centered. This way noise is uniformly added and subtracted from coordinates. Texture pattern sticks to main coordinates which makes it way easier to control. Diagonal shifting can be "artistic decision" but I believe that users would want uniform distortion in vast majority of cases. After my changes diagonal shifting could be easily achieved by adding another noise node to coordinates. This patch will change appearance of textures in some corner cases when input was driven by another texture with high amplitude and/or frequency (last example in video). Patch notes: Before we used noise() for distortion effect. This patch change it to snoise() which is zero-centered but also has twice the range. To maintain same distortion amount I added versioning code that halve distortion value, directly in node or by adding multiply node for used sockets.

$\endgroup$
2
$\begingroup$

@Crantisz gave a good answer how to recreate the distortion. This answer isn't meant as a solution, it's more an explanation why it's not working the way you tried it and why the results between Noise Texture and Wave Texture seem to differ so much.

When you plug the Noise Texture into the Vector input of the another Noise Texture or Wave Texture, you are not transferring the Distortion you have set on the first one on the others.

Without anything plugged into the Vector input, the nodes use by default what the Generated output of the Texture Coordinate node would provide. This is (on a 2D plane if you're looking top down) an X gradient of 0 to 1 from left to right and a Y gradient of 0 to 1 from bottom to top. This is the XY mapping the Noise / Wave Texture is based and calculated upon.

But if you instead plug a Noise Texture's color (no matter if Distortion is 0 or not) into the Vector input, those X an Y values become the new coordinates on which the Noise / Wave Texture are based upon, and they are no simple linear gradient but, well, a noisy pattern and this messes up the coordinates.

This is why especially the Wave node creates such a very different output. The Sine bands you are using are regular and distorting them just changes the evenness to a certain extent. But if you give them noisy base coordinates they are no longer regular wave patterns right from the beginning on.

The difference between the default vector and the noise vector becomes obvious if you simply take a look on the X output for example. If you set the Wave Texture to Bands > X > Sine, it basically takes the X value of the vector input and the result oscillates between 0 and 1.

With the standard Generated X coordinates, the linear gradient, it looks like straight vertical stripes:

default vector

But if you plug in a Noise Texture as vector, the X coordinates are no longer a linear gradient from 0 to 1 or left to right, but a noisy pattern. If the Wave Texture is now oscillating between the 0 and 1 values of the coordinates, this results in wavy and circular stripes which are no longer straight or strictly vertical, but you can see some correspondence to the original noise pattern:

noise vector

The difference becomes more obvious in the Wave Texture than the Noise Texture since the Noise Texture is already noisy anyway and not as even as the Wave Texture.

But you can use a Noise Texture for the Vector input in a not so extreme way. This is often done by people to create small imperfections to break up or randomize regular patterns. You do this by plugging the Generated texture coordinate and the Color output of a Noise Texture into a Mix RGB note (set to Mix or Overlay mode for example) and use the mix factor to more or less distort the original coordinates. Here's an example using the Noise Texture to randomize the Checker Texture node:

randomized checker

Or when I use this on a Wave Texture and set the Noise Texture's detail and roughness to 0, the result maybe looks a little bit familiar:

wave distorted

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.