Capítulo 4 — Ventanas auxiliares
Además de la ventana principal (viewport 3D más Inspector), RadianceKit gestiona otras seis ventanas, todas ellas accesibles desde el menú de ayuda. El menú tiene ocho entradas, de arriba abajo: User Guide (⌘?), Keyboard Shortcuts (⌘/), Open Training Logs… (⇧⌘L), Open Exports Folder…, Manage Storage…, Pareto Dashboard… (⇧⌘D), Holdout Analysis… (⇧⌘H), BayesOpt Console… (⇧⌘B). Las dos entradas «Open …» no abren ninguna ventana de la app, sino el Finder; por eso no se tratan más a fondo aquí. Tres de las ventanas — Dashboard, Holdout, BayesOpt — son herramientas de análisis independientes: funcionan al margen de la ventana principal y leen o escriben archivos JSON en el disco. Cada una de estas tres ventanas se abre desde el menú de ayuda, y a continuación eliges tú mismo el archivo o la carpeta que quieres analizar — mediante «Open Reports Folder…», «Open transforms.json…» o el botón «Start». Estas tres ventanas son las únicas que no están traducidas: sus botones, controles deslizantes y encabezados de columna aparecen en inglés en cualquier versión de idioma. Las etiquetas mencionadas aquí son, por tanto, exactamente las que encontrarás en pantalla.
Las tres ventanas sencillas (User Guide, Keyboard Shortcuts, Manage Storage) y las dos entradas de menú de carpetas (Open Training Logs / Open Exports Folder) reciben una breve entrada por cada control. Las tres ventanas de análisis están documentadas con más detalle — cada una con una introducción que explica qué ves en la ventana, cuándo conviene abrirla y cómo interpretar la imagen mostrada.
Al final del capítulo hay un apartado de referencia cruzada con el Inspector de la ventana principal: qué puedes deducir de forma útil en el gráfico de pérdida en vivo (Live-Loss-Chart) y en el indicador de recuento de gaussianas durante un entrenamiento en curso.
Guía del usuario (W1–W4)

Qué es: Una ventana de ayuda integrada que renderiza el guide_<idioma>.md incluido con la app. El idioma se deriva de los Settings (pestaña General → Language) o, si allí figura "System", de las preferencias de idioma de macOS. El diseño es clásico: a la izquierda una barra lateral con todos los encabezados, a la derecha el texto corrido.
Cuando necesites un recordatorio rápido de un punto concreto — es decir, como sustituto de una chuleta. La referencia detallada es este manual; la ventana de ayuda integrada es la versión corta para consultas rápidas. Se actualiza con cada lanzamiento de la app, pero se mantiene más superficial en contenido.
W1NavigationSplitView (barra lateral + detalle)
DÓNDE
Help → User Guide (⌘?).
TÉCNICO
Diseño de dos columnas con una barra lateral estrecha (mínimo 180 pt de ancho) para el árbol de contenido y un área de detalle desplazable para el contenido Markdown propiamente dicho. La ventana tiene un tamaño mínimo de 700 × 500 pt. Al abrirse por primera vez, la ventana carga el guide_<lang>.md correspondiente desde el bundle de la app (con guide_en.md como alternativa), lo analiza en registros de bloque (encabezados H1–H4, párrafos, listas, tablas, líneas separadoras) y extrae por separado la estructura de encabezados para la barra lateral. El formato en línea (negrita, cursiva, fragmentos de código) se renderiza mediante el motor Markdown integrado. El idioma se lee de los ajustes de la app, con el caso especial del chino (zh-Hans) y el portugués de Brasil (pt-BR), que se conservan como etiquetas de configuración regional completas porque estas variantes se diferencian de zh y pt respectivamente.
W2List (barra lateral de encabezados)
DÓNDE
Columna izquierda en la ventana de la guía del usuario.
TÉCNICO
Lista de todos los encabezados H2 y H3 del documento Markdown actual. Las entradas H2 aparecen sin sangría con peso de fuente medio, las entradas H3 con 16 pt de sangría a la izquierda y un estilo de primer plano reducido. Ningún otro nivel — ni H1 ni H4 en adelante — aparece en la barra lateral, porque de lo contrario la volverían confusa. Los IDs de anclaje se generan a partir del texto del encabezado mediante slugificación (minúsculas + espacios convertidos en guiones + filtrado de letras/números/guiones — el mismo algoritmo que usa GitHub para sus anclas de Markdown, de modo que incluso las URL externas a la documentación podrían apuntar potencialmente al mismo anclaje). La lista utiliza el estilo nativo de macOS.
W3Button (salto a anclaje desde encabezado)
DÓNDE
Un botón por cada fila de la barra lateral.
TÉCNICO
Cada entrada de la barra lateral es un botón que establece el anclaje actual, pero que visualmente parece un elemento de lista. Una variable observadora dispara entonces el salto de desplazamiento hasta el anclaje correspondiente con una animación suave de 0,3 s. Tras el salto, el valor del anclaje se restablece para que el siguiente clic sobre el mismo anclaje vuelva a dispararse (de lo contrario el observador no se activaría de nuevo, porque el valor no habría cambiado).
W4ScrollView (contenido de detalle)
DÓNDE
Columna derecha.
TÉCNICO
Área de contenido desplazable, apilada verticalmente, con renderizado perezoso (lazy), porque las guías más largas pueden superar fácilmente los 200 bloques de Markdown — una variante no perezosa instanciaría todos a la vez. Cada bloque recibe su propio ID, ya sea el anclaje del encabezado (que recibe cada encabezado, independientemente del nivel) o un marcador de posición de índice. El ancho máximo es de 720 pt, con relleno (padding) de 32 horizontal / 24 vertical, de modo que las líneas largas conserven un diseño bien legible. Las tablas se renderizan celda por celda con pilas horizontales y líneas separadoras; el código en línea mediante el motor Markdown integrado. Los bloques de código reales se tratan actualmente como párrafo — una limitación conocida de la ventana de ayuda.
Atajos de Teclado (W5–W6)

