Guía del usuario

Capítulo 2 — Inspector (vista experta)

Modo experto vacío — a la izquierda el Project Navigator con Images/Cameras/Log, encabezado „Images (0)” y zona de arrastre „Drop images here / or tap + to import”, en el centro un Viewport vacío, a la derecha el Inspector con seis secciones plegadas (Presets, Cameras & Capture, Training, Progress, Look, Export), cada una con título y subtítulo gris de fase; abajo la línea de estado „Idle” con botón verde de inicio y botón rojo de parada
Modo experto vacío — a la izquierda el Project Navigator con Images/Cameras/Log, encabezado „Images (0)" y zona de arrastre „Drop images here / or tap + to import", en el centro un Viewport vacío, a la derecha el Inspector con seis secciones plegadas (Presets, Cameras & Capture, Training, Progress, Look, Export), cada una con título y subtítulo gris de fase; abajo la línea de estado „Idle" con botón verde de inicio y botón rojo de parada

Inspector vacío antes de importar: La columna izquierda muestra los puntos Images, Cameras y Log, debajo el encabezado „Images (0)" y la zona de arrastre „Drop images here / or tap + to import". El Viewport en el centro está vacío. A la derecha aparece el Inspector con seis secciones plegadas: Presets, Cameras & Capture, Training, Progress, Look y Export. Bajo cada título, una línea gris indica qué hace la sección y cuándo actúa — „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) y „Leveling the floor turns the view at once; the chosen orientation and format apply when saving" (Export). Al fondo corre la línea de estado con el estado „Idle", así como el botón verde de inicio y el botón rojo de parada; arriba a la derecha está el conmutador Simple/Expert, aquí en Expert.

Inspector con 35 imágenes importadas — encabezado „Images (35)”, nombres de archivo IMG_0953.JPG en orden ascendente, Viewport aún vacío, estado „Idle”
Inspector con 35 imágenes importadas — encabezado „Images (35)", nombres de archivo IMG_0953.JPG en orden ascendente, Viewport aún vacío, estado „Idle"

Inspector tras la importación: El encabezado de la lista de imágenes muestra „Images (35)", debajo aparecen las tomas importadas con nombres de archivo ascendentes a partir de IMG_0953.JPG. Las imágenes de esta serie de pruebas tienen 4032×3024 píxeles; la lógica de Auto-Render-Scale lee esta resolución y propone una Render Scale adecuada. El Viewport sigue vacío, la línea de estado marca „Idle". El botón verde de inicio abajo a la izquierda ahora está activo e inicia el entrenamiento con el preset activo.

Inspector durante el entrenamiento — barra de título „RadianceKit — Training 23%”, en el Viewport la vista previa en vivo de un pato de tela sobre una piel de oveja, progreso 4,700/20,000 con ETA 1m9s, barra de métricas Loss 0.0109 / LR 2.0e-04 / SH 1 / Gaussians 16.0K, en el Inspector el grupo desplegado CLASSIC con „Balanced 20K iters” marcado en verde
Inspector durante el entrenamiento — barra de título „RadianceKit — Training 23%", en el Viewport la vista previa en vivo de un pato de tela sobre una piel de oveja, progreso 4,700/20,000 con ETA 1m9s, barra de métricas Loss 0.0109 / LR 2.0e-04 / SH 1 / Gaussians 16.0K, en el Inspector el grupo desplegado CLASSIC con „Balanced 20K iters" marcado en verde

Inspector durante el entrenamiento: La barra de título muestra el progreso global, aquí „RadianceKit — Training 23%". El Viewport renderiza la reconstrucción en curso en tiempo real — un pato de tela sobre una piel de oveja, ya claramente reconocible (el intervalo de actualización de la vista previa en vivo se configura en Settings → General → Training → Live Preview). Bajo el Viewport corren el progreso („4,700/20,000", „ETA 1m9s") y la barra de métricas con Loss 0.0109, LR 2.0e-04, SH 1 y Gaussians 16.0K; abajo a la izquierda están los botones de pausa y parada. En el Inspector está desplegado el grupo CLASSIC, „Balanced 20K iters" lleva la marca verde. Una etiqueta „Modified" solo aparece cuando un parámetro se desvía del preset — aquí no se ve ninguna. La barra lateral „Log" recopila los eventos de las etapas de SfM y de entrenamiento.

Inspector tras finalizar el entrenamiento — barra de título „RadianceKit — Training Complete — 8,708 Gaussians”, a la izquierda „Complete” con 8,708 Gaussians, Images 25 y Cameras 35, línea de estado „Completed” en 20,000/20,000, barra de métricas Loss 0.0075 / LR 0.0e+00 / SH 3 / Gaussians 9.7K, en el Viewport la reconstrucción terminada del pato ocupando todo el encuadre
Inspector tras finalizar el entrenamiento — barra de título „RadianceKit — Training Complete — 8,708 Gaussians", a la izquierda „Complete" con 8,708 Gaussians, Images 25 y Cameras 35, línea de estado „Completed" en 20,000/20,000, barra de métricas Loss 0.0075 / LR 0.0e+00 / SH 3 / Gaussians 9.7K, en el Viewport la reconstrucción terminada del pato ocupando todo el encuadre

Inspector tras el entrenamiento: La barra de título indica el resultado: „Training Complete — 8,708 Gaussians". En la columna izquierda aparece „Complete" con el mismo número, además de Images 25 y Cameras 35 — 25 imágenes porque el diálogo de Frame Quality descartó diez de las 35 tomas por estar movidas. La línea de estado indica „Completed" en 20,000/20,000, la barra de métricas Loss 0.0075, LR 0.0e+00, SH 3 y Gaussians 9.7K. El Viewport muestra la nube de puntos terminada ocupando todo el encuadre — navegación orbital por arrastre activa (rota alrededor del centro de la escena).

Que aquí aparezcan dos cifras distintas de Gaussians es intencional: la barra de métricas y Training Metrics indican el estado al final del entrenamiento (aquí 9,660, redondeado 9.7K), la barra de título y la escena el estado después de las pasadas automáticas de limpieza (8,708). Entre ambas ocurren la Post-Training Compactification y la eliminación de splats con forma de aguja o de disco. La cifra menor es la que aparece en el Viewport y la que se guarda al exportar. Los grupos Training Metrics y Loss History están ahora rellenos con los valores finales, la sección Export está activa.

El Inspector es la barra lateral derecha en Expert Mode (⌘2). Reúne todos los parámetros relevantes para el entrenamiento en seis secciones plegables que, desde el 2026-07-18, están agrupadas por dominio. El orden por defecto de arriba a abajo es: Presets, Cameras & Capture, Training, Progress, Look y Export. Bajo cada título hay una segunda línea que indica la fase — cuándo actúa la sección y cuán reversible es (p.ej. „Before training · decides how camera positions are solved · applies to the next run" en Cameras & Capture, „After training · applies immediately · reversible any time" en Look, „Display only" en Progress). Dos secciones anteriores se han fusionado: Métricas y Gráfico de pérdida son ahora dos grupos plegables separados („Training Metrics" y „Loss History") dentro de Progress, y la antigua sección Enhancements está por completo integrada en Training. La sección „Look" (ajustes de imagen posteriores al entrenamiento) es el renombramiento real en la interfaz de la antigua sección „Finishing" — su nombre interno sigue siendo „Finishing" por motivos de compatibilidad, mientras que el título mostrado es „Look" (el mismo patrón se da en Training, que internamente se llama „Training Configuration"). Cada sección puede plegarse haciendo clic en su encabezado, y el orden puede reorganizarse mediante arrastrar y soltar. En el primer inicio, las secciones están plegadas — en la imagen de arriba las seis están cerradas; el estado de la app guarda las preferencias de plegado y orden a partir de entonces, entre reinicios. Un orden antiguo ya guardado se migra una única vez, en el primer inicio, a la nueva agrupación; Viewport ▸ Reset Inspector Layout restaura el estado de fábrica.

