MeshToVolume-VolumeToMesh remeshing

1,752 views
Skip to first unread message

youssef EL MOUMNI

unread,
Jun 4, 2013, 8:31:44 AM6/4/13
to openvd...@googlegroups.com
Hello, 

I am doing an internship which subject is to analyze different surface/mesh reconstruction algorithms, and I've come to experience a bit with OpenVDB and the MeshToVolume-VolumeToMesh tools. I've made a small test project which imports an "stl" file, gets it into a grid, then extracts the surface using VolumeToMesh. What i've noticed is that it does not preserve sharp edges, and generates a lot of staircase artifacts, as shown in the picture attached. Thus I would like to ask which method are you using to rebuild the mesh, as I've done some searches on the Forum, and there was a reference to Dual Contouring being used in VolumeToMesh : 
Hi,
This is unfortunately expected. Dual contouring meshing schemes can generate non-manifold surfaces, this is an inherent side effect of placing one single vertex in each cell. The isNonManifold method is used in the VolumeToMesh scheme to avoid adapting in regions were the grid is non-manifold. Several papers try to deal with this issue and I'm looking forward to investigating this more.
"Dual marching cubes - Nielson, G.M."
"Manifold Dual Contouring - Scott Schaefer, Tao Ju, Joe Warren"
"Dual contouring with topology-preserving simplification using enhanced cell representation - Hong, W.; Kaufman, A."
/Mihai

But as far as I know, Dual Contouring does preserve sharp edges, so I'm not quite sure if I understoud the quote wrong, or if I've done some wrong parametrization of my mesher.


Thanks in advance for your answers. 


OpenVDB Support

unread,
Jun 4, 2013, 1:18:08 PM6/4/13
to openvd...@googlegroups.com
Hi,

Dual surfacing refers to a whole class of meshing schemes and not any particular one, the following papers all describe different dual surfacing methods: 
"Constrained Elastic Surface Nets"
"Feature Sensitive Surface Extraction from Volume Data"
"Dual Contouring of Hermite Data"

In contrast, marching cubes and marching tetrahedrons belong to the primal surfacing class.

In regards to sharp features, "Feature Sensitive Surface Extraction from Volume Data" describes an extended algorithm that uses high-order information from the mesh (intersection points with corresponding normals) to sharpen edges and corners in volume surfacing. But nothing truly preserves sharp features, this information is lost in the sampling. These so-called reconstruction techniques really just guess and try to make sharp features.

We've recently implemented these sharpening techniques and they will be included in the next release.

/Mihai

youssef EL MOUMNI

unread,
Jun 5, 2013, 5:16:59 AM6/5/13
to openvd...@googlegroups.com
Hi,

I see, so these Sharpening techniques haven't yet been implemented, I guess you are using Standard Marching Cubes for now. 

I was familiar with "Dual Contouring of Hermite Data" and "Constrained Elastic Surface Nets", thank you for referring me to the "Feature Sensitive Surface Extraction from Volume Data" which I didn't know of. I would also suggest the "Intersection-Free Contouring on an Octree Grid" which, unlike " Dual Contouring of Hermite Data", doesn't generate self-intersections, as I've noticed the algorithm described in the paper does generate quite a lot of them. Also I hope the one you've implemented recently does not.

Thank you for the quick and precise answer, I'm looking forward to your next release.

Youssef

Ken Museth

unread,
Jun 5, 2013, 10:56:45 AM6/5/13
to openvd...@googlegroups.com
Hi Youssef,

Check out GitHub, it includes the sharp feature reconstruction that you're missing.

youssef EL MOUMNI

unread,
Jun 10, 2013, 10:49:35 AM6/10/13
to openvd...@googlegroups.com
Hi and Thank you, 

Wow I was surprised to see it's already implemented, you guys are doing such an awesome work. I did check GitHub, and it does include the sharp feature reconstruction part I am missing, but I've been working on it for 5 days now and I can't seem to understand how to use it/test it, I do import the points, compute the normals, but then I am stuck on how and where to call the function. As the description states it returns one feature point for a set of tangent elements. I do understand the principle in theory, but I'm having some troubles using it in practice. For the previous MeshToVolume and VolumeToMesh methods I had some concrete examples that helped me understanding their mechanics, which is not the case for this new version ( which is understandable, the version is still under development).
Though I'd like to ask if a simple example of this function use/call can be given, it would be of a great help.

Thank you in advance,

Youssef

youssef EL MOUMNI

unread,
Jul 3, 2013, 4:07:48 AM7/3/13
to openvd...@googlegroups.com
Hi,

Since the 1.2.0 has been released, is it possible to request a test example of sharp features extraction for the volumeToMesh::findFeaturePoint function ?

Thanks in advance.
Youssef
Reply all
Reply to author
Forward
0 new messages