Es gibt inzwischen zahllose Lösungen für Photogrammetrie bzw. 3D-Scanning, also die Erstellung von dreidimensionalen Objekten aus einer Serie von Fotos. Einige davon sind Open Source und mehr oder weniger aufwendig zu bedienen. Mit Meshroom ist ein neuer Player erschienen, der mit einer einfachen Ein-Klick-Bedienung glänzt und sowohl unter Windows als auch unter Linux funktioniert. Dank Caching und eines Node-basierten Bedienkonzepts gibt es aber trotzdem Möglichkeiten, einzugreifen.
Bei Meshroom handelt es sich streng genommen um eine GUI für Alicevision, ein Open-Source Framework für Photogrammetrie, welches durch die Zusammenarbeit mehrerer Universitäten mit dem VFX-Studio Mikros Image aus Frankreich entstanden ist. Das Projekt wurde auch mit Mitteln der Europäischen Union gefördert. Entwickelt wurden Werkzeuge, die sich gut in bestehende VFX-Workflows integrieren lassen und auch für weitere akademische Forschungen genutzt werden können. Das sollte man im Hinterkopf behalten, wenn man sich die Node-basierte GUI von Meshroom und das Caching-Konzept ansieht. Meshroom an sich lässt sich direkt von bit.ly/meshroom als Binary für Windows und Linux herunterladen. Nach der Installation begrüßt einen die Benutzeroberfläche, die die Komplexität des Unterbaus gekonnt zu verstecken weiß.
Workflow
Die GUI ist sauber in Bereiche unterteilt. Zuallererst lädt man Fotos per Drag-and-drop in den Bereich bzw. die Kachel ganz links. Dabei muss man unscharfe oder verwackelte Fotos nicht aussortieren, das erledigt später ein Algorithmus automatisch. Man sollte die Fotos auch nicht nachbearbeiten, denn dadurch können die Kamerainformationen in den .exif-Daten verloren gehen, und auf diese ist Meshroom angewiesen. Der Workflow heißt also ganz klar: Fotografieren und
dann sofort in Meshroom. Sollte Meshroom die genutzte Kamera nicht in der mitgelieferten Datenbank finden können, so erscheint eine Fehlermeldung und die Rekonstruktion kann nicht gestartet werden. Die Datenbank wird zwar ständig erweitert, beinhaltet aber natürlich noch nicht jede (Smartphone-)Kamera auf dem Markt. In dem Fall muss sie von Hand um die Sensordaten der eigenen Kamera erweitert werden. Ein anderer Grund, warum das Programm den Dienst verweigert, ist das Fehlen einer CUDA-fähigen Grafikkarte. Da nur ein einziger Schritt im Prozess CUDA voraussetzt, hoffen wir, dass in Zukunft ein Fallback in OpenCL oder direkt für die CPU implementiert wird. Bevor es losgehen kann, sollte das Projekt noch gespeichert werden. Am besten speichert man jedes Rekonstruktionsprojekt in einen eigenen Ordner, denn Meshroom legt eine Reihe von Unterordnern mit dem Ergebnis und den Zwischenschritten an, die allerdings standardmäßig mit Hashes bzw. zufällig erscheinenden Zahlen- und Buchstabenkombinationen benannt werden. Solange man in dem Ordner sonst nichts hat, ist das aber kein Problem. Alternativ lässt sich der Ort für das finale Mesh inklusive Texturen auch nach eigenen Wünschen festlegen, aber dazu später mehr. In der Praxis ist das Vorgehen mit jedem Projekt in einem separaten Ordner völlig ausreichend. Nach dem Speichern beginnen wir den Prozess mit einem Klick auf Start. Das kann je nach Anzahl der Fotos mehrere Stunden in Anspruch nehmen. Meshroom ist definitiv nicht das schnellste Programm auf dem Markt. Dafür lässt sich die Arbeit jederzeit pausieren und kann dann später wieder aufgenommen werden. Da alle Daten auf die Platte gecacht werden, ist es auch möglich, das Programm zu beenden und an einem anderen Tag weiterzumachen. Oben wird in einem Fortschrittsbalken über Farbcodierungen angezeigt, wie weit die Berechnungen fortgeschritten sind, unten bei den Nodes kann man noch detaillierter sehen, an welchem Schritt gerade gearbeitet wird. Während der Prozess abläuft, sieht man im rechten Fenster Stück für Stück, welche Informationen gesammelt worden sind, z.B. die Punktwolke oder die Position der Kameras.
Fertig – was nun?
Wenn die Rekonstruktion abgeschlossen ist, wird noch kein 3D-Modell gezeigt. Das muss erst mit einem Klick auf „Load Model“ geladen werden. Zunächst wird das Modell mit überlagerter Punktwolke angezeigt. Wenn man das Häkchen bei „SfM“ entfernt, verschwindet Letztere zusammen mit den Kameras und man kann ungestört den 3D-Scan betrachten. Dabei wird einem schnell auffallen, dass der Betrachter auch wirklich nur zum Betrachten gedacht ist. Werkzeuge wie eine Maskierung für nicht benötigte Bereiche fehlen komplett. Die Nachbearbeitung sollte stattdessen in einem dedizierten 3D-Programm geschehen. Dafür speichert Meshroom das Ergebnis als .obj-Datei mit einer oder mehreren Texturen. Aber wo befinden sich die? Hierbei hilft ein Blick auf den letzten Node im Tree, der sich Texturing nennt.
Nodes
Klickt man auf einen Node, so sieht man im Fenster rechts des Node Trees dessen Einstellungen. Beim Node Texturing finden sich in den Einstellungen ganz unten „Output Folder“, „Output Mesh“ und „Output Textures“. Hier erfährt man, wo Meshroom das Ergebnis hingespeichert hat. Wenn man für das Projekt, wie im Artikel weiter vorne vorgeschlagen, einen eigenen Ordner angelegt hat, dann ist es leicht zu finden: Projektordner > MeshroomCache > Texturing > Wirre-Zahlen-Buchstaben-Kombination. Nun kann man das Mesh mit einem 3D-Programm der Wahl öffnen und weiterbearbeiten. Für Maya existiert zudem ein Plug-in, das neben dem Mesh an sich auch die Kamerapositionen und Point Cloud importiert inklusive der Information, welches Bild die Kamera gemacht hat. Das wiederum kann zum Texture Painting eingesetzt werden, während die Point Cloud für Korrekturen des Meshes genutzt werden kann. Weiterhin existiert ein OFX-Plug-in für Nuke und Konsorten, mit dem die Kameraposition eines Bildes aus einem Meshroom-Scan rekonstruiert werden kann.
Scan verfeinern
Die Tatsache, dass sämtliche Zwischenergebnisse auf Platte geschrieben und dort belassen werden, erlaubt nicht nur das Pausieren und Wiederaufnehmen eines Scans oder den Import der Daten in Maya mittels Plug-in. Meshroom bringt auch Nettigkeiten mit wie die Möglichkeit, einem bereits abgeschlossenen Scan weitere Bilder hinzuzufügen. In dem Fall werden automatisch neue Nodes an der richtigen Stelle erzeugt und eingefügt, und Meshroom integriert die neuen Informationen in die bestehenden Daten. Wenn also einem Scan ein paar Details fehlen, kann man an den entsprechenden Stellen weitere Fotos machen, und Meshroom schließt dann hoffentlich die Lücken. Das Ganze kommt allerdings zu einem Preis. Ein Meshroom-Projekt kann leicht mehrere Gbyte groß werden.
Zukunftsmusik
Meshroom ist mit dem Node-basierten Konzept inklusive Cache-System so aufgebaut, dass man sich über verschiedene Wege mit eigenen Algorithmen in die Pipeline einklinken kann. Es gibt sogar eine Schnittstelle für Matlab. Das macht es für Forschung und Entwicklung besonders interessant. Daher verwundert es nicht, wenn bereits einige Erweiterungen geplant sind. Am interessantesten ist sicherlich die Möglichkeit, einen 3D-Scan eines Filmsets zu erstellen und diese Daten später für das Kamera-Tracking einsetzen zu können. Leider sind die Funktionen noch nicht fertig, es klingt nach einem interessanten Einsatzgebiet für das Caching-Konzept von Meshroom. Weiterhin ist ein Plug-in geplant, das interessante Frames aus einem Video extrahiert (z.B. Drohnen-Aufnahmen) und diese fürs 3D-Scanning einsetzt oder anders ausgedrückt: Meshroom soll Unterstützung für Videos erhalten. Ein anderes Forschungsprojekt dreht sich derzeit darum, wie man aus einem 3D-Scan die Albedo- bzw. Farbinformation des Objekts extrahieren kann oder anders ausgedrückt: Wie würde ein Objekt ohne Schatten oder Verfärbungen durch Licht aussehen? Denn um Licht und Schatten kümmert sich später die 3D-Software, in einem Scan hingegen sind sie eher störend.
Fazit
Meshroom ist ausgesprochen einfach zu bedienen, bietet gute Ergebnisse und kann mit interessanten Konzepten aufwarten. Außerdem funktioniert es nicht nur unter Windows, sondern auch unter Linux. Leider ist die Software im Vergleich zu Konkurrenten wie z.B. Reality Capture ausgesprochen langsam. In unseren Tests war die Geschwindigkeit noch annehmbar, solange die Anzahl der Bilder im zweistelligen Bereich blieb.
Dieser Artikel erschien im Magazin Digital Production, Ausgabe 1806. Herunterladen können Sie ihn hier als PDF. Darüber hinaus gibt es noch ein Interview mit dem Team von Mikros, den Entwicklern von Alicevisions Hauptprogramm Meshroom.