Guia do Usuário

Capítulo 2 — Inspector (Expert View)

Modo Expert vazio — à esquerda o Project Navigator com Images/Cameras/Log, cabeçalho „Images (0)” e área de soltar „Drop images here / or tap + to import”, ao centro um Viewport vazio, à direita o Inspector com seis seções recolhidas (Presets, Cameras & Capture, Training, Progress, Look, Export), cada uma com título e sublinha cinza de fase; embaixo a linha de status „Idle” com botão verde de início e botão vermelho de parada
Modo Expert vazio — à esquerda o Project Navigator com Images/Cameras/Log, cabeçalho „Images (0)" e área de soltar „Drop images here / or tap + to import", ao centro um Viewport vazio, à direita o Inspector com seis seções recolhidas (Presets, Cameras & Capture, Training, Progress, Look, Export), cada uma com título e sublinha cinza de fase; embaixo a linha de status „Idle" com botão verde de início e botão vermelho de parada

Inspector vazio antes da importação: A coluna esquerda mostra os itens Images, Cameras e Log, abaixo o cabeçalho „Images (0)" e a área de soltar „Drop images here / or tap + to import". O Viewport no centro está vazio. À direita fica o Inspector com seis seções recolhidas: Presets, Cameras & Capture, Training, Progress, Look e Export. Sob cada título, uma linha cinza indica o que a seção faz e quando ela age — „Ready-made recipes — they replace the training settings" (Presets), „Before training · decides how camera positions are solved · applies to the next run" (Cameras & Capture), „Before training · drives scene build-up and optimization · applies to the next run" (Training), „Display only" (Progress), „After training · applies immediately · reversible any time" (Look) e „Leveling the floor turns the view at once; the chosen orientation and format apply when saving" (Export). Bem embaixo roda a linha de status com o estado „Idle", além do botão verde de início e do botão vermelho de parada; no canto superior direito fica o alternador Simple/Expert, aqui em Expert.

Inspector com 35 imagens importadas — cabeçalho „Images (35)”, nomes de arquivo IMG_0953.JPG em ordem crescente, Viewport ainda vazio, status „Idle”
Inspector com 35 imagens importadas — cabeçalho „Images (35)", nomes de arquivo IMG_0953.JPG em ordem crescente, Viewport ainda vazio, status „Idle"

Inspector após a importação: O cabeçalho da lista de imagens mostra „Images (35)", abaixo estão as fotos importadas com nomes de arquivo crescentes a partir de IMG_0953.JPG. As imagens desta série de testes têm 4032×3024 pixels; a lógica de Auto Render Scale lê essa resolução e sugere uma Render Scale compatível. O Viewport ainda está vazio, a linha de status marca „Idle". O botão verde de início embaixo à esquerda agora está ativo e inicia o treinamento com o Preset ativo.

Inspector em meio ao treinamento — barra de título „RadianceKit — Training 23%”, no Viewport a pré-visualização ao vivo de um pato de tecido sobre uma pele de carneiro, progresso 4,700/20,000 com ETA 1m9s, barra de métricas Loss 0.0109 / LR 2.0e-04 / SH 1 / Gaussians 16.0K, no Inspector o grupo CLASSIC expandido com „Balanced 20K iters” marcado em verde
Inspector em meio ao treinamento — barra de título „RadianceKit — Training 23%", no Viewport a pré-visualização ao vivo de um pato de tecido sobre uma pele de carneiro, progresso 4,700/20,000 com ETA 1m9s, barra de métricas Loss 0.0109 / LR 2.0e-04 / SH 1 / Gaussians 16.0K, no Inspector o grupo CLASSIC expandido com „Balanced 20K iters" marcado em verde

Inspector durante o treinamento: A barra de título mostra o progresso global, aqui „RadianceKit — Training 23%". O Viewport renderiza a reconstrução em andamento em tempo real — um pato de tecido sobre uma pele de carneiro, já claramente reconhecível (o intervalo de atualização da pré-visualização ao vivo fica em Settings → General → Training → Live Preview). Abaixo do Viewport rodam o progresso („4,700/20,000", „ETA 1m9s") e a barra de métricas com Loss 0.0109, LR 2.0e-04, SH 1 e Gaussians 16.0K; embaixo à esquerda ficam os botões de pausa e parada. No Inspector, o grupo CLASSIC está expandido, „Balanced 20K iters" tem o marcador verde de seleção. Um selo „Modified" só aparece quando algum parâmetro se desvia do Preset — aqui nenhum está visível. A barra lateral „Log" reúne os eventos das etapas de SfM e treinamento.

Inspector após a conclusão do treinamento — barra de título „RadianceKit — Training Complete — 8,708 Gaussians”, à esquerda „Complete” com 8,708 Gaussians, Images 25 e Cameras 35, linha de status „Completed” em 20,000/20,000, barra de métricas Loss 0.0075 / LR 0.0e+00 / SH 3 / Gaussians 9.7K, no Viewport a reconstrução finalizada do pato ocupando todo o quadro
Inspector após a conclusão do treinamento — barra de título „RadianceKit — Training Complete — 8,708 Gaussians", à esquerda „Complete" com 8,708 Gaussians, Images 25 e Cameras 35, linha de status „Completed" em 20,000/20,000, barra de métricas Loss 0.0075 / LR 0.0e+00 / SH 3 / Gaussians 9.7K, no Viewport a reconstrução finalizada do pato ocupando todo o quadro

Inspector após o treinamento: A barra de título indica o resultado: „Training Complete — 8,708 Gaussians". Na coluna esquerda está „Complete" com o mesmo número, além de Images 25 e Cameras 35 — 25 imagens porque o diálogo Frame Quality descartou dez fotos tremidas das 35 originais. A linha de status informa „Completed" em 20,000/20,000, a barra de métricas Loss 0.0075, LR 0.0e+00, SH 3 e Gaussians 9.7K. O Viewport mostra a nuvem de pontos finalizada ocupando todo o quadro — navegação orbital por arrasto ativa (rotaciona ao redor do centro da cena).

O fato de aparecerem aqui dois números diferentes de Gaussians é proposital: a barra de métricas e Training Metrics indicam o estado ao final do treinamento (aqui 9,660, arredondado para 9.7K), enquanto a barra de título e a cena mostram o estado após as passagens automáticas de limpeza (8,708). Entre um e outro ocorrem a Post-Training Compactification e a remoção de splats em forma de agulha ou disco. O número menor é o que aparece no Viewport e o que é salvo na exportação. Os grupos Training Metrics e Loss History agora estão preenchidos com os valores finais, e a seção de exportação está ativa.

O Inspector é a barra lateral direita no Expert Mode (⌘2). Ele reúne todos os parâmetros relevantes para o treinamento em seis seções recolhíveis, que desde 2026-07-18 estão agrupadas por domínio. A ordem padrão de cima para baixo é: Presets, Cameras & Capture, Training, Progress, Look e Export. Sob cada título há uma segunda linha que indica a fase — quando a seção age e o quanto é reversível (por exemplo, „Before training · decides how camera positions are solved · applies to the next run" em Cameras & Capture, „After training · applies immediately · reversible any time" em Look, „Display only" em Progress). Duas seções anteriores foram fundidas: Metrics e Gráfico de perda agora são dois grupos recolhíveis separados („Training Metrics" e „Loss History") dentro de Progress, e a antiga seção Enhancements está totalmente contida em Training. A seção „Look" (ajustes de imagem pós-treinamento) é o resultado real do renomeamento na interface da antiga seção „Finishing" — seu nome interno permanece „Finishing" por motivos de compatibilidade, mas o título exibido é „Look" (o mesmo padrão ocorre em Training, que internamente se chama „Training Configuration"). Cada seção pode ser recolhida com um clique no cabeçalho, e a ordem pode ser reorganizada por arrastar e soltar. Na primeira inicialização, as seções ficam recolhidas — na imagem acima, todas as seis estão fechadas; a partir daí, o estado do app guarda as preferências de recolhimento e ordem entre inicializações. Uma organização antiga já salva é migrada uma única vez para o novo agrupamento na primeira inicialização; Viewport ▸ Reset Inspector Layout restaura o estado de fábrica.