Una serie de controles del Inspector aparece en forma casi idéntica también en los ajustes (Capítulo 3) — típicamente el backend de SfM, Sky-Masking y valores por defecto similares. La separación es deliberada: los ajustes proporcionan la plantilla global de la app para proyectos recién creados, mientras que el Inspector sobrescribe esos valores para el proyecto actualmente abierto. Quien conozca la lógica de uso de un lado puede manejar el otro sin mirar.

La columna izquierda en Expert Mode — el Project Navigator — no forma parte del Inspector, pero es su vecino directo. Allí se pueden seleccionar las imágenes importadas con un clic, verlas con la barra espaciadora en Quick Look y eliminarlas mediante el botón menos o la tecla de eliminar (con Cmd-Z para deshacer). El Inspector sigue la selección actual de la barra lateral con información de detalle contextual, pero las siete secciones principales permanecen siempre disponibles.

Sección Look (L1–L5)

La sección Look (internamente sigue llamándose «Finishing») es, desde la reagrupación de dominios, la quinta sección del Inspector — entre Progreso y Exportación — y reúne los ajustes de imagen posteriores al entrenamiento en un solo lugar. Todos los controles funcionan de forma no destructiva: cada slider vuelve a aplicar el cálculo de Look sobre una instantánea Pristine inalterada (color DC original, opacidad, escala) — el ajuste es, por tanto, idempotente, no acumulativo. El resultado aparece en vivo en el Viewport (WYSIWYG, exactamente como en la exportación posterior) y se incorpora a cada exportación. La sección solo está disponible tras completar una ejecución de entrenamiento (antes se muestra «Available after a training run completes."); sus valores se restablecen con cada nuevo entrenamiento. Mientras se realiza una exportación, todos los controles quedan bloqueados — aparece un aviso de bloqueo «Locked while exporting — the file uses the current settings." y el GroupBox queda deshabilitado.

L1Slider Saturation

DÓNDE

Inspector → sección Look → GroupBox → Saturation.

TÉCNICO

Slider 0.5–1.2, indicación con dos decimales (p. ej. «1.00»). Escala la crominancia SH-DC de cada splat en torno al valor de luminancia: 1.0 = sin cambios, < 1.0 = desaturado (el color se acerca a la escala de grises), > 1.0 = más intenso. Matemáticamente, el color DC se recalcula siempre a partir de la instantánea Pristine, de modo que mover el slider repetidamente no se acumula. Se ha validado con material de drones DJI (viaducto de Pensford), que tiende a sobresaturar — el valor por defecto para drones es 0.82. Solo afecta a la base de color (grado SH 0); los coeficientes SH superiores permanecen intactos.

L2Slider Splat length

DÓNDE

Inspector → sección Look → GroupBox → Splat length.

TÉCNICO

Slider 0.3–1.0, indicación con dos decimales. Acerca los tres ejes de escala de cada gaussiana hacia su media en espacio logarítmico (cuanto menor el valor, más fuerte el efecto): 1.0 = sin cambios, valores menores redondean los splats en forma de «aguja» alargada, 0 sería una esfera pura. Ataca los splats alargados y estirados en exceso sin cambiar el tamaño total, y así reduce los típicos artefactos de «confeti». Se aplica desde la instantánea Pristine (escala logarítmica original), por lo que es idempotente. Conmuta con Splat size (L3), ya que ambos operan en espacio logarítmico.

L3Slider Splat size

DÓNDE

Inspector → sección Look → GroupBox → Splat size.

TÉCNICO

Slider 0.5–2.0, indicación con dos decimales. Escala cada gaussiana uniformemente en los tres ejes: 1.0 = sin cambios, < 1.0 = más pequeño/denso/nítido, > 1.0 = más grande/«esponjoso» (rellena huecos entre splats). Dado que las escalas están en espacio logarítmico, la multiplicación se convierte allí en un desplazamiento aditivo — esto conmuta con Splat length (L2), porque un desplazamiento constante no altera la desviación respecto a la media. Se aplica desde la instantánea Pristine, por lo que es idempotente. Novedad en esta versión.

L4Fade far region (con sub-sliders)

DÓNDE

Inspector → sección Look → GroupBox → interruptor «Fade far region» más los sub-sliders «Fade start ×radius» y «Fade floor».

TÉCNICO

Interruptor que activa una caída radial de opacidad con la distancia al centro de gravedad de la cámara — el «confeti lejano» poco observado en el fondo se desvanece. Solo para tomas en órbita: el interruptor aparece en gris si la escena no es apta (vuelos lineales, cámaras insuficientes o degeneradas); en ese caso, en lugar de los sub-sliders aparece el aviso «Far-fade applies only to orbit captures (not this scene)." La idoneidad se determina mediante la cobertura de acimut de las posiciones de cámara (una órbita rodea el centro de gravedad y cubre muchos sectores de la brújula, un vuelo lineal solo ~2). Dos sub-sliders controlan la geometría: Fade start ×radius (1.0–3.0) fija el radio interior como múltiplo del radio de la órbita, dentro del cual se mantiene la opacidad total; Fade floor (0.0–1.0) es el factor de opacidad muy más allá del radio de desvanecimiento. Importante: el desvanecimiento omite la zona de la Sky-Dome (las gaussianas congeladas de la cúpula), para que la cúpula de fondo intencionada no se atenúe también.

L5Botón Reset finishing

DÓNDE

Inspector → sección Look → GroupBox → «Reset finishing» (abajo, botón pequeño).

TÉCNICO

Restablece todos los ajustes de Look a los valores por defecto (Saturation 1.0, Fade desactivado, Splat length 1.0, Splat size 1.0) y desencadena de inmediato un nuevo finishing, de modo que el Viewport vuelve al estado entrenado sin modificar. Dado que todo el stack de Look calcula de forma idempotente desde la instantánea Pristine, «volver al valor por defecto» es exactamente el resultado original del entrenamiento — sin pérdida de calidad por ir y volver varias veces. Como todos los controles de la sección, queda bloqueado mientras se realiza una exportación.

Sección de Presets (I1–I11)

La sección de Presets es la forma más rápida de aplicar una configuración probada. Los Presets integrados (Capture Class, Classic, MCMC, Hybrid) ofrecen puntos de partida contrastados y reproducibles; los Presets propios se pueden guardar, exportar, importar y compartir. La lista está agrupada por categorías (Capture Class, Classic, MCMC, Hybrid, Custom) y se puede tener más de una categoría desplegada a la vez. A través del mecanismo de menú contextual (clic derecho sobre una fila) se puede acceder a Exportar, Duplicar y — en el caso de Presets propios — Eliminar.

I1Botón Save…

DÓNDE

Inspector → sección de Presets → botón Save… (barra de acciones inferior).

TÉCNICO

Abre un popover con un campo de texto y botones Save/Cancel. El estado actual de los ajustes de entrenamiento se persiste como nuevo Preset personalizado (codificado en JSON, guardado a nivel de toda la app). El proceso de guardado copia los 81 parámetros de entrenamiento más la estrategia de Densification actual. El Preset va automáticamente a la categoría Custom, independientemente de a partir de qué Preset integrado se haya derivado. Los nombres vacíos y las entradas que solo contienen espacios en blanco se descartan. Los nombres ya existentes no se rechazan — cada Preset tiene su propio ID interno, los nombres duplicados están técnicamente permitidos, pero en la práctica resultan confusos.

I2Campo de texto Preset Name

DÓNDE

Popover de guardado → campo de texto "Preset Name".

TÉCNICO

Campo de texto sencillo con borde redondeado, de forma ancha. El valor se adopta como nombre del Preset al hacer clic en el botón Save. No hay límite de longitud en la interfaz, pero el nombre guardado debe poder codificarse en JSON y representarse en las listas de la interfaz — emojis y caracteres especiales funcionan. El contenido se restablece automáticamente a una cadena vacía al abrir el popover. El botón Save permanece deshabilitado mientras el campo esté vacío tras eliminar los espacios. No hay autocompletado ni un valor predeterminado con el nombre del Preset actualmente activo.

I3Botón Cancel (diálogo de guardado)

DÓNDE

Popover de guardado → botón Cancel (izquierda).

TÉCNICO

Cierra el popover sin guardar. Descarta el contenido del campo de texto — la próxima vez que se abra, se restablecerá de nuevo a vacío mediante la lógica del botón Save… (I1). Estilo de botón estándar, sin diálogos de confirmación, sin atajos de teclado. El TrainingConfig actual permanece sin cambios, ya que la ruta de guardado ni siquiera se ejecutó.

I4Botón Save (diálogo de guardado)

DÓNDE

Popover de guardado → botón Save (derecha, estilo destacado).

TÉCNICO

Desencadena la persistencia propiamente dicha. Vuelve a validar que el nombre no esté vacío (comprobación defensiva) y luego escribe el TrainingConfig actual como JSON en el almacenamiento de la app. A continuación cierra el popover. Resaltado en azul, atenuado mientras el campo de texto esté vacío. Si el guardado falla (por ejemplo, porque el almacenamiento de la app está lleno — muy improbable), actualmente no hay ningún diálogo de error visible; el Preset simplemente no aparecería en el próximo inicio de la app.

I5Botón Export…

DÓNDE

Inspector → sección de Presets → barra de acciones → botón Export….

TÉCNICO

Exporta el Preset actualmente seleccionado como archivo .radiancepreset (JSON internamente). Deshabilitado si no hay ningún Preset seleccionado. Al hacer clic, la app abre un diálogo de guardado con un nombre de archivo predeterminado (nombre del Preset + extensión .radiancepreset). El formato guardado contiene el TrainingConfig completo más metadatos (nombre, categoría, ID, indicador de integrado). Un doble clic en el Finder abre la app — pero no inicia automáticamente la importación; el usuario debe usar el botón Import (I6).

I6Botón Import…

DÓNDE

Inspector → sección de Presets → barra de acciones → botón Import….

TÉCNICO

Abre un diálogo de archivos que solo permite archivos .radiancepreset (selección múltiple desactivada). Al seleccionar, se carga el archivo JSON, se valida y se inserta en la categoría Custom — con un nuevo ID interno, para que no se produzcan colisiones con los integrados. La importación establece automáticamente la categoría en Custom, incluso si el Preset exportado era originalmente, por ejemplo, un integrado. Los archivos dañados o incompatibles con una versión de esquema anterior se rechazan silenciosamente, sin diálogo de error (aunque el registro de la consola sí informa al respecto).

I7Fila de Preset (activación con clic)

DÓNDE

Inspector → sección de Presets → cada fila de Preset en cada categoría.

TÉCNICO

Al hacer clic en una fila de Preset se sustituyen todos los campos del TrainingConfig por los valores del Preset, se recuerda el ID del Preset activo y se restablece el estado de modificado. El check de activo delante de la fila solo aparece cuando el Preset está seleccionado Y no ha sido modificado. En cuanto se cambia un valor en el TrainingConfig (slider, stepper, toggle en las demás secciones del Inspector), aparece una insignia naranja "Modified" detrás del nombre. Los Presets integrados no se pueden sobrescribir — al modificarlos hay que crear una copia propia mediante el botón Save (I1).

I8Menú contextual "Export…"

DÓNDE

Clic derecho sobre cualquier fila de Preset → primera entrada "Export…".

TÉCNICO

Funcionalidad idéntica a I5 (botón Export…), pero de acceso más cómodo — sin necesidad de seleccionar antes el Preset. Exporta directamente el Preset sobre el que se hizo clic en la fila. Funciona igual para todas las categorías de Preset (integrado o Custom), sin restricciones. La exportación incluye el indicador de integrado y la categoría original, pero al reimportar la categoría se asigna a Custom, tal como se describe en I6.

I9Menú contextual "Duplicate"

DÓNDE

Clic derecho sobre cualquier fila de Preset → segunda entrada "Duplicate".

TÉCNICO

Clona el Preset en la categoría Custom. Genera un nuevo ID interno, añade " Copy" al nombre y guarda la copia. También funciona con Presets integrados — el clon resultante es entonces editable. El original permanece intacto. El TrainingConfig se copia valor por valor (ida y vuelta por JSON), de modo que no existen vínculos de referencia entre el original y la copia.

I10Menú contextual "Delete"

DÓNDE

Clic derecho sobre filas de Preset propias → última entrada "Delete" (roja, destructiva).

TÉCNICO

Solo visible para Presets Custom. Los integrados no se pueden eliminar. La entrada está marcada como destructiva, aparece en rojo en el menú contextual y se separa detrás de un divisor, para que no se pulse por accidente. No hay diálogo de confirmación — un clic elimina el Preset de inmediato. El Preset eliminado no se puede recuperar (Cmd-Z no funciona aquí — el deshacer en la versión actual solo existe para la lista de imágenes, no para las operaciones con Presets). Si el Preset eliminado estaba activo en ese momento, el TrainingConfig actual permanece sin cambios, solo se anula la selección de Preset activo.

I11Encabezado de categoría (desplegar/plegar)

DÓNDE

Inspector → sección de Presets → cada encabezado de categoría (Capture Class, Classic, MCMC, Hybrid, Custom).

TÉCNICO

Estado de despliegue por categoría con comportamiento predeterminado distinto: el grupo curado Capture Class comienza desplegado, Classic, MCMC, Hybrid y Custom comienzan plegados. El estado no se persiste — al reiniciar la app, todas las categorías vuelven a su estado predeterminado. La flecha chevron rota con animación. El número a la derecha en el encabezado muestra la cantidad de Presets en esa categoría. El área sensible al clic abarca toda la zona del encabezado.

Sección de configuración de entrenamiento (I12–I22)

Recorte de la sección Training — Densification como conmutador de tres vías Classic | MCMC | Hybrid con Classic activo, debajo las filas en gris MCMC Quality (desactivado), Auto-scale by scene (activado) y Max Gaussians 150,000 junto con el aviso de candado; separado debajo Depth-Priority Scatter (desactivado), Full-Resolution Training (desactivado), Max Iterations 5,000 y Densify Until 3,500 con el símbolo de cadena azul, el regulador SSIM Weight en 0.20 y Render Scale en 50%
Recorte de la sección Training — Densification como conmutador de tres vías Classic | MCMC | Hybrid con Classic activo, debajo las filas en gris MCMC Quality (desactivado), Auto-scale by scene (activado) y Max Gaussians 150,000 junto con el aviso de candado; separado debajo Depth-Priority Scatter (desactivado), Full-Resolution Training (desactivado), Max Iterations 5,000 y Densify Until 3,500 con el símbolo de cadena azul, el regulador SSIM Weight en 0.20 y Render Scale en 50%

Aquí se encuentran las palancas centrales para la ejecución del entrenamiento: cómo trabaja la Densification, cuántas iteraciones, qué tan grande es la ponderación SSIM — y además, en la parte inferior, las mejoras que antes eran independientes (Perceptual Loss, grupo Outdoor, Advanced Densifier, pasadas de post-entrenamiento). En la parte superior está la Densification como conmutador de tres vías Classic | MCMC | Hybrid. El backend de SfM ya no está aquí, sino en su propia sección Cámaras y captura (I12, I13). Las tres filas de MCMC ("MCMC Quality", "Auto-scale by scene" y "Max Gaussians") ya no desaparecen en el modo Classic, sino que permanecen visibles y se muestran en gris; debajo hay una fila con un símbolo de candado que indica qué se debe cambiar ("Only used by the MCMC and Hybrid densifiers — switch Densification above to change these."). Un bloque separado debajo resume las filas que aplican a cualquier densifier: Depth-Priority Scatter, Full-Resolution Training, el par acoplado Max Iterations / Densify Until, así como los reguladores SSIM Weight y Render Scale.

I12Selector de Camera Alignment

DÓNDE

Inspector → Cámaras y captura → Camera Alignment (menú desplegable debajo del selector de Projection).

TÉCNICO

Menú desplegable, no un selector segmentado — las etiquetas exceden la estrecha columna del Inspector. Qué entradas aparecen depende del build: la versión sandboxed de la App Store ofrece Apple Photogrammetry y Native, los builds de desarrollo/DMG añaden además COLMAP. Motivo: COLMAP es un programa externo de línea de comandos, y las apps en sandbox no pueden iniciar binarios externos (directriz de revisión de apps 2.5.2) — por eso la entrada del backend, junto con el selector de Mapper y la ruta del binario, falta por completo en el build de la Store, en lugar de aparecer siempre en gris: una fila que nunca puede activarse no es una indicación, sino ruido. No confundir: la importación y exportación de un workspace de COLMAP es un simple análisis de archivos en Swift, no necesita una instalación de COLMAP y funciona en cualquier build (Capítulo 1, M5). El añadido "(Beta)" en la entrada Native ha desaparecido — Native ya no es beta desde la v1.5.2. La selección determina el backend de SfM de la siguiente ejecución y controla al mismo tiempo qué filas debajo son operables (I13, High-Quality, Native SfM Recipe). Nota al pie en la interfaz: con un conjunto de fotos sin ordenar el pipeline alinea siempre con Native, sin importar lo que muestre el selector — esta receta solo existe ahí. El selector deliberadamente no se bloquea (el valor no está indisponible, simplemente se anula); en su lugar aparece un aviso con un símbolo de bifurcación.

I13Campo FOV Override (Native SfM)

DÓNDE

Inspector → Cámaras y captura → FOV Override (siempre visible, operable solo con Camera Alignment = Native).

TÉCNICO

Campo de texto numérico (rango 0-170°), por defecto 0 = determinación automática a partir de EXIF o heurística. La entrada manual es necesaria cuando las imágenes de entrada se extrajeron de un video que no contiene metadatos de distancia focal. Valores típicos: iPhone Wide ≈ 73°, DJI Mavic Wide-Crop ≈ 70°, drone con sensor de formato completo ≈ 84°. El valor se limita a [0, 170] — los valores fuera de rango se ajustan automáticamente. Solo afecta al pipeline nativo de SfM (Q4/Q5); Apple Photogrammetry ignora este valor por completo. Desde el 18-07-2026: con otros backends el campo ya no se oculta, sino que se muestra en gris — junto con "High-Quality" y "Native SfM Recipe" y una fila con un símbolo de candado ("These configure the Native aligner — choose Native under Camera Alignment to change them."). El ocultamiento anterior no dejaba claro que estos reguladores existieran. El bloqueo depende del backend seleccionado, no del que realmente se usa — la redirección de conjuntos de fotos sin ordenar hacia Native se informa en cambio en el aviso de I12. La fila "Native SfM Recipe" requiere además un conjunto de fotos sin ordenar y por lo demás tiene su propia línea explicativa.

I15Selector de Densification

DÓNDE

Inspector → Configuración de entrenamiento → Densification (selector segmentado, siempre visible).

TÉCNICO

Alterna entre las dos estrategias de Densification: Classic (procedimiento original de 3DGS con Clone/Split/Prune y umbral de gradiente) y MCMC (Stochastic Gradient Langevin Dynamics con Relocation, NeurIPS 2024). Al cambiar de Classic a MCMC, la app ajusta automáticamente los campos específicos de MCMC a valores por defecto probados (Reg-Weights = 0, MCMC-Cap-Multiplier 3.0, programación de muestreo/ruido). Sin esta inicialización automática, las sesiones con presets antiguos sufrían el bug de colapso de MCMC en 1.4.4 (460K→5 Gaussians, cierre forzado por watchdog). La selección determina además qué elementos del Inspector son visibles — con MCMC aparecen I16/I17. El efecto detallado de cada campo se explica en el Capítulo 6, T11–T16 (Classic) y T61–T73 (MCMC).

I16Interruptor MCMC Quality

DÓNDE

Inspector → Training → MCMC Quality (siempre visible, operable con Densification = MCMC o Hybrid).

TÉCNICO

Cambia la acumulación de gradiente a 2 pasos (activo) o 1 paso (inactivo). Acumula los gradientes de dos vistas de cámara consecutivas antes de ejecutar el paso del optimizador. Esto suaviza la ruta de optimización y mejora ligera pero perceptiblemente el resultado final. El precio: el doble de tiempo de entrenamiento. En entrenamientos muy largos (200K iteraciones) esto supone 10+ minutos adicionales de espera — por lo tanto solo vale la pena si de verdad se necesita ese último porcentaje de calidad. Afecta solo al entrenamiento, no al formato de exportación ni a la representación en el Viewport. También aplica a Hybrid, que usa la misma maquinaria de MCMC. Desde el 18-07-2026: con Classic la fila ya no desaparece, sino que se muestra en gris junto con I17 y "Max Gaussians"; debajo aparece "Only used by the MCMC and Hybrid densifiers — switch Densification above to change these."

I17Interruptor Auto-scale by scene

DÓNDE

Inspector → Training → Auto-scale by scene (siempre visible, operable con Densification = MCMC o Hybrid).

TÉCNICO

Cuando está activo, escala el límite efectivo de Max Gaussians con el número de puntos iniciales de SfM × MCMC-Cap- Multiplier (por defecto 3.0). Ejemplo: SfM entrega 250K puntos iniciales, cap base = 150K, multiplicador 3.0 → límite efectivo = max(150K, 750K) = 750K. Si está desactivado, se aplica estrictamente solo la base. La base en sí se establece en la fila Max Gaussians justo debajo (desde 1.8, por defecto 150 000, entrada limitada a 10 000–30 000 000). Si el límite efectivo supera la base, la app lo muestra como texto ("Effective cap for this scene: …") — junto con una advertencia de RAM si resulta demasiado alto. Se introdujo para la v1.4.5 porque las grandes tomas al aire libre con más de 1000 fotogramas y la correspondiente alta densidad de puntos de SfM dejaban sin recursos a la Densification con el cap fijo de 150K por defecto — sobraban puntos innecesarios y no podían crearse otros nuevos. Por defecto desactivado en presets personalizados, activado en los presets integrados de MCMC. Solo afecta durante el entrenamiento, no en la exportación. Desde el 18-07-2026: con Classic la fila se muestra en gris en lugar de ocultarse (con la misma línea explicativa que I16); la visualización en texto y la advertencia de RAM deliberadamente no aparecen ahí, porque Classic no aplica ningún límite superior.

I18Selector numérico Max Iterations

DÓNDE

Inspector → Configuración de entrenamiento → GroupBox → Max Iterations.

TÉCNICO

Selector numérico con rango 1 000–100 000, incremento 1 000. Determina el número total de iteraciones del optimizador. Correlaciona linealmente con el tiempo de entrenamiento (la mitad = aprox. 50% del tiempo). Los valores probados son 20K (Classic Balanced), 40K (Classic Quality) y 200K (MCMC Full). Por encima de 40K, Classic apenas mejora más — el rendimiento se aplana. Al cambiarlo, si la función de enlace (I19) está activa, Densify Until se ajusta proporcionalmente (proporción por defecto: 0.5, es decir Densify-Until = Max/2).

I19Botón de enlace/desenlace (Densify ↔ Iterations)

DÓNDE

Inspector → Configuración de entrenamiento → GroupBox → pequeño botón de enlace entre Max Iterations y Densify Until.

TÉCNICO

Botón de alternancia que congela la proporción de Densify Until respecto a Max Iterations. Cuando está activo (icono de enlace resaltado), cada cambio en Max Iterations ajusta proporcionalmente Densify Until. Al desenlazar (icono de enlace con signo más), los valores permanecen independientes. Por defecto está enlazado, porque refleja la correlación típica — si aumentas el entrenamiento al doble de iteraciones, normalmente también quieres que la Densification dure proporcionalmente más. La proporción se calcula a partir del valor actual al activar el botón de enlace; una proporción típica es 0.5 (Densify-Until = mitad del número de iteraciones).

I20Selector numérico Densify Until

DÓNDE

Inspector → Configuración de entrenamiento → GroupBox → Densify Until.

TÉCNICO

Selector numérico con rango 500–50 000, incremento 500. Determina el índice de iteración a partir del cual ya no se añaden nuevos Gaussians mediante Clone/Split (Classic) o Relocation (MCMC). Una vez alcanzado, solo se refinan posición y color. Valores más altos = más Gaussians = archivo más grande, más tiempo por iteración (+30-60% de tiempo de GPU por paso). Valores típicos: 15K (para 30K de Max-Iter), 20K (para 40K), 100K (para 200K MCMC). Con el enlace activo (I19) se escala automáticamente. El efecto difiere entre Classic y MCMC: Classic detiene por completo el crecimiento, MCMC detiene la lógica de Relocation, pero la adaptación de muestreo/ruido continúa.

I21Regulador SSIM Weight

DÓNDE

Inspector → Configuración de entrenamiento → GroupBox → SSIM Weight.

TÉCNICO

Regulador 0.0–1.0 en pasos de 0.05, mostrado como "0.20". Mezcla la pérdida L1 (0.0) y la pérdida SSIM (1.0). L1 ajusta el brillo por píxel, SSIM la similitud estructural (bordes, estadísticas locales). El valor por defecto 0.2 es el valor del artículo original de 3DGS (Kerbl 2023) y un compromiso robusto para casi cualquier escena. Valores más altos (0.5+) favorecen la preservación de detalles, pero pueden ignorar errores locales de brillo. Valores más bajos (< 0.1) provocan pérdida de detalle en bordes marcados. El cálculo de SSIM se ejecuta en el shader con una ventana gaussiana de 11×11. Rendimiento: con 0.0 (solo L1) el entrenamiento es aproximadamente un 8-12% más rápido, porque se omite el cálculo de SSIM en el shader.

I22Regulador Render Scale

DÓNDE

Inspector → Configuración de entrenamiento → GroupBox → Render Scale.

TÉCNICO

Regulador 0.25–1.0 en pasos de 0.25, mostrado como "100%". Escala la resolución de renderizado del entrenamiento en relación con el tamaño de la imagen fuente. La palanca más grande sobre el rendimiento: 50% reduce el tiempo de GPU en aprox. 75% (porque hay 4× menos píxeles), 25% en aprox. 94%. El umbral de gradiente se escala automáticamente. Debajo del regulador aparece una indicación de resolución en vivo en MP (p. ej. "2304×1296 (3.0 MP)"). Si el valor actual difiere del recomendado, se muestra en texto naranja "— recommended: 50%". La recomendación apunta a una resolución efectiva de ~3 MP — el rango que las GPU de Apple Silicon procesan de forma más eficiente. Las imágenes fuente en 4K, por ejemplo, reciben automáticamente una recomendación de 25%, las imágenes FullHD de 100%. Un cambio también dispara la reasignación del buffer.

Grupos de Enhancements (en la sección Training, I26–I29, I42–I44)

Recorte de las filas de Enhancements, hoy al final de la sección Training — arriba el regulador Perceptual Loss en el extremo izquierdo en „Off”, debajo el grupo Outdoor con los cuatro interruptores apagados Sky Masking, Person Masking, Floater Cleanup y Reconstruct Sky Dome, luego la fila plegada „Advanced Densifier (Expert)” con triángulo de advertencia, y por último el grupo „Runs automatically at the end of training” con Post-Training Compactification (activado) y Remove Needle/Disc Floaters. Cada fila tiene su propia línea explicativa
Recorte de las filas de Enhancements, hoy al final de la sección Training — arriba el regulador Perceptual Loss en el extremo izquierdo en „Off", debajo el grupo Outdoor con los cuatro interruptores apagados Sky Masking, Person Masking, Floater Cleanup y Reconstruct Sky Dome, luego la fila plegada „Advanced Densifier (Expert)" con triángulo de advertencia, y por último el grupo „Runs automatically at the end of training" con Post-Training Compactification (activado) y Remove Needle/Disc Floaters. Cada fila tiene su propia línea explicativa

Estos grupos reúnen funciones que mejoran la calidad de imagen sin modificar el propio bucle de entrenamiento central. Hasta el 18-07-2026 formaban una sección propia del Inspector llamada Enhancements; desde la reagrupación por dominios se ubican en la parte inferior de la sección Training. El anterior selector Viewport-Scaling (Off/MetalFX/Lanczos) desapareció sin reemplazo: nunca tuvo efecto alguno — la decisión de blit en el Viewport es puramente geométrica — y su etiqueta prometía además un escalado hacia arriba, mientras que el paso real de Lanczos es en realidad un cálculo de antialiasing hacia abajo de una imagen sobremuestreada. Por eso la indicación en el Viewport ahora se llama „Sampling" en lugar de „Scaling" (Capítulo 4); en ningún lugar de la app se escala hacia arriba con MetalFX. El Perceptual Loss (I29), pese a pertenecer a este grupo, sí es un componente del entrenamiento — se activa durante el entrenamiento como término de pérdida adicional; se encuentra en la parte superior, con la línea explicativa „Multi-scale blur feature matching for structural similarity". Debajo viene el grupo Outdoor con cuatro interruptores — Sky Masking, Person Masking, Floater Cleanup y Reconstruct Sky Dome (I42–I44) —, opciones de entrenamiento contra floaters del cielo que antes estaban en la ventana de ajustes y ahora se encuentran aquí por proyecto. Le sigue la fila plegada „Advanced Densifier (Expert)", que lleva un triángulo de advertencia porque detrás hay controles que también pueden echar a perder un entrenamiento. Al final está el grupo „Runs automatically at the end of training" con Post-Training Compactification (I26) y el interruptor „Remove Needle/Disc Floaters".

I26Interruptor Post-Training Compactification

DÓNDE

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

TÉCNICO

Activa un pase de limpieza al final: al concluir las iteraciones de entrenamiento se eliminan los Gaussians con opacidad inferior a 0.01 (1 % de visibilidad). Esto reduce el tamaño del archivo típicamente a la mitad aproximadamente, sin que se note pérdida de calidad — porque estos Gaussians de todos modos no aportan nada visualmente. La Compactification se ejecuta como un pase de compactación en GPU y tarda, según la cantidad de Gaussians, desde fracciones de segundo hasta unos pocos segundos. No afecta el rendimiento del entrenamiento. Si este interruptor está apagado, también se exportan los Gaussians invisibles — algo relevante solo si necesitas ese formato para una etapa de entrenamiento posterior (Continue Training); de lo contrario es un desperdicio de memoria.

I29Regulador Perceptual Loss

DÓNDE

Inspector → Training → Perceptual Loss.

TÉCNICO

Regulador de 0.0 a 0.2 en pasos de 0.01, mostrado en 0.0 como „Off", en otro caso como „0.05", etc. Activa un término de pérdida adicional que compara el desenfoque gaussiano multiescala del renderizado con la imagen de referencia (ground truth) (3 escalas de desenfoque). Capta diferencias estructurales que L1+SSIM por sí solos no detectan. Valores entre 0.05 y 0.1 mejoran de forma visible las estructuras finas y cuestan solo poco tiempo de entrenamiento adicional — alrededor de un 5 % (pase adicional hacia adelante a través de los kernels de desenfoque). Por encima de 0.15 el entrenamiento se vuelve inestable y la calidad vuelve a bajar, porque este término de pérdida domina la optimización. Actúa durante el entrenamiento, no en el post-procesamiento — pese a su posición entre las filas de Enhancements al final de la sección Training, no se trata por tanto de una simple mejora aplicada después.

I42Sky Masking

DÓNDE

Inspector → Training (grupo Outdoor) → interruptor „Sky Masking". Se guarda por proyecto; valor predeterminado: desactivado.

TÉCNICO

Activa la segmentación de píxeles de cielo basada en Apple Vision antes del entrenamiento. Antes de iniciar el entrenamiento, para cada cámara de entrada se extrae la región de cielo mediante la máscara de primer plano de Apple Vision (cielo = fondo) y se asigna como máscara por píxel a cada cámara. Durante el entrenamiento, la contribución de pérdida por píxel se multiplica por el complemento de la máscara de cielo — los píxeles de cielo aportan 0 al gradiente, de modo que los Gaussians que se proyectan hacia el cielo no reciben señales de optimización y por tanto no se vuelven ni más „densos" ni más „brillantes". Reduce significativamente los floaters (grumos oscuros en el cielo) en escenas exteriores/de dron. Cuesta ~3 % de regresión en L1 en un entrenamiento clásico de 40K. Solo tiene sentido en escenas exteriores con un cielo claramente reconocible; en escenas de interior o con fondo blanco, la segmentación de cielo identifica regiones incorrectas y bloquea señales de pérdida válidas. El valor se guarda por proyecto (ya no de forma global en la app) y sigue al preset o al archivo de escena.

I43Floater Cleanup

DÓNDE

Inspector → Training (grupo Outdoor) → interruptor „Floater Cleanup" (subtítulo „Remove Gaussians outside all camera views"). Se guarda por proyecto; valor predeterminado: desactivado.

