Happy New Year everyone!
Wishing all of you and your families a healthy and joyful 2021
I’m pleased to share a new tool for fast and robust generation of high quality isotropic triangular meshes (and their duals) from a Brep or mesh input.
The resulting meshes consist of triangles with similar edge lengths, angles and areas.
This will be included in Grasshopper in the next Rhino 7 service release candidate.
The new component will then appear at the bottom of the Mesh>Triangulation tab.
It also optimizes for mesh valence - and will generally give what are known as ‘5-6-7’ meshes, where each internal vertex is surrounded by 5, 6 or 7 triangles.
It can detect and robustly preserve sharp features and boundaries and produces conforming meshes (which match edge-to-edge including across creases without hidden slivers in concave regions - a common problem with other remeshers).
Features can either be inferred from the edges of an input Brep, detected from mesh face angles, or input directly as curves or points to keep fixed.
It also outputs the dual mesh. Because the triangular meshes have 5-6-7 connectivity, this dual mesh consists mainly of hexagons, with some pentagons and heptagons. It also optimizes so that these Ngons also have similar areas and edge lengths.
If just one brep/mesh is given as input, it will be remeshed, but it also gives the option to provide a starting geometry and a target geometry and shrink wrap one onto the other.
This even allows the used of a bad mesh as the target, with holes, non-manifold edges and duplicate faces. So it can be a way of fixing problematic meshes before further processing.
Even when the edge lengths are relatively high with respect to geometric features of the target it is more resistant than other remeshing tools to the common ‘frostbite’ problem where the mesh will slip past thin protrusions such as the fingers of a hand, or the ears of the Stanford bunny, cutting them off in the result.
It is multi-threaded and runs natively without any external dependencies. I’ve tested it on meshes with a few million faces. This first component prioritizes simplicity of interface and robustness over speed - it should already be pretty fast, but the future plan is to add some more components with finer grain control over all the steps of the remeshing to allow users to choose to skip checks which are not necessary in certain cases for faster results on huge meshes.
The remeshing code is all by me, synthesising ideas from many papers as well as some novel features. Internally it uses the Plankton mesh data structure, which was a collaboration between me and @will. (you do not need to install anything extra for this - it is included in the files above)
I’ve made various remeshing tools over the last 8 years since I first got interested in the topic.
However, this is a complete rewrite from scratch, and solves many of the bugs problems with previous versions of MeshMachine/SimpleRemesh etc.
I wanted to share this simple component as a start, but there’s also more to come with this in 2021, such as a Rhino command line version, scripting interface, variable mesh sizing, circle packing, anisotropy, alignment, relaxation, developability…
Scan model sources:
Tennyson bust: https://www.myminifactory.com/object/3d-print-alfred-tennyson-bust-at-the-usher-gallery-lincoln-2953
Dragon: The Stanford 3D Scanning Repository
Hand: http://visionair.ge.imati.cnr.it/ontologies/shapes/view.jsp?id=355-Hand