Thanks to Your Help Fractal Voronoi Noise Was Added Into Blender!

I also like that the voronoi texture makes it easy to create these hard edged plate like layers:

10 Likes

Edit2: I can not post more than 3 posts in a row, so here is an edit. The shader is pretty good for layered sediments imo:





Here are some more formations which I think are tricky to make without voronoi. The second one uses 12 iterations of ā€œDistance to edgeā€ and the third one combines color and distance output of a Smooth F1 with the minkovski exponent somwehere between euclidian and manhatten:

Edit: added the first one with Vector Displacement. Iā€™ll stop now. This shit is addictive:

16 Likes

The landscapes look really great!

Apart from landscapes I noticed that using F2 distance you can create normals for a hand painted wall:


The indentations come from the patterns created by setting a 0.5ish Minkwoski exponent and break up the pattern a bit, which you wouldnā€™t get by using Perlin noise.

12 Likes

Not my top choice for Voronoi Node improvement, but Iā€™m for it, especially after working with it a bit. Although I realize that these can pretty much be achieved with more complicated node trees, the lower computational load and increased ease of use are worth it, IMHO.

There are four procedural textures (not counting color variations) using the new Voronoi features in that, all on Randomness 0.00 and a variety of other settings. Although the model was converted from Ed Catmullā€™s Gumbo the Elephant, all my work in this blend file is CC0 Public Domain:

PatchworkElephant_VorTest_007.blend (2.6 MB)

Sorry about the UV mapping, I grabbed this from another project and it (mostly) made sense there. :flushed:

8 Likes

Yes maybe it needs a check box to be fractal or not, to save computing time (like the 3d, 2d noise).
I have not had time to play around with it but I like what everyone is coming up with.
It does save using many nodes.

1 Like

I believe a turbulence feature would be useful as well. I think it makes a difference if you perturbate the individual iterations as opposed to only the result.

1 Like

Well technically all procedural textures could be achieved using math nodes, that is of course until you hit the stack limit.

Anyways thanks for your post!

1 Like

No it doesnā€™t need it because I optimized the code in a way such that if you donā€™t use the Fractal capabilities of the node the computing time is identical to that of the current release version of the Voronoi Texture node.

One thing I forgot to mention is that if any of the new inputs Detail, Roughness or Lacunarity are set to 0.0 it will only compute 1 layer of Voronoi noise. For example if you have Detail == 0.0 and Roughness == 0.5 it will only compute 1 layer of Voronoi noise but that is also the case if you have set Detail == 5.0 and Roughness == 0.0. This actually also increases performance even if you itā€™s Fractal capabilities but those are technicalities.
If you then do use Fractal Voronoi noise the computation time increases linearly in proportion to only the Detail input. Itā€™s actually less than that but it gives a rough idea.

These along with many other reasons is why my native implementation of Fractal Voronoi noise outperforms every node group implementation out there.

5 Likes

Iā€™m not sure on what you mean by ā€œturbulence featureā€ could you please elaborate on it?

It might be too much feature creep and should be left out.

My understanding is that turbulence is basically the same as re-mapping the values of the voronoi map. But thinking about it I am not so sure if this is even true. Maybe turbulence is more like the possiblity to remap the input map values as opposed to just re-mapping it with a gradient.

Anyway, this is what I meant:
from black ā†’ white
to
black ā†’ white ā†’ black

Similar to what the color ramp does in the following image:

Well, then why not just use a Color Ramp?

I think that it makes a difference if the color ramp is applied before mixing with the iterations bellow as opposed to applying it after the whole fractal voronoi is created.
I am not sure, though. When I have time I will test it with a node setup.

But perhaps too many features should not be added. Perhaps this is more a case for a generic loop inside shader nodes.

Oh, so thatā€™s what you meant. Then yes it does make a difference if the color ramp is applied before adding up the iterations, as is usually the case with nonlinear transformations.

But I also agree that feature probably isnā€™t important enough to add it directly into the Voronoi Texture node.

1 Like

An attempt to use this for skin:

20230210_KA8P_VorFractalTest_014.blend (3.0 MB)

So the ā€œRoughnessā€ value is ā€œThe influence of a Voronoi layer relative to that of the previous layerā€ ā€“ left side of the above Iā€™ve used one Voronoi node on Distance to Edge for surface-detailing the cells that the other Voronoi node is using Smooth F1 for displacement. It seems to me that if Distance to Edge had a Roughness value set the same for both nodes (like Iā€™ve done with the Detail and Lacunarity) then the blue lines would be thinner (by whatever 0.32 did to the influence) on the Detail layer 1ā€™s cells than they were on the Detail layer 0ā€™s cells, which would be particularly useful for something like skin.

