15
$\begingroup$

I just tried using this approach to create a tiling 2d simplex noise function with Gustavson's java implementation. The result tiled, but the texture seemed muddy / washed out.

I decided to compare the result of using the 2d, 3d & 4d versions to make a 2d texture by holding any 'extra' dimension parameters at zero. The 4d output looked the same as my tiled 2d output. Furthermore, I noticed a trend: as the dimensions increase, the noise starts to drift away from the min & max toward the average. Here are the results along with their histograms:

enter image description hereenter image description hereenter image description here

I ran across this post discussing some artifacts in Gustavson's implementation & wondered if that might be contributing to the problem, so I tried using OpenSimplex noise instead & got very similar results.

What's going on here? I'd like to use the 4d simplex noise to make a tiling 2d texture that looks more like the regular 2d simplex noise. If necessary I can try to massage the output, but that seems like hack & I'd rather treat the problem rather than the symptoms if possible.

Again, just to clarify, I'm asking: why does the dimensionality seem to affect the final 2D as illustrated?

$\endgroup$
7
  • $\begingroup$stackoverflow.com/questions/1313259/tiling-simplex-noise$\endgroup$
    – Christophe Roussy
    CommentedOct 27, 2016 at 8:26
  • 5
    $\begingroup$From Wikipedia: "Simplex noise has no noticeable directional artifacts (is visually isotropic), though noise generated for different dimensions are visually distinct (e.g. 2D noise has a different look than slices of 3D noise, and it looks increasingly worse for higher dimensions[citation needed]).", so sounds like what you got$\endgroup$
    – JarkkoL
    CommentedNov 2, 2016 at 1:50
  • 5
    $\begingroup$Also from wikipedia "For higher dimensions, n-spheres around n-simplex corners are not densely enough packed, reducing the support of the function and making it zero in large portions of space."$\endgroup$CommentedNov 2, 2016 at 23:05
  • 1
    $\begingroup$You might want to also insure that all dim are returning full range values..some implementation do not.$\endgroup$CommentedNov 3, 2016 at 8:56
  • 1
    $\begingroup$It might also be related to the different sets of possible gradients that are allowed in each dimension? "For 2D, 8 or 16 gradients distributed around the unit circle is a good choice. For 3D, Ken Perlin’s recommended set of gradients is the midpoints of each of the 12 edges of a cube centered on the origin. … For 4D, a suitable set of gradients is the midpoints of each of the 32 edges of a 4D hypercube"$\endgroup$
    – endolith
    CommentedMar 29, 2021 at 21:53

1 Answer 1

0
$\begingroup$

Think of adding dimensions as a zoom function: Everything becomes more fuzzy as the levels increase.

Step back and clarity will happen. Step back too far and patterns will emerge.

The scaling factor must be increased with the number of dimensions, you are expanding the same amount of entropy to occupy a larger area/volume/hyper-volume/... if your only variable is the number of dimensions.

The original Perlin Noise design as used in the movie Tron, imagined a fixed number of dimensions at a fixed scale capable of being calculated in 64k of RAM memory relatively fast.

The math supports the dimensional expansion, but the pseudo-random initialization of a fixed vector size will reduce entropy on each fixed scaled axis.

The scaling ratio for 2D compounding effects like lava or clouds will be the same once the scaling factor is corrected.

If you need perfect transitions, work only at the highest dimension needed.

The bounds of the noise is infinite but repeating per direction. So simply scale the noise when adding dimensions(1-3). At 4 and above patterns may emerge due to the limited entropy.

The lookup tables would need to be expanded to support the entropy/randomness in larger(5+) dimensions.

$\endgroup$

    Start asking to get answers

    Find the answer to your question by asking.

    Ask question

    Explore related questions

    See similar questions with these tags.