The goal: Squeezing everything out of an implementation possible, make a "super-universal" implementation...

Somehow almost archieved... (close enough )

Mind, that this implementation doesn't really alow you N-dimensional Simplex Noise generation, but allow you 1 to 32 dimensional Simplex Noise. But since your computer needs a hell lot of memory to compute some SimplexNoise with 33 dimensions, it wouldn't even be possible at reasonable sizes (the sizes of the dimensions themselves) today.

So here is an animated gif, animating through all the layers of a 3-Dimensional Noise. I don't know any way to visualize a 4-Dimensional Noise, but you can be sure, that that works.

<edit>Little generational improvement (Does not look that celly now):

</edit>

WARNING! Bevore reading the source code, keep in mind, that the source is totally CRACY... I needed Callbacks for example. For these callbacks I had to create Anonymus Inner functions... keep that in mind If you have any Idea on how to do that different... I'd like to know The code is almost uncommented.(Most important code is under SimplexNoiseLayerN.java)

I don't know any way to visualize a 4-Dimensional Noise, but you can be sure, that that works.

Use 4D noise to 'animate' the noise on the surface of a sphere. It's barely a true visualization of the 4th dimension, as it's basically the intersection of a surface through 3 spatial dimensions and 1 time dimension.

Hi, appreciate more people! Σ ♥ = ¾Learn how to award medals... and work your way up the social rankings!

I don't know any way to visualize a 4-Dimensional Noise, but you can be sure, that that works.

Use 4D noise to 'animate' the noise on the surface of a sphere. It's barely a true visualization of the 4th dimension, as it's basically 3 spatial dimensions and 1 time dimension.

Yes... And animated clouds / particles (with a > 0 test = particle creating) and the 4th dimension = time would also work... But what I wanted to say is, that I'm not able to put the 4 dimensional noise into for example gif or anything like that.

One of the downsides of simplex noise is that it's very apparant that you're near an 'integer' in some dimension. In your GIFs that's very visible, as at certain 'depths' there are distinct patterns. The whole point of noise is that is has a few patterns as possible.

One way to fix this is to sample your noise from a higher spatial dimension.

I never use a higher dimension except for animation purposes. Taking a non-aligned planer slice just shifts the directions of the defects a bit. But whatever works is all good. (Note that any affine transformed planar slice just requires some one time computation of the various deltas which can be used in the loop). Ignoring animation a simple way to most avoid defects is to simply have the initial largest scale (lowest frequency) sampling range both far-ish from the origin (never sample collapsing around the origin) and not integer aligned and smaller scale just move closer and closer by the scale factor(s). Walking straight through an extra dimension adds uniform evolution. Walking around an axis in the higher dimension is interesting for having varying the rate of evolution in a linear manner (slowest near the axis and fastest at the most distant). It should be noted that a very common source of defects is to have a bad hashing function.

Erm... no... <edit>: Sorry, totally misunderstood you ... heh... Yeah, you're right, but I wanted to know, how to "simulate a plane, walking through the noise", without having a volume (3 Dimensions)...</edit>It's true, that there are some changes in the settings for the different SimplexNoiseLayers, but it's more than that,here is the code for generating the Gif: (I'm sorry, this is only testing code, so it really looks awful and is packed inside one single function (the main() funciton))

The important part is the plane[][] matrix, whose edges get filled by random values, and then the values in between (the rest) are interpolated.

The values inside the plane[][] are modifying which "layer" to choose, when writing the Noise to a BufferedImage array.

It is supposed to act like a plane, which is (what is propably the problem) moved downwards through the noise... (My head hurts too much right now (yeah... implementing something like that is REALLY NOT EASY) for writing an implementation which is not based on values inside a 2D array, but is "vector based".)

Also I think I saw a recursive power calculation with integers...iteration is you're friend.

Yeah... quick-implementation too... (OMFG I already thing recursive :O shit...)Actually, only because I first didn't calculate 2^n for the possibilities, but n! (which is wrong...)... where ! was implemented recursive. And then I only changed it a bit, so it calculated integer-power.

Ony your blog you said we can't even imagine more than five dimensions.I disagree.

I can imagine any amount of dimensions by simply stacking them into 3 dimensions.

Example:

