Guia do Usuário

Capítulo 9 — Backends de SfM

O Inspector no modo Expert com as seis seções Presets, Cameras & Capture, Training, Progress, Look e Export — cada uma com uma sublinha indicando quando ela age
O Inspector no modo Expert. Ele se organiza em seis seções — Presets, Cameras & Capture, Training, Progress, Look e Export —, cada uma com uma sublinha que indica quando a configuração age. A escolha do método de SfM fica na seção „Cameras & Capture".
O menu Camera Alignment aberto, com exatamente duas entradas: Apple Photogrammetry e Native
O menu Camera Alignment aberto na versão distribuída: exatamente duas entradas — Apple Photogrammetry e Native. COLMAP não aparece aqui, e „Native" não traz mais o adendo Beta.

O seletor de Camera Alignment fica na seção „Cameras & Capture" do Inspector e é um menu suspenso, não um Segmented-Control (os nomes dos backends são longos demais para segmentos e estourariam a coluna estreita do Inspector). Quantas entradas ele tem depende do build: a versão da App Store mostra exatamente duas — Apple Photogrammetry (padrão) e Native. COLMAP não existe ali como backend de forma alguma e só aparece em builds de Developer/DMG como terceira entrada (veja Q2). A entrada nativa se chama simplesmente „Native"; o antigo adendo „(experimental)" ou „(Beta)" foi removido — Native não é mais um caminho experimental, e sim o caminho de qualidade. Ele é forte em cenas de órbita e fotos rentes ao solo, mas atualmente fraco em mapeamento aéreo/drone (nuvem de pontos rala demais); Apple Photogrammetry continua sendo a opção padrão segura. Se for escolhido um conjunto de fotos desordenado como tipo de captura, o app sempre alinha com Native, não importa o que o seletor mostre — uma linha de aviso abaixo do seletor diz isso explicitamente, e o seletor continua operável, porque seu valor não está indisponível, apenas foi sobreposto. Resultados externos de SfM do Metashape, COLMAP ou outro software de fotogrametria também podem ser importados pelo menu File (Q3 formato de texto COLMAP, Q6 importação de workspace) — o seletor não muda, mas as poses importadas substituem o resultado do SfM. Essa importação não tem nada a ver com a questão do backend COLMAP e funciona em qualquer build.

SfM significa Structure from Motion. A partir de um conjunto de fotos sobrepostas, o software reconstrói, para cada imagem, a posição e a direção da câmera em um sistema de coordenadas 3D comum. Para isso, é gerada uma nuvem de pontos 3D grosseira, que inicializa o treinamento com Gaussian Splatting. O resultado do SfM é a entrada para o treinamento propriamente dito e determina em grande parte a qualidade de imagem posterior.

RadianceKit oferece cinco caminhos de SfM: dois backends embutidos no app (Q1 Apple Photogrammetry, Q4/Q5 Native), dois caminhos de importação de ferramentas externas (Q3 formato de texto COLMAP, Q6 importação binária de workspace) e ainda Q2 COLMAP-Binary, disponível apenas em builds de Developer fora da App Store. Qual é o caminho certo depende do tipo de cena (órbita ao redor de um objeto, ambiente interno, voo de drone) e de se um software externo já fornece uma reconstrução.

Q1 — Apple Photogrammetry

ONDE

Expert View → Inspector → seção „Cameras & Capture" → seletor de Camera Alignment, entrada „Apple Photogrammetry". Padrão em qualquer build.

TÉCNICO

Encapsula o framework embutido Photogrammetry da Apple, originalmente desenvolvido para Object Capture. Internamente, a Apple extrai features com um pipeline proprietário (as etapas não são documentadas publicamente), verifica-as por meio de multi-view matching e resolve o bundle adjustment na Neural Engine + GPU do Apple Silicon. O backend é totalmente compatível com a App Store (sem binário externo, Sandbox=true, on-device), mas fornece apenas poses de câmera mais uma nuvem de pontos grosseira — sem métricas de diagnóstico como comprimento de track ou erro de reprojeção. Escala, segundo recomendação da Apple, até algumas centenas de imagens. Com mais de ~500 quadros em voos de drone lineares ou cenas externas grandes, observou-se de forma reproduzível travamentos ou descarte silencioso de câmeras individuais.