Lista de referencia estática en cinco secciones. Navigation: Mouse Drag (Orbit/Fly), Shift+Drag/Right-Drag (Pan), Scroll (Zoom), WASD (movimiento Fly-Through), Q/E (Up/Down), F (Toggle Orbit/Fly), Double-click (Re-center), Cmd+Scroll (ajuste de FoV). Views: R (Reset Camera), T (Auto-Rotation), P (Camera Playback), B (Background-Cycle), 0–9 (saltar a Training-Cam 1=10%/5=50%/0=último), Left/Right Arrow (Prev/Next Cam). Capture: S (Screenshot to Desktop), V (Turntable-Video), C (Copy Camera Info). Editor: Tab (modo edición), Click/Drag (Paint-Select), Option+Click (Deselect), X / Delete (eliminar selección), Cmd-Z (deshacer última eliminación), [ / ] (reducir/aumentar tamaño de pincel), Esc (deseleccionar). Training: Option+Space (pausar/reanudar entrenamiento), Cmd+E (exportar escena). Aquí no hay nada más — Start, Cancel y las extensiones las encuentras en el menú Training (Capítulo 1).
Qué es: Una sencilla vista general estática de todos los atajos de teclado — Navigation, Views, Capture, Editor, Training. El contenido está integrado de forma fija y no se carga desde un archivo.
Cuando busques la forma más rápida de hacer algo en el Viewport. WASD-Fly-Through, R para Camera-Reset, B para el Background-Cycling — todo está aquí.
W5ScrollView (área de contenido)
DÓNDE
Help → Keyboard Shortcuts (⌘/).
TÉCNICO
Un área de desplazamiento simple con una lista vertical dentro. Padding de 20 alrededor, sin árbol de navegación lateral (la lista es lo bastante corta). El contenido está agrupado en cinco secciones (Navigation, Views, Capture, Editor, Training). Por cada combinación de teclas hay una fila con texto traducible en ambas columnas. La columna izquierda (código de tecla) está fijada a un ancho de 180 pt, de modo que las descripciones a la derecha queden alineadas verticalmente. Sin interacción salvo el desplazamiento — hacer clic en una fila no desencadena nada, los atajos de teclado son modificadores de teclado reales en el menú y en el Viewport.
W6VStack (secciones de atajos)
DÓNDE
Dentro del ScrollView.
TÉCNICO
Secciones apiladas alineadas a la izquierda con 16 pt de separación. Dentro de las cinco secciones hay respectivamente un encabezado + una secuencia de filas. Los encabezados usan un estilo secundario de subtítulo — deliberadamente sin formato de título, porque las secciones no necesitan ser navegables. El contenido es deliberadamente plano (sin disclosure, sin búsqueda, sin filtro), para que el componente funcione sin cambios en cualquier versión de macOS y el archivo siga siendo legible.
Gestionar almacenamiento (W7–W12)

Vista de tabla de todos los archivos gestionados por RadianceKit. El encabezado cuenta 1.356 elementos, 55,1 GB en total. Barra de herramientas arriba: „Show in Finder" + „Refresh". Cada fila: icono de exportación, nombre de archivo (p. ej. training_20260718T194416Z.ply), fecha de exportación, tamaño (aquí varía entre 7,8 MB y 2,24 GB), icono de lupa (Reveal) e icono de papelera (Move to Trash). El orden es primero por categoría y dentro de una categoría por fecha, la más reciente arriba. En esta captura predominan las exportaciones PLY, porque en este almacenamiento se guardaron sobre todo resultados de entrenamiento.
Qué es: Una vista general del uso del disco para todo lo que RadianceKit guarda en ~/Documents/RadianceKit/ — registros, exportaciones, escenas, paquetes de captura (del acompañante para iOS), importaciones (copias de staging de las imágenes de entrada). Por cada entrada hay un tamaño en bytes y dos botones: „mostrar en el Finder" y „mover a la papelera". NO es una limpieza automática — la app no elimina nada por sí misma; tú decides por cada entrada. Esta ventana está traducida: en alemán se llama „Speicher verwalten", los dos botones del encabezado se llaman „Im Finder anzeigen" y „Aktualisieren", los botones de fila „Im Finder anzeigen" y „In den Papierkorb legen". Los nombres en inglés en las entradas de abajo son las designaciones de la versión en inglés.
Cuando el disco se llena. Sobre todo los registros se acumulan (un JSONL por cada intento de entrenamiento, más el _qualityMetrics.json); las exportaciones también, por supuesto (PLY es 100% datos crudos, uno por exportación). También es útil después de un fallo, cuando el directorio de staging de importaciones todavía tiene copias antiguas de las imágenes de entrada por ahí.
W7Botón „Show in Finder"
DÓNDE
Encabezado, arriba a la derecha en la ventana del navegador de almacenamiento.
TÉCNICO
Abre la carpeta de datos de RadianceKit en el Finder — exactamente el directorio cuyo contenido lista esta ventana. Así ves la estructura de carpetas (Logs, Exports, Scenes, Captures, Imports) directamente y también puedes mover o copiar los archivos con el propio Finder. La acción abre una nueva ventana del Finder; la lista de la ventana no cambia con ello — para eso está „Refresh" (W8).
W8Botón „Refresh"
DÓNDE
Encabezado, junto al botón del Finder.
TÉCNICO
Dispara un escaneo en segundo plano que se ejecuta en una tarea asíncrona iniciada por el usuario, para que el escaneo de árboles de directorios grandes no bloquee la interfaz. El recorrido en sí pasa por cada subcarpeta conocida (Logs, Exports, Scenes, Captures, Imports) y genera una entrada de almacenamiento por cada hijo directo. Para cada entrada se determina el tamaño recursivo — preferiblemente el consumo real de disco (incluyendo el uso compartido de hardlinks de APFS) con reserva en el tamaño lógico del archivo.
W9List (entradas de almacenamiento)
DÓNDE
Contenido principal debajo del encabezado.
TÉCNICO
Lista con este diseño por fila: icono SF Symbol específico de la categoría (documento para Logs, flecha hacia arriba para Exports, cubo para Scenes, iPhone para paquetes de captura, bandeja para Imports), nombre + subtítulo (etiqueta de tipo + fecha de modificación formateada), contador de bytes a la derecha (alineado a la derecha, monoespaciado), botón Reveal (icono de lupa), botón Trash (papelera). Orden: primero por tipo (Scenes primero, luego Exports, Logs, Captures, Imports, Other), en segundo lugar por fecha de modificación descendente (la más reciente arriba). Si el escaneo todavía está en curso, en ese lugar se muestra en su lugar un progreso „Scanning…". Si no se encontró nada, se muestra un estado vacío con icono de bandeja.
W10Botón de fila „Reveal in Finder"
DÓNDE
Por fila, icono de lupa a la derecha.
TÉCNICO
Abre el Finder y selecciona el elemento específico (archivo o carpeta). Diferencia con W7: W7 abre el directorio raíz; W10 marca exactamente esa única entrada. Flujo de trabajo práctico: identifica una entrada grande, haz clic en la lupa, luego cópiala, por ejemplo, a un volumen externo.
W11Botón de fila „Move to Trash"
DÓNDE
Por fila, icono de papelera a la derecha, junto a la lupa.
TÉCNICO
Desencadena el cuadro de diálogo de confirmación (W12). Solo después de confirmar se ejecuta la operación estándar de macOS „mover a la papelera" (es decir, reversible, sin eliminación directa). Tras el traslado exitoso a la papelera, la entrada se elimina de la lista y se actualiza el contador total de bytes. En caso de error se muestra un diálogo de error modal.
W12ConfirmationDialog (confirmación de eliminación)
DÓNDE
Se activa mediante W11, se muestra como una hoja (sheet) de macOS.
TÉCNICO
Diálogo de confirmación estándar con título dinámico „Delete <name>?" y una línea de mensaje que indica explícitamente que la entrada irá a la papelera y podrá restaurarse desde allí (hasta que se vacíe la papelera). Dos botones: „Move to Trash" como acción destructiva (mostrada en rojo) y „Cancel" con vinculación automática a la tecla Esc. El diálogo es no modal en el sentido de que solo bloquea esta ventana, no toda la app — eso es el estándar de macOS para eliminaciones reversibles.
Panel Pareto (W13–W22)

