Here’s a mesh offset script example of what I was talking about earlier:
meshoffset_options.gh (25.4 KB)
You can choose between targeting at-least, at-most and average face-face distances, or standard vertex-vertex.
It’s easy to find meshes where no approaches work though, particularly with highly concave vertices, or non-planar quads, and I think trying to find a way of offsetting by simply moving vertices that works on all cases would be a recipe for frustration.
I’m pretty sure there are plenty of cases where it is simply geometrically impossible, and the only way mesh offsetting can be truly robust is to allow changes in the topology - i.e. adding new vertices in the offset.
For example - the Császár polyhedron is a valid, closed, planar faced, mesh, without any self intersections, but however you try to move the vertices outward to make an offset, you get something that not only doesn’t keep a minimum distance from the original, but actually intersects it. That’s an extreme example, but I think it’s fairly likely that a version of this phenomenon will occur on some vertices of any moderately complex mesh with concave parts.