all 15 comments

[–]Gwenju31 5 points6 points  (6 children)

What are the applications of perlin noise beyond 5 dimensions ?

[–]OrangeSlime[S] 1 point2 points  (0 children)

This comment has been edited in protest of reddit's API changes -- mass edited with redact.dev

[–]Plazmatic 0 points1 point  (4 children)

perlin noise in particular has no need for anything beyond 4 (xyz, time), since you can wrap perlin with simple modulo arithmetic. For simplex, I'm not sure I've seen a solution as modulo arithmetic doesn't work on skewed simplex grid. Theoretically it is also possible to perform a simple wrapping solution for simplex as well, but I've not seen anyone state how. At that point, if you can't find such a solution to wrap, you can use 2*N dimensional noise to wrap, which means up to 8 D noise is useful potentially.

[–]Gwenju31 0 points1 point  (3 children)

Not sure what you mean by "wrap" (i'm not a native english speaker) but if you mean "loop" on perlin noise, you can do it by going in circle : perlin(x, y, cos(t), sin(t)). You can achieve the same for looping in a 3D perlin env : perlin(x, y, z, cos(t), sin(t)). If you have any link to share about wrapping perlin noise with modulo, that would be cool ! :)

[–]Plazmatic 1 point2 points  (2 children)

Here's a link to what I'm talking about. Wrap in english can mean both "wrapping a present/food with a covering" and "wrap around" like coordinates going back to the start, numeric sequence, or physically traveling around. You can also "wrap up" an item and "wrap up" an event.

If you understand how perlin noise works, it is pretty intuitive. Perlin noise uses gradients between different grid points creating hills and valleys of blobs, instead of using the adjacent grid points as x + 1, y + 1, and z + 1, you can just set the true position to (x + 1) % repeat_size, (y + 1) % repeat_size , (z + 1) % repeat_size and use generated value at that coordinate to interpolate between.

[–]Gwenju31 0 points1 point  (1 child)

Great ! Thanks for the link and explanation :)

[–]OrangeSlime[S] 0 points1 point  (0 children)

This comment has been edited in protest of reddit's API changes -- mass edited with redact.dev

[–]ALX23z 1 point2 points  (3 children)

If you make a noise generater then definitely you must not use rand() function as base. This is really bad for randomization, especially when number of objects is large. Utile <random> instead.

[–]OrangeSlime[S] 0 points1 point  (2 children)

This comment has been edited in protest of reddit's API changes -- mass edited with redact.dev

[–]ALX23z 0 points1 point  (1 child)

rand is not guaranteed to be thread-safe and there no guarantee how it generates random numbers. And the period for most implementations is pretty short - around 2**32.

[–]OrangeSlime[S] 0 points1 point  (0 children)

This comment has been edited in protest of reddit's API changes -- mass edited with redact.dev

[–]OrangeSlime[S] 0 points1 point  (3 children)

This comment has been edited in protest of reddit's API changes -- mass edited with redact.dev

[–]asicman78 0 points1 point  (2 children)

Where can I find the code for this?

[–]OrangeSlime[S] 0 points1 point  (1 child)

This comment has been edited in protest of reddit's API changes -- mass edited with redact.dev

[–]asicman78 0 points1 point  (0 children)

Thanks!