Uma série de controles do Inspector aparece de forma quase idêntica também nas configurações (Capítulo 3) — tipicamente o backend de SfM, o Sky Masking e outros padrões semelhantes. A separação é intencional: as configurações fornecem o modelo global do app para projetos recém-criados, enquanto o Inspector sobrescreve esses valores para o projeto atualmente aberto. Quem já conhece a lógica de uso de um lado consegue usar o outro de olhos fechados.

A coluna esquerda no Expert Mode — o Project Navigator — não faz parte do Inspector, mas é sua vizinha direta. Ali é possível selecionar imagens importadas com um clique, visualizá-las com a barra de espaço no Quick Look e removê-las pelo botão de menos ou pela tecla Remover (com Cmd-Z para desfazer). O Inspector acompanha a seleção atual da barra lateral com informações de detalhe específicas do contexto, mas as sete seções principais permanecem sempre disponíveis.

Look-Sektion (L1–L5)

A seção Look (internamente ainda chamada de „Finishing") é, desde o reagrupamento de domínios, a quinta seção do Inspector — entre Progresso e Exportação — e reúne os ajustes de imagem pós-treinamento em um só lugar. Todos os controles funcionam de forma não destrutiva: cada slider reaplica o cálculo do Look a um snapshot pristino inalterado (cor DC original, opacidade, escala) — o ajuste é, portanto, idempotente, não cumulativo. O resultado aparece ao vivo no Viewport (WYSIWYG, exatamente como a exportação posterior) e é incorporado em cada exportação. A seção só fica disponível após a conclusão de uma sessão de treinamento (antes disso aparece „Available after a training run completes."); seus valores são redefinidos a cada novo treinamento. Enquanto uma exportação estiver em andamento, todos os controles ficam bloqueados — um aviso de bloqueio „Locked while exporting — the file uses the current settings." aparece e o GroupBox fica desabilitado.

L1Slider Saturation

ONDE

Inspector → Seção Look → GroupBox → Saturation.

TÉCNICO