TÉCNICO

El interruptor controla dos efectos con condiciones distintas; ambos se derivan al inicio hacia la configuración local de la ejecución, no se escriben en la configuración guardada (de lo contrario quedarían fijados como un ajuste de una sola vez). (1) Frustum-Union-Cull al final del entrenamiento — se eliminan los Gaussians fuera de la unión de todos los frustums de cámara ("nunca observado" = "nunca restringido", y precisamente eso son la mayoría de los floaters). Esta parte no tiene ninguna condición de estrategia y se ejecuta igual en Classic, MCMC e Hybrid — por ella recibe su nombre el interruptor. (2) Dos pases adicionales de control de densidad a mitad de la ejecución — solo en Classic y solo a partir de 30 000 iteraciones, fijados en el 55 % y el 85 % de la duración de la ejecución (con 35–40K, por tanto, aproximadamente en 20K y 30K). Ambos pases buscan Gaussians con opacidad muy baja, tamaño en espacio de pantalla ínfimo y sin contribución a la pérdida, y los purgan. Efecto: ~5–15 % menos Gaussians al final, notablemente menos grumos oscuros en el cielo en escenas de dron/exteriores. Cuesta ~1–3 % de regresión en L1 en escenas de interior en primer plano, por lo que no está activado por defecto. El valor se guarda por proyecto y sigue al preset o al archivo de escena. Corrección respecto a ediciones anteriores: el interruptor ya no está limitado al densificador Classic y tampoco aparece en gris bajo MCMC/Hybrid — eso precisamente dejaba fuera a los usuarios de MCMC y Hybrid del cull que sí les resulta útil. En ejecuciones cortas (por ejemplo, P2 Preview 5K) simplemente se omite la parte de mitad de ejecución.

