<p>Think of adding dimensions as a zoom function: Everything becomes more fuzzy as the levels increase.</p>
<p>Step back and clarity will happen.  Step back too far and patterns will emerge.</p>
<p>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.</p>
<p>The original Perlin Noise design as used in the movie <em>Tron</em>, imagined a fixed number of dimensions at a fixed scale capable of being calculated in 64k of RAM memory relatively fast.</p>
<p>The math supports the dimensional expansion, but the pseudo-random initialization of a fixed vector size will reduce entropy on each fixed scaled axis.</p>
<p>The scaling ratio for 2D compounding effects like lava or clouds will be the same once the scaling factor is corrected.</p>
<p>If you need perfect transitions, work only at the highest dimension needed.</p>
<p>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.</p>
<p>The lookup tables would need to be expanded to support the entropy/randomness in larger(5+) dimensions.</p>

CC BY-SA 4.0
2024-09-18T02:31:12.467Z
2024-09-18T02:31:12.467Z
agone
<p>I just tried using <a href="https://gamedev.stackexchange.com/questions/23625/how-do-you-generate-tileable-perlin-noise/23639#23639">this approach</a> to create a tiling 2d simplex noise function with <a href="http://staffwww.itn.liu.se/~stegu/simplexnoise/SimplexNoise.java" rel="noreferrer">Gustavson's java implementation</a>. The result tiled, but the texture seemed muddy / washed out. </p>

<p>I decided to compare the result of using the 2d, 3d &amp; 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 &amp; max toward the average. Here are the results along with their histograms:</p>

<p><a href="https://i.sstatic.net/qOF9n.png" rel="noreferrer"><img src="https://i.sstatic.net/qOF9n.png" alt="enter image description here"></a> <a href="https://i.sstatic.net/D2JD7.png" rel="noreferrer"><img src="https://i.sstatic.net/D2JD7.png" alt="enter image description here"></a> <a href="https://i.sstatic.net/St0Ha.png" rel="noreferrer"><img src="https://i.sstatic.net/St0Ha.png" alt="enter image description here"></a></p>

<p>I ran across <a href="https://stackoverflow.com/questions/18885440/why-does-simplex-noise-seem-to-have-more-artifacts-than-classic-perlin-noise">this post</a> discussing some artifacts in Gustavson's implementation &amp; wondered if that might be contributing to the problem, so I tried using <a href="https://gist.github.com/KdotJPG/b1270127455a94ac5d19" rel="noreferrer">OpenSimplex noise</a> instead &amp; got very similar results.</p>

<p>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 &amp; I'd rather 
treat the problem rather than the symptoms if possible.</p>

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

CC BY-SA 3.0
2016-11-02T01:50:10.323Z
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
JarkkoL
CC BY-SA 3.0
2016-11-02T23:05:05.443Z
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."
Alan Wolfe
CC BY-SA 3.0
2016-11-03T08:56:42.733Z
You might want to also insure that all dim are returning full range values..some implementation do not.
MB Reynolds
CC BY-SA 4.0
2021-03-13T06:20:02.983Z
http://staffwww.itn.liu.se/~stegu/simplexnoise/simplexnoise.pdf says "Note in particular that a 3D section of 4D simplex noise is different from 3D simplex noise. This is the visual result of moving from the time-consuming interpolation one dimension at a time to a fast, direct summation." but they all seem to use summation so I don't understand
endolith
CC BY-SA 4.0
2021-03-29T21:53:02.957Z
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"
endolith
CC BY-SA 4.0
2023-05-25T11:19:59.983Z
This may be related to the phenomenon discussed in this [paper on wavelet noise](https://graphics.pixar.com/library/WaveletNoise/paper.pdf), where taking a 2D slice through a higher-dimensionality gradient noise loses the band-limited characteristics of a native 2D version.
DMGregory
<image-processing><noise><procedural-generation>
Why does increasing simplex noise dimension wash it out?
Pikalek
# Why does increasing simplex noise dimension wash it out?

(Asked by: username_0 on 2016-10-22)

I just tried using [this approach](https://gamedev.stackexchange.com/questions/23625/how-do-you-generate-tileable-perlin-noise/23639#23639) to create a tiling 2d simplex noise function with [Gustavson's java implementation](http://staffwww.itn.liu.se/~stegu/simplexnoise/SimplexNoise.java). 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 here](https://i.sstatic.net/qOF9n.png)](https://i.sstatic.net/qOF9n.png) [![enter image description here](https://i.sstatic.net/D2JD7.png)](https://i.sstatic.net/D2JD7.png) [![enter image description here](https://i.sstatic.net/St0Ha.png)](https://i.sstatic.net/St0Ha.png)

I ran across [this post](https://stackoverflow.com/questions/18885440/why-does-simplex-noise-seem-to-have-more-artifacts-than-classic-perlin-noise) discussing some artifacts in Gustavson's implementation & wondered if that might be contributing to the problem, so I tried using [OpenSimplex noise](https://gist.github.com/KdotJPG/b1270127455a94ac5d19) 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?

**Tags:** image-processing, noise, procedural-generation

> **Comments:**
> **username_1**: 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  
> **username_2**: 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."  
> **username_3**: You might want to also insure that all dim are returning full range values..some implementation do not.  
> **username_4**: http://staffwww.itn.liu.se/~stegu/simplexnoise/simplexnoise.pdf says "Note in particular that a 3D section of 4D simplex noise is different from 3D simplex noise. This is the visual result of moving from the time-consuming interpolation one dimension at a time to a fast, direct summation." but they all seem to use summation so I don't understand  
> **username_4**: 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"  
> **username_5**: This may be related to the phenomenon discussed in this [paper on wavelet noise](https://graphics.pixar.com/library/WaveletNoise/paper.pdf), where taking a 2D slice through a higher-dimensionality gradient noise loses the band-limited characteristics of a native 2D version.  

---

## 1 answers

### Answer by username_6 on 2024-09-18. Score: 0

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.


---

