2
$\begingroup$

Say you have a topological skeleton, you want to fabricate a mesh out of it, what algorithms exist to accomplish this?

I know of at least one way, which is to represent each edge as an implicit capsule and then run dual contouring on the resulting CSG shape given by the union of all capsules.

I am wondering if there is a way to achieve it through other means, especially through explicit piece wise parametrizations or mesh stitching.

$\endgroup$
1
  • 1
    $\begingroup$ I think you need to be a bit more specific what you expect from your mesh. Otherwise, any algorithm that takes a skeleton as input and spits out some mesh will be a valid answer, even random ones. I mean, this could really be an interesting question, for example, if you ask for an algorithm that turns a basic skeleton into a mesh that looks like a valid biological organism with mucles, etc. But as it stands now it isn't clear to me what answer you are hoping for. $\endgroup$
    – wychmaster
    Commented Jan 18, 2023 at 17:04

1 Answer 1

3
$\begingroup$

There are a bunch depending on your needs. My personal favorites (but admittedly based on our use cases) is voxel solutions (including converting back from voxels to meshes) and - this can get quite elaborate to do it nicely -- B-Meshes.

https://onlinelibrary.wiley.com/doi/10.1111/j.1467-8659.2010.01805.x

B-Meshes are quite interesting. I had to tinker a bit with the paper's implementation to improve the robustness. I ran into some edge cases at least with the way I implemented the paper (not necessarily a problem with the paper itself), but a lot of it was solved by coming up with the most robust algorithm to generate convex hulls. They resemble ZSpheres in ZBrush in a way. enter image description here

These assume a user parameter that adjusts the radius of the metaphorical spheres -- associated with the joints between bones -- sort of blended together almost like metaballs (but with a very clean polygon output), to form the final mesh. And that's something I assume you'll need unless your resulting mesh from a bone hierarchy is acceptable with uniform thickness throughout. There's usually some need for user input to say like this part is bigger/thicker, this part is smaller/thinner, but that's all they need to provide for the skeleton/bone hierarchy to get a pretty nice base mesh or even final mesh.

My custom-tailored voxel solution is my favorite if you don't have too many topology concerns over the final output. Basically you rasterize (voxelize?) your skeletal hierarchy writing to a voxel grid (3D Bresenham) that encompasses the volume with a voxel rep that stores the index of the associated bone/joint. Then you can iteratively expand the voxels (make their neighbors copy the same voxel value not too unlike a basic flood fill or breadth-first search) up to some threshold or number of iterations until reaching a desired uniform thickness. And that's an easy solution to adapt with variable maximum thickness for each joint.

Another solution is to treat your bones as signed distance fields (SDFs). You can associate a maximum thickness easily to a bone in your hierarchy (with variable thickness for each bone) that you can treat as a line SDF and render a nice looking thick result that looks very smooth and curvy and round (or even sharp and right-angular using Manhattan distance). The difficulty with this solution along with my preferred one is that you can't just use a straightforward triangle rasterizer to render the results. You have to do things like raymarching. Or you have to convert it back to polygons from SDF->polygons or voxels->polygons which isn't a trivial problem to do really well with results that are much nicer than your stereotypical marching cubes.

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.