I44Reconstruct Sky Dome

DÓNDE

Inspector → Training (grupo Outdoor) → interruptor „Reconstruct Sky Dome". Se guarda por proyecto; valor predeterminado: desactivado.

TÉCNICO

Activa la proyección de cúpula de cielo (sky dome) antes del entrenamiento. Después de SfM y antes de iniciar el entrenamiento, para cada cámara de entrada se extrae de la imagen la máscara de cielo de Apple Vision compartida en S7, los píxeles de cielo se retro-proyectan mediante los parámetros intrínsecos de la cámara sobre una superficie esférica virtual (radio estándar 8× el radio de la escena). Sobre esta esfera se inicializan ~5000 nuevos Gaussians con valores de color promedio de los píxeles de cielo proyectados, una escala muy grande (1.0 en unidades de escena) y una opacidad inicial de 0.95. Estos 5000 Gaussians no son una máscara de cielo en el sentido clásico — se entrenan como todos los demás, pero se mantienen en una capa fina gracias a la alta opacidad inicial. Resultado: en vistas novedosas en 360° de escenas exteriores/de dron aparece color de cielo y estructuras de nubes reales en lugar de grumos oscuros tipo confeti. El valor se recuerda entre reinicios. Solo tiene sentido en escenas exteriores con al menos cobertura de cámara en 360°; en capturas de objetos puros sin vista al cielo no tiene ningún efecto. Estado: experimental, todavía falta una validación A/B más amplia sobre más conjuntos de datos exteriores.

