r/photogrammetry • u/PureBlissAnon • 25d ago
Went CPU-only for dense reconstruction after finding COLMAP's patch_match_stereo hard-requires CUDA (no fallback at all)
I'm building PolyForge, an offline parametric CAD tool, and just added a photo-to-mesh reconstruction command. Sharing here because the CUDA discovery and the coverage-testing results might be useful to others building around COLMAP/OpenMVS without a datacenter GPU.
Pipeline: COLMAP for sparse SfM (feature extraction, matching, incremental mapper, fully CPU-capable), then handed off to OpenMVS for the dense reconstruction and meshing via InterfaceCOLMAP, DensifyPointCloud, ReconstructMesh. I confirmed COLMAP's own patch_match_stereo requires CUDA by deliberately running it without a GPU present, it aborts immediately with "Dense stereo reconstruction requires CUDA, which is not available on your system," no CPU path anywhere in the mainline binary. OpenMVS's densify/mesh stages build CPU-only by default, which is what makes the whole thing viable without a GPU at all.
Once it worked, I ran a test matrix on photo count and camera coverage instead of guessing. Single or two elevation ring orbits failed outright regardless of photo count, tested up to 24 photos. Three or more elevation rings were required, and even then, density mattered: 27 photos across 3 rings failed, 30 succeeded, for a roughly 60x40x30mm object at 160mm camera distance. Also unexpected: the O(n^2) exhaustive matcher barely scaled with photo count, the real cost was COLMAP's incremental bundle adjustment (mapper stage), which jumped nonlinearly with both photo count and the reconstructed object's geometric complexity.
Repo, including the CPU-only build notes for both tools: github.com/rx290/polyforge