Slider 0.5–1.2, exibição com duas casas decimais (ex.: „1.00"). Escala a croma SH-DC de cada splat em torno do valor de luminância: 1.0 = inalterado, < 1.0 = dessaturado (cor puxada para a escala de cinza), > 1.0 = mais vibrante. Matematicamente, a cor DC é recalculada a partir do snapshot pristino, de modo que deslizar repetidamente não se acumula. Foi validado com material de drones DJI (viaduto de Pensford), que tende a ficar supersaturado — o padrão para drones é 0.82. Afeta apenas a base de cor (grau SH 0); coeficientes SH mais altos permanecem intocados.

L2Slider Splat length

ONDE

Inspector → Seção Look → GroupBox → Splat length.

TÉCNICO

Slider 0.3–1.0, exibição com duas casas decimais. Puxa os três eixos de escala de cada Gaussian, no espaço logarítmico, em direção à sua média (quanto menor o valor, mais forte o efeito): 1.0 = inalterado, valores menores tornam splats alongados em forma de „agulha" mais arredondados, 0 seriam esferas puras. Ataca splats em forma de agulha, excessivamente esticados, sem alterar o tamanho geral, reduzindo assim os típicos artefatos de „confete". Aplicado a partir do snapshot pristino (escala logarítmica original), portanto idempotente. Comuta com Splat size (L3), já que ambos operam no espaço logarítmico.

L3Slider Splat size

ONDE

Inspector → Seção Look → GroupBox → Splat size.

TÉCNICO

Slider 0.5–2.0, exibição com duas casas decimais. Escala cada Gaussian uniformemente em todos os três eixos: 1.0 = inalterado, < 1.0 = menor/mais denso/mais nítido, > 1.0 = maior/„mais fofo" (preenche lacunas entre os splats). Como as escalas estão no espaço logarítmico, a multiplicação se torna ali um deslocamento aditivo — isso comuta com Splat length (L2), pois um offset constante não afeta o desvio em relação à média. A partir do snapshot pristino, portanto idempotente. Novo nesta versão.

L4Fade far region (com sub-sliders)

ONDE

Inspector → Seção Look → GroupBox → Toggle „Fade far region" mais os sub-sliders „Fade start ×radius" e „Fade floor".

TÉCNICO

Toggle que ativa uma redução radial de opacidade com a distância em relação ao centro de gravidade da câmera — o „confete distante", pouco observado, ao fundo, é esmaecido. Apenas para capturas em órbita: o toggle fica acinzentado quando a cena não é adequada para isso (voos lineares, câmeras insuficientes ou degeneradas); nesse caso, em vez dos sub-sliders aparece o aviso „Far-fade applies only to orbit captures (not this scene)." A adequação é determinada pela cobertura de azimute das posições da câmera (uma órbita circunda o centro de gravidade e preenche muitos setores da bússola, um voo linear preenche apenas ~2). Dois sub-sliders controlam a geometria: Fade start ×radius (1.0–3.0) define o raio interno como múltiplo do raio da órbita, dentro do qual vale opacidade total; Fade floor (0.0–1.0) é o fator de opacidade bem além do raio de esmaecimento. Importante: o fade ignora a região do sky dome (os Gaussians congelados da cúpula), para que a cúpula de fundo intencional não seja esmaecida junto.

L5Botão Reset finishing

ONDE

Inspector → Seção Look → GroupBox → „Reset finishing" (embaixo, botão pequeno).

TÉCNICO

Redefine todas as configurações de Look para os padrões (Saturation 1.0, Fade desativado, Splat length 1.0, Splat size 1.0) e dispara imediatamente um novo finishing, de modo que o Viewport volta ao estado treinado inalterado. Como toda a pilha de Look calcula de forma idempotente a partir do snapshot pristino, „voltar ao padrão" é exatamente o resultado original do treinamento — sem perda de qualidade por ir e vir várias vezes. Como todos os controles da seção, fica bloqueado durante uma exportação em andamento.

Seção de Presets (I1–I11)

A seção de Presets é a maneira mais rápida de aplicar uma configuração testada. Presets integrados (Capture Class, Classic, MCMC, Hybrid) oferecem pontos de partida comprovados e reproduzíveis; presets próprios podem ser salvos, exportados, importados e compartilhados. A lista é agrupada por categorias (Capture Class, Classic, MCMC, Hybrid, Custom) e mais de uma categoria pode estar expandida simultaneamente. Através do mecanismo de menu de contexto (clique com o botão direito em uma linha), é possível exportar, duplicar e — no caso de presets próprios — excluir.

I1Botão Save…

ONDE

Inspector → Seção Presets → Botão Save… (barra de ações abaixo).

TÉCNICO

Abre um popover com campo de texto e botões Save/Cancel. O estado atual das configurações de treinamento é persistido como novo preset personalizado (codificado em JSON, salvo em todo o app). O processo de salvamento copia todos os 81 parâmetros de treinamento mais a estratégia de Densification atual. O preset é colocado automaticamente na categoria Custom, independentemente de qual preset integrado ele foi derivado. Nomes vazios e entradas apenas com espaços em branco são descartados. Nomes já existentes não são rejeitados — cada preset tem seu próprio ID interno; nomes duplicados são tecnicamente permitidos, mas na prática confusos.

I2Campo de texto Preset Name

ONDE

Popover Save → Campo de texto "Preset Name".

TÉCNICO

Campo de texto simples com borda arredondada, formato largo. O valor é assumido como nome do preset ao clicar no botão Save. Sem limite de comprimento na UI, mas o nome salvo precisa ser codificável em JSON e representável nas listas da UI — emojis e caracteres acentuados funcionam. O conteúdo é redefinido automaticamente para uma string vazia ao abrir o popover. O botão Save permanece desativado enquanto o campo, após trim, estiver vazio. Não há autocompletar nem preenchimento prévio com o nome do preset atualmente ativo.

I3Botão Cancel (diálogo Save)

ONDE

Popover Save → Botão Cancel (à esquerda).

TÉCNICO

Fecha o popover sem salvar. Descarta o conteúdo do campo de texto — na próxima abertura ele será redefinido para vazio novamente pela lógica do botão Save… (I1). Estilo de botão padrão, sem diálogos de confirmação, sem atalhos. A TrainingConfig atual permanece inalterada, pois o caminho de salvamento nem sequer foi executado.

I4Botão Save (diálogo Save)

ONDE

Popover Save → Botão Save (à direita, estilo em destaque).

TÉCNICO

Dispara a persistência propriamente dita. Valida novamente se o nome não está vazio (verificação defensiva) e então grava a TrainingConfig atual como JSON no armazenamento do app. Fecha em seguida o popover. Destacado em azul, acinzentado enquanto o campo de texto estiver vazio. Se o salvamento falhar (por exemplo, porque o armazenamento do app está cheio — muito improvável), não há atualmente nenhum diálogo de erro visível; o preset simplesmente não apareceria na próxima inicialização do app.

I5Botão Export…

ONDE

Inspector → Seção Presets → Barra de ações → Botão Export….

TÉCNICO

Exporta o preset atualmente selecionado como arquivo .radiancepreset (internamente JSON). Desativado quando nenhum preset está selecionado. Ao clicar, o app abre um diálogo Save com nome de arquivo predefinido (nome do preset + extensão .radiancepreset). O formato salvo contém a TrainingConfig completa mais metadados (nome, categoria, ID, flag de built-in). Duplo clique no Finder abre o app — mas não automaticamente a importação; o usuário precisa usar o botão Import (I6).

I6Botão Import…

ONDE

Inspector → Seção Presets → Barra de ações → Botão Import….

TÉCNICO

Abre um diálogo de arquivo que permite apenas arquivos .radiancepreset (seleção múltipla desativada). Ao selecionar, o arquivo JSON é carregado, validado e inserido na categoria Custom — com um novo ID interno, para que não haja colisões com os built-ins. A importação define automaticamente a categoria como Custom, mesmo que o preset exportado originalmente fosse, por exemplo, um built-in. Arquivos corrompidos ou incompatíveis com uma versão de esquema mais antiga são rejeitados silenciosamente, sem diálogo de erro (o log do Console fornece informações, no entanto).

I7Linha de Preset (ativação por clique)

ONDE

Inspector → Seção Presets → cada linha de preset em cada categoria.

TÉCNICO

Clicar em uma linha de preset substitui todos os campos da TrainingConfig pelos valores do preset, memoriza o ID do preset ativo e redefine o status de modificação. O check de ativo antes da linha só aparece quando o preset está selecionado E não modificado. Assim que um valor na TrainingConfig é alterado (slider, stepper, toggle em outras seções do Inspector), aparece um selo laranja "Modified" atrás do nome. Presets integrados não podem ser sobrescritos — em caso de modificação, é necessário criar uma cópia própria via botão Save (I1).

I8Menu de contexto "Export…"

ONDE

Clique com o botão direito em qualquer linha de preset → primeiro item "Export…".

TÉCNICO

Funcionalidade idêntica a I5 (botão Export…), mas acessível de forma mais conveniente — sem que o preset precise ser selecionado previamente. Exporta diretamente o preset clicado na linha. Funciona da mesma forma para todas as categorias de preset (built-in ou Custom), sem restrições. A exportação contém a flag de built-in e a categoria original, mas ao reimportar, a categoria é mapeada para Custom conforme descrito em I6.

I9Menu de contexto "Duplicate"

ONDE

Clique com o botão direito em qualquer linha de preset → segundo item "Duplicate".

TÉCNICO

Clona o preset para a categoria Custom. Gera um novo ID interno, anexa " Copy" ao nome e salva a cópia. Funciona também para presets integrados — o clone fica então editável. O original permanece intocado. A TrainingConfig é copiada valor por valor (roundtrip JSON), de forma que não existem vínculos de referência entre original e cópia.

I10Menu de contexto "Delete"

ONDE

Clique com o botão direito em linhas de presets próprios → último item "Delete" (vermelho, destrutivo).

TÉCNICO

Visível apenas para presets Custom. Built-ins não podem ser excluídos. O item é marcado como destrutivo, aparece em vermelho no menu de contexto e é separado por um divisor, para que não seja clicado por acidente. Não há nenhum diálogo de confirmação — um clique exclui o preset imediatamente. O preset excluído não pode ser recuperado (Cmd-Z não funciona aqui — undo existe na versão atual apenas para a lista de imagens, não para operações de preset). Se o preset excluído estava ativo no momento, a TrainingConfig atual permanece inalterada, apenas a seleção de preset ativo é zerada.

I11Cabeçalho de categoria (expandir/recolher)

ONDE

Inspector → Seção Presets → cada cabeçalho de categoria (Capture Class, Classic, MCMC, Hybrid, Custom).

TÉCNICO

Estado de expansão por categoria com padrão diferente: o grupo curado Capture Class inicia expandido, Classic, MCMC, Hybrid e Custom iniciam recolhidos. O estado não é persistido — ao reiniciar o app, todas as categorias voltam ao estado padrão. A seta chevron gira com animação. O número à direita no cabeçalho mostra a quantidade de presets nessa categoria. A área de clique abrange todo o cabeçalho.

Seção de Configuração de Treinamento (I12–I22)

Recorte da seção Training — Densification como alternador triplo Classic | MCMC | Hybrid com Classic ativo, abaixo as linhas acinzentadas MCMC Quality (desligado), Auto-scale by scene (ligado) e Max Gaussians 150,000 com aviso de cadeado; separado abaixo Depth-Priority Scatter (desligado), Full-Resolution Training (desligado), Max Iterations 5,000 e Densify Until 3,500 com símbolo de corrente azul, controles SSIM Weight em 0.20 e Render Scale em 50%
Recorte da seção Training — Densification como alternador triplo Classic | MCMC | Hybrid com Classic ativo, abaixo as linhas acinzentadas MCMC Quality (desligado), Auto-scale by scene (ligado) e Max Gaussians 150,000 com aviso de cadeado; separado abaixo Depth-Priority Scatter (desligado), Full-Resolution Training (desligado), Max Iterations 5,000 e Densify Until 3,500 com símbolo de corrente azul, controle SSIM Weight em 0.20 e Render Scale em 50%

Aqui ficam as alavancas centrais para o processo de treinamento: como a Densification funciona, quantas iterações, qual o peso do SSIM — além disso, na parte inferior, os antigos recursos independentes (Perceptual Loss, grupo Outdoor, Advanced Densifier, passes pós-treinamento). Bem no topo está a Densification como alternador triplo Classic | MCMC | Hybrid. O backend SfM não está mais aqui, e sim em sua própria seção Câmeras & Captura (I12, I13). As três linhas de MCMC ("MCMC Quality", "Auto-scale by scene" e "Max Gaussians") não desaparecem mais no modo Classic; elas permanecem visíveis e ficam acinzentadas; abaixo delas há uma linha com símbolo de cadeado que informa o que precisa ser alterado ("Only used by the MCMC and Hybrid densifiers — switch Densification above to change these."). Um bloco separado logo abaixo reúne as linhas que valem para qualquer densifier: Depth-Priority Scatter, Full-Resolution Training, o par acoplado Max Iterations / Densify Until, além dos controles SSIM Weight e Render Scale.

I12Seletor de Camera Alignment

ONDE

Inspector → Câmeras & Captura → Camera Alignment (menu pop-up abaixo do seletor de Projection).

TÉCNICO

Menu pop-up, não um seletor segmentado — os rótulos excedem a coluna estreita do Inspector. Quais entradas aparecem depende do build: a versão sandboxed da App Store oferece Apple Photogrammetry e Native, enquanto builds dev/DMG oferecem adicionalmente COLMAP. Motivo: COLMAP é um programa de linha de comando externo, e apps sandboxed não podem iniciar binários de terceiros (diretriz de revisão da App 2.5.2) — por isso a entrada de backend, junto com o seletor de Mapper e o caminho do binário, está totalmente ausente no build da Store, em vez de permanentemente acinzentada: uma linha que nunca pode acender não é uma indicação, é ruído. Não confundir: A importação e exportação de um workspace COLMAP é puro parsing de arquivos em Swift, não precisa de instalação do COLMAP e funciona em qualquer build (Capítulo 1, M5). O sufixo "(Beta)" na entrada Native foi removido — Native deixou de ser beta desde a v1.5.2. A seleção determina o backend SfM da próxima execução e controla ao mesmo tempo quais linhas abaixo ficam operáveis (I13, High-Quality, Native SfM Recipe). Nota de rodapé na UI: Com um conjunto de fotos não ordenado, o pipeline sempre alinha com Native, independente do que o seletor mostra — essa receita só existe ali. O seletor deliberadamente não é bloqueado (o valor não fica indisponível, apenas é sobreposto); em vez disso aparece um aviso com símbolo de bifurcação.

I13Campo FOV Override (Native SfM)

ONDE

Inspector → Câmeras & Captura → FOV Override (sempre visível, operável apenas com Camera Alignment = Native).

TÉCNICO

Campo de texto numérico (intervalo 0-170°), padrão 0 = determinação automática a partir de EXIF ou heurística. A entrada manual é necessária quando as imagens de entrada foram extraídas de um vídeo sem metadados de distância focal. Valores típicos: iPhone Wide ≈ 73°, DJI Mavic Wide-Crop ≈ 70°, drone com sensor full-frame ≈ 84°. O valor é limitado a [0, 170] — valores fora do intervalo são diretamente ajustados de volta para dentro dele. Afeta apenas o pipeline SfM nativo (Q4/Q5); Apple Photogrammetry ignora completamente esse valor. Desde 18/07/2026: Em outros backends, o campo não é mais ocultado, e sim acinzentado — junto com "High-Quality" e "Native SfM Recipe" e uma linha com símbolo de cadeado ("These configure the Native aligner — choose Native under Camera Alignment to change them."). O antigo ocultamento escondia o fato de que esses controles existiam. A restrição depende do backend selecionado, não do efetivamente usado — o redirecionamento de conjuntos de fotos não ordenados para Native é sinalizado, em vez disso, pelo aviso em I12. A linha "Native SfM Recipe" exige adicionalmente um conjunto de fotos não ordenado e, do contrário, tem sua própria linha explicativa.

I15Seletor de Densification

ONDE

Inspector → Configuração de Treinamento → Densification (seletor segmentado, sempre visível).

TÉCNICO

Alterna entre as duas estratégias de Densification: Classic (procedimento 3DGS original com Clone/Split/Prune e limiar de gradiente) e MCMC (Stochastic Gradient Langevin Dynamics com Relocation, NeurIPS 2024). Ao mudar de Classic para MCMC, o app define automaticamente os campos específicos de MCMC para valores padrão testados (Reg-Weights = 0, multiplicador de cap MCMC 3.0, agendamento de amostra/ruído). Sem essa inicialização automática, sessões com presets antigos sofriam o bug de colapso do MCMC da versão 1.4.4 (460K→5 Gaussians, watchdog kill). A seleção do seletor determina adicionalmente quais elementos do Inspector ficam visíveis — com MCMC, I16/I17 aparecem. Efeito detalhado dos campos no Capítulo 6, T11–T16 (Classic) e T61–T73 (MCMC).

I16Alternador MCMC Quality

ONDE

Inspector → Training → MCMC Quality (sempre visível, operável com Densification = MCMC ou Hybrid).

TÉCNICO

Alterna a acumulação de gradiente entre 2 passos (ativo) e 1 passo (inativo). Acumula os gradientes de duas views de câmera consecutivas antes de executar o passo do otimizador. Isso suaviza o caminho de otimização e melhora levemente, mas de forma visível, o resultado final. O preço: tempo de treinamento em dobro. Em treinamentos muito longos (200 mil iterações), isso resulta em 10+ minutos adicionais de espera — portanto só compensa quando os últimos pontos percentuais de qualidade realmente forem necessários. Afeta apenas o treinamento, não o formato de exportação nem a representação no viewport. Vale também para Hybrid, que usa a mesma maquinaria MCMC. Desde 18/07/2026: Sob Classic, a linha não desaparece mais; em vez disso, junto com I17 e "Max Gaussians", fica acinzentada; abaixo aparece "Only used by the MCMC and Hybrid densifiers — switch Densification above to change these."

I17Alternador Auto-scale by scene

ONDE

Inspector → Training → Auto-scale by scene (sempre visível, operável com Densification = MCMC ou Hybrid).

TÉCNICO

Quando ativo, escala o limite efetivo de Max Gaussians junto com a contagem de pontos de inicialização SfM × multiplicador de cap MCMC (padrão 3.0). Exemplo: SfM fornece 250 mil pontos iniciais, cap base = 150 mil, multiplicador 3.0 → limite efetivo = max(150 mil, 750 mil) = 750 mil. Quando desativado, vale estritamente apenas a base. A própria base está na linha Max Gaussians logo abaixo (desde 1.8, padrão 150.000, entrada limitada entre 10.000–30.000.000). Se o limite efetivo estiver acima da base, o app o exibe em texto simples ("Effective cap for this scene: …") — junto com um aviso de RAM, caso fique alto demais. Foi introduzido na v1.4.5 porque grandes capturas outdoor com mais de 1000 frames e densidade de pontos SfM correspondentemente alta faziam a Densification passar fome com o cap rígido padrão de 150 mil — pontos supérfluos permaneciam, novos não podiam surgir. Padrão desligado em presets personalizados, ligado nos presets embutidos de MCMC. Afeta apenas o tempo de treinamento, não a exportação. Desde 18/07/2026: Sob Classic, a linha fica acinzentada em vez de oculta (com a mesma linha explicativa de I16); a exibição em texto simples e o aviso de RAM deliberadamente não aparecem ali, porque Classic não aplica limite algum.

I18Stepper de Max Iterations

ONDE

Inspector → Configuração de Treinamento → GroupBox → Max Iterations.

TÉCNICO

Stepper com intervalo 1.000–100.000, incremento de 1.000. Determina o número total de iterações do otimizador. Correlaciona linearmente com o tempo de treinamento (reduzir pela metade = cerca de 50% do tempo). Valores testados são 20K (Classic Balanced), 40K (Classic Quality) e 200K (MCMC Full). Acima de 40K, Classic quase não traz mais melhora — o ganho se estabiliza. Ao alterar, se a função de vínculo (I19) estiver ativa, Densify Until é ajustado proporcionalmente junto (proporção padrão: 0.5, ou seja, Densify-Until = Max/2).

I19Botão de vincular/desvincular (Densify ↔ Iterations)

ONDE

Inspector → Configuração de Treinamento → GroupBox → pequeno botão de vínculo entre Max Iterations e Densify Until.

TÉCNICO

Botão de alternância que congela a proporção entre Densify Until e Max Iterations. Quando ativo (ícone de corrente em destaque), a cada alteração de Max Iterations, Densify Until é ajustado proporcionalmente junto. Ao desvincular (ícone de corrente com sinal de mais), os valores permanecem independentes. O padrão é vinculado, porque isso reflete a correlação típica — se você dobrar o treinamento para o dobro de iterações, geralmente você também quer que a Densification rode proporcionalmente mais tempo. A proporção é calculada a partir do valor atual no momento em que o botão de vínculo é ativado; uma proporção típica é 0.5 (Densify-Until = metade do número de iterações).

I20Stepper de Densify Until

ONDE

Inspector → Configuração de Treinamento → GroupBox → Densify Until.

TÉCNICO

Stepper com intervalo 500–50.000, incremento de 500. Determina o índice de iteração a partir do qual nenhum novo Gaussian é mais adicionado por Clone/Split (Classic) ou Relocation (MCMC). Após atingi-lo, apenas posição e cor são refinadas. Valores mais altos = mais Gaussians = arquivo maior, tempo por iteração mais longo (+30-60% de tempo de GPU por passo). Valores típicos: 15K (para 30K de Max-Iter), 20K (para 40K), 100K (para 200K MCMC). Com o vínculo ativo (I19), é escalado automaticamente junto. Tem efeito diferente em Classic vs. MCMC: Classic para completamente o crescimento, MCMC para a lógica de Relocation, mas a adaptação de amostra/ruído continua.

I21Controle deslizante SSIM Weight

ONDE

Inspector → Configuração de Treinamento → GroupBox → SSIM Weight.

TÉCNICO

Controle deslizante 0.0–1.0 em passos de 0.05, exibido como "0.20". Mistura L1-Loss (0.0) e SSIM-Loss (1.0). L1 ajusta o brilho por pixel, SSIM a similaridade estrutural (bordas, estatísticas locais). O padrão 0.2 é o valor do artigo original de 3DGS (Kerbl 2023) e é um compromisso robusto para quase qualquer cena. Valores mais altos (0.5+) favorecem a preservação de detalhes, mas podem ignorar erros locais de brilho. Valores mais baixos (< 0.1) levam a perda de detalhes em bordas nítidas. O cálculo de SSIM roda no shader com uma janela gaussiana de 11×11. Desempenho: com 0.0 (apenas L1), o treinamento é cerca de 8-12% mais rápido, porque o cálculo de SSIM é pulado no shader.

I22Controle deslizante Render Scale

ONDE

Inspector → Configuração de Treinamento → GroupBox → Render Scale.

TÉCNICO

Controle deslizante 0.25–1.0 em passos de 0.25, exibido como "100%". Escala a resolução de renderização do treinamento em relação ao tamanho da imagem de origem. Maior alavanca de desempenho: 50% reduz o tempo de GPU em cerca de 75% (porque são 4× menos pixels), 25% em cerca de 94%. O limiar de gradiente é escalado automaticamente junto. Abaixo do controle deslizante aparece uma exibição de resolução ao vivo em MP (por exemplo, "2304×1296 (3.0 MP)"). Caso o valor atual difira do recomendado, é exibido em texto laranja "— recommended: 50%". A recomendação visa ~3 MP de resolução efetiva — a faixa processada com mais eficiência pelas GPUs da Apple Silicon. Imagens de origem em 4K, por exemplo, recebem automaticamente 25% recomendado, imagens Full HD 100%. Uma alteração também dispara a realocação de buffer.

Grupos de Enhancements (na seção Training, I26–I29, I42–I44)

Recorte das linhas de Enhancements, hoje no final da seção Training — em cima o controle deslizante Perceptual Loss totalmente à esquerda em „Off”, abaixo o grupo Outdoor com os quatro interruptores desligados Sky Masking, Person Masking, Floater Cleanup e Reconstruct Sky Dome, depois a linha recolhida „Advanced Densifier (Expert)” com triângulo de aviso, por último o grupo „Runs automatically at the end of training” com Post-Training Compactification (ligado) e Remove Needle/Disc Floaters. Cada linha tem sua própria linha de explicação
Recorte das linhas de Enhancements, hoje no final da seção Training — em cima o controle deslizante Perceptual Loss totalmente à esquerda em „Off", abaixo o grupo Outdoor com os quatro interruptores desligados Sky Masking, Person Masking, Floater Cleanup e Reconstruct Sky Dome, depois a linha recolhida „Advanced Densifier (Expert)" com triângulo de aviso, por último o grupo „Runs automatically at the end of training" com Post-Training Compactification (ligado) e Remove Needle/Disc Floaters. Cada linha tem sua própria linha de explicação

Esses grupos reúnem features que melhoram a qualidade da imagem sem alterar o próprio loop principal de treinamento. Até 18/07/2026, eles formavam uma seção própria do Inspector chamada Enhancements; desde o reagrupamento por domínios, ficam na parte inferior da seção Training. O antigo picker Viewport-Scaling (Off/MetalFX/Lanczos) foi removido sem substituto: ele nunca teve efeito algum — a decisão de blit no viewport é puramente geométrica — e sua legenda ainda prometia um upscaling, enquanto o passo Lanczos real é um cálculo de redução com antialiasing de uma imagem supersampleada. A exibição no viewport agora se chama "Sampling" em vez de "Scaling" (Capítulo 4); em nenhum lugar do app há upscaling via MetalFX. O Perceptual Loss (I29), apesar de pertencer ao grupo, é um componente de treinamento — é ativado durante o treinamento como um termo de loss adicional; fica no topo, com a linha de explicação "Multi-scale blur feature matching for structural similarity". Abaixo vem o grupo Outdoor com quatro interruptores — Sky Masking, Person Masking, Floater Cleanup e Reconstruct Sky Dome (I42–I44) —, opções de treinamento contra floaters de céu, que antes ficavam na janela de configurações e agora ficam aqui por projeto. Segue a linha recolhida "Advanced Densifier (Expert)", que traz um triângulo de aviso porque atrás dela há controles que também podem desmontar um treinamento. Por fim, o grupo "Runs automatically at the end of training" com o Post-Training Compactification (I26) e o interruptor "Remove Needle/Disc Floaters".

I26Toggle de Post-Training Compactification

ONDE

Inspector → Training → grupo „Runs automatically at the end of training" → Post-Training Compactification.

TÉCNICO

Ativa uma passagem de limpeza no final: após a conclusão das iterações de treinamento, Gaussians com Opacity abaixo de 0,01 (1% de visibilidade) são excluídos. Isso normalmente reduz o tamanho do arquivo pela metade, sem que se note perda de qualidade — porque esses Gaussians de qualquer forma não contribuem visualmente. A Compactification roda como um GPU-Compact-Pass e dura, dependendo do número de Gaussians, de frações de segundo a poucos segundos. Não afeta a performance do treinamento. Se esse toggle estiver desligado, Gaussians invisíveis também são exportados — relevante só se você quiser usar o formato para uma etapa adicional de treinamento (Continue Training); caso contrário, é desperdício de espaço.

I29Slider de Perceptual Loss

ONDE

Inspector → Training → Perceptual Loss.

TÉCNICO

Slider de 0,0 a 0,2 em passos de 0,01, exibido em 0,0 como „Off", caso contrário como „0.05" etc. Ativa um termo de loss adicional que compara o Gaussian-blur multi-escala da renderização com a imagem ground-truth (3 escalas de blur). Captura diferenças estruturais que L1+SSIM sozinho não detecta. Valores entre 0,05 e 0,1 melhoram estruturas finas de forma visível e custam pouco tempo de treinamento — cerca de 5% (forward pass adicional pelos blur kernels). Acima de 0,15, o treinamento fica instável e a qualidade volta a cair, porque esse termo de loss passa a dominar a otimização. Atua durante o treinamento, não no pós-processamento — apesar de sua posição junto às linhas de Enhancement no final da seção Training, portanto não é uma melhoria puramente posterior.

I42Sky Masking

ONDE

Inspector → Training (grupo Outdoor) → Toggle „Sky Masking". É salvo por projeto; padrão: desligado.

TÉCNICO

Ativa segmentação pre-training de pixels de céu baseada em Apple Vision. Antes do início do treinamento, para cada câmera de entrada, a região de céu é extraída via Apple-Vision-Foreground-Mask (Sky = Background) e associada como máscara por pixel àquela câmera. Durante o treinamento, a contribuição de loss por pixel é multiplicada pelo complemento da máscara de céu — pixels de céu contribuem com 0 para o gradiente, de modo que Gaussians que projetam para o céu não recebem sinais de otimização e, assim, não ficam "mais densos" nem "mais claros". Reduz significativamente floaters (aglomerados escuros no céu) em cenas outdoor/de drone. Custa ~3% de regressão de L1 em treinamento clássico de 40K. Só faz sentido em cenas outdoor com céu claramente identificável; em cenas de interior ou fundo branco, a segmentação de céu identifica áreas erradas e bloqueia sinais de loss válidos. O valor é salvo por projeto (não mais globalmente no app) e segue o Preset ou o arquivo da cena.

I43Floater Cleanup

ONDE

Inspector → Training (grupo Outdoor) → Toggle „Floater Cleanup" (subtítulo „Remove Gaussians outside all camera views"). É salvo por projeto; padrão: desligado.