Sección de métricas (I30–I37)

Recorte del grupo „Training Metrics” tras finalizar el entrenamiento — ocho líneas: 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 del grupo „Training Metrics" tras finalizar el entrenamiento — ocho líneas: 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

Mientras se ejecuta un entrenamiento, el grupo de métricas („Training Metrics", uno de los dos grupos plegables en la sección Progreso) muestra ocho valores en vivo del bucle de entrenamiento. Antes de iniciar un entrenamiento está vacío („Start training to see live metrics"). Todos los valores se actualizan cada ~30 iteraciones (frecuencia de actualización de las métricas en vivo). La sección es de solo lectura — ningún elemento es pulsable ni modificable. Para un análisis más profundo, consulta los registros de entrenamiento en formato JSONL en ~/Documents/RadianceKit/Logs/.

I30Iteration

DÓNDE

Inspector → Progreso → Training Metrics → Iteration. Solo lectura.

TÉCNICO

Muestra en el formato „4523 / 40000" — iteración actual sobre el total de iteraciones planificadas. Cuenta de forma sincronizada con el bucle de entrenamiento, que empuja los valores cada ~30 iter. El segundo número corresponde al valor de Max Iterations en el momento de inicio; ya no cambia aunque el usuario ajuste después el stepper — la ejecución en curso usa su propia copia de instantánea. Si la app añade iteraciones mediante el menú de entrenamiento (Continue Training +5K/+10K/+20K), el denominador aumenta.

