A little while ago I wrote about COLMAP-CL, a fork of the original project re-written so as to remove the reliance on CUDA, and therefore Nvidia GPUs.
Now, from the same source, OpenPhotogrammetry on Github, comes Meshroom-CL. It’s still in pre-release, at version 0.7, but I gave it a run through on my work iMac (running Windows in BootCamp) and it went all the way through to a textured mesh. That part in parentheses is important – there’s just windows binaries available, as well as the source code. So you can run it on a mac, but you can’t run it on MacOS (at least not without parallels or a VM).
There’s some minor changes, so I’ll take you through my experience with my go-to standard dataset:
It looks very similar, but those that have used Meshroom a lot in the past will notice that the default graph is much simpler, there’s now only 5 nodes: CameraInit, StructureFromMotionCL, MultiviewStereoCL, MeshFiltering, and TexturingCL:
Compare that to ‘normal’ Meshroom, where the default graph has many, many more nodes, splitting SfM and dense reconstruction into several stages:
Great, I’m all for simplicity! Though some of these nodes are currently lacking options, e.g. Texturing can only produce multiple texture files, it can’t use LSCM or ABG unwrapping to produce a single texture file (more on that below).
For StructureFromMotionCL and MultiViewStereoCL, you need to check the box that says to use OpenCL GPUs:
However, when running I didn’t see much usage of the GPU (a Radeon Pro 580 in the iMac), maybe 15% utilization, some of which was coming from simply having the 3D viewer open in Meshroom. Similarly, the graphs in the ‘statistics’ view for each node showed no GPU listed, and no GPU usage:
I don’t know if it was running entirely on the CPU, or if there was some usage of the GPU and it’s not yet been fully implemented into the reporting in MeshroomCL. Here’s task-manager during the SFM node processing:
So, here’s the timings:
Camera init: 1.54 seconds
SFM: 7 min, 40.2 seconds
MultiviewStereo: 1 hr, 19 min, 43.7 seconds
Texturing: 2 min, 24 seconds <- no option for anything but multitile (made 94)
Total time: just under 1 and a half hours.
For context, my home computer ran the full pipeline of ‘normal’ Cuda-based Meshroom 2021.1 in 1 hr 5 minutes. So this is a bit slower, but if it’s not yet running on the GPU to any great extent, that’s not unexpected.
The final model looked excellent:
However, on closer inspection in Blender, it became apparent that some of the normals on the mesh were a bit off, creating a rough-like appearance when viewed flat, or with ray tracing:
You can inspect the model for yourself on sketchfab:
This is great – Meshroom is my favourite open source photogrammetry software. COLMAP can be a little faster, or get a bit better model sometimes, but getting a good, textured mesh is a pain that requires additional software, Meshroom takes you from photos to textured model with a single drag and drop of photos, then a click of the start button. The Texturing node is the biggest draw back for me at the moment, I need single image files for textures for my workflows, and having to unwrap and retexture a model subsequently is a massive pain. There’s also the fact that for me it didn’t seem to be using the GPU, that’s less of an issue, because yes it does take longer, but it still finishes in a reasonable time, and if running over night or while doing something else, it’s not too much of an issue. If speed is of importance to you, you really need to fork out the cash and use either Metashape or Reality Capture.
Above all though, remember this is just version 0.7, and it’s still under active development (in fact, between collecting the examples above yesterday, and writing the post today, I noticed that v0.7.1 was released). That means there’s still scope for lots of improvements, and I can’t wait to see where it goes.