Masterarbeit: Remeshing
- C++
- Qt
- OpenGL
- Boost
- Doxygen
Für meine Abschlussarbeit an der Bournemouth University - Curvature-Adaptive Remeshing with Feature Preservation of Manifold Triangle Meshes with Boundary (Projektseite, Masterarbeit) - beschäftigte ich mich mit dem Remeshing von Gittern.
In der Computergrafik sind Gitter eine häufig verwendete Form der Repräsentation. Diese Gitter können unregelmäßig sein und enthalten teilweise mehr Vertices als nötig zur ausreichenden Annäherung einer Oberfläche. Unter Berücksichtigung einiger Qualitätskriterien kann mit Remeshing ein besseres Gitter für eine Oberfläche erzeugt werden. In diesem Projekt wurden mannigfaltige Dreiecksgitter mit Rändern und Merkmalskanten berücksichtigt; diese werden in einer Half-Edge-Datenstruktur dargestellt, um einen schnellen Zugriff auf benachbarte Elemente (Vertices, Kanten, Dreiecke) zu ermöglichen. Der verwendete Remeshing-Ansatz verwendet lokale Gitter-Operationen (Edge-Split, Edge-Flip, Edge-Collapse und Vertex-Verschiebung), um die Dichte der Elemente und deren Verbindungen anzupassen, um ein regelmäßigeres Gitter zu erhalten. Optional kann eine Rückprojektion von Vertices auf die ursprüngliche Oberfläche verwendet werden, damit die Form des neuen Gitters nicht zu sehr vom ursprünglichen Gitter abweicht. Mit einem Gewichtsfeld, basierend auf einer Annäherung der Krümmung der Oberfläche, ist es möglich die Vertex-Dichte anzupassen, um das endgültige Gitter in Bereichen geringer Krümmung mit weniger Dreiecken zu repräsentieren. Das Ergebnis dieses krümmungsabhängigen isotropen Remeshing-Ansatzes ist von guter Qualität und mit Merkmalserhaltung.
Der gesamte Remeshing-Prozess ist in einer interaktiven C++-Anwendung implementiert unter Verwendung von Qt für die Benutzeroberfläche, OpenGL und der NGL-Bibliothek für die Visualisierung, JSON für Import und Export von Benutzerdaten, Doxygen für die Dokumentation und Git zur Versionskontrolle.
Einige meiner Ergebnisse:
Drache: Das ursprüngliche Gitter (bestehend aus 50 000 Vertices) im ersten Bild wurde mittels Uniform Remeshing (zweites Bild) und Curvature-Adaptive Remeshing (viertes Bild) auf etwa 17 000 Vertices reduziert; das dritte Bild zeigt die ermittelte Krümmung des ursprünglichen Gitters.
Entsprechend für den Hasen: Die Vertices wurden von etwa 35 000 auf 4300 verringert:
Das Video zeigt für mehrere Gitter wie mittels Uniform und Curvature-Adaptive Remeshing neue Gitter erzeugt werden. Hierfür werden verschiedene Zielwerte für die gewünschten Kantenlängen bzw. Näherungsabweichungen verwendet, um Gitter in unterschiedlichen Auflösungen zu erhalten.
Die implementierte Technik basiert auf diesem Short Paper: Dunyach M., Vanderhaeghe D., Barthe L. and Botsch M., 2013. Adaptive Remeshing for Real-Time Mesh Deformation. Eurographics Short Papers, 29-32.
Nach meinem Studium habe ich dieses Projekt noch etwas erweitert um neue Gitter, bestehend aus einer Untermenge der ursprünglichen Vertices, zu erhalten. Die Ergebnisse können gut bei der Verwendung anderer geometrischer Algorithmen eingesetzt werden, welche mit den ursprünglichen Vertices arbeiten. Entsprechende Ergebnisse: