While the face normals (the one from a center of each triangle ) looks perfectly up those normal are derivative as a median of vertex normals in triangles corners. The bottom left corner for example , clearly not 90 degree up . it's what creates shading gradients. Face weighting, or direct normals editing could fix it .…