Reading the earlier discussion on this bit, Iā€™m not seeing why an implementation of a Roughness value for Distance to Edge working like that wouldnā€™t be a good idea.

3 Likes

Because the Distance to Edge output fundamentally works differently to the other outputs. In your example the layers of the Smooth F1 noise are added together. Each successive layer is being multiplied by Roughness to the power of the number of the layer - 1. So the final Smooth F1 Distance output using your inputs of Detail == 2.0 and Roughness == 0.32 would be Distance = Layer1 + Layer2*0.32 + Layer3*0.32*0.32.

The Distance to Edge output on the other hand outputs the Distance to the closest Edge of any layer meaning that we have to take the minimum of the Distances every layer. So the final Distance to Edge output using your inputs of Detail == 2.0 and Roughness == 0.32 would be Distance = min(Layer1, Layer2, Layer3).
As you can see the Roughness input value doesnā€™t appear anywhere in that equation thus making it useless for the calculations.

1 Like

So what Iā€™m getting from this is that it canā€™t be achieved with that calculation (and by ā€œgettingā€ I mostly mean Iā€™m trusting you and the people reading this who both understand that and arenā€™t posting to contradict it). But youā€™ve also said

(Re that post, youā€™re welcome, I hope it helps ā€“ sorry I didnā€™t respond earlier.)

In my skin attempt I had Detail at 2, thatā€™s three levels of Voronoi. Thanks to a Lacunarity of 3.0, Level 0 is a Scale of 8.0 (what the nodeā€™s set at), Level 1 is a Scale of 24.0, and Level 2 is a Scale of 72.0. So below Iā€™m keeping the Smooth F1 node feeding the Displacement as-is, while the Distance to Edge node doing the color Iā€™ve broken into three, now at Detail 0 and those Scale values:

This was easier than I thoughtā€™d be ā€“ Scale of 8.0 on the Distance to Edge node, coordinating with Level 0 of the Smooth F1 node, already has the border thickness I was looking for there. Level 1 / Scale 24.0 and Level 2 / Scale 72.0, both have the borders thinning with the cells scaling. So we can see the data to make the effect is there, therefor this can be calculated in the new Voronoi implementation. Although I realize that internally thisā€™ll be different from the Roughness calcs that F1, Smooth F1, etc use, you might want to use the same name on the node for usersā€™ ease-of-coordination. Not sure what else youā€™d call it ā€“ ā€œFadeā€, maybe?

Which is NOT to say that I think this should replace the current implementation of Distance to Edge in yours, even keep it as the default. But this should be an option, IMHO.

If itā€™d help Iā€™ll work on a mix-nodes setup thatā€™d work in this case, since Iā€™m pretty sure simple mixes will attenuate too much, but I can never remember whether to use Overlay, Multiply, Add, Darken, or whatever without trying 'em out.

1 Like

I dont understand why it is not possible either.

One of the landscapes i posted above uses a fractal distance to edge node group.
I mean distance to edge provides scale so it is possible to make it progressively smaller which gives us lacunarity. And like anything else it can be blended with the preceding iteration to a lesser degree.

The way i understand is, that if you can scale it and if you can fade its intensity then you can fractalize it. This means that you can fractalize allmost anything in Blender.

Another thing i dont understand is why lacunarity
Is not exposed in Blenders default noise node. I mean, sure, to keep it simple i guess, but man, is lacunarity a useful setting.

1 Like

I donā€™t know what data youā€™re referring to, as all you did was manually scale down the textures by a factor of 8.0 so obviously the borders will be scaled down as well, making them thinner.
No additional data was generated.

If itā€™d help Iā€™ll work on a mix-nodes setup thatā€™d work in this case

I really appreciate your willingness to help but I think there is a misunderstanding here.
The Fractal Distance to Edge output already has a what you call ā€œmix-node setupā€. It uses the min (aka. Darken in Blenderā€™s MixRGB node) function as ā€œblend modeā€.

This is exactly the problem with Distance to Edge, which is that you canā€™t really fade it.
I know youā€™re probably thinking that the MixRGB node has a Factor input for fading the min (aka. Darken) function but all that does is linearly interpolate the first input with the output, which is not the effect youā€™re looking for here.

One of the landscapes i posted above uses a fractal distance to edge node group.

I canā€™t really tell how you made these landscapes using Distance to Edge, so if you were to explain that I could look into that.

Probably because of optimization reasons. Iā€™m planning to add a Lacunarity input to the Noise Texture sometime after Iā€™m done with Fractal Voronoi noise.

1 Like