How exactly does 3ds Max calculate vertex normals of a mesh?


I’m trying to calculate smooth vertex normals of a triangular mesh and achieve EXACTLY the same result as Max does when setting all the faces to the same smoothing group (or Edit_Normal modifier with the Unify button with all normals selected). I thought it will be easy, just create an average vertex normal from surrounding faces normals, but looks like there are some differences in some cases and my shading isn’t as smooth as when Max does it, see the pictures below:


I had a similar discussion some years ago for a .XSI exporter plugin I was re-working; the thread included code snippets that support both smoothing groups and the Edit Normals modifier. Search for it.


Max does an extra little step that prevents a lot of undesirable edge cases.

Not only does it average normals of adjacent faces for any given vertex, but it also weights each face normal by the angle of its edges that are adjacent to that vertex.

See herefor an explanation of why (and the solution).


Great, that’s exactly what I was looking for! Thank you.