I need to contract(offset) a mesh by a small amount(around 5mm), the mesh itself is quite big (say, 1000mm). The problem is that, I need to contract it based on local mean curvature. That is, for places with higher mean curvature(protruding) less contraction is wanted; and vice versa.
The best approximation I can find now is CGAL's mesh skeletonization. The skeletonization is done with iterative contraction by mean curvature. So instead of contraction many times, I contract only once, and get what I need.
The problem with this approach is that the intermediate mesh is not garanteed to be self-intersection free, forbidding further processing. I don't have reliable way to automatically repair intersection.
I can of course, compute mean curvature at vertices myself and contract accordingly. Problem is I don't know to which direction I should offset a vertex. If I just use the vertex normal, the resulted mesh is very messy(not smooth).