* More functional style definition to clarify what gets mutated where. Make
VoronoiParams const, pass coordinate as own argument and return output by
value.
* Don't use template class, subclassing and methods. Easier to use same logic
in OSL and GLSL then. Slightly more overhead for always having fractal
position accumulated in 4D, but should be ok.
* Don't use VoronoiOutput for distance and radius.
* Various other naming and organization tweaks.
Implement Fractal Voronoi Noise to Voronoi Texture Node.
---
For F1, Smooth F1, F2 Feature output:
The concept behind Fractal Voronoi Noise is the same as the one behind Fractal Perlin Noise.
Multiple Layers of Voronoi Noise are computed and the Distance outputs of each layer added together to create the final Distance output.
The amount of layers is being controlled by the "Detail" input.
If the "Detail" input has a non-integer value two instances of Fractal Voronoi will be computed
with each having the greatest whole integer smaller than the "Detail" input value
and the smallest whole integer greater than the "Detail" input value as the amount of layers respectively.
The fractional part of "Detail" will the be used as a factor to lerp between the two instances.
The Distance output of each layer is being multiplied by the "Roughness" input to the power of the zero based number of the current layer.
This means that for example if the "Roughness" input is 2.0 the the Distance output of the first layer is being multiplied by 2.0 ^ 0 = 1.0
for the second layer it being multiplied by 2.0 ^ 1 = 2.0 for the third layer it is being multiplied by 2.0 ^ 2 = 4.0 and so on.
The Scale input of each layer is being multiplied by the "Lacunarity" input to the power of the zero based number of the current layer.
This means that for example if the "Lacunarity" input is 2.0 the Scale input of the first layer is being multiplied by 2.0 ^ 0 = 1.0
for the second layer it is being multiplied by 2.0 ^ 1 = 2.0 for the third layer it is being multiplied by 2.0 ^ 2 = 4.0 and so on.
Additionally a "Normalize" boolean input is added which if checked will remap the entire Distance output to a 0.0 to 1.0 range.
The Color and Position outputs simply give out the Color and Position outputs of the highest Voronoi Layer being computed.
---
For Distance to Edge Feature output:
Multiple Layers of Voronoi Distance to Edge Textures are computed.
The resulting Distance output is the minimum of the Distance output of all layers.
The amount of layers is being controlled by the "Detail" input.
If the "Detail" input has a non-integer value the smallest whole integer greater than the "Detail" input value will be the amount of layers
The Scale input of each layer is being multiplied by the "Lacunarity" input to the power of the zero based number of the current layer.
This means that for example if the "Lacunarity" input is 2.0 the Scale input of the first layer is being multiplied by 2.0 ^ 0 = 1.0
for the second layer it is being multiplied by 2.0 ^ 1 = 2.0 for the third layer it is being multiplied by 2.0 ^ 2 = 4.0 and so on.
Additionally a "Normalize" boolean input is added which if checked will remap the entire Distance output to a 0.0 to 1.0 range.
---
The N-Sphere Radius Feature output is left unmodified.