Mesh Recalculate Normals giving slightly wrong normals

I have this mesh, which is procedurally generated and I’m calling Recalculate Normals() on it. But the normals aren’t being calculated how they are supposed to be.

Aren’t they supposed to be straight, pointing upwards? Perpendicular to the faces?


The mesh in question is spherical mesh, so I think it just calculates the normals based on the direction from the center and not actually on from the geometry of the mesh.
I want to generate grass on the surface, and I’m using the normal of the vertices to set the rotation of the grass, but as you can guess, the grass is also pointing obliquely.
Any help?

The mesh normals are per vertex and aren’t face normals which is what it looks like you’re trying to do? Also, you need to transform the normal by the mesh transform to get the correct orientation. You could try this code here to render them as debug rays to check that it’s working correctly: Is vertices.normals face- or vertex-normals? - Questions & Answers - Unity Discussions

How are you selecting the normals for adding your grass objects? Are you raycasting onto the mesh? It looks a bit like it’s using a raycast direction rather than the collision normal.