Just think about the Normal as the direction the surface is viewing, its harder to understand when applying this to a vertex, so just a simple example:
If you want a cube with smooth appearing corners (lighting wise) all your normals should point away from the center of this cube.
This gives you smooth corners (lighting wise) and you only need 8 Vertices for this cube.
This is a cube with smooth corners:
You can use RecalculateNormals, however it’s faster to supply them. For cubes it’s very easy; a surface facing up would have the normals be (0, 1, 0), a surface facing to the right along the x axis would be (1, 0, 0), a surface facing forward along the z axis would be (0, 0, 1), etc.
The problem is you are calculating normals per vert as though each is a cube. If you visualise them, your cube looks like it has one set of normals per vertex. Therefore they will all averagely be pointing away from the center of the cube.
To get lighting like you want, most of the normals would actually be pointing directly up when they are not at the edges of the area.
Here is an image which describes the normals on a curved mesh. Notice how important their directions are for the mesh to look proper when lit:
A cube with faceted normals needs to be made of 24 vertices, not 8.
As, although the verts at each corner of the cube share the same spatial coordinates, they don’t share the same normal vectors and so must be split apart into 3 different vertices, each with it’s own normal direction.
So I would pretty much need to seperate each face, 4 for each face and point the normals in the required direction eg top face pointing up, left left etc.?