0 votes

I need to understand it. The docs don't explain how it really works.

asked Sep 11, 2019 in Engine by JulioYagami (636 points)
edited Sep 11, 2019 by JulioYagami

1 Answer

+3 votes
Best answer

OpenSimplexNoise is a type of smooth noise algorithm like Perlin Noise: https://en.wikipedia.org/wiki/Perlin_noise

Noise is like random numbers spread over a grid. Like any random numbers, they can be controlled by a seed. The same seed will generate the same map.
But when you use random numbers, you get anarchic patterns where values can completely change from one pixel to another, which is not suitable for landscape generation for example.

OpenSimplexNoise instead generates a smoother pattern, like hills, and has a setting to decide how spreaded out those hills are. That's what the period property does: if it's 1, you get anarchic noise. But if it's greater, it "zooms" the hills so the variations span larger areas.

But you don't necessarily want smooth hills all the time. Maybe you want smaller hills within those hills, and further details within them.
To accomplish this, you can add together multiple layers of smooth noise, sampled at different periods: one layer with period 16 for the rough shape of the landscape, a second layer with a period of half (8) to add extra bumps at a smaller strength, and another layer with period of half again (4) for tinier details with even smaller strength.
This is why it's said to be "fractal", it reapplies the same algorithm multiple times at various levels of detail. Here we divided period by 2 for each layer, so that means we chose a lacunarity of 2.

Godot implementation then provides similar remaining properties:
octaves determines how many layers you want.
persistence determines how strongly the multiple layers are applied (factor 0..1).
lacunarity is the scale factor between the period of those layers.

There are plenty of resources on the internet explaining this, and there are also many variants of this algorithm.

answered Sep 11, 2019 by Zylann (26,786 points)
selected Sep 11, 2019 by JulioYagami
Welcome to Godot Engine Q&A, where you can ask questions and receive answers from other members of the community.

Please make sure to read How to use this Q&A? before posting your first questions.