TÉCNICO

O interruptor controla dois efeitos com condições diferentes; ambos são derivados na inicialização para a config local da execução, não são gravados na configuração salva (senão ficariam presos como um travamento de mão única). (1) Frustum-Union-Cull ao final do treinamento — Gaussians fora da união de todos os frusta de câmera são removidos ("nunca observado" = "nunca restringido", e é exatamente isso que a maioria dos floaters é). Essa parte não tem condição de estratégia e roda igualmente em Classic, MCMC e Hybrid — é por ela que o interruptor recebe o nome. (2) Dois passos adicionais de Density-Control no meio da execução — apenas com Classic e apenas a partir de 30.000 iterações, definidos em 55% e 85% da duração da execução (em 35–40K, portanto, cerca de 20K e 30K). Ambos os passos procuram Gaussians com Opacity muito baixa, tamanho ínfimo em screen-space e sem contribuição de loss, e os eliminam. Efeito: ~5–15% menos Gaussians no final, visivelmente menos aglomerados escuros no céu em cenas de drone/outdoor. Custa ~1–3% de regressão de L1 em cenas indoor em close-up, por isso não vem ativado por padrão. O valor é salvo por projeto e segue o Preset ou o arquivo da cena. Correção em relação a edições anteriores: o toggle não está mais restrito ao Classic-Densifier e não é mais desabilitado (esmaecido) sob MCMC/Hybrid — isso justamente impedia usuários de MCMC e Hybrid de acessar o cull que funciona para eles. Em execuções curtas (por exemplo, P2 Preview 5K), simplesmente não ocorre a parte do meio da execução.

