A robust, high-quality uniform remeshing filter is an essential tool in any mesh modelling library. I know that VTK was originally not meant for modelling and probably there was no known open-source algorithm for uniform remeshing. But VTK has some excellent modelling tools now, VTK is widely used for modelling, and the open-source ACVD algorithm has proven to work very well for generating high quality uniform meshes.
Therefore, it would be time to add ACVD remeshing to VTK.
It has a BSD-type license. There is also a simplified implementation (uniform remeshing only) in Python (pyacvd), which would be sufficient.
We have recently made available this pyacvd implementation in 3D Slicer and it works amazingly well and it is already brought very significant improvements into several mesh modeling workflows. Here is a quick comparison with fast quadric decimation:
I know that I cannot “request” a feature without offering funding or contribution, I just wanted to bring this algorithm into VTK core developers’ attention. When a funded project requires high-quality uniform meshes then adding an ACVD might be added to the scope, as it may very significant quality improvements in any case when uniform point distribution on a surface mesh is needed.
@cory.quammen @Yohann_Bearzi @banesullivan @akaszynski
Andras, thanks for the heads up, this looks interesting. I assume you’ve tried this on topology / Euler numbers != 2 etc. – any unusual experiences or limitations that you’ve encountered would be interesting to me (before I dig into the paper(s)).
Others such as @Bob O’Bara and @Spiros Tsalikis may be interested as well.
I only have first-hand experience with the simplified pyacvd implementation and it is very robust. It works well for open surfaces or surfaces with holes, too.
Left: original surface (11.4k points). Right: pyacvd result (1k points).
Disconnected meshes are handled correctly:
Even works for a Klein bottle:
Complex meshes with non-manifold edges don’t seem to cause any problems either:
This would be a great addition to VTK! I want to provide a link to the mentioned pyacvd which @akaszynski implemented: GitHub - pyvista/pyacvd: Python implementation of surface mesh resampling algorithm ACVD
This Python package works within PyVista’s ecosystem and thus works very well with VTK in Python. However, having this directly in VTK and in C++ would be much better
There is also a simplified implementation (uniform remeshing only) in Python (pyacvd)
My implementation is somewhat less stable than ACVD, but it should work. If you’re going to implement a solution directly within VTK, I’d go with using ACVD.
I checked out a few papers last night, this is definitely a valuable piece of work and would be a good addition to VTK. My only grumble is that the algorithm is referred to as “fast” in the literature but from the data sizes, timings, etc. I think it’s slow (although relative to other remeshers etc, it may be fast, but I bet we could do 10x or better - although it’d be tricky to multithread).
Does this work with quadratic or cubic elements?
@will.schroeder Triangles, yes, but can they be higher order than just linear?