Q3 — Formato de texto COLMAP (Metashape / ETH3D)

ONDE

Menu „File → Import COLMAP / Metashape Workspace…" (Cmd+⇧+I) OU arrastar e soltar uma pasta com sparse/0/cameras.txt.

TÉCNICO

Lê a exportação padronizada em texto do COLMAP — três arquivos de texto cameras.txt, images.txt, points3D.txt na subpasta sparse/0/ — e converte para o modelo interno de resultado de SfM. Mesma definição de formato da exportação binária do COLMAP, só que em ASCII em vez de binário. É produzida nesse mesmo layout pelo Agisoft Metashape, RealityCapture, PolyCam e pelo benchmark ETH3D. O parser compartilha a detecção de modelo de câmera com o parser binário e reconhece os onze modelos de câmera padrão do COLMAP — de SIMPLE_PINHOLE e PINHOLE até SIMPLE_RADIAL (o padrão do próprio COLMAP) e OPENCV, além das variantes fisheye. Robusto a linhas de comentário e linhas vazias. Em testes, escala até ~1.400 câmeras (ETH3D Tunnel) sem problemas.

Q4 — SfM nativo (incremental)

ONDE

Expert View → Inspector → seção „Cameras & Capture" → seletor de Camera Alignment, entrada „Native" (sem o antigo adendo „(experimental)"). Incremental é o modo padrão desse backend; para Native não há seleção de Mapper. A linha „Mapper" logo abaixo pertence exclusivamente ao COLMAP: em builds de Developer ela aparece visível, mas esmaecida enquanto Native estiver selecionado; na versão da App Store ela simplesmente não existe. As linhas realmente nativas — „FOV Override", „High-Quality" e „Native SfM Recipe" — não desaparecem mais em outros backends, mas permanecem esmaecidas e informam, em uma linha abaixo, o que você precisa mudar para liberá-las de novo. Você não pode alternar manualmente entre o método incremental e o global: o incremental é fixo por padrão, e o app só muda para o método global por conta própria (veja Q5).

TÉCNICO

Implementação própria acelerada por GPU de todo o pipeline de SfM: features FAST+BRIEF OU SuperPoint+LightGlue via CoreML (ativado pela chave „High-Quality"; já ativo por padrão em conjuntos de fotos desordenados), seguidos por matching Hamming-KNN, matriz fundamental via RANSAC, construção de tracks, seleção do par inicial, bootstrap de duas vistas (F→E mais DLT), mapper incremental guloso com registro via PnP e triangulação multi-view, e bundle adjustment final via Levenberg-Marquardt com redução de Schur, perda de Huber e jacobianos analíticos via resolução de Cholesky. Totalmente compatível com a App Store: sem binário externo, Sandbox=true. Com o detector de colapso embutido: ele classifica um resultado como degenerado se menos de 60% dos quadros de entrada foram registrados, se a taxa de pontos por câmera cai abaixo de 13 ou se a nuvem de pontos é quase plana. Isso não leva imediatamente à troca de método — o app primeiro repete a execução incremental (assume o primeiro resultado sem anomalias, ou o melhor entre as tentativas) e só então recorre ao mapper global (Q5) se mesmo a melhor tentativa continuar degenerada. Empiricamente limpo em cenas de órbita/turntable; em movimentos mais gerais (voo de drone, ambientes internos com geometria complexa), a taxa de sucesso é menor — mas o detector cobre esses casos. Escala com confiabilidade até ~200 câmeras, e além disso com tempo de execução bem mais longo.

Q5 — SfM nativo (global)

ONDE

É chamado automaticamente quando o mapper incremental (Q4) aciona o detector de colapso (menos de 60% dos quadros de entrada registrados, taxa de pontos por câmera abaixo de 13 ou nuvem de pontos quase plana) — e somente depois que a execução incremental foi repetida e mesmo a melhor tentativa permaneceu degenerada. Não pode ser solicitado manualmente: não há seletor no Inspector para isso, nem qualquer outra chave — o app decide sozinho quando trocar.

TÉCNICO

Variante global do pipeline nativo. Primeiro extração de features + matching como em Q4, depois estimativa de pose relativa para todos os pares verificados, em seguida rotation averaging (sincroniza todas as rotações de câmera no sistema de coordenadas do mundo) e translation averaging (baseado em LSQR, sobre uma formulação esparsa livre de matriz, para evitar overflow de inteiro em grandes quantidades de câmeras). Escala, em princípio, até ~5.000 câmeras; na prática, a qualidade cai sensivelmente acima de algumas centenas de câmeras. É tratado como „camada de fallback": entra em ação quando o mapper incremental também degenera após a repetição, e não é ele mesmo submetido de novo ao detector de colapso — se seu resultado permanecer raro, entra em cena o aviso geral de qualidade do pipeline.

Q6 — Importação de workspace Metashape / texto COLMAP

ONDE

Menu File → „Import COLMAP / Metashape Workspace…" (Cmd+⇧+I). Arrastar e soltar uma pasta com sparse/0/cameras.{bin,txt} e images/.

TÉCNICO

Detecta automaticamente se uma pasta selecionada por arrastar-e-soltar ou pelo painel Open corresponde a um dos três layouts de workspace do COLMAP (sparse/0/, sparse/, ou raiz) e se a reconstrução está em formato binário (cameras.bin) ou texto (cameras.txt). O caminho binário usa o parser binário do COLMAP, o caminho de texto usa o loader ETH3D — ambos produzem o mesmo modelo de resultado de SfM, e o resto do pipeline (importar imagens, iniciar o treinamento MCMC) é agnóstico quanto à origem. As imagens são abertas via o sistema de bookmarks security-scoped do sandbox do app, de modo que a importação também funciona na versão da App Store. Pensado especialmente para o caso „exportação do Metashape sem recalcular a reconstrução". A detecção mencionada na entrada do menu File avisa no log do app caso a pasta escolhida não seja um workspace reconhecível.

Q7 — Receitas nativas (Standard / Professional / E3 High-Accuracy)

ONDE

Expert View → Inspector → seção „Cameras & Capture" → linha „Native SfM Recipe". A linha só é operável quando „Native" está selecionado como Camera Alignment e um conjunto de fotos desordenado está definido como tipo de captura — caso contrário fica esmaecida e indica, logo abaixo, o que precisa ser ajustado (as regras de disponibilidade estão no Capítulo 2).

TÉCNICO

Três níveis do mesmo backend nativo. Eles não mudam o algoritmo, mas o quão minuciosamente ele trabalha:

Standard — a receita básica, sem etapas adicionais.

Professional — adiciona duas coisas: marcadores AprilTag detectados entram como corpos rígidos no mapping e no bundle adjustment, e as poses finalizadas passam por uma retriangulação densa (nuvem de pontos inicial mais densa). Se a captura não contiver marcadores, o detector não encontra nada e apenas a retriangulação densa permanece em efeito.

E3 High-Accuracy — constrói sobre Professional e ativa adicionalmente o frontend HQ (tiling SuperPoint 3×3, LightGlue com 4096 keypoints, pares de covisibilidade), além do refinamento conjunto de distância focal em todas as câmeras. Isso resulta nas poses de câmera mais nítidas e no tempo de matching mais longo.

Qual backend usar em cada situação?

CenárioBackend recomendado
Primeiro resultado, sem pensar muitoQ1 Apple Photogrammetry (padrão)
Escaneamento de objeto, 50–200 fotosQ1 Apple Photogrammetry
Qualidade máxima na mesma cenaPreset „Maximum Quality (Native)" — Q4 Native + receita Q7 E3
Captura com marcadores AprilTag impressosQ4 Native + receita Q7 Professional
Grande área externa / drone / >500 imagensQ6 Importação de Workspace (calcular no Metashape ou COLMAP e depois importar)
Já existe exportação do Metashape/RealityCaptureQ6 Importação (não é necessário SfM)
ETH3D / conjunto acadêmico em texto COLMAPImportação de texto Q3 COLMAP
Q4 colapsaQ5 Native global (alterna automaticamente)

Comparação Rápida

BackendApp-StoreSandboxBinário ExternoMelhor UsoMáx ~Câms
Q1 Apple PGOrbit-Object~300
Q2 COLMAP Binary❌ (apenas Developer-Build)colmap/glomapOutdoor large~5 000
Q3 COLMAP-Text-ImportBench rigs~1 500
Q4 Native incrementalOrbit-Object~200
Q5 Native globalQ4-Fallback~5 000
Q6 Workspace-ImportReaproveitamento do Metashapepor fonte