I44Reconstruct Sky Dome

ONDE

Inspector → Training (grupo Outdoor) → Toggle „Reconstruct Sky Dome". É salvo por projeto; padrão: desligado.

TÉCNICO

Ativa a projeção de Sky-Dome antes do treinamento. Depois do SfM e antes do início do treinamento, para cada câmera de entrada, a máscara de céu Apple-Vision compartilhada em S7 é extraída da imagem; os pixels de céu são desprojetados usando os intrinsics da câmera para uma superfície esférica virtual (raio padrão 8× o raio da cena). Nessa esfera, ~5000 novos Gaussians são inicializados com médias de cor extraídas dos pixels de céu projetados, escala muito grande (1,0 em unidades de cena) e Opacity inicial de 0,95. Esses 5000 Gaussians não são uma Sky-Mask no sentido clássico — eles são treinados como todos os outros, mas mantidos numa casca fina graças à alta Opacity inicial. Resultado: em novel views de 360° em cenas outdoor/de drone, aparecem cores de céu e estruturas de nuvens reais em vez de aglomerados escuros de confete. O valor é lembrado entre reinicializações. Só faz sentido em cenas outdoor com pelo menos cobertura de câmera de 360°; em capturas puras de objeto sem visibilidade de céu, não tem efeito. Status: experimental, uma validação A/B mais ampla em outros conjuntos outdoor ainda está pendente.

