16

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 here enter image description here enter 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?

Pikalek
  • 377
  • 1
  • 13
  • http://stackoverflow.com/questions/1313259/tiling-simplex-noise –  Oct 27 '16 at 08:26
  • 5
    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 Nov 02 '16 at 01:50
  • 5
    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 Nov 02 '16 at 23:05
  • 1
    You might want to also insure that all dim are returning full range values..some implementation do not. – MB Reynolds Nov 03 '16 at 08:56
  • 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 Mar 13 '21 at 06:20
  • 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 Mar 29 '21 at 21:53
  • This may be related to the phenomenon discussed in this paper on wavelet noise, where taking a 2D slice through a higher-dimensionality gradient noise loses the band-limited characteristics of a native 2D version. – DMGregory May 25 '23 at 11:19

0 Answers0