Master’s Project – Remeshing

  • C++
  • Qt
  • OpenGL
  • Boost
  • Doxygen
  • Git

In my Master’s project at Bournemouth University – Curvature-Adaptive Remeshing with Feature Preservation of Manifold Triangle Meshes with Boundary (project page) – I dealt with remeshing of meshes.

In computer graphics meshes are a common representation of surfaces. These meshes are often irregular and contain more vertices than necessary to approximate a surface sufficiently. With remeshing a better mesh can be created for the underlying surface with respect to some quality criteria. In this project, manifold triangle meshes with boundaries and feature edges were considered; they are represented by a half-edge data structure for fast access of neighboring elements of vertices, edges and triangles. The remeshing approach used is based on local mesh operations (edge-split, edge-flip, edge-collapse and vertex relocation) to adjust the density of elements and to improve their connectivity for a more regular mesh. An optional back-projection of vertices to the original surface can be used to keep the shape of the new mesh close to the reference mesh. With a sizing field based on an approximation of the curvature of the surface it is possible to adjust the sampling density to represent the final mesh with fewer triangles in areas of low curvature. The result of this approach is curvature-adaptive isotropic remeshing of good quality with feature preservation.

The whole remeshing process is implemented in an interactive C++ application using Qt for the user interface, OpenGL and the NGL library for the visualization, JSON for import and export of user data, Doxygen for documentation and Git as version control system.

Some results:

Dragon: The original mesh (consisting of 50 000 vertices) visible in the first image is reduced to 17 000 vertices using uniform remeshing (second image) and curvature-adaptive remeshing (forth image); the third image shows the determined curvature of the original mesh.

remeshing_dragon_orig_smallremeshing_dragon_uniform_smallremeshing_dragon_curvature_smallremeshing_dragon_adaptive_small

Same for the bunny: Vertices are reduced from about 35 000 to 4300:

remeshing_bunny_orig_smallremeshing_bunny_uniform_smallremeshing_bunny_curvature_smallremeshing_bunny_adaptive_small

This video shows for multiple different meshes how new meshes can be created using uniform and curvature-adaptive remeshing. Different values for the desired target edge lengths and approximation tolerances respectively are used to create meshes with different resolutions.

The implemented technique is based on this short paper:
Dunyach M., Vanderhaeghe D., Barthe L. and Botsch M., 2013. Adaptive Remeshing for Real-Time Mesh Deformation. Eurographics Short Papers, 29-32.

After finishing my course, I slightly extended this project to create meshes of a subset of the original vertices. These results can be used for other geometric algorithms that rely on working with the original vertices. Some results:

remeshing_dragon_adaptive_subset_smallremeshing_bunny_adaptive_subset_small