Seção de Métricas (I30–I37)

Recorte do grupo „Training Metrics” após o término do treinamento — oito linhas: Iteration 20000 / 20000, Loss 0.007471, Learning Rate 0.00e+00, SH Degree 3, Gaussians 9,660, GPU Memory 5.7 MB, Speed 223.7 it/s, Elapsed 1:29
Recorte do grupo „Training Metrics" após o término do treinamento — oito linhas: Iteration 20000 / 20000, Loss 0.007471, Learning Rate 0.00e+00, SH Degree 3, Gaussians 9,660, GPU Memory 5.7 MB, Speed 223.7 it/s, Elapsed 1:29

Enquanto um treinamento está em execução, o grupo de métricas ("Training Metrics", um dos dois grupos expansíveis na seção Progresso) exibe oito valores ao vivo do loop de treinamento. Antes do início de um treinamento ele fica vazio ("Start training to see live metrics"). Todos os valores são atualizados a cada ~30 iterações (frequência de atualização das métricas ao vivo). A seção é somente leitura — nenhum elemento é clicável ou alterável. Para uma análise mais aprofundada, consulte os logs de treinamento JSONL em ~/Documents/RadianceKit/Logs/.

I30Iteration

ONDE

Inspector → Progresso → Training Metrics → Iteration. Somente leitura.