Estado vacío (tras la primera apertura) — Empty-State con llamada a la acción „Open Reports Folder…". Los puntos de datos aparecen en cuanto se cargan informes de entrenamiento, ver siguiente captura.

La barra de herramientas superior muestra a la derecha „384 reports of 384" (todos los informes de la carpeta seleccionada se analizaron correctamente); a la izquierda del botón „Open Reports Folder…" aparece el nombre de la carpeta cargada, aquí „Benchmarks". Ejes: el selector del eje X está en Gaussians, el selector del eje Y en PSNR (dB), junto a ellos la casilla activa „Show Pareto Front". Leyenda arriba a la izquierda: azul = mcmc, verde = classic, naranja = hybrid, además la forma del símbolo para Mip-Splatting On/Off. La línea discontinua del frente de Pareto discurre a lo largo de los mejores valores de PSNR alcanzados y se estabiliza en torno a PSNR≈30 dB a partir de aprox. 300K Gaussians; la nube de puntos llega hasta más de 1,5 millones de Gaussians. Chips de filtro a la derecha: más de 30 escenas (entre otras bicycle, bonsai, family, flowers, garden, kitchen, stump, truck así como las series de pruebas numeradas 360, drone y photo), 3 Strategies (classic, hybrid, mcmc), 3 opciones de Mip-Splatting (All, On, Off) con „All" activo. Actualmente no hay ningún filtro de Scene o Strategy aplicado, de ahí el denso cúmulo de puntos.
Qué es: Una herramienta de comparación multi-ejecución. En el pasado entrenaste varias escenas o la misma escena con distintos Presets — de un análisis de benchmark surge, por cada entrenamiento, un archivo de informe JSON que contiene, entre otras cosas, PSNR final, SSIM, LPIPS, cantidad de Gaussians y tiempo real de ejecución. No hay un interruptor para este análisis en la interfaz; el panel evalúa lo que ya existe como informe en la carpeta seleccionada. Lee una carpeta entera de estos informes a la vez y los representa como un diagrama de dispersión 2D con ejes seleccionables. Además, se dibuja el frente de Pareto (el conjunto de puntos no dominados) como una línea discontinua.
Después de haber generado al menos tres o cuatro informes de entrenamiento. Con menos puntos la línea de frontera no es significativa. Caso de uso típico: intentaste reconstruir una escena exterior y probaste sucesivamente P3 Balanced (Classic), P4 Quality (Classic), P8 Quality (MCMC) y P9 Drone / Aerial — ahora quieres saber qué configuración ofrece el mejor PSNR por segundo de tiempo de entrenamiento o cuál necesita menos Gaussians para un PSNR dado.
Ambos ejes se pueden elegir libremente (eje X: Gaussians, tiempo de entrenamiento, PSNR, SSIM, LPIPS, …; el eje Y igual). El cálculo del frente de Pareto sabe, para cada métrica, si „menor = mejor" (LPIPS, Gaussians, Training Time, BRISQUE) o „mayor = mejor" (PSNR, SSIM, FSIM, MS-SSIM) — por lo tanto, la línea discurre, según la elección de ejes, de abajo a la izquierda hacia arriba a la derecha o de arriba a la izquierda hacia abajo a la derecha, siempre a lo largo de la mejor combinación alcanzada. Un punto es óptimo en el sentido de Pareto si NINGÚN otro punto es al menos igual de bueno en AMBAS dimensiones (es decir, ningún otro lo domina). Los puntos óptimos de Pareto están sobre la línea, otros puntos a la derecha/por encima (según la orientación de los ejes) de ella. Los puntos SOBRE la línea son los candidatos reales a „mejor Preset"; los puntos MUY alejados de la línea son tiempo de entrenamiento desperdiciado.
Puedes limitar la selección a una escena determinada (por ejemplo, si solo quieres comparar ejecuciones de exterior), a una estrategia determinada (classic, hybrid o mcmc), o a Mip-Splatting activado/desactivado (Mip-Splatting es un ajuste opcional para usuarios avanzados, por eso vale la pena la comparación directa).
Tienes tres informes para la escena „truck" en una carpeta de informes: Run A (P4 Quality (Classic), 524K Gs, 105 s, PSNR 23.4), Run B (P8 Quality (MCMC), 150K Gs, 693 s, PSNR 24.6), Run C (P5 Ultra Detail, 1.25M Gs, 312 s, PSNR 25.8). Ajusta el eje X a Training Time, el eje Y a PSNR. Run B queda arriba a la derecha, Run C aún más arriba a la derecha, Run A abajo a la izquierda. El frente de Pareto conecta A y C — ambos no dominados. Run B está „perdido" (C es mejor en Time Y PSNR). Conclusión: para „truck" no vale la pena el camino MCMC; o bien rápido+aceptable (A) o largo+muy bueno (C). Guarda la configuración de C como Preset propio (Inspector → I1 Save Preset).
Siguiente acción: Guardar la mejor configuración como Preset. En concreto: observa los puntos de Pareto (al pasar el ratón se muestra PSNR/SSIM/LPIPS/Gs/Time en el tooltip), decide cuál te conviene más según el trade-off tiempo-vs-calidad, abre el informe correspondiente (el nombre de archivo contiene la marca de tiempo de la ejecución), copia su configuración de entrenamiento en una nueva ejecución o guárdala como Preset a través del Inspector tras la siguiente sesión de entrenamiento.
W13Botón „Open Reports Folder…"
DÓNDE
Barra de herramientas, arriba a la izquierda.
TÉCNICO
Abre un diálogo de selección de carpeta con la solicitud „Select a folder containing benchmark .json reports". Tras confirmar, se ejecuta una tarea en segundo plano que analiza secuencialmente todos los archivos .json de la carpeta. Los informes defectuosos (JSON dañado, esquema incorrecto) se recopilan y se muestran abajo en la barra lateral como „N file failed to parse" — sin bloqueo. Si se produce un segundo clic mientras una primera carga aún está en curso, la tarea anterior se cancela, de modo que no se escriben dos resultados a la vez en el estado.
La carpeta seleccionada no se recuerda de forma permanente: tras abrir la ventana mediante Ayuda → Pareto Dashboard… (⇧⌘D) debes volver a seleccionarla aquí. El nombre de la carpeta cargada aparece después a la derecha del botón.
W14Selector „X-Axis"
DÓNDE
Encima del gráfico, a la izquierda.
TÉCNICO
Selector de menú con todos los ejes de métricas disponibles del módulo del panel (PSNR, SSIM, LPIPS, cantidad de Gaussians, tiempo de entrenamiento, etc.). El valor predeterminado es la cantidad de Gaussians. Al cambiar, el punto actualmente destacado se restablece, porque una posición previamente resaltada ya no tiene sentido en el antiguo sistema de coordenadas tras el cambio de eje. El selector está limitado al ancho del contenido para que no se extienda por todo el ancho.
W15Selector „Y-Axis"
DÓNDE
Encima del gráfico, junto a X-Axis.
TÉCNICO
Idéntico a W14, salvo que el valor predeterminado es PSNR. La elección de eje se guarda de forma independiente, así que el usuario también puede elegir combinaciones sin sentido (X=PSNR, Y=PSNR — proyectaría todos los puntos sobre una diagonal). Sin embargo, estas combinaciones no se bloquean; es una decisión consciente, porque una comparación „SSIM vs PSNR" puede resultar interesante para ver cuán consistentes se comportan las métricas.
W16Interruptor „Show Pareto Front"
DÓNDE
A la derecha de los selectores de eje.
TÉCNICO
Una casilla de verificación, activada por defecto. El frente de Pareto se superpone al gráfico, además de la nube de puntos, como una línea — discontinua (patrón de trazo 4–4), gris semitransparente, grosor de línea 1,5 pt. Atención: En la versión distribuida, la casilla no afecta al gráfico — la línea del frente siempre se dibuja, esté marcada o no. El frente se recalcula en cada cambio de eje y tras cada cambio de filtro.
W17Chips de filtro „Scene"
DÓNDE
Barra lateral derecha en la ventana del panel.
TÉCNICO
Chips de filtro para cada escena presente en los informes cargados. Diseño de flujo propio que reordena automáticamente los chips en varias líneas en cuanto se agota el ancho disponible. Los chips activos reciben el fondo de acento, los inactivos un fondo de material estándar neutro. Es posible la selección múltiple (semántica de conjunto); si no hay ningún chip seleccionado, se consideran „permitidas" todas las escenas — es decir, la lógica del conjunto es „selección vacía = todo", no „selección vacía = nada".
W18Chips de filtro „Strategy"
DÓNDE
Debajo del filtro de Scene en la barra lateral.
TÉCNICO
Igual que W17, pero para las estrategias de entrenamiento — típicamente los tres valores „classic", „hybrid" y „mcmc", derivados del campo Strategy de los JSON de informes de benchmark. Útil si tienes informes de varias estrategias mezclados y solo quieres ver un tipo (por ejemplo, „mostrar solo ejecuciones MCMC, porque ya excluí Classic").
W19Chips de filtro „Mip-Splatting"
DÓNDE
Debajo del filtro de Strategy en la barra lateral.
TÉCNICO
Filtro de tres valores (en lugar de un conjunto como W17/W18): „All" / „On" / „Off". Motivo: Mip-Splatting es una extensión multiescala que ayuda o no según la escena — por eso sigue siendo un ajuste que se activa de forma consciente y no un valor predeterminado. Cuando haces comparaciones Mip-on/off, a menudo quieres poder separar con mucha precisión. De ahí el filtro ternario dedicado con los estados „dejar pasar todo", „solo Mip activado", „solo Mip desactivado". La sección de la barra lateral aparece en cuanto el conjunto cargado contiene informes en absoluto — es decir, prácticamente siempre; solo desaparece si no se ha cargado nada.
W20ChipButton (interruptor de filtro, all/on/off)
DÓNDE
Componente auxiliar, se usa en W17/W18/W19.
TÉCNICO
Envoltorio de botón minimalista. Contenido: texto de etiqueta con tamaño de fuente Caption y relleno de 10 horizontal / 5 vertical. Fondo condicional: si está activo → color de acento de la app con texto blanco; si no, fondo de material estándar neutro con el color de texto normal (se adapta a la apariencia clara y oscura). La forma es una cápsula (forma de píldora). Estilo de botón plano, para que el material de la cápsula no quede tapado por un borde del sistema.
W21Gráfico (dispersión de Pareto)
DÓNDE
Área central del panel.
TÉCNICO
Diagrama de Swift Charts con dos capas: 1. un punto por informe — posición según las métricas X e Y elegidas, color según Strategy, símbolo según el estado de Mip. Tamaño de símbolo normal 80, resaltado 200 (cuando el ID corresponde al informe actualmente destacado por el cursor). 2. una línea para el frente de Pareto (ver W16 — siempre se dibuja). Además, el punto sobre el que está el cursor muestra el nombre de la escena en una pequeña cápsula encima.
Superposición del gráfico: un rectángulo transparente registra el movimiento del ratón; en cada fotograma se determina la posición de punto euclidianamente más cercana en el marco del gráfico y se actualiza el informe destacado si la distancia es inferior a 24 px (si no, se restablece). Así obtienes el tooltip sin hacer clic — basta con pasar el cursor.
W22Tooltip (detalle al pasar el cursor)
DÓNDE
Debajo del gráfico, se muestra al pasar el cursor.
TÉCNICO
Pila horizontal: nombre de la escena (Headline), etiqueta de Strategy (Caption), línea divisoria, luego métricas de PSNR/SSIM/LPIPS/Gs/Time cada una en un pequeño grupo vertical (etiqueta + valor monoespaciado). Si Mip estaba activado, además una etiqueta de cápsula „Mip" en color de acento. Fondo con desenfoque semitransparente, rectángulo redondeado con radio de 8 pt. Solo se muestra cuando el cursor está realmente sobre un punto. Desaparece automáticamente al salir.
Análisis de Holdout (W23–W29)

