Introduce vertex normals. Now every triangle has a curve group index. If it is -1, it means it is not part of a curved surface. If it not -1, its vertex normals calculated from neighbour triangles with same curve group index. The normal query works with barycentric interpolation.