Problem with Winding Generated mesh, Material and edges appear wrong

I’ve generated a 5x5 of Vector3s to create a 4x4 grid tile, and I’ve got the triangles wrapped so that it’s visible from the top side. Here’s what I’ve rendered so far:


But something is still wrong with my material, or triangle winding or something. The edges don’t look crisp, the lighting is random. Something is wrong here. I used to remember why this effect would happen, but forgot what the name of it is…

My Code Basically looks like this:

mainObject = new GameObject();
mainObject.GetComponent<MeshRenderer>().material = Resources.Load("TerrainMat") as Material;
mainMesh = mainObject.GetComponent<MeshFilter>().mesh;
mainObject.transform.parent = transform;

// I generate the vertices and faces (see below)

mainMesh.Clear ();
mainMesh.vertices = newVertices.ToArray();
mainMesh.triangles = newTriangles.ToArray();
//mainMesh.uv = newUV.ToArray();
mainMesh.Optimize ();
mainMesh.RecalculateNormals ();

The vertices are generated row by row from top to bottom, left to right. No matter how I wind the triangles it seems to fail, although if I wind them in reverse so that only the underside of my model is visible, it seems that the color is at least consistently dark, as the underside should be.

The Material is a pretty standard material, I don’t think it’s the problem.

From the docs (Unity - Manual: Mesh data):

“To get crisp edges, it is necessary to double up vertices at each edge since both of the two adjacent triangles will need their own separate normals.”