# What would cause shadowy stripe artifacts on a mesh generated from perlin noise?

Hi everyone,

I’ve been working on procedurally generating a mesh, going by Sebastion Lague’s tutorial.

I managed to create the mesh by generating a perlin noise map with Mathf (yes, I know simplex is technically better), and used it as a basis for the heights of the vertices on the mesh:

``````public static MeshData GenerateTerrainMesh(float[,] heightMap, float heightMultiplier, AnimationCurve heightCurve)
{
int width = heightMap.GetLength(0);
int height = heightMap.GetLength(1);

float topLeftX = (width - 1) / -2.0f;
float topLeftZ = (height - 1) / 2.0f;

MeshData meshData = new MeshData(width, height);
int vertexIndex = 0;

for (int x = 0; x < width; x++)
{
for (int y = 0; y < height; y++)
{
meshData.vertices[vertexIndex] = new Vector3(topLeftX + x, heightCurve.Evaluate(heightMap[x, y]) * heightMultiplier, topLeftZ - y);
meshData.uvs[vertexIndex] = new Vector2(x / (float)width, y / (float)height);

if (x < width - 1 && y < height - 1)
{
meshData.AddTriangle(vertexIndex, vertexIndex + width + 1, vertexIndex + 1);
meshData.AddTriangle(vertexIndex, vertexIndex + width, vertexIndex + width + 1);

}

vertexIndex++;
}
}

return meshData;
}
}

public class MeshData
{
public Vector3[] vertices;
public int[] triangles;
public Vector2[] uvs;

public int triangleIndex;

public MeshData(int meshWidth, int meshHeight)
{
vertices = new Vector3[meshWidth * meshHeight];
uvs = new Vector2[meshWidth * meshHeight];
triangles = new int[(meshWidth - 1) * (meshHeight - 1) * 6];
}

public void AddTriangle(int a, int b, int c)
{
triangles[triangleIndex] = a;
triangles[triangleIndex + 1] = b;
triangles[triangleIndex + 2] = c;
triangleIndex += 3;
}

public Mesh CreateMesh()
{
Mesh mesh = new Mesh();
mesh.vertices = vertices;
mesh.triangles = triangles;
mesh.uv = uvs;
mesh.RecalculateNormals();
mesh.name = "Procedural Mesh";

return mesh;
}
``````

The result was (mostly) satisfactory: