Triangles in mesh not recalculating correctly when calling RecalculateNormals()

I am generating a mesh with simplex noise via script. That works fine. I am then raycasting with the mouse to allow a vertex to be clicked, to raise that vertex. When I do so in code, and recalculate normals, the triangles surrounding that vertex are not recalculated correctly. Am I missing something?

Here’s the code in question:

verts[closestIndex] += Vector3.up * 0.5f;
            mesh.vertices = verts;
            mesh.RecalculateNormals();

            meshCollider = GetComponent<MeshCollider>();
            meshCollider.sharedMesh = mesh;

Below is a picture of what is happening. Only one of the surrounding triangles is updated, so it looks wrong.

Looks like you not sharing vertices, so each tri in your mesh uses 3 unique vertices. The fact the faces are flat shaded and not smooth also indicates that. If you want the flat shaded/low poly look then you will have to find the vertices in your mesh that have the same value as the one you are about to move and then also move those.

Normals are stored in a single vertex. If you just raise a vertex and recalc normals, it won’t look like a facet but rather mooshy smooth. To make it look like a facet you have to clone the verts so they are not shared between faces.

You can see a running comparison of what I’m talking about in my MakeGeo project. Look for the SharedvsNonSharedVertices scene.

MakeGeo is presently hosted at these locations:

https://bitbucket.org/kurtdekker/makegeo