I spent all of today trying to find solutions to the holes that can appear around branch vertices in the skin modifier. These holes have been a constant pain since I first started work on the modifier; I’ve sunk a lot of time trying to find solutions but with limited success. Automated merging around branches has helped, but it doesn’t address the core problem.
The problem itself is easy to describe: the polygons around branch nodes are created by generating a convex hull around all connected limb bases (the base of a limb is a frame, which is just four vertices arranged in a square.) Holes appear when one or more frame vertices is inside the convex hull. Holes also arise when one or more frame edges is not part of the convex hull (which can happen even if the edge’s endpoints are not inside the hull.)
The goal is to produce a manifold mesh, and the output should have the same general connectivity as the input (i.e. each set of connected vertices in the input should generate a nice manifold connected output.)
There are a number of possible approaches: more aggressive vertex merging, 3D intersection tests to cut holes in the hull, calculating geodesic shortest paths between hull verts to fix interior edges, reassignment of polygon loops to fix detached vertices, connecting limb bases to nearest existing polygon, and so on.
About the only concrete change I finished today was to convert the skin generation to BMesh. In and of itself, that doesn’t change much except to slow down skin calculation slightly, but it makes it much easier to experiment with topological manipulation. With so many possible input cases to deal with though, I’m not at all sure whether a good solution will be forthcoming from all this experimentation. Will probably give it at least another day though before going back to more “practical” coding.