- Home /
The question is answered, right answer was accepted
Unity Perlin Noise Terrain Artifacts
I was able to successfully get perlen noise to a terrain in unity but i am having a strange problem. I am getting stripes as seen in the image below. I do not know how i would go about fixing this or were it is coming from. When i plug it into a gray-scale image i do not get the artifacts. Here is the code.
using UnityEngine;
using System.Collections;
public static class NoiseMaker {
public static float [,] GenerateNoise (int Width, int Height, float Scale, int Seed, int Octives, float Persistance, float Lacunarity, Vector2 Offset) {
float[,] noiseMap = new float[Width, Height];
System.Random prng = new System.Random (Seed);
Vector2 [] octaveOffset = new Vector2[Octives];
for (int i = 0; i < Octives; i++){
float OffsetX = prng.Next (-100000, 100000) + Offset.x;
float OffsetY = prng.Next (-100000, 100000) + Offset.y;
octaveOffset [i] = new Vector2 (OffsetX, OffsetY);
}
float MinNoiseHeight = float.MaxValue;
float MaxNoiseHeight = float.MinValue;
float halfWidth = Width / 2;
float halfHeight = Height / 2;
for (int y = 0; y < Height; y++){
for (int x = 0; x < Width; x++){
float Amplitude = 1;
float Frequency = 1;
float noiseHeight = 0;
for (int i = 0; i < Octives; i++) {
float sampleX = (x - halfWidth) / Scale * Frequency + octaveOffset [i].x;
float sampleY = (y - halfHeight) / Scale * Frequency + octaveOffset [i].y;
float perlinValue = Mathf.PerlinNoise (sampleX, sampleY) * 2 - 1;
noiseHeight += perlinValue * Amplitude;
Amplitude *= Persistance;
Frequency *= Lacunarity;
}
if (noiseHeight > MaxNoiseHeight){
MaxNoiseHeight = noiseHeight;
} else if (noiseHeight < MinNoiseHeight){
MinNoiseHeight = noiseHeight;
}
noiseMap [x, y] = noiseHeight;
}
}
for (int y = 0; y < Height; y++) {
for (int x = 0; x < Width; x++) {
noiseMap [x, y] = Mathf.InverseLerp (MinNoiseHeight, MaxNoiseHeight, noiseMap [x,y]);
}
}
return noiseMap;
}
}
I directly apply the heights to the terrain. So what is causing this?
I looked at a tutorial Here to get me started off. I still need to refine it but it should work directly applying it to a terrain because i can convert it into a grayscale texture and it dose not have the strange lines.
This only happens when i zoom into the map so i might try not zoo$$anonymous$$g in so far.
Answer by Bogsse · Jul 31, 2016 at 04:43 PM
My problem was the shadows of the terrain and the shadow is making the artifacts. The code works perfectly but the shadows don't.
Follow this Question
Related Questions
How to stretch only the middle of a GUI texture? 1 Answer
White pixels along tree creator trees 1 Answer
flat shading with normal bias causing artifacts 1 Answer
Artifacts at seams when baking lightmaps! 1 Answer
Graphical artifacts 1 Answer