# Proper way to use Perlin/Simplex Noise.

I’m working on a type of terrain similar to cubeworld/minecraft etc; block based voxel terrain.
I do not want anything formed below the surface, there will be no digging, mining etc of any kind so I’m not worried about that portion, only a surface.
How do I normalize the noise to create more of a “terrain” look with a seed or something similar?
It’s the noise/variation I’m concerned with, I’m not sure how to add it correctly.
When I use a baseline noise such as this:

``````float Perlin1 = Mathf.PerlinNoise(px/33,33);
float Perlin2 = Mathf.PerlinNoise(py/27,121);
GameObject go = Instantiate(terraincube, new Vector3(px, (int)Mathf.Abs(Perlin1*55*Perlin2), py), rot) as GameObject;
``````

I get very uniform, repeating results:

But when I try to add more noise to it, I wind up with such odd patterns it doesn’t even resemble terrain, and usually has holes, so that’s what I’m trying to figure out.
How do I normalize the noise to create more of a “terrain” look with a seed or something similar?

Start with the basics to get familiar with how the noise function works. I don’t understand your method for sampling or making use of those samples. Use your x,y coordinates as the sample arguments. Then try using multiples of your x,y coordinates (x2, x3, x*4). This coefficient defines the “scale” of the sampled area. Observe how this changes the results.

Don’t try jumping into using arbitrary values; really play with the function in the most basic way possible to build familiarity. That’s easier than explaining how and why certain value ranges produce certain results.

A “seed” must be injected into the parameters. Thus the x parameter becomes (x+seed), y becomes (y+seed).

With these two basics in mind, you can blend the results of multiple noise samples to achieve greater variety. This is where the fun stuff happens. For instance:

``````float n1 = Mathf.PerlinNoise((x*2.5f)+seed, (y*2.5f)+seed);
float n2 = Mathf.PerlinNoise((x*4)+(2*seed), (y*4)+(2*seed));
float n  = (n1+n2)/2f;  // <-- average two samples
``````

There’s other cool stuff to do besides averaging two samples, but that should get you on the right track at least!

Best,