2D: A square3D: A cube4D: A 'row' of cubes both separate and together simultaneously5D: Same as 4D except a 'stack' of rows'6D: A 'cube' of cubes that are simultaneously in the space of one cube and infinitely apart at the same time

Etc.

I know it's not perfect as it still uses 3 dimensions, yet it is understandable as by adding another dimension, everything can still be in the same place as the already existing dimensions, just in a different place for the bew dimension.

In conclusion:

It is possible to think in any number of dimensions as long as your mind works logically and I am so going to make a game with 8 dimensions just to show I can.

Imagining spatial dimentions above 3D is not as simple as you make it seem.

You can indeed say that adding 1 dimension duplicates the all previous dimensions infinite times:

A line is an infinite series of stacked points

A plane is an infinite series of stacked lines

A volume is an infinite series of stacked planes

A 4D-thingy is an infinite series of stacked volumes

A 5D-thingy is an infinite series of stacked 4D-thingies

A 6D-thingy is an infinite series of stacked 5D-thingies

Wait what? Thingies...?

Then you can say that by adding a dimension, you can transform a lower dimensional coordinate system without affecting it, like you can draw a curved line on paper, or you can wrap paper over a cilinder, but how do you wrap a volume over that 4D-thingy ? I'm not talking about relativity (time) here, we're just dealing with spatial dimensions.

The opposite way of looking at it, is projecting dimensions into others (losing one dimension), like we can paint a picture (2D) of a landscape (3D), or look at the shadow (2D) of a structure (3D), or slice through a sphere to see a circle with the radius depending on how we sliced it - it might even be an oval, if we slice it with a curve, but that's not quite projection anymore. How would we imagine that some 4D shape can be projected into 3D?

And how do you imagine this: for each added dimension you add an axis that is perpendicular to all other axes. I'm lost at imagining 4 spatial dimensions.

I like to imagine a world with more than 1 time dimension though, but life is too short... or is it?

Hi, appreciate more people! Σ ♥ = ¾Learn how to award medals... and work your way up the social rankings!

It is impossible to 'see' more than three dimensions, as that is how we are, but you can imagine without 'seeing'

Time is something we cannot see, but we feel it and we move through it constantly as there is (for now) no friction that affects movement through time like in the normal three dimensions.

You can only ever be in one position per dimension, so if we can only see three dimensions, then anything in a different coordinate to us in another dimension is invisible to us. So imagine if you could be in the same place at the same time, but move through different positions in a fifth dimension. If movement through a fifth dimension was possible, you could eventually, find a 'world' no-one else lives, yet everything else is potentially the same.

Just like with time. You can be in the same place as someone else, but be in a different time and you could not see each other

It is impossible to 'see' more than three dimensions, as that is how we are, but you can imagine without 'seeing'

I'd argue that we can see only two dimensions (the retina is a surface, not a volume). But that's nitpicking.

0.1mm further into the next spatial dimension, there might be a bunch of cute fluffy bunnies bouncing around in aircastles eating soft candy supplied by a pink drain pipe. We don't have to travel far, to get entirely change our surroundings, just like in a 2D world, one would exist on 1 piece of paper featuring a bunch of boring words, and 0.1mm further one would exist on a totally different piece of paper showcasing a photo of a rainforest. With no means to travel through that higher dimension, you're just stuck in these lower dimensions.

By the way, there is no inherent friction in our three spatial dimensions.

Hi, appreciate more people! Σ ♥ = ¾Learn how to award medals... and work your way up the social rankings!

I'd say that isn't not nitpicking...we really can only see in 2D dimensions. And in the same manner for higher dimensions we can "see" a 2D projection of surfaces in that space. Just a little more tricky to "understand" the surface

The retina may be flat, but there are two of them, and there is a lot of binocular processing that is hardwired in the cortex. Also, our concepts and memories of the objects include 3D.

Even with one eye, people can experience a great degree of depth perception. Apparently there is more than just the binocular aspect that produces this cognitively, but other 'clues' as well are hard-wired in to be used spatially.

"We all secretly believe we are right about everything and, by extension, we are all wrong." W. Storr, The Unpersuadables

java-gaming.org is not responsible for the content posted by its members, including references to external websites,
and other references that may or may not have a relation with our primarily
gaming and game production oriented community.
inquiries and complaints can be sent via email to the info‑account of the
company managing the website of java‑gaming.org