Estado vacío con Empty-State y llamada a la acción „Open transforms.json…". Acepta el formato NeRF-Studio e Instant-NGP. Los marcadores de cámara aparecen en cuanto se ha cargado un transforms.json — ver la siguiente imagen.

El encabezado muestra el archivo cargado (transforms.json) y el conteo de cámaras („86 cameras"). Barra lateral izquierda: selector de estrategia con dos opciones — Angular (longitudinal) activa (ordena las cámaras según su ángulo de longitud alrededor de la órbita y las distribuye luego de forma rotatoria entre los folds) frente a Linear (round-robin) (la misma distribución rotatoria, pero según el orden de las imágenes en lugar del ángulo de visión). El deslizador de k-folds está en 5, el selector de fold de prueba en Fold 1. El botón de exportación genera un fold-assignment.json para su uso posterior en herramientas de evaluación externas. Panel central: proyección 3D en globo de las 86 cámaras, distribuidas por toda la esfera — puntos verdes = entrenamiento, puntos rojos = fold de prueba actual (Fold 1 con 18 cámaras). Barra lateral derecha (Angular Correlation): por fold el número de cámaras + Mean Nearest Angle (Fold 1: 18 cámaras / 8.5°, Fold 2: 17 / 6.1°, Fold 3: 17 / 6.2°, Fold 4: 17 / 6.7°, Fold 5: 17 / 6.4°) — un valor menor significa que cada cámara de prueba tiene una cámara de entrenamiento cercana, y que la prueba es, por tanto, más fácil.
Qué es: Un visualizador 3D de la disposición de tus cámaras con lógica de validación cruzada. Cargas un transforms.json (el formato estándar de Nerfstudio / Instant-NGP para las poses de cámara), la app lee todas las cámaras, proyecta sus direcciones de visión sobre una esfera unitaria y las muestra como pequeños marcadores esféricos sobre un globo virtual. Luego divide las cámaras en k folds (según la estrategia elegida: angular o lineal), marca en verde la parte de entrenamiento y en rojo la parte de prueba (holdout), y calcula por cada fold una puntuación de correlación angular que te indica cuán lejos está el fold de prueba, en el espacio de ángulos de visión, del fold de entrenamiento.
Cuando quieras hacer una evaluación de holdout — es decir: ¿qué tan bien generaliza tu modelo a ángulos de visión nunca vistos? El estándar en el entrenamiento es „every-8th view como holdout" (convención de Mip-NeRF360), pero esa es una división muy lineal. Si tus imágenes, por ejemplo, están agrupadas temporalmente (primero un lado del objeto, luego el otro), entonces „every-8th" no es representativo — una posición de secuencia aleatoria termina en la prueba, pero todos sus vecinos están en el entrenamiento, lo cual es demasiado fácil. Con „angular" se estratifica en cambio a través del espacio de ángulos de visión: cada fold contiene cámaras de todas las zonas de la órbita, de modo que la prueba realmente evalúa las brechas de generalización.
Angular frente a Linear: - Angular (por defecto): ordena todas las cámaras según su ángulo longitudinal (coordenada φ alrededor del eje Y) y las distribuye luego de forma rotatoria entre los k folds — la primera cámara del anillo va al Fold 1, la segunda al Fold 2, y tras k cámaras la rotación empieza de nuevo. Ventaja: cada fold contiene cámaras de todas las direcciones de la órbita, distribuidas uniformemente por el anillo. Bueno para tomas de órbita clásicas, porque la división deja de depender del orden de captura. - Linear (Round-Robin): la misma distribución rotatoria, pero sobre la posición de la imagen en lugar del ángulo (índice de fold = image_index módulo k). Es la simple división „every-k-th". Funciona bien cuando el orden de las imágenes NO tiene sesgo espacial (por ejemplo, tomas de dron ordenadas aleatoriamente). Funciona mal cuando las imágenes se agrupan temporalmente — entonces los fotogramas vecinos quedan en folds distintos y la prueba se vuelve demasiado fácil.
En el globo 3D ves de inmediato: puntos verdes (entrenamiento) y puntos rojos (prueba). Si los puntos rojos se agrupan todos en una esquina, el holdout es malo (no es una buena prueba de generalización). Si están distribuidos uniformemente entre los verdes, es bueno. La puntuación de correlación angular por fold (barra lateral derecha, en grados) indica además: un valor menor = la prueba está cerca del entrenamiento (cada cámara de prueba tiene una cámara de entrenamiento cercana, prueba fácil); un valor mayor = la prueba está lejos del entrenamiento (generalización más exigente).
Has capturado tu escena del camión con 251 imágenes y la exportas mediante el elemento de menú M33 (Export SfM transforms.json) a un archivo nerfstudio. Abre la ventana Holdout (⇧⌘H), carga el JSON mediante „Open transforms.json…", observa el globo. k=5 (por defecto) te da 5 folds. Haz clic en „Fold 3" — mira si los marcadores rojos son razonablemente uniformes. Si es así: „Export fold-assignment.json". El archivo exportado está pensado para herramientas de evaluación externas (Nerfstudio, Instant-NGP); RadianceKit mismo no lo vuelve a leer y sigue entrenando contra su propio estándar de holdout „every-8th". La ventana sirve aquí, por tanto, para evaluar si tu conjunto de cámaras permite siquiera una prueba justa.
W23Botón „Open transforms.json…"
DÓNDE
Barra de herramientas, arriba a la izquierda.
TÉCNICO
Abre un diálogo de selección de archivos, restringido a archivos JSON. Tras confirmar, el módulo de Holdout carga el archivo. El cargador analiza tanto el formato nerfstudio (intrínsecos de cámara más una lista de frames con ruta de imagen y matriz de transformación) como el formato instant-ngp (misma estructura). Por cada frame se extrae la dirección de visión de la matriz de transformación (eje z de la base local de la cámara) y se guarda. Si el análisis falla, aparece un mensaje en la barra lateral izquierda — pero solo si ya había una escena cargada previamente; en el primerísimo intento, la ventana permanece en el estado vacío sin mensaje visible.
El archivo cargado no se recuerda de forma permanente: tras abrir la ventana mediante Ayuda → Holdout Analysis… (⇧⌘H) lo vuelves a seleccionar aquí. Su nombre aparece después a la derecha del botón.
W24Selector „Strategy" (angular/linear)
DÓNDE
Barra lateral izquierda, arriba.
TÉCNICO
Selector de radio con dos opciones: Angular y Linear. El cambio de estrategia desencadena automáticamente un recálculo de los folds. Las direcciones de visión son una lista de vectores unitarios 3D sobre la esfera; la estrategia Angular los ordena según su ángulo longitudinal φ y luego los asigna de forma rotatoria a los folds, la estrategia Linear hace la misma asignación rotatoria según el índice de frame e ignora la geometría por completo. Ambas estrategias generan, por tanto, folds del mismo tamaño; solo se diferencian en el criterio de ordenación previo.
W25Deslizador „k Folds"
DÓNDE
Barra lateral izquierda, centro.
TÉCNICO
Deslizador de 3 a 10, incremento de 1. Al cambiarlo se relanza automáticamente el cálculo de folds, de modo que la lista de folds, los índices de entrenamiento/prueba y la puntuación por fold se recalculan al instante. El valor elegido se muestra como texto de dígitos monoespaciados a la derecha de la etiqueta.
Regla general: k=5 es el valor por defecto (te da un 20% de prueba por fold, algo habitual en validación cruzada). k=10 si tienes muchísimos datos y necesitas más folds para tener poder estadístico. k=3 si tienes pocos datos.
W26Selector „Test Fold"
DÓNDE
Barra lateral izquierda, debajo del deslizador k.
TÉCNICO
Selector de menú. Lista exactamente tantas entradas como folds haya configurados, etiquetadas de „Fold 1" a „Fold N". Si el índice previamente elegido es ≥ k (por ejemplo, porque redujiste k de 10 a 5), se restablece automáticamente a 0. El fold de prueba elegido se muestra en rojo en el globo, todos los demás en verde.
W27Botón „Export fold-assignment.json"
DÓNDE
Barra lateral izquierda, abajo.
TÉCNICO
Abre un diálogo de guardado con el nombre de archivo por defecto fold-assignment.json. Tras confirmar, el módulo de Holdout codifica la división actual en un esquema JSON (asignación de fold por frame más un bloque de metadatos de estrategia). El archivo está pensado para herramientas de evaluación externas — RadianceKit no lo vuelve a leer. El botón permanece atenuado mientras no haya ningún archivo de cámaras cargado. El éxito se notifica como „Saved to (filename)", un error de escritura como „Export failed: …" — ambos aparecen en el mismo lugar debajo del botón y ambos en texto verde, por lo que el color no distingue los casos.
W28SCNView (globo de cámaras 3D)
DÓNDE
Panel central de la ventana Holdout.
TÉCNICO
Vista de globo de SceneKit. La escena consta de: una esfera de wireframe (radio 1.0, 36 segmentos, gris oscuro), tres segmentos de eje de colores (rojo/verde/azul para X/Y/Z, cada uno de 1.2 de longitud), y por cada cámara una pequeña esfera marcadora (radio 0.03) en la posición de dirección de visión correspondiente sobre la esfera unitaria (ligeramente fuera, para que no desaparezca DENTRO de la esfera de wireframe). Los marcadores NO se reconstruyen en cada cambio de fold — la reconstrucción solo es necesaria cuando cambia la lista de frames (es decir, cuando se carga un nuevo JSON). En su lugar, en cada actualización se ejecuta una actualización in situ de los colores del material: rojo para los índices de prueba, verde para entrenamiento, gris claro si no es ninguno de los dos. Así, los pasos del deslizador siguen siendo eficientes incluso con N > 1000 cámaras.
El control de cámara está activado — puedes rotar el globo con el ratón, hacer zoom y desplazarte. La iluminación hace que los marcadores no se vean planos. El fondo es gris oscuro.
W29FoldCard (toca para seleccionar fold)
DÓNDE
Barra lateral derecha, sección „Angular Correlation".
TÉCNICO
Una vista de tarjeta por fold — rectángulo redondeado con radio de 6 pt, relleno de 10, diseño vertical con dos líneas (arriba „Fold N" + número de cámaras, abajo „Mean nearest angle:" + valor en grados). Color de fondo condicional: fold activo = color de acento semitransparente, inactivos = material estándar neutro. Al tocar se selecciona el fold, y el globo cambia de color en directo.
La puntuación „Mean nearest angle" es el ángulo mínimo medio por cámara de prueba hacia la cámara de entrenamiento más cercana (calculado internamente en radianes, mostrado en grados en la interfaz).
Consola BayesOpt (W30–W39)

Estado vacío con selector de espacio de búsqueda (RadianceKit defaults (6-dim)), control deslizante de presupuesto de trials (por defecto 40), semilla aleatoria (42) y tres paneles vacíos para el gráfico de convergencia, el registro de trials y la lista de parámetros del espacio de búsqueda. El gráfico de convergencia y la tabla de trials se llenan en cuanto se inicia una ejecución — ver la siguiente figura.

Estado arriba a la derecha „Finished — best 0.9943 after 40 trials", junto a él el botón „Save Best Config"; arriba a la izquierda el botón „Start". Barra lateral izquierda: selector de espacio de búsqueda en RadianceKit defaults (6-dim), presupuesto de trials 40, semilla aleatoria 42. La lista de parámetros muestra los seis hiperparámetros a ajustar con sus rangos de valores: mipSmoothing3DScale [0.05, 0.5], mipFilter2DVariance [0.1, 0.6], densifyGradThreshold [5e-07, 5e-06], ssimWeight [0.05, 0.5], mcmcNoiseScale [1e-05, 0.0001], mcmcRelocationInterval [50, 200]. Centro: gráfico de convergencia „Convergence (best value so far)" (X = índice del trial 0–40, Y = valor de la función objetivo 0–1) — puntos azules = muestras iniciales, puntos verdes = adquisición de BayesOpt, puntos naranjas = trials de reinicio (#22 con 0.5303 y #31 con 0.4885). La línea azul del mejor valor sube abruptamente hasta el trial ~5, luego solo hay una mejora marginal hasta el trial ~13, a partir de ahí una meseta plana cerca de 1.0. Barra lateral derecha: registro de trials, aquí desplazado a los trials #8–#36, con puntuación y etiqueta (init/bo/restart). El botón Save Best Config arriba a la derecha escribe bayesopt-best.json.
Qué es: Una consola de optimización bayesiana para la búsqueda de hiperparámetros. Bayes-Opt es un procedimiento automático que intenta encontrar el punto óptimo de una función desconocida con la menor cantidad posible de experimentos — típicamente: „¿qué combinación de límite superior de gaussianas, peso SSIM y umbral de densificación da el mejor PSNR para mi clase de escena?" En lugar de una cuadrícula de 6^4 = 1296 trials, BayesOpt prueba unos 40–100 trials informados y así se acerca al óptimo.
Importante: La versión actual entregada en la app no ejecuta la optimización contra ejecuciones de entrenamiento reales (eso tardaría días), sino contra un objetivo de demostración sintético — un paisaje multimodal con carácter de escalada de colinas más un ligero ruido. Esto es intencional: la ventana debe mostrarte el comportamiento del optimizador (evolución de la convergencia, puntos de muestreo, mejor-hasta-ahora) y dejarte comprender las definiciones del espacio de búsqueda. Para ejecuciones reales de BayesOpt impulsadas por entrenamiento (como las que se realizaron durante el desarrollo de los presets incluidos) se utiliza una vía de evaluación separada fuera de la app; la ventana es la variante en vivo para observar.
Tres casos de uso: 1. Quieres entender cómo trabaja BayesOpt — entonces inicia una ejecución de demostración y observa el gráfico de convergencia. 2. Estás planeando una nueva clase de escena (por ejemplo „acuarios" o „muebles antiguos") para la que los quince presets incluidos no encajan a la perfección. Define mentalmente un espacio de búsqueda, compruébalo aquí con „Bowl demo (1-dim)" o „densify-until + ssim-weight + grad-thresh", luego exporta la mejor configuración como JSON y úsala como punto de partida para una ejecución de entrenamiento real. 3. Quieres inspeccionar los espacios de búsqueda estándar incluidos (subconjunto Mip, RadianceKit Defaults) — estos se listan en el panel de parámetros de la barra lateral izquierda.
- Gráfico de convergencia (columna central): Y = mejor valor de la función objetivo alcanzado hasta ahora. X = índice del trial. Al principio sube abruptamente (BayesOpt prueba las muestras iniciales al azar, algunas de ellas tienen suerte), luego se aplana cada vez más porque la región cercana al óptimo ya está explotada. Si la línea permanece plana durante 20+ trials, puedes detener la ejecución — más trials ya no aportan nada. Los puntos individuales en el gráfico son los valores de trial individuales (es decir, no „el mejor hasta ahora"), coloreados según la fase: azul = muestra inicial, verde = adquisición BayesOpt, naranja = reinicio. - Tabla de trials (columna derecha): #1, #2, #3, … cada uno con valor y etiqueta de fase. El mejor trial hasta ahora está marcado con una estrella amarilla. En la tabla puedes identificar el mejor trial y consultar más tarde sus valores de parámetros al exportar. - Inspector de espacio de búsqueda (barra lateral izquierda): muestra para el preset seleccionado todos los nombres de parámetros y sus rangos de búsqueda [lo, hi]. Si estás en el preset „RadianceKit defaults (6-dim)", verás por ejemplo „densifyGradThreshold [5e-7, 5e-6]" — es decir, log-uniforme entre esos dos valores.
Elige el preset „RadianceKit defaults (6-dim)", presupuesto de trials 40, semilla 42. Haz clic en „Start". Observa: los primeros 8 trials son azules (muestras iniciales, hipercubo latino), los siguientes verdes (adquiridos por BayesOpt). El gráfico de convergencia sube abruptamente hasta el trial ~13, después se aplana. En el trial ~30–40 el mejor valor se estabiliza. Haz clic en „Save Best Config" — se guarda un bayesopt-best.json con el nombre del preset, el índice del trial, el valor y los valores de parámetros decodificados. Este JSON lo puedes incorporar luego manualmente a tu definición de preset.
W30Botón „Start"
DÓNDE
Barra de herramientas a la izquierda, en el estado inactivo/finalizado.
TÉCNICO
Reinicia la lista de trials, cambia al estado de ejecución, genera un nuevo ID de ejecución (para la detección de obsolescencia con varios clics de inicio) y crea una nueva puerta de pausa. Luego inicia una tarea en segundo plano que ejecuta el optimizador como un flujo asíncrono. El número de muestras iniciales crece con el presupuesto, pero como máximo hasta 8 — típicamente 8 muestras de hipercubo latino a partir de un presupuesto de 28, menos con un presupuesto pequeño. Las actualizaciones de trials se reciben de forma incremental y se añaden a la lista. Protección contra ejecuciones obsoletas: si mientras tanto un segundo clic de inicio establece un nuevo ID de ejecución, las actualizaciones de la ejecución antigua se descartan.
Estilo de acción primaria para el aspecto prominente del botón.
W31Botón „Pause"
DÓNDE
Barra de herramientas a la izquierda, en el estado de ejecución.
TÉCNICO
Activa la puerta de pausa y cambia al estado en pausa. El efecto real: el ejecutor espera en un bucle de sondeo de 50 ms antes de evaluar la siguiente función objetivo. Esto significa que un trial actualmente en curso se termina (al fin y al cabo es sintético y solo tarda microsegundos), pero no se inicia ningún otro trial. En cuanto se ejecuta Resume, continúa donde se dejó.
W32Botón „Stop"
DÓNDE
Barra de herramientas a la izquierda, en los estados de ejecución y pausa.
TÉCNICO
Cancela la tarea del ejecutor, anula la referencia, libera la puerta de pausa (si aún estaba en pausa), y cambia al estado finalizado (si hay trials) o al estado inactivo (si no hay ninguno). Los trials ya calculados permanecen visibles en la lista — Stop no los borra. El rol de botón destructivo muestra el botón en rojo, porque cancela la ejecución.
W33Botón „Resume"
DÓNDE
Barra de herramientas a la izquierda, en el estado en pausa.
TÉCNICO
Libera la puerta de pausa y vuelve al estado de ejecución. La tarea del ejecutor ya está en marcha (espera en el bucle de sondeo); en cuanto el bucle detecta que la pausa se ha liberado, continúa e inicia el siguiente trial.
W34Botón „Save Best Config"
DÓNDE
Barra de herramientas a la derecha, siempre visible (pero en gris mientras no haya un mejor resultado disponible).
TÉCNICO
Abre un diálogo de guardado con el nombre de archivo por defecto bayesopt-best.json, restringido a JSON. Tras confirmar se construye un diccionario de datos: nombre del preset, índice del trial, valor (puntuación objetivo), parámetros (diccionario de nombres de parámetros decodificados → valores). La decodificación proyecta las coordenadas normalizadas del espacio de búsqueda en [0,1]^d de vuelta al rango de valores original (con escalas log-uniforme/lineal/entero según corresponda). La salida JSON está formateada de forma legible y con claves ordenadas. En caso de error de escritura se ignora silenciosamente (en la versión de demostración actual) — sin interfaz de error, porque es una ruta de demostración.
El botón permanece gris mientras no se haya ejecutado ningún trial.
W35Selector de preset „Search Space"
DÓNDE
Barra lateral izquierda, arriba.
TÉCNICO
Selector de menú con cuatro opciones de preset: - „RadianceKit defaults (6-dim)" — el espacio de búsqueda estándar completo con los seis hiperparámetros estándar. - „Mip subset (2-dim)" — solo mipSmoothing3DScale [0.05, 0.5] log-uniforme y mipFilter2DVariance [0.1, 0.6] lineal. Útil si quieres ajustar Mip-Splatting para una clase de escena. - „densify-until + ssim-weight + grad-thresh" — tres parámetros relevantes para la densificación (densifyGradThreshold log-uniforme, ssimWeight lineal, densifyUntilIter entero). - „Bowl demo (1-dim)" — espacio de búsqueda pedagógico de un solo parámetro para demostraciones de „así funciona BayesOpt".
Mientras una ejecución está activa, no se puede cambiar el espacio de búsqueda (confundiría al optimizador).
W36Control deslizante „Trial Budget"
DÓNDE
Barra lateral izquierda, debajo del selector de espacio de búsqueda.
TÉCNICO
Control deslizante de 10 a 200, con paso 5. Por defecto 40. Esto significa: BayesOpt puede hacer como máximo N trials. De estos, los primeros son muestras iniciales (hipercubo latino), el resto son trials reales de BayesOpt. Reglas prácticas: un espacio de búsqueda con d dimensiones necesita aproximadamente de diez a veinte veces d en trials para un buen óptimo. Con los 6-dim por defecto, entonces 60–120; con el subconjunto Mip de 2-dim, 20–40; con la demo Bowl de 1-dim, 10–20.
Durante la ejecución el control deslizante está desactivado.
W37Control deslizante „Random Seed"
DÓNDE
Barra lateral izquierda, debajo del control deslizante de presupuesto.
TÉCNICO
Control deslizante de 1 a 100, con paso 1. Por defecto 42. La semilla se transmite tanto a las muestras iniciales de hipercubo latino como al componente de ruido del objetivo de demostración. Reproducibilidad: la misma semilla + el mismo espacio de búsqueda + el mismo presupuesto da como resultado exactamente la misma secuencia de trials. Útil para „¿obtienen todos tus colegas la misma ejecución si reproducen la demostración?". Durante la ejecución está desactivado.
W38Gráfico (Convergence)
DÓNDE
Columna central de la ventana.
TÉCNICO
Diagrama de Swift Charts con dos capas: 1. una línea para „el mejor valor hasta ahora" por trial — una curva monótonamente creciente o constante en el color de acento. 2. un punto por trial con el valor objetivo individual, coloreado según la fase. Tamaño de símbolo 40. Tres etiquetas de fase: „init" (azul), „bo" (verde), „restart" (naranja).
Una pequeña leyenda muestra los colores de fase arriba a la izquierda. Si la lista de trials está vacía (antes del primer inicio), en su lugar se muestra un estado vacío con un icono de gráfico y el aviso „Press Start to begin a BayesOpt run."
W39Tabla (Trial Log)
DÓNDE
Columna derecha de la ventana.
TÉCNICO
Área de desplazamiento con filas de trials apiladas de forma perezosa. Por fila hay una pila horizontal: número de trial (3 dígitos, monoespaciado, a la izquierda), valor (monoespaciado, alineado a la derecha, 70 pt de ancho), etiqueta de fase (cápsula, rellena con 25% de opacidad — gris para „init", azul para „bo", naranja para „restart"; estos son intencionalmente colores distintos de los colores de los puntos en el gráfico de al lado), opcionalmente una estrella amarilla si este trial es actualmente el mejor. Un mecanismo de desplazamiento automático salta automáticamente al final en cuanto llega un nuevo trial — para que puedas seguir la evolución en vivo en la parte inferior de la pantalla sin desplazarte tú mismo.
Ventana principal: historial de pérdida y recuento de gaussianas (I39–I41, referencia cruzada)
Tres de las visualizaciones del Inspector en la ventana principal merecen una explicación propia, porque se ven constantemente durante un entrenamiento en curso y existen reglas prácticas importantes sobre cuándo el historial se ve saludable. Las visualizaciones se encuentran en el Inspector, en la sección Progreso, en el grupo desplegable Historial de pérdida (ver Capítulo 2 — Inspector), y complementan el análisis de holdout de la ventana Aux mencionada arriba.
¿Cuándo es saludable la curva de pérdida? Una curva de pérdida saludable muestra tres fases: (1) Calentamiento — en las primeras 200–500 iteraciones, la pérdida cae bruscamente desde un valor alto (típicamente 0.15–0.25 para L1+SSIM combinado, según la escena) hasta aproximadamente la mitad. Si la pérdida NO cae en esta fase, normalmente la entrada es incorrecta (imágenes dañadas, poses SfM deficientes, número de gaussianas iniciales demasiado bajo). (2) Densificación — entre ~500 y densifyUntilIteration (clásicamente 15K, MCMC hasta 20K o 25K), la pérdida sigue bajando, a menudo con pequeños saltos hacia abajo cuando las operaciones de densificación insertan nuevas gaussianas y el optimizador las aprovecha. El recuento de gaussianas aumenta en esta fase. (3) Refinamiento — después, la pérdida entra en una cola cada vez más plana. Valores finales típicos como orientación: una escena de objeto bien iluminada (por ejemplo, Tanks-&-Temples Truck con P4 Calidad) se sitúa en L1 ≈ 0.023, mientras que escenas exteriores amplias como las de Mip-NeRF 360 se mantienen naturalmente por encima (0.04–0.07).
¿Qué significa una meseta? Una meseta (la curva de pérdida transcurre horizontalmente durante varios miles de iteraciones) tiene dos interpretaciones: (a) el modelo ha convergido, seguir entrenando ya no aporta nada — este es el caso bueno. (b) el modelo está atascado (mínimo local, información de gradiente deficiente, un límite en el buffer) — el caso malo. Ambos se ven idénticos en el gráfico. Para distinguirlos: observa el recuento de gaussianas. Si también es plano Y está cerca del límite de MCMC (por ejemplo, 150K de 150K en el preset P8 Calidad (MCMC)), has llegado al límite — o subes el límite o aceptas la meseta. Si el recuento de gaussianas sigue creciendo pero la pérdida no baja, entonces está atascado.
¿Cuándo interrumpir y cuándo seguir entrenando? Regla práctica: si durante 10K iteraciones no hay mejora en la pérdida mínima → interrumpe, más iteraciones son desperdiciadas. Antes de eso: en el menú Entrenamiento → Continuar entrenamiento → «+5,000 iterations» puedes añadir una prórroga si observas una mejora marginal (no hay atajo de teclado para esto). Atención: en MCMC la meseta suele ser real — el límite es la frontera natural.
Una meseta en el recuento de gaussianas NO es una señal de «terminado». Solo significa que MCMC ha alcanzado su límite o que la Densificación Clásica está agotada. La pregunta real de si «está terminado» solo la responden PSNR/SSIM/LPIPS en un conjunto de prueba independiente — esos números aparecen en los informes de referencia que evalúas en el Pareto Dashboard (W13–W22). La ventana de Holdout (W23–W29) no proporciona estas métricas; solo evalúa si tu conjunto de cámaras permite siquiera una división justa entre ángulos de entrenamiento y de prueba.
PSNR/Holdout es la verdad, la pérdida es solo un indicador indirecto. La pérdida es una métrica relativa: cae mientras tu modelo se ajusta a las vistas de entrenamiento. Sin embargo, una pérdida baja no significa automáticamente un buen modelo — si el modelo ha memorizado las imágenes de entrenamiento (sobreajuste), la pérdida sería pequeña, pero la PSNR en vistas no vistas (holdout) sería mala. Por eso: para la evaluación final de calidad, mira siempre las métricas de holdout, no solo la pérdida final.
Consejo práctico
- La Guía del usuario y los Atajos de teclado son ayuda estática — útiles para consultas puntuales; para profundizar, usa este manual.
- Abre Manage Storage en cuanto el disco baje del 10% de espacio libre. Los registros y el staging de importaciones suelen ser los culpables habituales.
- El Pareto Dashboard solo tiene sentido a partir de al menos tres o cuatro informes de entrenamiento. Eje X = coste (Time / Gs), eje Y = calidad (PSNR / SSIM). El frente de Pareto muestra las combinaciones eficientes.
- Usa Holdout Analysis antes de publicar comparativas de PSNR con otros — así te aseguras de que tu conjunto de prueba sea realmente representativo. La división en folds exportada es para herramientas externas; RadianceKit sigue entrenando contra "every-8th".
- BayesOpt Console es principalmente una herramienta de aprendizaje e inspección para definir espacios de búsqueda — calcula contra una función de demostración, no contra ejecuciones de entrenamiento reales.
- El plateau de pérdida y el plateau de número de gaussianas deben interpretarse por separado. El límite máximo no es una señal de "terminado". La calidad real solo se mide con el PSNR de holdout.
- 10K iteraciones sin mejora del min-loss → detén el entrenamiento.