Capítulo 9 — Backends SfM


El selector de Camera Alignment se encuentra en la sección del Inspector „Cameras & Capture" y es un menú desplegable, no un control segmentado (los nombres de los backends son demasiado largos para segmentos y harían reventar la estrecha columna del Inspector). Cuántas entradas tiene depende de la compilación: la versión de la App Store muestra exactamente dos — Apple Photogrammetry (predeterminado) y Native. COLMAP falta allí por completo como backend y solo aparece en compilaciones para desarrolladores/DMG como tercera entrada (ver Q2). La entrada nativa se llama simplemente „Native"; el antiguo añadido „(experimental)" o „(Beta)" ha sido eliminado — Native ya no es una vía de prueba, sino la vía de calidad. Es fuerte en escenas de órbita y fotos cercanas al suelo, pero actualmente débil en mapeo aéreo/con drones (nube de puntos demasiado dispersa); Apple Photogrammetry sigue siendo la opción predeterminada segura. Si como tipo de captura se ha elegido un conjunto de fotos desordenado, la app siempre alinea con Native, sin importar lo que muestre el selector — una línea informativa debajo del selector lo indica expresamente, y el selector sigue siendo utilizable porque su valor no está deshabilitado, solo anulado. Los resultados de SfM externos de Metashape, COLMAP u otro software de fotogrametría también pueden importarse mediante el menú File (Q3 formato de texto COLMAP, Q6 importación de workspace) — el selector no cambia, pero las poses importadas sustituyen al resultado de SfM. Esta importación no tiene nada que ver con la cuestión del backend COLMAP y funciona en cualquier compilación.
SfM significa Structure from Motion. A partir de un conjunto de fotos superpuestas, el software reconstruye para cada imagen la posición y la dirección de la cámara en un sistema de coordenadas 3D común. Para ello se genera una nube de puntos 3D aproximada que inicializa el entrenamiento con Gaussian Splatting. El resultado de SfM es la entrada para el entrenamiento propiamente dicho y determina en gran medida la calidad de imagen posterior.
RadianceKit ofrece cinco vías de SfM: dos backends integrados en la app (Q1 Apple Photogrammetry, Q4/Q5 Native), dos vías de importación desde herramientas externas (Q3 formato de texto COLMAP, Q6 importación binaria de workspace) así como Q2 COLMAP-Binary, disponible solo en compilaciones para desarrolladores fuera de la App Store. Cuál es la correcta depende del tipo de escena (órbita alrededor de un objeto, interior, vuelo con dron) y de si un software externo ya proporciona una reconstrucción.
Q1 — Apple Photogrammetry
DÓNDE
Vista experta → Inspector → sección „Cameras & Capture" → selector de Camera Alignment, entrada „Apple Photogrammetry". Valor predeterminado en cualquier compilación.
TÉCNICO
Envuelve el framework Photogrammetry integrado de Apple, desarrollado originalmente para Object Capture. Apple extrae internamente características con un pipeline propietario (los pasos no están documentados públicamente), las verifica mediante multi-view matching y resuelve el bundle adjustment en el Neural Engine + GPU de Apple Silicon. El backend es totalmente compatible con la App Store (sin binario externo, Sandbox=true, on-device), pero solo entrega poses de cámara más una nube de puntos aproximada — sin métricas de diagnóstico como longitud de track o error de reproyección. Escala, según la recomendación de Apple, hasta unos cientos de imágenes. Con más de ~500 fotogramas en vuelos de dron lineales o escenas exteriores grandes se han observado de forma reproducible caídas o el descarte silencioso de cámaras individuales.
Q3 — Formato de texto COLMAP (Metashape / ETH3D)
DÓNDE
Menú „File → Import COLMAP / Metashape Workspace…" (Cmd+⇧+I) O arrastrar y soltar una carpeta con sparse/0/cameras.txt.
TÉCNICO
Lee la exportación de texto estandarizada de COLMAP — tres archivos de texto cameras.txt, images.txt, points3D.txt en la subcarpeta sparse/0/ — y convierte al modelo interno de resultado SfM. Misma definición de formato que la exportación binaria de COLMAP, solo en ASCII en lugar de binario. Es exportado en exactamente este layout por Agisoft Metashape, RealityCapture, PolyCam y el benchmark ETH3D. El parser comparte el reconocimiento de modelos de cámara con el parser binario y conoce los once modelos de cámara estándar de COLMAP — desde SIMPLE_PINHOLE y PINHOLE pasando por SIMPLE_RADIAL (el valor predeterminado propio de COLMAP) y OPENCV hasta las variantes fisheye. Robusto frente a líneas de comentario y líneas vacías. Escala en pruebas hasta ~1 400 cámaras (ETH3D Tunnel) sin problemas.
Q4 — SfM nativo (incremental)
DÓNDE
Vista experta → Inspector → sección „Cameras & Capture" → selector de Camera Alignment, entrada „Native" (sin el antiguo añadido „(experimental)"). Incremental es el modo predeterminado de este backend; para Native no hay selección de mapper. La línea „Mapper" debajo pertenece exclusivamente a COLMAP: en compilaciones para desarrolladores aparece visible pero atenuada mientras esté seleccionado Native; en la versión de la App Store falta por completo. Las líneas realmente nativas — „FOV Override", „High-Quality" y „Native SfM Recipe" — ya no desaparecen con otros backends, sino que permanecen atenuadas y en una línea debajo indican qué hay que cambiar para volver a habilitarlas. No puedes alternar tú mismo entre el método incremental y el global: Incremental está fijado de forma predeterminada, y al método global la app solo cambia por sí misma (ver Q5).
TÉCNICO
Implementación propia acelerada por GPU de todo el pipeline SfM: características FAST+BRIEF O SuperPoint+LightGlue vía CoreML (activado mediante el interruptor „High-Quality"; en conjuntos de fotos desordenados está activo de todos modos), seguido de matching Hamming-KNN, matriz fundamental RANSAC, construcción de tracks, selección de par inicial, bootstrap de dos vistas (F→E más DLT), mapper incremental voraz con registro PnP y triangulación multivista, y ajuste de haz final vía Levenberg-Marquardt reducido por Schur con pérdida de Huber y jacobianos analíticos mediante resolución de Cholesky. Totalmente compatible con la App Store: sin binario externo, Sandbox=true. Con el detector de colapso integrado: clasifica un resultado como degenerado si se registró menos del 60 % de los fotogramas de entrada, si la tasa de puntos por cámara cae por debajo de 13 o si la nube de puntos es casi plana. A eso no le sigue de inmediato el cambio de método — la app primero repite la ejecución incremental (adopta el primer resultado sin anomalías, o si no, el mejor de los intentos) y solo entonces recurre al mapper global (Q5) si incluso el mejor intento sigue siendo degenerado. Empíricamente limpio en escenas de órbita/turntable; en movimientos más generales (vuelo con dron, interiores con geometría compleja) la tasa de éxito es menor — pero el detector atrapa esos casos. Escala de forma fiable hasta ~200 cámaras, más allá con un tiempo de ejecución notablemente mayor.
Q5 — SfM nativo (global)
DÓNDE
Se invoca automáticamente cuando el mapper incremental (Q4) activa el detector de colapso (menos del 60 % de los fotogramas de entrada registrados, tasa de puntos por cámara por debajo de 13 o nube de puntos casi plana) — y solo después de que la ejecución incremental se haya repetido y el mejor intento siga siendo degenerado. No se puede solicitar manualmente: en el Inspector no hay ningún selector para ello ni tampoco ningún otro interruptor — la app decide por sí misma cuándo cambiar.
TÉCNICO
Variante global del pipeline nativo. Primero extracción de características + matching como en Q4, luego estimación de pose relativa para todos los pares verificados, a continuación rotation averaging (sincroniza todas las rotaciones de cámara en el sistema de coordenadas mundial) y translation averaging (basado en LSQR sobre una formulación dispersa libre de matrices, para evitar el desbordamiento de enteros con grandes cantidades de cámaras). Escala en principio hasta ~5 000 cámaras; en la práctica la calidad cae notablemente por encima de unos pocos cientos de cámaras. Se maneja como „nivel de respaldo": entra en acción cuando el mapper incremental también degenera tras repetirse, y no se somete él mismo de nuevo al detector de colapso — si su resultado sigue siendo escaso, se activa en su lugar la advertencia general de calidad del pipeline.
Q6 — Importación de workspace Metashape / texto COLMAP
DÓNDE
Menú File → „Import COLMAP / Metashape Workspace…" (Cmd+⇧+I). Arrastrar y soltar una carpeta con sparse/0/cameras.{bin,txt} y images/.
TÉCNICO
Detecta automáticamente si una carpeta seleccionada mediante arrastrar y soltar o el panel de apertura corresponde a uno de los tres layouts de workspace de COLMAP (sparse/0/, sparse/, o raíz) y si la reconstrucción está en formato binario (cameras.bin) o texto (cameras.txt). La ruta binaria usa el parser binario de COLMAP, la ruta de texto el cargador ETH3D — ambos producen el mismo modelo de resultado SfM y el resto del pipeline (importar imágenes, iniciar el entrenamiento MCMC) es agnóstico respecto a la fuente. Las imágenes se abren mediante el sistema de bookmarks security-scoped del sandbox de la app, de modo que la importación funciona también en la versión de la App Store. Pensado especialmente para el caso „exportación de Metashape sin recalcular la reconstrucción". La detección mencionada en la entrada del menú File advierte en el registro de la app si la carpeta elegida no es un workspace reconocible.
Q7 — Recetas nativas (Standard / Professional / E3 High-Accuracy)
DÓNDE
Vista experta → Inspector → sección „Cameras & Capture" → línea „Native SfM Recipe". La línea solo es utilizable si como Camera Alignment está seleccionado „Native" y como tipo de captura está configurado un conjunto de fotos desordenado — de lo contrario aparece atenuada e indica debajo qué hay que cambiar (las reglas de disponibilidad están en el capítulo 2).
TÉCNICO
Tres niveles del mismo backend nativo. No cambian el algoritmo, sino la minuciosidad con la que trabaja:
Standard — la receta base sin etapas adicionales.
Professional — añade dos cosas: los marcadores AprilTag detectados entran como cuerpos rígidos en el mapping y el bundle adjustment, y sobre las poses terminadas se retriangula densamente (nube de puntos inicial más densa). Si la toma no contiene marcadores, el detector no encuentra nada y solo la retriangulación densa sigue teniendo efecto.
E3 High-Accuracy — se construye sobre Professional y además activa el frontend HQ (mosaico SuperPoint 3×3, LightGlue con 4096 keypoints, pares de covisibilidad), así como el refinamiento focal conjunto sobre todas las cámaras. Esto da las poses de cámara más nítidas y el tiempo de matching más largo.
¿Qué backend usar y cuándo?
| Escenario | Backend recomendado |
|---|---|
| Primer resultado, sin pensarlo mucho | Q1 Apple Photogrammetry (preajuste predeterminado) |
| Escaneo de objeto, 50–200 fotos | Q1 Apple Photogrammetry |
| Máxima calidad en la misma escena | Preset «Maximum Quality (Native)» — Q4 Native + receta Q7 E3 |
| Captura con marcadores AprilTag impresos | Q4 Native + receta Q7 Professional |
| Exterior grande / dron / >500 imágenes | Importación de Workspace Q6 (calcular en Metashape o COLMAP y luego importar) |
| Ya se dispone de una exportación de Metashape/RealityCapture | Importación Q6 (no hace falta SfM) |
| ETH3D / conjunto de texto COLMAP académico | Importación de texto COLMAP Q3 |
| Q4 colapsa | Q5 Native global (cambia automáticamente) |
Comparación rápida
| Backend | App Store | Sandbox | Binario externo | Mejor uso | Máx. ~Cámaras |
|---|---|---|---|---|---|
| Q1 Apple PG | ✅ | ✅ | — | Objeto en órbita | ~300 |
| Q2 Binario COLMAP | ❌ (solo build de desarrollador) | — | colmap/glomap | Exteriores grandes | ~5 000 |
| Q3 Importación de texto COLMAP | ✅ | ✅ | — | Bancos de pruebas | ~1 500 |
| Q4 Nativo incremental | ✅ | ✅ | — | Objeto en órbita | ~200 |
| Q5 Nativo global | ✅ | ✅ | — | Alternativa a Q4 | ~5 000 |
| Q6 Importación de Workspace | ✅ | ✅ | — | Reutilización de Metashape | según fuente |