I31Loss

DÓNDE

Inspector → Progreso → Training Metrics → Loss. Solo lectura.

TÉCNICO

Valor de coma flotante con seis decimales (p. ej. „0.024385"). Mide el Loss combinado L1+SSIM (la mezcla se controla con I21 SSIM Weight) más, opcionalmente, Perceptual Loss (I29) y otros regularizadores. La escala no es absoluta, sino dependiente de la escena — para la mayoría de comparaciones exige el mismo conjunto de datos. Valores finales típicos con buenas configuraciones: - Classic Quality 40K iters: 0.022–0.025 (Horse, Truck, Garden) - MCMC Full 200K iters: 0.024–0.028 - Dron exterior 30K: 0.030–0.060 (peor por condicionantes geométricos) - Apartamentos interiores: 0.018–0.025

Valores por encima de 0.10 tras 5K iteraciones apuntan a problemas de SfM (poses de cámara defectuosas) — cancela y vuelve a calcular el SfM.

I32Learning Rate

DÓNDE

Inspector → Progreso → Training Metrics → Learning Rate. Solo lectura.

TÉCNICO

Muestra en notación científica (p. ej. „1.60e-04"). Tasa de aprendizaje actual para los parámetros de posición (3DGS tiene seis tasas de aprendizaje independientes para posición, SH-DC, SH-Rest, opacidad, escala y rotación — aquí se muestra la LR de posición como valor representativo). Valor inicial por defecto 1.6e-4, que desciende mediante un decaimiento exponencial hasta ~1.6e-6 al final del entrenamiento. El decaimiento se puede ajustar mediante el campo de programación de LR en la configuración de entrenamiento (campo T en el cap. 6). Si la LR permanece inusualmente alta (p. ej. 1e-3 o más tras 10K iteraciones), podría indicar una configuración cargada incorrectamente.

I33SH Degree

DÓNDE

Inspector → Progreso → Training Metrics → SH Degree. Solo lectura.

TÉCNICO

Número entero 0-3. Grado de armónicos esféricos (Spherical Harmonics) para la representación del color. Comienza en 0 (solo el componente DC, es decir, color independiente de la dirección por Gaussian — una única constante RGB) y aumenta progresivamente hasta 3 a lo largo del entrenamiento. La programación estándar eleva el grado en 1 en las iteraciones 1000/2000/3000. SH-3 corresponde a 48 coeficientes de color por Gaussian (3 canales RGB × 16 funciones base SH). Un grado SH más alto = más reflexión dependiente de la dirección (las superficies brillantes se ven correctamente distintas desde diferentes ángulos), pero también más memoria y un entrenamiento más lento.

I34Gaussians

DÓNDE

Inspector → Progreso → Training Metrics → Gaussians. Solo lectura.

TÉCNICO

Número actual de Gaussians en el modelo, formateado con separador según configuración regional (p. ej. „524.318"). Crecimiento: - Classic: comienza con los puntos de inicialización de SfM (típicamente 50K-300K), crece mediante Clone/Split hasta poco antes de Densify Until, luego permanece estático hasta el final del entrenamiento (salvo poda) - MCMC: se añaden puntos de muestreo hasta el límite (cap) de MCMC, luego solo hay reubicación (relocation)

Valores finales saludables: - Classic Quality: 400K-700K (Horse 524K, Garden 800K) - MCMC Full: exactamente en el límite (por defecto 150K, con el multiplicador de Auto-Scale × número de SfM según la escena, 500K-1.5M)

Si en MCMC el número cae por debajo del 60% del límite → anomalía (indicador de colapso, señala regularizadores demasiado agresivos).

I35GPU Memory

DÓNDE

Inspector → Progreso → Training Metrics → GPU Memory. Solo lectura.

TÉCNICO

Estimación del consumo de memoria del búfer de Gaussians como número de Gaussians × 616 bytes (formateado en estilo de memoria). 616 bytes es el tamaño de un Gaussian completamente equipado (posición, escala, rotación, opacidad, coeficientes SH de grado 3, acumulador de gradiente). La visualización no incluye la sobrecarga del renderizador (búfer de tiles, búfer de ordenación, búfer backward) — el consumo real de memoria de GPU suele ser 2-3× superior a este valor. Con 500K Gaussians: mostrado ~290 MB, real ~700 MB. Con 1.5M Gaussians: mostrado ~880 MB, real ~2.5 GB. En un M3 Max con 64+ GB de memoria unificada no es crítico, en un M3 Pro con 18 GB ya es un límite.

I36Speed

DÓNDE

Inspector → Progreso → Training Metrics → Speed. Solo lectura.

TÉCNICO

Iteraciones por segundo con un decimal („24.3 it/s"). Calculado por el entrenador como media móvil sobre las últimas ~100 iteraciones. Valores típicos: - Ajuste preestablecido Quick (1K iters): 80-120 it/s (corto, sin estado estable) - Classic 20K @ 1.0 Render Scale (escena 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 (más lento por la reubicación) - Con 1M+ Gaussians y resolución completa: < 10 it/s

Una velocidad decreciente a lo largo del entrenamiento es normal — más Gaussians = más cómputo por iteración. Caídas repentinas (p. ej. de 30 → 5 it/s) apuntan a throttling térmico de la GPU o apps compitiendo por recursos.

I37Elapsed

DÓNDE

Inspector → Progreso → Training Metrics → Elapsed. Solo lectura.

TÉCNICO

Tiempo transcurrido en formato „4:23" (m:ss) o „1:23:45" (h:mm:ss). Cambio de formato a partir de 1 hora. Mide únicamente el tiempo puro de entrenamiento, no las fases previas (cálculo de SfM, importación de imágenes). Al pausar/reanudar el reloj sigue corriendo — es decir, es tiempo real (wall-clock), no tiempo de CPU.

Sección del gráfico de pérdida (I39–I41)

Crop der Gruppe „Loss History” nach abgeschlossenem Training — Current: 0.0075, rechts grün Min: 0.0051, blaue Kurve von etwa 0.14 steil herunter und danach ausgefranst absinkend bis 20K, Achse links 0.14 / 0.071 / 0.0051; darunter das orangefarbene Diagramm „Gaussian Count” mit Achse von 16K bis 9K und Endwert 9,660
Recorte del grupo „Loss History" tras finalizar el entrenamiento — Current: 0.0075, a la derecha en verde Min: 0.0051, curva azul que baja abruptamente desde aproximadamente 0.14 y luego desciende de forma irregular hasta 20K, eje izquierdo 0.14 / 0.071 / 0.0051; debajo el gráfico naranja „Gaussian Count" con eje de 16K a 9K y valor final 9.660

El grupo del gráfico de pérdida („Loss History", el segundo grupo desplegable en la sección Progreso) visualiza la evolución del entrenamiento a lo largo del tiempo. Consta de dos gráficos: uno de curva de pérdida (grande, arriba, azul) y uno de conteo de gaussianas (más pequeño, abajo, naranja). Ambos se construyen en vivo durante el entrenamiento y persisten hasta el siguiente inicio de entrenamiento. Antes del primer entrenamiento, el área está vacía („Loss curve will appear during training"). Los gráficos son dibujos puros de SwiftUI-Path (sin el framework Swift-Charts), para que rendericen con fluidez incluso con más de 100K puntos.

I39Current Loss (indicador)

DÓNDE

Inspector → Progreso → Loss History → área de etiqueta izquierda „Current: 0.0075". Solo lectura.

TÉCNICO

Valor float del último punto de muestra de pérdida, formateado con cuatro decimales. Idéntico a I31 (Loss en la sección de Métricas), solo que aquí formateado de forma más compacta. La fuente es el historial de pérdida — una lista que recibe una entrada cada ~30 iteraciones. Solo se incluyen valores finitos en la lista — NaN/Infinity (muy raro, en caso de un bug de explosión de gradiente) se filtran.

I40Min Loss (indicador)

DÓNDE

Inspector → Progreso → Loss History → área de etiqueta derecha „Min: 0.0051" (verde). Solo lectura.

TÉCNICO

Mínimo de todos los valores de pérdida vistos jamás en la ejecución de entrenamiento actual. Se recalcula en vivo a partir del historial de pérdida — sin persistencia separada. Se muestra con texto verde, porque „Min" = „mejor hasta ahora". La línea verde discontinua en el borde inferior del gráfico marca esta posición Y visualmente. En sesiones de continuación de entrenamiento, el seguimiento del mínimo se reinicia — el historial anterior se reemplaza en la interfaz por el nuevo (no se anexa). Si el entrenamiento actual va peor que el anterior, el indicador Min puede ser entonces mayor que el resultado final anterior.

I41Gráfico de conteo de gaussianas

DÓNDE

Inspector → Progreso → Loss History → segundo gráfico debajo (naranja). Solo lectura.

TÉCNICO

Gráfico de líneas de la cantidad de gaussianas a lo largo de las iteraciones de entrenamiento. Fuente: el historial de conteo de gaussianas (lista de pares (Iter, Count), rellenada por el entrenador cada ~30 iteraciones). Escala Y dinámica entre el mínimo y el máximo del historial. Con la estrategia Classic, la curva suele verse así: subida constante hasta Densify Until, luego plana (con pequeñas fluctuaciones de pruning). Con MCMC: subida pronunciada hasta el cap, luego línea horizontal (Relocation mantiene el número constante). Una caída justo al final es normal — en la imagen de arriba la curva baja de unos 16K a 9.660, porque los pasos de limpieza entran en acción tras la última iteración (I26). Solo es alarmante una caída en medio de la ejecución: entonces la densificación está podando de forma demasiado agresiva — indicio de valores predeterminados incorrectos o de un bug de colapso de MCMC conocido (tema del hotfix de v1.4.4).

¿Cómo se lee la curva de pérdida?

El gráfico de pérdida es la herramienta de diagnóstico más importante del Inspector — ningún otro indicador muestra de forma tan directa si el entrenamiento avanza de manera útil o está estancado. La forma saludable típica es una caída rápida en las primeras 1000-3000 iteraciones (de ~0.15 a ~0.05), seguida de una caída lenta y constante hasta el final del entrenamiento (hasta 0.020-0.030). En escala logarítmica, la curva se ve como una diagonal suave.

¿Qué significa una meseta en la pérdida? Si la curva se mantiene plana durante varios miles de iteraciones, hay dos posibles interpretaciones: (a) El entrenamiento ha „convergido" — la pérdida ya no puede bajar significativamente, porque el modelo es tan bueno como puede serlo con los datos y ajustes dados. Esto es deseable; está „terminado". (b) El entrenamiento está „atascado" — la pérdida en realidad todavía podría bajar, pero la optimización se estanca (mínimo local, tasa de aprendizaje demasiado baja, densificación desactivada). Para distinguirlos: si el valor de pérdida está en un rango típicamente bueno (0.020-0.030 en interiores/objetos, 0.040-0.060 en exteriores) y la curva está plana desde hace 5K iteraciones, ha convergido. Si el valor es claramente más alto que en escenas comparables (por ejemplo, 0.08), está atascado.

Cuidado, meseta de gaussianas ≠ meseta de pérdida. Una meseta en la cantidad de gaussianas no significa „el entrenamiento ha terminado". Solo significa que la densificación ha dejado de añadir puntos nuevos — ya sea porque se alcanzó (Classic) o porque el cap de MCMC está lleno. El entrenamiento continúa después, refinando solo los puntos existentes. La señal real de „terminado" la lees en la curva de pérdida y en el indicador de iteración (I30), no aquí.

Regla general para interrumpir: Si la curva de pérdida está por encima de 0.08 después de más de 5000 iteraciones y apenas baja, es muy probable que la reconstrucción SfM esté mal. Interrumpe el entrenamiento, revisa en el capítulo 9 si el backend SfM elegido se ajusta a la escena, cambia a COLMAP/Native si es necesario, y luego reinicia. Es mejor invertir 10 minutos en un mejor SfM que 2 horas de entrenamiento con una alineación de cámara deficiente.

¿Cuándo recurrir al Inspector?

Referencia rápida: ¿Qué sección + qué controles para qué caso de uso típico?

Tarea habitualSecciónIDs de control
Desaturar los colores del splat terminadoLookL1 (Saturation)
Redondear splats con forma de aguja/confetiLookL2 (Splat length)
Rellenar una nube con huecos / agrandar splatsLookL3 (Splat size)
Ocultar el "confeti lejano" en órbitasLookL4 (Fade far region)
Descartar ajustes de lookLookL5 (Reset finishing)
Cargar una configuración predefinidaPresetsI7 (clic en la fila)
Guardar tu propia configuraciónPresetsI1 → I2 → I4
Compartir la configuración con colegasPresetsI5 (Export) o I6 (Import)
Cambiar el backend SfM (p. ej. porque Apple-PG resulta demasiado inestable)Cámaras y capturaI12 (ver cap. 9)
Procesar fotogramas de vídeo sin distancia focal EXIFCámaras y capturaI13 (FOV Override)
Rendimiento de COLMAP: GLOMAP en lugar de clásicoCámaras y capturaI14 — solo en builds de desarrollador, en el build de la App Store falta COLMAP como backend
Cambiar de Classic a MCMCConfiguración de entrenamientoI15
Dejar que el entrenamiento se ejecute más tiempoConfiguración de entrenamientoI18 (Max Iter) + I20 (Densify Until) — acoplados mediante I19
Reducir a la mitad el tiempo de GPUConfiguración de entrenamientoI22 (Render Scale al 50%)
Calidad de entrenamiento +6% (MCMC)Configuración de entrenamientoI16 (MCMC Quality)
Escena exterior con muchos puntos SfMConfiguración de entrenamientoI17 (Auto-scale by scene)
Configurar / cambiar la ruta de COLMAPCámaras y capturaI23 / I24 / I25 — solo en builds de desarrollador
Reducir el tamaño de los archivos exportadosTrainingI26 (dejar siempre activado)
Ese último toque de detalle en estructuras finasTrainingI29 (Perceptual Loss 0.05-0.1)
Supervisar el entrenamientoFortschritt ▸ Training MetricsI30 (Progreso), I36 (Ritmo) — el tiempo restante aparece en la franja de transporte debajo del Viewport
Evaluar la calidad de forma tempranaFortschritt ▸ Training MetricsI31 (Loss < 0.05 tras 5K = bien)
Sospecha de un problema de SfMFortschritt (ambos grupos)I31 + I39 (Loss > 0.08 tras 5K → repetir SfM)
Distinguir convergencia de estancamientoFortschritt ▸ Loss HistoryI39 + I40 (leer la meseta de loss)
Detectar un problema de densificaciónFortschritt ▸ Loss HistoryI41 (la curva gaussiana cae → bug)