TÉCNICO

Exibição no formato „4523 / 40000" — iteração atual sobre o total de iterações planejadas. Conta em sincronia com o loop de treinamento, que envia os valores a cada ~30 iterações. O segundo número corresponde ao valor de Max Iterations no momento do início; ele não muda mais, mesmo que o usuário ajuste o stepper posteriormente — a execução em andamento usa sua própria cópia snapshot. Quando o app adiciona iterações através do menu Training (Continue Training +5K/+10K/+20K), o denominador aumenta.

I31Loss

ONDE

Inspector → Progresso → Training Metrics → Loss. Somente leitura.

TÉCNICO

Valor float com seis casas decimais (ex.: „0.024385"). Mede o loss combinado L1+SSIM (mix controlado via I21 SSIM Weight) mais, opcionalmente, Perceptual Loss (I29) e outros regularizadores. A escala não é absoluta, mas sim dependente da cena — exige, para a maioria das comparações, o mesmo conjunto de dados. Valores finais típicos em configurações boas: - Classic Quality 40K iters: 0.022–0.025 (Horse, Truck, Garden) - MCMC Full 200K iters: 0.024–0.028 - Drone externo 30K: 0.030–0.060 (pior devido à geometria) - Apartamentos internos: 0.018–0.025

Valores acima de 0.10 após 5K iterações indicam problemas de SfM (poses de câmera ruins) — interrompa e recalcule o SfM.

I32Learning Rate

ONDE

Inspector → Progresso → Training Metrics → Learning Rate. Somente leitura.

TÉCNICO

Exibição em notação científica (ex.: „1.60e-04"). Taxa de aprendizado atual para os parâmetros de posição (3DGS tem seis learning rates independentes para Position, SH-DC, SH-Rest, Opacity, Scale, Rotation — aqui é exibida a LR de Position como valor representativo). Valor inicial padrão de 1.6e-4, que decai através de um decaimento exponencial até ~1.6e-6 ao final do treinamento. O decaimento pode ser ajustado através do campo LR Schedule na configuração de treinamento (campo T no cap. 6). Se a LR permanecer incomumente alta (ex.: 1e-3 ou mais após 10K iterações), isso pode indicar uma configuração carregada incorretamente.

I33SH Degree

ONDE

Inspector → Progresso → Training Metrics → SH Degree. Somente leitura.

TÉCNICO

Número inteiro 0-3. Grau de Spherical Harmonics para a representação de cor. Começa em 0 (apenas o componente DC, ou seja, cor independente de direção por Gaussian — portanto apenas uma constante RGB) e aumenta progressivamente ao longo do treinamento até 3. O schedule padrão eleva o grau em 1 nas iterações 1000/2000/3000. SH-3 corresponde a 48 coeficientes de cor por Gaussian (3 canais RGB × 16 funções de base SH). Grau SH mais alto = mais reflexão dependente de direção (superfícies brilhantes parecem corretamente diferentes de vários ângulos de visão), mas também mais memória e treinamento mais lento.

I34Gaussians

ONDE

Inspector → Progresso → Training Metrics → Gaussians. Somente leitura.

TÉCNICO

Número atual de Gaussians no modelo, formatado com separador de localidade (ex.: „524.318"). Crescimento: - Classic: começa nos pontos de inicialização do SfM (tipicamente 50K-300K), cresce por Clone/Split até pouco antes de Densify Until, depois fica estático até o final do treinamento (módulo pruning) - MCMC: pontos de amostra são adicionados até o limite (cap) do MCMC, depois apenas relocação

Valores finais saudáveis: - Classic Quality: 400K-700K (Horse 524K, Garden 800K) - MCMC Full: exatamente no cap (padrão 150K, com Auto-Scale Multiplier × contagem de SfM dependendo da cena 500K-1.5M)

No MCMC, se o número cair para < 60% do cap → anomalia (indicador de collapse, indica regularizadores muito agressivos).

I35GPU Memory

ONDE

Inspector → Progresso → Training Metrics → GPU Memory. Somente leitura.

TÉCNICO

Estimativa do consumo de memória do buffer de Gaussians como contagem de Gaussians × 616 bytes (formatado no estilo de memória). 616 bytes é o tamanho de um Gaussian totalmente equipado (posição, escala, rotação, opacidade, coeficientes SH de grau 3, acumulador de gradiente). A exibição não captura o overhead do renderer (buffer de tiles, buffer de ordenação, buffer de backward) — a necessidade real de memória de GPU fica tipicamente 2-3× acima desse valor. Com 500K Gaussians: exibido ~290 MB, real ~700 MB. Com 1.5M Gaussians: exibido ~880 MB, real ~2.5 GB. Em um M3 Max com 64+ GB de memória unificada não é crítico, em um M3 Pro com 18 GB já é um limite.

I36Speed

ONDE

Inspector → Progresso → Training Metrics → Speed. Somente leitura.

TÉCNICO

Iterações por segundo com uma casa decimal („24.3 it/s"). Calculado pelo trainer como média móvel sobre as últimas ~100 iterações. Valores típicos: - Preset Quick (1K iters): 80-120 it/s (curto, sem estado estável) - Classic 20K @ 1.0 Render Scale (cena Truck, M3 Max): 25-35 it/s - Classic 20K @ 0.5 Render Scale: 80-120 it/s - MCMC 200K @ 0.5 Render Scale: 25-50 it/s (mais lento devido à relocação) - Com 1M+ Gaussians e resolução total: < 10 it/s

A diminuição da velocidade ao longo do treinamento é normal — mais Gaussians = mais processamento por iteração. Quedas repentinas (ex.: de 30 → 5 it/s) indicam throttling térmico da GPU ou apps concorrentes.

I37Elapsed

ONDE

Inspector → Progresso → Training Metrics → Elapsed. Somente leitura.

TÉCNICO

Tempo já decorrido como „4:23" (m:ss) ou „1:23:45" (h:mm:ss). Mudança de formato a partir de 1 hora. Mede apenas o tempo puro de treinamento, não as fases anteriores (cálculo de SfM, importação de imagens). Ao pausar/retomar, o relógio continua correndo — ou seja, é tempo de relógio (wall-clock), não tempo de CPU.

Seção do gráfico de perda (I39–I41)

Recorte do grupo „Loss History” após treinamento concluído — Current: 0.0075, à direita em verde Min: 0.0051, curva azul caindo abruptamente de cerca de 0.14 e depois descendo de forma irregular até 20K, eixo à esquerda 0.14 / 0.071 / 0.0051; abaixo o gráfico laranja „Gaussian Count” com eixo de 16K a 9K e valor final 9.660
Recorte do grupo „Loss History" após treinamento concluído — Current: 0.0075, à direita em verde Min: 0.0051, curva azul caindo abruptamente de cerca de 0.14 e depois descendo de forma irregular até 20K, eixo à esquerda 0.14 / 0.071 / 0.0051; abaixo o gráfico laranja „Gaussian Count" com eixo de 16K a 9K e valor final 9.660

O grupo do gráfico de perda ("Loss History", o segundo grupo recolhível na seção Progresso) visualiza o histórico de treinamento ao longo do tempo. Consiste em dois gráficos: um gráfico de curva de perda (grande, em cima, azul) e um gráfico de contagem de Gaussianas (menor, embaixo, laranja). Ambos são construídos ao vivo durante o treinamento e persistem até o próximo início de treinamento. Antes do primeiro treinamento, a área fica vazia ("Loss curve will appear during training"). Os gráficos são puramente desenhos SwiftUI-Path (sem o framework Swift Charts), para que renderizem de forma fluida mesmo com mais de 100 mil pontos.

I39Current Loss (exibição)

ONDE

Inspector → Progresso → Loss History → área de rótulo à esquerda "Current: 0.0075". Somente leitura.

TÉCNICO

Valor float do último ponto de amostra de perda, formatado com quatro casas decimais. Idêntico a I31 (Loss na seção de métricas), só que formatado de forma mais compacta aqui. A fonte é o histórico de perda — uma lista que recebe uma entrada a cada ~30 iterações. Apenas valores finitos são incluídos na lista — NaN/Infinity (muito raro, em caso de um bug de explosão de gradiente) são filtrados.

I40Min Loss (exibição)

ONDE

Inspector → Progresso → Loss History → área de rótulo à direita "Min: 0.0051" (verde). Somente leitura.

TÉCNICO

Mínimo de todos os valores de perda já vistos na execução de treinamento atual. É recalculado ao vivo a partir do histórico de perda — sem persistência separada. É exibido em texto verde, porque "Min" = "melhor até agora". A linha verde tracejada na borda inferior do gráfico marca essa posição Y visualmente. Em sessões de Continue Training, o rastreamento do mínimo recomeça — o histórico antigo é substituído na UI pelo novo (não anexado). Se o treinamento atual estiver indo pior do que o anterior, a exibição de Min pode, portanto, ser maior do que o resultado final anterior.

I41Gráfico Gaussian Count

ONDE

Inspector → Progresso → Loss History → segundo gráfico logo abaixo (laranja). Somente leitura.

TÉCNICO

Gráfico de linha do número de Gaussianas ao longo das iterações de treinamento. Fonte: o histórico de contagem de Gaussianas (lista de pares (Iter, Count), preenchida pelo treinador a cada ~30 iterações). Escala Y dinâmica entre o mínimo e o máximo do histórico. Na estratégia Classic, a curva tipicamente tem esta forma: subida constante até Densify Until, depois plana (com pequenas oscilações de pruning). No MCMC: subida acentuada até o limite (cap), depois uma linha horizontal (o Relocation mantém o número constante). Uma queda bem no final é normal — na imagem acima, a curva cai de cerca de 16K para 9.660, porque as passagens de limpeza atuam após a última iteração (I26). Só é preocupante uma queda no meio da execução: nesse caso, a densificação está fazendo pruning de forma agressiva demais — indício de defaults errados ou de um bug conhecido de colapso do MCMC (tema do hotfix v1.4.4).

Como ler a curva de perda?

O gráfico de perda é a ferramenta de diagnóstico mais importante no Inspector — nenhum outro indicador mostra de forma tão direta se o treinamento está progredindo de forma útil ou travado. A forma tipicamente saudável é uma queda rápida nas primeiras 1000-3000 iterações (de ~0,15 para ~0,05), seguida de uma queda lenta e constante até o fim do treinamento (para 0,020-0,030). Em escala logarítmica, a curva parece uma diagonal suave.

O que significa um platô na perda? Se a curva permanecer plana por vários milhares de iterações, há duas leituras possíveis: (a) O treinamento "convergiu" — a perda não consegue mais cair de forma significativa, porque o modelo está tão bom quanto pode ficar com os dados e configurações dados. Isso é desejável; significa "pronto". (b) O treinamento "travou" — a perda ainda poderia cair, mas a otimização está estagnada (mínimo local, taxa de aprendizado muito baixa, densificação desligada). Para diferenciar: se o valor de perda está numa faixa tipicamente boa (0,020-0,030 em cenas internas/ objetos, 0,040-0,060 em cenas externas) e a curva está plana há 5K iterações, convergiu. Se o valor está claramente mais alto do que em cenas comparáveis (por exemplo, 0,08), está travado.

Atenção: platô de Gaussianas ≠ platô de perda. Um platô no número de Gaussianas não significa "o treinamento terminou". Significa apenas que a densificação parou de adicionar novos pontos — seja porque foi atingido (Classic) ou porque o limite (cap) do MCMC está cheio. O treinamento continua depois disso, apenas refinando os pontos já existentes. O verdadeiro sinal de "pronto" você lê na curva de perda e no contador de iterações (I30), não aqui.

Regra prática para interromper: Se a curva de perda estiver acima de 0,08 após 5000+ iterações e quase não estiver mais caindo, há uma alta probabilidade de que a reconstrução SfM esteja errada. Interrompa o treinamento, verifique no Capítulo 9 se o backend SfM escolhido combina com a cena, se necessário mude para COLMAP/Native, e depois reinicie. É melhor investir 10 minutos em um SfM melhor do que 2 horas de treinamento com um alinhamento de câmera ruim.

Quando usar o Inspector?

Referência rápida: Qual seção + quais Controls para qual caso de uso típico?

Tarefa comumSeçãoControl-IDs
Dessaturar as cores do splat finalizadoLookL1 (Saturation)
Arredondar splats em forma de agulha/confeteLookL2 (Splat length)
Preencher nuvem cheia de buracos / aumentar splatsLookL3 (Splat size)
Ocultar "confete distante" em órbitasLookL4 (Fade far region)
Descartar ajustes de LookLookL5 (Reset finishing)
Carregar configuração pré-definidaPresetsI7 (clicar na linha)
Salvar configuração própriaPresetsI1 → I2 → I4
Compartilhar configuração com colegasPresetsI5 (Export) ou I6 (Import)
Trocar backend de SfM (por exemplo, porque o Apple-PG está instável)Câmeras & CapturaI12 (ver cap. 9)
Processar frames de vídeo sem distância focal EXIFCâmeras & CapturaI13 (FOV Override)
Performance do COLMAP: GLOMAP em vez de ClássicoCâmeras & CapturaI14 — somente em builds de desenvolvedor, no build da App Store o COLMAP não está disponível como backend
Mudar de Classic para MCMCConfiguração de treinamentoI15
Deixar o treinamento rodar por mais tempoConfiguração de treinamentoI18 (Max Iter) + I20 (Densify Until) — acoplados via I19
Reduzir pela metade o tempo de GPUConfiguração de treinamentoI22 (Render Scale em 50%)
Qualidade de treinamento +6% (MCMC)Configuração de treinamentoI16 (MCMC Quality)
Cena externa com muitos pontos SfMConfiguração de treinamentoI17 (Auto-scale by scene)
Configurar / trocar o caminho do COLMAPCâmeras & CapturaI23 / I24 / I25 — somente em builds de desenvolvedor
Reduzir o tamanho dos arquivos de exportaçãoTreinamentoI26 (deixar sempre ativado)
Último detalhe fino em estruturas delicadasTreinamentoI29 (Perceptual Loss 0.05-0.1)
Monitorar o treinamentoProgresso ▸ Training MetricsI30 (Progresso), I36 (Ritmo) — o tempo restante aparece na faixa de transporte abaixo do Viewport
Avaliar a qualidade cedoProgresso ▸ Training MetricsI31 (Loss < 0.05 após 5K = bom)
Suspeita de problema de SfMProgresso (ambos os grupos)I31 + I39 (Loss > 0.08 após 5K → refazer SfM)
Diferenciar Convergence de StuckProgresso ▸ Loss HistoryI39 + I40 (ler o platô de Loss)
Detectar problema de DensificationProgresso ▸ Loss HistoryI41 (curva Gaussian cai → bug)