Guía del usuario

Capítulo 6 — Configuración de entrenamiento

Ajuste preestablecido de vista previa exportado como JSON y mostrado en TextEdit — campos id/name/category/version/createdAt/description, trainingConfig con todos los parámetros relevantes (maxIterations 5000, densifyUntilIteration 3500, ssimWeight 0.20, renderScale 0.50, strategy classic, cameraAlignment applePhotogrammetry, densifyGradThreshold 2.0e-06, opacityResetInterval 3000, minOpacity 0.005, seis conmutadores booleanos)
Ajuste preestablecido de vista previa exportado como JSON y mostrado en TextEdit — campos id/name/category/version/createdAt/description, trainingConfig con todos los parámetros relevantes (maxIterations 5000, densifyUntilIteration 3500, ssimWeight 0.20, renderScale 0.50, strategy classic, cameraAlignment applePhotogrammetry, densifyGradThreshold 2.0e-06, opacityResetInterval 3000, minOpacity 0.005, seis conmutadores booleanos)

Una exportación típica de un ajuste preestablecido en JSON. Campos de nivel superior: id (UUID), name, (classic | mcmc | sceneClass | custom), (versión del esquema), (marca de tiempo), (texto libre). El objeto anidado contiene los parámetros críticos para la reproducibilidad — al importarlo, todo el bloque se lee en la configuración de entrenamiento, y los valores predeterminados de la versión de la app rellenan los campos que faltan en el JSON (por ejemplo, tras una actualización de la app). Quien quiera transferir un ajuste preestablecido a otro Mac simplemente envía este archivo JSON.

La configuración de entrenamiento es el corazón de cada proceso de entrenamiento en RadianceKit. Reúne todos los parámetros que influyen en el entrenamiento — desde el número máximo de iteraciones pasando por las ocho tasas de aprendizaje hasta los campos especiales para MCMC, Mip-Splatting, el currículo y la lógica de límite (cap) consciente de la escena. La editas en la barra lateral, en la sección de configuración de entrenamiento (Vista experta), la guardas como ajuste preestablecido o la entregas como exportación JSON a otro Mac. Durante el entrenamiento, exactamente este objeto se congela y se pasa al backend de GPU.

Este capítulo es material de referencia para usuarios avanzados. Enumera los 80 campos configurables de la configuración de entrenamiento, los 9 ajustes preestablecidos incluidos y la resolución del límite (cap) de gaussianas dependiente de la escena. En caso de duda, se aplica el valor que establece el ajuste preestablecido elegido — lo ves en el Inspector o en la exportación JSON del ajuste preestablecido.

Índice:

+ Iteración (T1–T2) + Tasas de aprendizaje (T3–T10) + Densificación — Clásica (T11–T16) + Pérdida (T17–T20) + Progresión de grado SH (T21) + Rendimiento (T22–T24) + Diagnóstico y preparación de nubes de puntos (T26–T30) + Regularización (T31–T37) + Refinamiento (T38–T44) + Cúpula de cielo (T45–T48) + Adam + programación de tasa de aprendizaje (T49–T55) + Posprocesamiento + Apple AI (T56–T60) + Densificación MCMC (T61–T73) + Mip-Splatting (T74–T76) + Densificación adaptativa (T77–T79) + Currículo (T80–T81) + Ajustes preestablecidos estáticos (TP1–TP9) + Cómo determina la app el límite (cap) de gaussianas + ¿Qué campo sirve para qué? (Hoja de referencia) + Campos peligrosos

Iteración (T1–T2)

T1maxIterations

DETALLES

Predeterminado: 30 000 (Initializer), 35 000 (.full), 200 000 (.fullMCMC) Rango: 1 000 – 500 000 (deslizador de la interfaz), sin límite superior estricto en la lógica

TÉCNICO

Número total de iteraciones de entrenamiento que recorre el backend. Una iteración designa un renderizado forward de una única cámara de entrenamiento, un pase backward sobre todos los componentes de la función de pérdida (L1 + SSIM + regularizaciones opcionales + máscara de cielo) y un paso del optimizador Adam. Este número afecta directamente a los demás calendarios: la tasa de aprendizaje de posición sigue una curva de cosine-annealing de 0 hasta T1 mismo o hasta T50 positionLRScheduleEndIteration; la densificación se detiene en T2 densifyUntilIteration; el decaimiento de ruido de MCMC termina en T69 mcmcNoiseDecayEnd; las actualizaciones de grado SH ocurren en las tres marcas definidas en T21. Con densificación clásica, el rango recomendado está entre 20 000–35 000 iteraciones, con MCMC entre 60 000–200 000. Un aumento drástico por encima de los valores establecidos en el Preset rara vez aporta calidad adicional — el momentum de Adam se satura, y sin un final de decaimiento de la tasa de aprendizaje la pérdida se estanca. A la inversa, bajar de ~5 000 provoca geometrías incompletamente convergidas (el control de densidad tiene muy poco tiempo para clonar/dividir).

T2densifyUntilIteration

DETALLES

Predeterminado: 15 000 (Initializer), 5 000 (.full), 160 000 (.fullMCMC) Rango: 0 – T1 maxIterations

TÉCNICO

Iteración a partir de la cual se detiene la densificación. Hasta este punto, los Gaussians se clonan, dividen y podan según las reglas parametrizadas en T11–T16 (Classic) o T67–T70 (MCMC); después el número de Gaussians permanece constante y solo se siguen optimizando posiciones, rotaciones, escalas, opacidades y coeficientes SH (fase de refinamiento). En el artículo original de 3DGS el valor está en el 50 % de T1, en el Preset .full de RadianceKit en solo ~14 % (5 000 de 35 000): después de aproximadamente 5 000 iteraciones, seguir densificando más bien empeora el resultado — más floaters, más necesidad de memoria, sin ganancia de calidad. MCMC, en cambio, deja correr la reubicación (relocation) hasta el 80 % de T1, porque MCMC no produce floaters perjudiciales. Si T2 se elige demasiado pequeño (< 1 000), se generan muy pocos Gaussians; demasiado grande en Classic (> 50 % de T1) provoca sobrecrecimiento (overgrowth) y valores atípicos de saturación RGB (ver hallazgos de sobreentrenamiento en exteriores).

Tasas de aprendizaje (T3–T10)

T3positionLearningRate

DETALLES

Predeterminado: 0.00016 Rango: 1e-7 – 1e-3 (recomendado)

TÉCNICO

Tasa de aprendizaje Adam para la posición XYZ de cada Gaussian al comienzo del entrenamiento (iteración 0). Sigue una curva de cosine-annealing y desciende a lo largo del entrenamiento hasta T4 positionLearningRateFinal. El valor predeterminado 0.00016 proviene del artículo original de 3DGS (Kerbl et al.~2023) y en RadianceKit no debe escalarse aunque aumente la resolución de imagen — la posición se mueve en el sistema de coordenadas del mundo, no en el espacio de píxeles. Un aumento notable (> 0.0005) provoca que las Gaussians salten grandes distancias y que la pérdida se vuelva inestable; valores muy por debajo (< 0.00005) hacen que nubes de puntos mal inicializadas nunca encuentren su lugar. Para la gran mayoría de las escenas, el valor estándar es, por tanto, la opción correcta. Ten en cuenta: con .fullMCMC dejamos este valor deliberadamente en el predeterminado — MCMC necesita tasas de aprendizaje constantes para su lógica de relocation, así que ajustarlo aquí no aporta nada.

T4positionLearningRateFinal

DETALLES

Predeterminado: 0.0000016 (Initializer + artículo), 0.000016 (.full, .fullMCMC — 10× más alto) Rango: 0 – T3 positionLearningRate

TÉCNICO

Valor final de la curva de cosine-annealing de la LR de posición. Se alcanza en T1 maxIterations o, si está establecido, en T50 positionLRScheduleEndIteration. El preset .full de RadianceKit usa 0.000016 — es decir, 10× más alto que el valor predeterminado del artículo, 0.0000016. Tanto un valor final considerablemente menor como un valor inicial considerablemente mayor empeoran el resultado de forma notable. El valor final alto no es un trade-off, sino una elección deliberada: con un decaimiento demasiado fuerte, las Gaussians pierden durante la fase de refinamiento su capacidad de ajustarse a candidatos de densification recién añadidos. La fase de schedule puede acortarse (T50 < T1), de modo que T4 se alcance ya antes del final del entrenamiento y el resto del entrenamiento transcurra con una mini-LR constante — configuración típica: T50 = 20 000, T1 = 35 000, es decir, refinamiento a 0.000016 durante 15 000 iteraciones.

T5shDCLearningRate

DETALLES

Predeterminado: 0.0025 (Initializer + artículo), 0.005 (.full y todos los presets MCMC — 2×) Rango: 0.0001 – 0.05

TÉCNICO

Tasa de aprendizaje Adam para la componente DC (grado 0, es decir, albedo constante) del color de armónicos esféricos. SH-DC corresponde al tono base independiente de la dirección de una Gaussian, en cierto modo el "color base". RadianceKit duplica el valor predeterminado del artículo en los presets de calidad — esto acelera la convergencia del color, lo cual es necesario porque con entrenamientos cortos (, 5 000 iteraciones) el SH-DC de lo contrario no llega a estabilizarse. A diferencia de las LR geométricas, SH-DC no tiene decaimiento; la tasa de aprendizaje permanece constante durante todas las iteraciones (o solo sigue el decaimiento opcional de fase extendida de T51). Valores aún notablemente más altos (alrededor de 0.01) vuelven a empeorar el resultado y hacen que los colores se vuelvan inestables.

T6shRestLearningRate

DETALLES

Predeterminado: 0.000125 (Initializer + artículo), 0.00025 (.full y MCMC — 2×) Rango: 0.000001 – 0.005

TÉCNICO

Tasa de aprendizaje Adam para los coeficientes SH de orden superior (grado 1, 2, 3 — es decir, las componentes de color dependientes de la dirección de vista, responsables de reflejos, brillos y sombreado suave). 20× más pequeña que T5 según la convención del artículo, porque estos coeficientes crecen cuadráticamente en cantidad (3 para el grado 1, 5 para el grado 2, 7 para el grado 3 → en total 15 floats por Gaussian) y sin una tasa de aprendizaje menor saturarían la imagen. Se activa en dos pasos — hasta la primera marca en T21 shDegreeUpgradeIterations solo está activo el grado 0 (es decir, solo T5), después el 1, más tarde el 2, finalmente el 3. Valores bajos aquí son especialmente importantes en escenas con mucha iluminación difusa; en superficies muy brillantes (pintura de coche, agua) no vale la pena ajustar — la representación SH en sí misma es limitada.

T7opacityLearningRate

DETALLES

Predeterminado: 0.05 (Initializer + artículo), 0.1 (.full, MCMC — 2×) Rango: 0.001 – 1.0

TÉCNICO

Tasa de aprendizaje Adam para la opacidad logit de cada Gaussian. La app almacena la opacidad como un valor float no acotado y lo transforma con sigmoide a [0, 1]; la LR actúa en el espacio logit. Los presets de calidad duplican el valor predeterminado del artículo a 0.1; esto hace el pruning más eficiente — las Gaussians muertas caen más rápido por debajo del T14 pruneOpacityThreshold. Qué valor funciona mejor depende de la configuración de Adam; la interacción entre ambos no es trivial. Valores bajos (< 0.01) hacen que las Gaussians "muertas" permanezcan eternamente ocupando memoria; valores demasiado altos (> 0.5) pueden provocar explosión de opacidad, por lo que el optimizador limita firmemente el valor logit a [-15, 3].

T8opacityLearningRateFinal

DETALLES

Predeterminado: 0.0 (= "sin decaimiento") Rango: 0 o 0.001 – T7 opacityLearningRate

TÉCNICO

Valor final opcional del decaimiento coseno para la LR de opacidad. Si es 0.0, el decaimiento está desactivado y la LR de opacidad permanece constante en T7 durante todo el entrenamiento. Un decaimiento de 0.1 a 0.01 empeora claramente el resultado; por eso el valor predeterminado está "apagado". La hipótesis detrás de este campo: en la fase de refinamiento, una LR de opacidad constante podría provocar oscilación, de modo que splats que ya han alcanzado el grado correcto de transparencia se desplacen de nuevo debido a fluctuaciones aleatorias del gradiente. Empíricamente esto no se confirma — la lógica de clamping logit ya se encarga de eso. El campo sigue disponible para experimentos futuros; incluso ejecuciones MCMC muy largas (> 500K iteraciones) podrían beneficiarse de ello.

T9scaleLearningRate

DETALLES

Predeterminado: 0.005 (Initializer + artículo), 0.01 (.full, MCMC — 2×) Rango: 0.0001 – 0.1

TÉCNICO

Tasa de aprendizaje Adam para las tres componentes de escala de cada Gaussian en el espacio logarítmico (RadianceKit almacena log(scale), para que las escalas permanezcan positivas). El valor predeterminado del artículo, 0.005, se duplica en RadianceKit a 0.01 para una mejor convergencia de escala con las configuraciones de tasas de aprendizaje ajustadas. Si el valor se mantiene en el predeterminado del artículo junto con las demás tasas de aprendizaje de calidad, se generan visiblemente muy pocas Gaussians — el control de densidad no puede clonar, porque las actualizaciones de escala se ajustan con demasiada lentitud. La escala controla la extensión de cada Gaussian — un aprendizaje demasiado rápido produce Gaussians "aguja" (splats extremadamente largos y delgados, ver T34 scaleRatioPruneThreshold), un aprendizaje demasiado lento hace que los splats permanezcan demasiado compactos y el control de densidad tenga que dividir con demasiada frecuencia.

T10rotationLearningRate

DETALLES

Predeterminado: 0.001 (Initializer + artículo), 0.002 (.full, MCMC — 2×) Rango: 0.0001 – 0.05

TÉCNICO

Tasa de aprendizaje Adam para las cuatro componentes de cuaternión de cada Gaussian. El cuaternión se renormaliza en cada paso del optimizador después de la actualización de Adam (norma L2 = 1) — de lo contrario, la matriz de covarianza degeneraría. RadianceKit duplica el valor predeterminado del artículo en los presets de calidad, porque la rotación tiene magnitudes de gradiente absolutas más pequeñas en comparación con escala/posición (en la esfera unitaria cada paso permanece corto) y sin el 2× la rotación quedaría claramente sub-convergida dentro de la ventana de 35 000 iteraciones. En escenas de NeRF-Blender (Lego, Chair) la rotación tiene un efecto especialmente notable — los bordes de los objetos solo se alinean correctamente después de 5 000–10 000 iteraciones.

Densificación — Clásica (T11–T16)

T11densifyGradThreshold

DETALLES

Predeterminado: 0.000002 (Inicializador, calibrado para resolución 0.5×), 0.0000011 (.full, calibrado para 1.0×), 0.000004 (.quickTest, calibrado para 0.25×), 2e-7 (.fullClassicPaper) Rango: 1e-8 – 1e-3 (dependiente de la resolución)

TÉCNICO

Umbral para la norma L2 del gradiente de posición proyectado en el espacio de pantalla, por encima del cual se marca una Gaussian para clonar o dividir. El valor absoluto depende directamente de la resolución de entrenamiento — escala aproximadamente como 1/resolución² (más píxeles = gradientes por píxel más pequeños). Por eso cada nivel de T22 trainingRenderScale necesita un umbral calibrado: 0.25× → 4e-6, 0.5× → 2e-6, 1.0× → 5e-8 … 1.1e-6 (.full). El valor predeterminado del paper de 0.0002 está normalizado en NDC y no es directamente comparable en el pipeline de espacio-mundo de RadianceKit. Con el flag T52 adaptiveDensifyThreshold se puede calcular el valor en tiempo de ejecución a partir del p98 de la distribución de gradientes actual — sin embargo, en escenas reales el número de Gaussians se desploma dramáticamente al hacerlo (poda masiva); el flag permanece desactivado. T77–T79 ofrecen una lógica adaptativa alternativa mediante mediana móvil. Este campo no está exento de riesgos — reducirlo a la mitad genera 2–4× más Gaussians (presión de memoria, riesgo de OOM); duplicarlo puede sub-densificar la escena.

T12densifyFromIteration

DETALLES

Predeterminado: 500 Rango: 100 – 5 000

TÉCNICO

Primera iteración a partir de la cual se activa la Densification. Antes solo ocurre un aprendizaje "puro" sobre la nube de puntos SfM inicial, sin que se generen nuevas Gaussians. El valor predeterminado 500 proviene del paper 3DGS y le da tiempo a la inicialización para estabilizarse — si ya se densificara desde la iteración 0, los puntos SfM mal posicionados se clonarían muchas veces antes de encontrar siquiera su posición correcta. Un inicio considerablemente más tardío (por ejemplo 1 000) empeora ligeramente el resultado; mantente en el valor predeterminado.

T13densifyInterval

DETALLES

Predeterminado: 100 (Inicializador, MCMC), 200 (.full) Rango: 50 – 1 000

TÉCNICO

Cuántas iteraciones hay entre dos pasos de Densification. En el valor predeterminado del paper, 100 — cada 100 iteraciones se evalúa la lista de candidatos a densificar, se clona/divide y al mismo tiempo se elimina la lista de candidatos a podar (sigmoid(opacity) < T14 pruneOpacityThreshold). Para .full se ha comprobado que 200 funciona bien — esto alivia la GPU, porque se ejecutan menos pasadas de reorganización, y le da a cada Gaussian más tiempo para asentarse tras una acción de clonado. Intervalos más cortos provocan en el setup Quality sobre-densificación: se generan muchas más Gaussians sin que la imagen mejore. En MCMC este mismo campo se interpreta como intervalo de Relocation; ver T67 mcmcRelocationInterval para la lógica específica de MCMC.

T14pruneOpacityThreshold

DETALLES

Predeterminado: 0.005 (Inicializador, Paper, MCMC), 0.001 (.full) Rango: 0.0001 – 0.1

TÉCNICO

Umbral de opacidad sigmoidal, por debajo del cual una Gaussian se elimina en el siguiente paso de Densification. Actúa en conjunto con T7 opacityLearningRate y la lógica de clamp logit en el optimizador. En .full el valor es 0.001 en lugar de 0.005 — los splats que solo importan bajo ángulos de visión exóticos se conservan así por más tiempo y contribuyen al detalle de SH. Valores aún más pequeños (por ejemplo 0.0001) ya no aportan nada: se poda demasiado poco y se desperdicia memoria. Importante: el control de densidad SIEMPRE debe podar, incluso si la capacidad del buffer ya está llena por otras medidas — de lo contrario se acumulan Gaussians muertas y el conteo se congela.

T15opacityResetInterval

DETALLES

Predeterminado: 3 000 (Inicializador + Paper), 100 000 (.full = efectivamente desactivado), 200 000 (.fullMCMC = desactivado) Rango: 1 000 – 100 000+

TÉCNICO

Cada cuántas iteraciones se restablece la opacidad de todas las Gaussians a un valor bajo (~0.01) — una medida del paper 3DGS para reevaluar splats "congelados". Junto con el warmup de RadianceKit, la configuración de entrenamiento estocástico y las tasas de aprendizaje duplicadas, el reinicio de opacidad cuesta calidad de forma notable, y el clamp logit del optimizador ya cubre su función de todos modos. Por eso está prácticamente desactivado en .full (100 000 > 35 000 = nunca se dispara). En .fullClassicPaper (variante fiel al paper) está deliberadamente configurado de nuevo en 3 000 — ahí se trata de alcanzar los presupuestos de Gaussians del paper original.

T16maxScreenSize

DETALLES

Predeterminado: 0.0 (= desactivado) Rango: 0 (desactivado) o > 0

TÉCNICO

Tamaño máximo en espacio de pantalla (en píxeles proyectados) que puede alcanzar una Gaussian antes de ser forzada a dividirse. El valor está fijado en 0 — el control de densidad de RadianceKit usa en su lugar el umbral de escala en espacio-mundo de la misma lógica de gradientes. Se mantiene en el catálogo de campos porque futuros experimentos con Mip-Splatting (T74–T76) o estrategias de splatting específicas de escena podrían beneficiarse de él. Activarlo (valor > 0, por ejemplo 20) forzaría a los splats que han crecido demasiado en pantalla a dividirse — relevante en grandes superficies de pared lisas, donde un único splat gigante ofrece muy poco detalle.

Loss (T17–T20)

T17ssimWeight

DETALLES

Predeterminado: 0.2 (Inicializador + Paper + .full), 0.05 (todos los Presets de MCMC) Rango: 0.0 – 1.0

TÉCNICO

Peso de la proporción D-SSIM en la función de pérdida combinada loss = (1 - λ) * L1 + λ * D-SSIM, donde λ = T17. El valor predeterminado 0.2 del paper de 3DGS es la elección correcta para la Classic-Densification — ya 0.3 empeora notablemente el resultado. Para MCMC, en cambio, el valor adecuado es 0.05, porque MCMC, debido a su exploración estocástica, necesita una proporción de señal L1 más fuerte — pesos SSIM más altos diluirían las decisiones de relocalización. SSIM es notablemente más caro de calcular que L1 (ventanas locales de 11×11 sobre toda la imagen); RadianceKit usa una implementación acelerada por MPS que se mantiene por debajo de 1 ms por imagen 1080p. Los Presets de Scene-Class usan valores específicos de escena entre 0.082 (.outdoorPreset) y 0.171 (.indoorPreset).

T18ssimWeightRefinement

DETALLES

Predeterminado: 0.0 (= "sin cambio, mantener ssimWeight") Rango: 0 o 0 – 1.0

TÉCNICO

Valor SSIM opcional para la fase de Refinement después de T2 densifyUntilIteration. Aumentar de 0.2 a 0.3 en la fase de Refinement empeora el resultado en ambas medidas — tanto L1 como SSIM; por eso el valor predeterminado es 0.0. La hipótesis detrás de este campo era que, después de la Densification — cuando ya no se crean nuevos Gaussians — una mayor proporción SSIM maximizaría la nitidez estructural. Empíricamente incorrecto: aumentar el peso SSIM significa indirectamente reducir el peso L1, y L1 es la señal claramente más significativa en la fase final de Refinement. El campo permanece disponible para futuros experimentos con pérdida perceptual (T60) o Edge-Loss (T19), donde una composición de pérdida específica para Refinement podría tener sentido.

T19edgeLossWeight

DETALLES

Predeterminado: 0.0 (= desactivado) Rango: 0 o 0.001 – 1.0

TÉCNICO

Término de pérdida experimental: peso de una pérdida L1 de dominio de gradiente Sobel que compara directamente los bordes de la imagen (Sobel de Ground-Truth vs Sobel del renderizado) adicionalmente a L1+SSIM. Hipótesis: la información de bordes es un pilar perceptual de la calidad de imagen y un término explícito debería animar a los Gaussians a alcanzar mejor los bordes. En la práctica no aporta nada: un peso perceptible (0.1) empeora el resultado, uno pequeño (0.01) no cambia nada en la calidad, pero cuesta tiempo de cálculo. El paso Sobel cuesta un Forward MPS adicional sobre Ground-Truth y renderizado. Por eso está permanentemente desactivado. Caso de uso futuro: escenas con bordes artificiales marcados (arquitectura, muebles, renderizados) podrían beneficiarse — Sin embargo, los Presets de Scene-Class no usan este término para eso, sino que escalan el peso SSIM.

T20skyMaskingEnabled

DETALLES

Predeterminado: false (Inicializador y todos los Presets) Rango: boolean

TÉCNICO

Activa el Sky Masking. Con esto, en cada imagen, mediante el framework Apple Vision, se enmascara la región del cielo, y la pérdida en esa área se pone a cero. Sentido: las escenas exteriores a menudo sufren porque los píxeles de cielo azules/grises/blancos llevan a la app a colocar Gaussians exactamente allí — lo que se percibe como "floater" (partícula flotante). Sin la Sky-Mask, la pérdida en esa área nunca sería cero, porque el cielo varía ligeramente en la imagen y la app intenta eternamente reconstruirlo con splats. La máscara de Vision se calcula una vez por cámara antes del entrenamiento y se mantiene en RAM. Se activa típicamente junto con T45 skyDomeEnabled (lógica de UI en la vista de ajustes). En escenas interiores o renderizados sintéticos, dejarlo desactivado — ahí la máscara reconocería erróneamente techos o paredes como "cielo".

SH-Degree-Progression (T21)

T21shDegreeUpgradeIterations

DETALLES

Predeterminado: [1_000, 2_000, 3_000] (Initializer), [2_000, 5_000, 8_000] (.full, MCMC), [1_000, 2_000] (.preview — Grado 3 omitido) Rango: [Int], cada valor en [0, maxIterations], monótonamente creciente

TÉCNICO

Iteraciones en las que el grado SH activo se eleva de 0→1, 1→2, 2→3. Antes de la primera marca solo están activos los componentes DC (es decir, T5 shDCLearningRate), después de la primera marca DC + 3 coeficientes de grado 1, después de la segunda marca + 5 coeficientes de grado 2, después de la tercera marca los 15 coeficientes en total. Los requisitos de memoria por Gaussian crecen así en escalones — 4 floats → 16 floats → 36 floats → 64 floats. Los ajustes preestablecidos de calidad retrasan los ascensos de grado respecto a los valores predeterminados del Initializer, porque la geometría debe estabilizarse primero antes de añadir los detalles de color con su mayor frecuencia. Las marcas anteriores [1K, 2K, 3K] producen en .full un resultado notablemente peor. .preview limita en el grado 2, porque el grado 3 no converge en 5 000 iteraciones y solo consume capacidad del optimizador. El currículo (T80–T81) ofrece una lógica alternativa que sobrescribe dinámicamente esta lista.

Rendimiento (T22–T24)

T22trainingRenderScale

DETALLES

Por defecto: 1.0 (Initializer, .full, MCMC, Scene-Class), 0.5 (.preview), 0.25 (.quickTest) Rango: 0.05 – 2.0 (típicamente 0.25, 0.5, 1.0)

TÉCNICO

Resolución de render durante el entrenamiento en relación con la resolución original de las imágenes de entrenamiento. Con 0.5, cada imagen se reduce al 50 % de ancho × 50 % de alto (es decir, el 25 % de los píxeles) y el renderizado gaussiano se realiza en esta resolución menor. Reduce tanto el consumo de memoria como el de cálculo de forma cuadrática. Importante: T11 densifyGradThreshold debe coincidir con la resolución elegida — las magnitudes del gradiente escalan con 1/resolución², por lo que .quickTest (0.25×) tiene un umbral mucho más alto (4e-6) que .full (1.0×, 1.1e-6). RadianceKit avisa con imágenes muy grandes y ajusta automáticamente — resolución objetivo de 3 MP. Con imágenes de entrada 4K extremas, 0.5 o incluso 0.25 tendría sentido, ya que de lo contrario cualquier Mac terminaría solo en compactación por CPU.

T23resolutionWarmupScale

DETALLES

Por defecto: 0.0 (= desactivado) Rango: 0 o 0.1 –

TÉCNICO

Entrena la fase de densificación (Iter 0 hasta T2) en una resolución más baja que la fase de refinamiento. Para .full esto está desactivado, porque con T22 = 1.0 y cosine-annealing la ganancia de tiempo es escasa y la calidad se resiente levemente. Permanece en el catálogo de campos porque podría volver a ser útil con entradas 4K y entrenamientos largos — el curriculum (T80) retoma una lógica similar, pero allí está acoplada al LR-Schedule. Si está activado y T80 curriculumResolutionRamp también es true, el curriculum gana y sobrescribe este valor.

T24tileSize

DETALLES

Por defecto: 16 Rango: 8, 16, 32

TÉCNICO

Tamaño de las tiles de rasterización en píxeles. El renderizado de Gaussian Splatting está basado en tiles: la imagen se descompone en mosaicos de 16×16 píxeles, cada mosaico recopila los Gaussians relevantes para él, los ordena por profundidad y los mezcla. 16 es el estándar utilizado prácticamente por todas las implementaciones de 3DGS y está codificado de forma fija en los kernels Metal de RadianceKit; cambiar este valor requeriría recompilar los shaders y actualmente no es efectivo. Permanece como campo por si una futura versión del motor soporta el tamaño de tile de forma dinámica.

Diagnóstico y preparación de nubes de puntos (T26–T30)

T26depthDistortionWeight

DETALLES

Default: 0.0 (= desactivado) Range: 0 ó 0.0001 – 0.05

TÉCNICO

Experimental: peso de una función de pérdida de regularización de distorsión de profundidad. Penaliza Gaussians que están apilados profundamente a lo largo de un rayo de renderizado pero que conceptualmente pertenecen a la misma superficie — esto fomenta distribuciones de profundidad concentradas y reduce los floaters. En todas las intensidades probadas, el resultado empeora en lugar de mejorar. La ventaja teórica — mejorar la consistencia multi-vista — no se refleja en la pérdida L1, porque la hipótesis asume implícitamente que la geometría SfM es correcta y que los Gaussians solo necesitan ser "apilados". En la práctica, la nube de puntos SfM suele ser el componente más débil, no el apilamiento. Permanece disponible para conjuntos de datos multi-vista con poses particularmente limpias (sintéticos, Mip-NeRF 360 con ground truth).

T27singleViewOverfit

DETALLES

Default: false Range: boolean

TÉCNICO

Bandera de diagnóstico: si es true, en cada iteración de entrenamiento se usa forzosamente el índice de cámara 0 en lugar de una cámara aleatoria del pool de cámaras. Sentido: si el modelo no puede siquiera sobreajustar una sola vista (es decir, si la pérdida en la vista 0 no tiende a cero incluso después de 10 000 iteraciones), hay un error fundamental en el paso forward/backward. Este interruptor se usó intensivamente durante el desarrollo de los shaders Metal y los kernels del rasterizador diferenciable. Hoy en día solo está disponible como comprobación de cordura, si alguien ha cambiado algo en el backend de entrenamiento y quiere verificarlo. En la interfaz no hay ningún interruptor para esto — el campo está desactivado en todos los ajustes preestablecidos y así permanece.

T28maxCameras

DETALLES

Default: 0 (= "usar todas las cámaras") Range: 0 ó 1 – N

TÉCNICO

Límite de diagnóstico: entrena solo con las primeras N cámaras, ignora todas las demás. Sentido original: probar la hipótesis de que demasiadas cámaras generan conflictos de gradiente (demasiadas señales de pérdida contradictorias para el mismo Gaussian). Una limitación artificial no aporta ninguna ventaja — más fotogramas casi siempre aportan más calidad. En la interfaz no hay ningún control para esto; el campo está en 0 en todos los ajustes preestablecidos, es decir, "todas las cámaras".

T29maxInitialPoints

DETALLES

Default: 0 (= "usar todos los puntos SfM") Range: 0 ó 1 000 – 200 000+

TÉCNICO

Salvaguarda: limita la cantidad de puntos SfM iniciales con los que empieza el entrenamiento. Las reconstrucciones densas de COLMAP pueden producir > 60 000 puntos, lo que con escalas iniciales grandes provoca 200–300 Gaussians por solapamiento de píxel — esto crea un "campo de niebla" en el que el entrenamiento no converge. El submuestreo a ~16 000 puntos (lógica de límite estricto en el motor de entrenamiento) lleva la densidad inicial al nivel que usa el 3DGS de referencia, y reduce drásticamente el solapamiento. La aplicación lo establece automáticamente en reconstrucciones muy densas; no existe ningún control para esto.

T30cameraClusterOutlierMultiplier

DETALLES

Default: 10.0 (todos los ajustes preestablecidos — nunca sobrescrito) Range: 1.0 – 100.0

TÉCNICO

Multiplicador para el filtro de valores atípicos de clúster de cámaras. Antes del entrenamiento, el motor de entrenamiento calcula el centroide de todas las posiciones de cámara y la distancia máxima de una cámara respecto al centroide. Los puntos SfM cuya distancia al centroide supera multiplier × maxCameraDistance se descartan como valores atípicos. El valor por defecto de 10× se eligió deliberadamente generoso. Un efecto secundario sutil: un SfM más ajustado (cámaras más juntas) → un umbral menor → se descartan más puntos como valores atípicos. Un SfM más laxo → umbral mayor → se descartan menos puntos. De esto se deriva un efecto sorprendente: una reconstrucción SfM más ajustada y en principio mejor puede empeorar el entrenamiento, porque se descartan demasiados puntos iniciales. El campo está en 10 en todos los ajustes preestablecidos y no es ajustable en la interfaz. Valores por debajo de 5 suelen ser demasiado restrictivos, por encima de 20 no tienen efecto.

Regularización (T31–T37)

T31coarseToFineBlurRadius

DETALLES

Default: 0 (= desactivado) Range: 0 o 1 – 10

TÉCNICO

Experimental: radio de desenfoque de tipo Box-Blur, que se aplica al inicio de la fase de Densification sobre la imagen de referencia (ground truth) y se reduce linealmente hasta 0 al final de la Densification (T2). Hipótesis: un entrenamiento de tipo Coarse-to-Fine — primero aprender estructuras gruesas, luego detalles — debería producir una geometría más estable. En todos los radios probados el resultado empeora. La razón del fracaso: la Densification decide en función de gradientes en el dominio de la imagen, y el desenfoque reduce justo las señales que son importantes para «aquí hay que clonar». Permanece en el catálogo de campo para futuras pruebas con otro esquema de control de densidad.

T32scaleRegWeight

DETALLES

Default: 0.0 (= desactivado) Range: 0 o 0.0001 – 0.05

TÉCNICO

Experimental: regularización L1 sobre la escala en el espacio del mundo. Penaliza los Gaussians que se vuelven demasiado grandes — evita «mega-splats» que cubren superficies enteras de pared con un solo Gaussian. Al activarla, el número de Gaussians explota hasta los millones y el resultado empeora varias veces. La razón: la regularización de escala entra en conflicto con el control de densidad — escalas más pequeñas significan que se necesitan más Gaussians, así que el control de densidad hace split con más frecuencia, lo que a su vez implica más esfuerzo de gradiente. Desactivada, pero documentada para experimentos de Mip-Splatting (T74): en ese contexto un límite inferior de escala podría tener sentido.

T33anisotropyRegWeight

DETALLES

Default: 0.0 (= desactivado) Range: 0 o 0.0001 – 0.05

TÉCNICO

Experimental: penalización sobre la relación max(scale)/min(scale), destinada a evitar Gaussians tipo «aguja» extremadamente alargados, que se perciben como floaters. En todas las intensidades probadas el resultado empeora notablemente. La razón: la regularización obliga a los splats hacia una forma «redonda», lo cual en una superficie plana (pared, mesa, suelo) es precisamente incorrecto — ahí un Gaussian plano y ancho es más eficiente que uno esférico. Desactivada. T34 scaleRatioPruneThreshold persigue el mismo objetivo de forma más precisa, pero también está desactivado por defecto.

T34scaleRatioPruneThreshold

DETALLES

Default: 0.0 (= desactivado) Range: 0 o 5.0 – 100.0 (típico 10.0 – 30.0)

TÉCNICO

Poda experimental posterior al entrenamiento, que elimina cada Gaussian cuya relación max(scale)/min(scale) supere el umbral lineal establecido aquí. Apunta a floaters extremadamente alargados tipo «aguja/disco» que la regularización por sí sola no puede eliminar. En pruebas, la poda eliminó floaters como se esperaba, pero al mismo tiempo también splats planos útiles en paredes y suelos — la imagen quedó más agujereada. Por eso está desactivada por defecto. Desde la versión 1.8 existe para esto el interruptor Remove Needle/Disc Floaters en la sección «Training» del inspector, bajo la línea intermedia «Runs automatically at the end of training». Al activarlo, funciona de forma deliberadamente conservadora (solo splats cuyo eje más largo supera aproximadamente 50× el más corto) y actúa a partir de la siguiente ejecución de entrenamiento.

T35opacityRegWeight

DETALLES

Default: 0.0 (= desactivado) Range: 0 o 0.0001 – 0.05

TÉCNICO

Experimental: penalización de entropía cruzada binaria que empuja la opacidad hacia 0 o 1 (es decir, lejos de «semi-transparente»). Hipótesis: una distribución de opacidad más nítida mejoraría la claridad de la imagen. Junto con T33, esta regularización cuesta calidad; ambas están desactivadas. Atención: en 1.4.3-Beta apareció un bug que tenía exactamente este campo con un valor por defecto alterado (Initializer = 0.01), lo que provocó una extinción masiva del número de Gaussians (460 K → 5 en una iteración). Desde 1.4.4 está fijado permanentemente en 0.0 como valor por defecto.

T36opacityDecayFactor

DETALLES

Default: 0.0 (Initializer = desactivado), 0.9995 (.full, .classicBalanced — estándar HTGS) Range: 0 (desactivado) o 0.95 – 1.0

TÉCNICO

Implementación del esquema HTGS (Hierarchical Time-Gating, Eurographics 2025): cada T37 opacityDecayInterval iteraciones, la opacidad sigmoide de cada Gaussian se multiplica por este factor. 0.9995 × 100 aplicaciones da como resultado aproximadamente un 95 % de permanencia por fase de Densification — una presión descendente leve pero constante sobre todas las opacidades, que hace que los Gaussians de baja contribución bajen de forma fiable por debajo del T14 pruneOpacityThreshold. El resultado es notablemente mejor que sin decay. Solo está activo durante la fase de Densification (hasta T2), después el entrenamiento continúa sin decay, para que las opacidades establecidas en el refinamiento permanezcan estables. No se usa con MCMC (MCMC tiene sus propios mecanismos vía T67 mcmcRelocationInterval + T68 mcmcDeadOpacityThreshold).

T37opacityDecayInterval

DETALLES

Default: 50 Range: 10 – 500

TÉCNICO

Intervalo de iteraciones en el que se aplica T36 opacityDecayFactor. Valor por defecto del paper HTGS: 50, se mantiene en .full. Intervalos largos (>200) anulan parcialmente el efecto, porque entre dos aplicaciones ocurren suficientes actualizaciones de gradiente como para que la opacidad vuelva a subir. Intervalos más cortos (<20) hacen que el decay sea demasiado agresivo. Solo está activo en la fase de Densification.

Refinamiento (T38–T44)

T38gradientAccumulationSteps

DETALLES

Predeterminado: 1 (= „una View por paso de Adam") Rango: 1 – 8

TÉCNICO

Número de Views cuyos gradientes se acumulan antes de ejecutar una actualización de Adam. Con > 1 la app recurre a una ruta separada de Backward-Project „unfused", que suma los gradientes en un buffer aparte; la aplicación final escala con 1/N para mantener constante la magnitud. En el entrenamiento clásico, el valor 2 no aporta ninguna ganancia de calidad, pero cuesta tiempo, porque la ruta unfused es más costosa que la fused. En MCMC, en cambio, accum = 2 reduce notablemente la diferencia de calidad respecto a Classic — por eso ahí se ofrece como interruptor. En los ajustes preestablecidos el valor está en 1. En la interfaz lo alcanzas mediante el interruptor MCMC Quality en la sección del Inspector „Training": activado la app acumula 2 Views por paso, desactivado 1. Otros valores distintos de 1 y 2 solo se pueden asignar mediante un ajuste preestablecido editado.

T39testViewIndices

DETALLES

Predeterminado: [] (= vacío, todas las Views se usan para el entrenamiento) Rango: Set<Int>, subconjunto arbitrario de los índices de Camera

TÉCNICO

Conjunto de índices de Camera que NO se usan para el entrenamiento, sino que se reservan como holdout para la evaluación de PSNR/SSIM/LPIPS. Solo se asigna en las mediciones internas: entonces cada octava View, comenzando en el índice 0 (estándar LLFF, idéntico a las convenciones de los papers Mip-NeRF-360 y 3DGS). En el estado de entrega el campo permanece vacío — el entrenamiento usa todas las Views, y no hay en la interfaz ningún control para ello. Precaución: establecer manualmente este campo en un archivo de ajuste preestablecido sin comprender los índices inutiliza una medición (por ejemplo, si se establecen todos los índices por encima de N mientras solo hay N-50 Views → sin holdouts → sin evaluación). Al exportar tu propio ajuste preestablecido, testViewIndices no se incluye, porque depende de la escena y de lo contrario dejaría valores sin sentido entre distintos conjuntos de datos.

T40refinementPruneInterval

DETALLES

Predeterminado: 0 (= desactivado) Rango: 0 o 100 – 5 000

TÉCNICO

Cada N iteraciones durante la fase de refinamiento (después de T2) se ejecuta un pase adicional de Prune, que elimina los Gaussians con sigmoid(opacity) < T41 refinementPruneOpacityThreshold. Sentido: durante la Densification hay llamadas regulares de control de densidad, después ya no — pero los Gaussians cuya opacidad sigue bajando permanecen en el buffer. En la práctica, este pruning adicional perjudica: junto con la segunda fase de Densification (T54) puede vaciar por completo el conjunto de Gaussians. En todos los ajustes preestablecidos está en 0 y en la interfaz no se puede modificar; si aun así se asigna mediante un archivo de ajuste preestablecido editado, 1 000 o 2 000 son valores razonables.

T41refinementPruneOpacityThreshold

DETALLES

Predeterminado: 0.0 (= „usar T14") Rango: 0 o 0.001 – 0.1

TÉCNICO

Umbral de opacidad separado para el pruning de refinamiento. Después de la Densification, la mayoría de los Gaussians han alcanzado una opacidad claramente más alta (> 0.001), de modo que el T14 pruneOpacityThreshold estándar sería demasiado laxo. Si T40 está activo, este campo determina el umbral propio. Con 0.0 se sigue usando T14. Solo relevante si T40 > 0.

T42midTrainingCompactificationIterations

DETALLES

Predeterminado: [] (= desactivado) Rango: [Int], valores en (densifyUntilIteration, maxIterations)

TÉCNICO

Puntos de iteración explícitos durante la fase de refinamiento, en los que se ejecuta un pase de Compactification (elimina sigmoid(opacity) < 0.01 + Gaussians de escala atípica (outlier), la misma lógica que T56 postTrainingCompactification). Sentido: las fases de refinamiento largas pueden mostrar acumulación de confeti/floaters, cuyos SH luego sobreajustan en artefactos específicos de la vista. Configuración típica si se activa: [10000, 20000, 30000] para 40K Classic. PERO: las marcas de limpieza elegidas libremente empeoran sistemáticamente el resultado final — el número de Gaussians desciende claramente, pero el error de imagen aumenta más aún. Como lista de iteraciones de libre elección, el campo permanece por ello vacío en todos los ajustes preestablecidos. El efecto en sí lo consigues en la interfaz mediante el interruptor Floater Cleanup en la sección del Inspector „Training": en las ejecuciones clásicas a partir de 30 000 iteraciones, coloca dos pasadas de limpieza a mitad del entrenamiento. Las marcas propias solo se pueden establecer mediante un archivo de ajuste preestablecido editado.

T43frustumCullEnabled

DETALLES

Predeterminado: false Rango: boolean

TÉCNICO

Después del entrenamiento se eliminan todos los Gaussians que se encuentran fuera de la unión de todos los frustums de cámara de entrenamiento. Esos Gaussians nunca estuvieron limitados por la señal de loss y son siempre floaters. Especialmente efectivo en escenas en las que la Novel-View se encuentra detrás o al lado de la trayectoria de la cámara (por ejemplo, la parte trasera de un vuelo de dron lineal) — los floaters ahí nunca son visibles durante la fase de entrenamiento, pero sí al moverse posteriormente en el visor 3D. En vuelos de dron esto reduce visiblemente los floaters, por lo que está disponible como opción a activar. Predeterminado en false, porque en capturas de objetos con cobertura orbital completa la unión de frustums abarca toda la escena y la función no elimina nada — se ofrece en Settings bajo „Floater Reduction". El ajuste preestablecido Outdoor no lo activa, porque el Sky-Dome resuelve ahí mejor el mismo problema.

T44frustumCullExpansion

DETALLES

Predeterminado: 1.1 Rango: 1.0 – 2.0

TÉCNICO

Margen NDC para T43 frustumCullEnabled. 1.0 cortaría exactamente en el borde de la imagen, lo que recortaría demasiado los splats inestables en el borde de la imagen. 1.1 = 10 % de padding más allá del encuadre exacto de la cámara — da algo de tolerancia para píxeles de borde que en una Novel-View ligeramente desplazada podrían llegar a ser visibles. Valores > 1.2 hacen que el cull sea prácticamente ineficaz, porque el frustum ampliado abarca mucho más espacio.

Sky-Dome (T45–T48)

T45skyDomeEnabled

DETALLES

Default: false (Inicializador + todos los Presets excepto P9 Outdoor) Range: boolean

TÉCNICO

Antes de iniciar el entrenamiento se genera una nube de puntos esférica (Fibonacci-sphere con T46 puntos de muestra), colocada a un radio de T47 skyDomeRadiusMultiplier × scene_extent alrededor del centro de la escena e inicializada con los colores de los píxeles enmascarados como cielo de todas las cámaras de entrenamiento (ver T20 skyMaskingEnabled). Estos Gaussians de Sky-Dome se insertan al principio del buffer de Gaussians y se "congelan" durante el entrenamiento (los gradientes de posición/escala/rotación = 0, solo SH y opacidad permanecen optimizables). Efecto: en lugar de zonas "confeti" negras en la lejanía, el usuario ve un cielo real en las vistas nuevas (novel views). En escenas de drones y paisajes esto funciona muy bien; en el Preset Outdoor (P9) está activado por defecto. En escenas de interior déjalo desactivado — la esfera colgaría sin sentido fuera de la habitación.

T46skyDomeSampleCount

DETALLES

Default: 5 000 Range: 1 000 – 50 000 (típico 2 000 – 10 000)

TÉCNICO

Número de puntos de muestra Fibonacci-sphere en la esfera del Sky-Dome. Valores más altos → Sky-Dome más denso (mejor para resoluciones grandes y mucho cielo visible), pero mayor necesidad de memoria. 5 000 es el punto óptimo para renderizados en 4K; con resoluciones más bajas bastan 2 000–3 000. Los puntos se inicializan según la distancia coseno a cada vector de vista de cámara de entrenamiento con los píxeles enmascarados como cielo correspondientes — los puntos de muestra cuyo cono de visión no ve ninguna cámara quedan atrás con un valor inicial de opacidad bajo, pero no se modifican durante el entrenamiento (congelados).

T47skyDomeRadiusMultiplier

DETALLES

Default: 30.0 (Inicializador + la mayoría de los Presets), 59.0 (P9 Outdoor) Range: 5.0 – 200.0

TÉCNICO

Radio de la esfera del Sky-Dome relativo a la extensión de la escena (= distancia media entre posiciones de cámara). 30 = la esfera tiene 30 veces el diámetro de la nube de cámaras. Demasiado pequeño (< 5) → el Sky-Dome interfiere con la escena misma (p. ej. un splat del Sky-Dome termina en primer plano); demasiado grande (> 100) → pérdida de precisión float32 en las posiciones del Sky-Dome, lo que provoca fallos de renderizado (glitches) en la lejanía. Para escenas exteriores amplias, 59.0 es el valor adecuado — el 30.0 por defecto es demasiado pequeño para paisajes profundos, en cuyo caso los píxeles del Sky-Dome se renderizan visiblemente como una "pared" en los bordes de la imagen.

T48frozenGaussianCount

DETALLES

Default: 0 (= ningún Gaussian congelado) Range: 0 o 1 – T46

TÉCNICO

Número de Gaussians al principio del buffer cuyos gradientes de posición/escala/rotación se ponen a cero en el optimizador — permanecen espacialmente rígidos durante todo el entrenamiento. El control de densidad no puede clonarlos, dividirlos ni podarlos. Se usa para la inyección del Sky-Dome (ver T45): cuando el Sky-Dome está activado, este campo se ajusta automáticamente a T46 skyDomeSampleCount. También es posible fijarlo manualmente (p. ej. para congelar una nube de puntos preposicionada de un escaneo LiDAR), pero no es accesible directamente en la interfaz. Importante: los primeros N Gaussians del buffer son siempre los congelados — el orden en el buffer decide, no un índice explícito.

Adam + Programación de LR (T49–T55)

T49adamResetIteration

DETALLES

Predeterminado: 0 (= desactivado) Rango: 0 o 100 –

TÉCNICO

Iteración en la que los acumuladores de momento del optimizador Adam (m1, m2) se reinician a cero. La corrección de sesgo posterior corre con (iter - adamResetIteration) en vez de con iter. Un reinicio tras el final de la densificación empeora el resultado notablemente. Motivo: el momento de Adam acumulado durante la densificación aporta información sobre las magnitudes de gradiente típicas y acelera la fase de refinamiento. Descartarlo cuesta a los primeros ~500 iteraciones de refinamiento en convergencia. Por eso está en todos los ajustes preestablecidos en 0 y no es ajustable en la interfaz.

T50positionLRScheduleEndIteration

DETALLES

Predeterminado: 0 (Inicializador = "usa maxIterations"), 20 000 (.full — Cosine termina en 20K a pesar de maxIter=35K), 30 000 (.fullClassicPaper) Rango: 0 o 1 000 –

TÉCNICO

Iteración en la que la curva de Cosine-Annealing para el LR de posición alcanza su mínimo. Si es 0, es idéntico a T1 maxIterations. Si es > 0, la programación corre hasta este valor y luego permanece constante en T4 positionLearningRateFinal. Esto permite una "fase de refinamiento extendida" con una tasa de aprendizaje mínima pero constante — refina posiciones lentamente sin nuevo decaimiento. .full hace esto (fin de la programación en 20K, el entrenamiento corre hasta 35K); en el entorno — 15K a 25K — apenas cambia algo, 20K es el mejor compromiso. Se sigue usando en combinación con T51 para también modificar los LR que no son de posición en la fase extendida.

T51extendedPhaseLRDecay

DETALLES

Predeterminado: 0.0 (= desactivado, LRs constantes) Rango: 0 o 0.01 – 1.0

TÉCNICO

Multiplicador mínimo para los LRs que no son de posición (escala, rotación, opacidad, SH) en la "fase extendida" — es decir: después de alcanzar T50 y que el LR de posición ya está en T4. Si es 0.1, escala/rotación/opacidad/SH decaen a su vez de forma cosine desde 1.0 (= su LR estándar) hasta 0.1× de su estándar. Si es 0.0 (predeterminado), permanecen constantes. Un decaimiento completo hasta cero produce el mismo resultado que ningún decaimiento — el comportamiento parece más limpio con decaimiento, pero no es mensurablemente mejor. Por eso está en todos los ajustes preestablecidos en 0 y no es ajustable en la interfaz.

T52adaptiveDensifyThreshold

DETALLES

Predeterminado: false Rango: boolean

TÉCNICO

Experimental: si es true, la app calcula en cada paso de densificación el p98 de la distribución actual de gradientes y lo usa como umbral dinámico (limitado a al menos 0.5× del valor configurado en T11, para que no se desvíe demasiado). Hipótesis: la adaptación automática a la fase actual de la escena haría el control de densidad más robusto — p.ej. poda más estricta al principio, más laxa después, o viceversa. En la práctica, el número de gaussianas colapsa dramáticamente — poda masiva, porque el p98 en las primeras iteraciones es extremadamente alto y después casi nada supera el umbral. El umbral fijo ya está bien calibrado, la adaptación dinámica perjudica más de lo que ayuda. T77 ofrece una lógica adaptativa alternativa vía mediana móvil, que evita el problema.

T53mergeAfterDensification

DETALLES

Predeterminado: false (Inicializador), true (.full, .classicBalanced, .fullClassicPaper) Rango: boolean

TÉCNICO

Al final de la fase de densificación (iteración T2) se realiza un único paso de fusión, que combina gaussianas cercanas entre sí con escala y color similares. Reduce el número de gaussianas típicamente entre 5–15 % sin pérdida visible de calidad. Motivo: tras una clonación intensiva surgen clústeres de gaussianas casi idénticas que no aportan nada nuevo — la fusión libera capacidad del optimizador para otras áreas. Estándar en los ajustes preestablecidos Classic-Quality. No se usa con MCMC, porque MCMC evita mediante su lógica de reubicación que tales clústeres se formen.

T54densifyPhase2FromIteration

DETALLES

Predeterminado: 0 (= desactivado) Rango: 0 o T2T1

TÉCNICO

Experimental: permite una segunda fase de densificación, que comienza en esta iteración tras la pausa de refinamiento y corre hasta T55. Hipótesis: después de una fase de refinamiento, los acumuladores de gradiente tienen magnitudes más estables y pueden indicar con más precisión qué áreas todavía necesitan gaussianas adicionales. En la práctica, la segunda fase de densificación termina en una cascada hasta cero gaussianas — junto con la poda de refinamiento (T40) vacía el búfer por completo. Por eso está en todos los ajustes preestablecidos en 0 y no es ajustable en la interfaz.

T55densifyPhase2UntilIteration

DETALLES

Predeterminado: 0 Rango: 0 o T54T1 Definido en:

TÉCNICO

Fin de la segunda fase de densificación. Solo relevante si T54 > 0. Ambos campos juntos desactivados.

Postprocesado + Apple AI (T56–T60)

T56postTrainingCompactification

DETALLES

Default: true (en todos los Presets de producción), false (.quickTest, .preview) Range: boolean

TÉCNICO

Al finalizar el entrenamiento, los Gaussians con sigmoid(opacity) < 0.01 se eliminan de forma definitiva (prácticamente ya no contribuyen a la imagen). Reduce el número de Gaussians en un 58 % típico y el tamaño del archivo exportado en un 55 % sin pérdida visible de calidad. Está activo por defecto en los Presets de producción — el resultado final debe poder entregarse lo más compacto posible. En .quickTest está desactivado, porque de todos modos una ejecución de diagnóstico no se exporta. A diferencia de T42 midTrainingCompactificationIterations, la compactificación se produce solo al final — el refinamiento puede usar todos los Gaussians hasta ese momento.

T57metalFXUpscaling

DETALLES

Default: false Range: boolean

TÉCNICO

⚠ Desactivado desde el 18-07-2026 y sin ningún efecto. El campo pertenecía al selector „Viewport Scaling" (Off/MetalFX/Lanczos) en el Inspector. El renderizador nunca lo leyó: la decisión de blit es puramente geométrica (renderizado con supersampling ⇒ downsample MPS-Lanczos para suavizar bordes, en caso contrario bilineal), y para la ruta MetalFX no existía en absoluto ningún punto de llamada. El selector y los dos mensajes falsos que alimentaba se han eliminado; la etiqueta del overlay ahora dice „Sampling", no „Scaling", y en ningún lugar de la app se hace upscaling mediante MetalFX. El campo en sí permanece, porque la configuración de entrenamiento se guarda por completo — está presente en cada escena guardada, en cada Preset y en el comentario de configuración de los PLY ya exportados; eliminarlo haría que la clave desaparezca silenciosamente al reescribirse y rompería ese intercambio. Por el mismo motivo, el campo está excluido de la comparación „Modified": una escena antigua puede llevar true, y ya no hay forma de restablecerlo desde la interfaz. Nada lo lee — no volver a conectarlo.

T58mpsLanczosScaling

DETALLES

Default: false Range: boolean

TÉCNICO

⚠ Desactivado desde el 18-07-2026 y sin ningún efecto — ver T57 metalFXUpscaling, donde también se explica por qué el campo debe seguir guardándose de todos modos. Cabe señalar expresamente un malentendido obvio: la app sí utiliza MPS-Lanczos en el Viewport, pero eso se controla únicamente por la geometría — una imagen renderizada con supersampling se reduce para suavizar los bordes. Eso es un downscaling, no un upscaling, y este campo nunca lo activó.

T59livePreviewInterval

DETALLES

Default: 50 (inicializador; los Presets no fijan este campo) Range: 0 (apagado), 50, 250 o 1 000 en el selector de ajustes

TÉCNICO

Con qué frecuencia se actualiza el visor 3D con los Gaussians actuales durante el entrenamiento. 50 = un nuevo render cada 50 iteraciones — suficiente para observar el progreso sin ralentizar el entrenamiento de forma perceptible. 0 = el visor no se actualiza en absoluto (entrenamiento en segundo plano, máxima velocidad). En ejecuciones MCMC largas conviene 250 o 1 000, porque la sobrecarga de actualización acaba pesando en el total. Rol especial: aunque el campo pertenece a la configuración de entrenamiento, es un ajuste a nivel de toda la app (Ajustes → Entrenamiento) y no forma parte de la receta de entrenamiento. Por ello está excluido de la comparación „Modified", se conserva al cambiar de Preset y, desde el 18-07-2026, ya no se toma del archivo al abrir una escena — antes, una escena cargada reemplazaba silenciosamente la frecuencia de imagen del usuario por la del autor de la escena, incluido „Off", y no había ningún otro sitio desde el que recuperarla.

T60perceptualLossWeight

DETALLES

Default: 0.0 (= desactivado) Range: 0 o 0.001 – 0.5

TÉCNICO

Peso de un término de pérdida perceptual (Multi-Scale-Blur-Feature-Matching). Capta la similitud estructural y textural en un nivel más alto que L1+SSIM — típicamente donde „píxel perfecto" importa menos que „parece realista". El valor es 0.0 (apagado) en todos los Presets. En la interfaz se ajusta mediante el control deslizante Perceptual Loss en la sección „Training" del Inspector, con un rango de 0 a 0,20 en pasos de 0,01; en 0 la app muestra „Off".

Densificación MCMC (T61–T73)

T61densificationStrategy

DETALLES

Predeterminado: .classic (Initializer + Presets clásicos), .mcmc (todos los presets MCMC + Scene-Class) Rango: .classic o .mcmc

TÉCNICO

Elige entre densificación clásica (Clon/Split/Prune, Kerbl et al.~2023) y densificación MCMC (Stochastic Gradient Langevin Dynamics con Relocation, Kheradmand et al.~NeurIPS 2024). Con .classic se evalúan T11–T16, con .mcmc los T62–T73. Cuidado al cambiar: los valores predeterminados de Classic y de MCMC están calibrados de forma completamente distinta — quien cambie el selector en la vista experta sin cargar un preset adecuado, se arriesga a una extinción masiva al estilo del bug de 1.4.3 (460 K → 5 en una iteración, porque MCMC-OpacityReg en 0.01 mata las opacidades clásicas). Por eso los valores predeterminados de inicialización MCMC son deliberadamente "suavizados" (todos los valores de regularización en 0.0).

T62mcmcMaxGaussians

DETALLES

Predeterminado: 150 000 (Initializer + .fullMCMC + .mcmcBalanced), 100 000 (.mcmcPreview), 1 500 000 (.fullMCMCMip — variante Mip-Splatting con 10× de presupuesto), 1.19 M (.renderPreset), 1.25 M (.outdoorPreset), 670 K (.indoorPreset) Rango: 0 (= "usar capacidad del buffer") o 10 000 – 5 000 000 Definido en:

TÉCNICO

Límite superior estricto para el número de Gaussians con la estrategia MCMC. El número crece gradualmente en T70 mcmcGrowthRate (típicamente 5 %) por paso de relocation hasta alcanzar este límite. 150 K es un buen punto de partida — muy por encima de eso la calidad de los splats se diluye (demasiadas Gaussians pequeñas y redundantes), muy por debajo la escena queda sub-densificada. En escenas muy grandes (p. ej., un vuelo de dron con 1 545 fotos con 158 K de init de SfM) 150 K es demasiado bajo — de ahí la ampliación de 1.4.5 T72 mcmcCapMultiplier + T73 mcmcAutoScaleByScene. Los presets de Scene-Class usan valores específicos de la escena entre 670 K (interior) y 1.25 M (exterior). Con el valor 0 el motor usa la capacidad completa del buffer como límite.

T63mcmcNoiseScale

DETALLES

Predeterminado: 0.00005 (5e-5 = valor predeterminado del paper) Rango: 1e-6 – 1e-3

TÉCNICO

Multiplicador para el ruido gaussiano que se añade a la posición de cada Gaussian en cada iteración MCMC (lógica SGLD). Más alto = más exploración (las Gaussians se desplazan más, encuentran potencialmente mejores lugares), más bajo = más explotación (las Gaussians se quedan donde ya están bien). 5e-5 es el valor adecuado — un valor claramente menor significa demasiado poca exploración, uno claramente mayor (1e-4) demasiada, y entonces los splats se desmoronan. Se atenúa mediante un decaimiento coseno a lo largo del tiempo de entrenamiento hasta T69 mcmcNoiseDecayEnd — al final del rango de decaimiento el ruido es efectivamente 0 y las Gaussians convergen.

T64mcmcOpacityRegWeight

DETALLES

Predeterminado: 0.0 (= desactivado en los valores predeterminados de RadianceKit, paper: 0.01) Rango: 0 o 0.001 – 0.05

TÉCNICO

Penalización L1 específica de MCMC sobre la opacidad. El valor predeterminado del paper, 0.01, empuja las Gaussians no utilizadas hacia cero, dejándolas disponibles para relocation. En RadianceKit el resultado sin esta regularización es medible mejor. Motivo: el criterio de pruning definido con T68 mcmcDeadOpacityThreshold basta por sí solo — una penalización L1 adicional también obliga a morir a Gaussians valiosas de opacidad baja. Por eso el valor predeterminado es 0. Atención: en la beta de 1.4.3 el valor predeterminado del Initializer era erróneamente 0.01, lo que resultó en el bug de extinción masiva (ver la explicación de T61); desde 1.4.4 está fijado en 0.0.

T65mcmcScaleRegWeight

DETALLES

Predeterminado: 0.0 (= desactivado, paper: 0.01) Rango: 0 o 0.001 – 0.05

TÉCNICO

Penalización L1 específica de MCMC sobre los autovalores de escala. Valor predeterminado del paper: 0.01. Aquí también el resultado sin regularización es mejor, por la misma razón que en T64. Desactivado en todos los presets MCMC de RadianceKit. Cuidado igual que en T64: bug de 1.4.3.

T66mcmcRelocationInterval

DETALLES

Predeterminado: 100 (Initializer + todos los presets MCMC, estándar del paper), 155 (P9 Exterior) Rango: 50 – 500

TÉCNICO

Intervalo de iteraciones en el que MCMC reubica Gaussians muertas (sigmoid(opacity) < T68 mcmcDeadOpacityThreshold) a nuevas posiciones. Los intervalos más cortos (unos 50) resultan demasiado disruptivos, la pérdida oscila; los claramente más largos (unos 200) le quitan a MCMC su capacidad de reacción. 100 es el valor correcto. En escenas de exterior es algo mayor, 155 — los intervalos más largos le dan a Adam más tiempo para integrar las Gaussians recién colocadas antes de que el siguiente evento de relocation las someta a presión.

T67mcmcWarmupIterations

DETALLES

Predeterminado: 500 Rango: 100 – 5 000

TÉCNICO

Número de iteraciones iniciales en las que aún no ocurre ninguna relocation MCMC. Solo después de este calentamiento comienza la lógica de reubicación. Sentido: en las primeras iteraciones los valores de opacidad todavía no se han estabilizado — si se empezara directamente con la reubicación, las Gaussians se colocarían en los lugares equivocados y tendrían que volver a moverse enseguida, lo que destruye el momentum de Adam. Valor predeterminado del paper: 500. RadianceKit adopta este valor porque ha demostrado ser robusto.

T68mcmcDeadOpacityThreshold

DETALLES

Predeterminado: 0.005 (Initializer, estándar del paper), 0.01 (.fullMCMC y todos los presets MCMC) Rango: 0.001 – 0.05

TÉCNICO

Umbral de sigmoid(opacity) por debajo del cual una Gaussian se considera "muerta" y es candidata a relocation. 0.01 es el valor adecuado — 0.005 apenas cambia algo, 0.02 es peor. Más alto = reubicación más agresiva (se mueven más Gaussians), más bajo = más cauteloso. 0.01 corresponde aproximadamente a un "0.5 % de visibilidad visual". P10 Interior usa 0.0142.

T69mcmcNoiseDecayEnd

DETALLES

Predeterminado: 0 (Initializer = "sin decaimiento"), 160 000 (.fullMCMC = 80 % de 200K), 96 000 (.mcmcBalanced = 80 % de 120K), 40 000 (.mcmcPreview) Rango: 0 o 1 000 –

TÉCNICO

Iteración en la que el ruido de T63 mcmcNoiseScale se atenúa completamente hasta cero (decaimiento coseno de la iteración 0 hasta aquí). El 80 % de maxIterations es el valor adecuado — eso le da a MCMC suficiente tiempo de exploración, pero deja el último 20 % para la convergencia sin ruido. 0 = ruido constante durante todas las iteraciones (rara vez tiene sentido, MCMC no puede converger entonces).

T70mcmcGrowthRate

DETALLES

Predeterminado: 0.05 (estándar del paper = 5 %) Rango: 0.01 – 0.2

TÉCNICO

Tasa de crecimiento del objetivo de población MCMC por paso de relocation. La lógica: en cada evento de reubicación se aumenta el tamaño objetivo de la población en (1 + growthRate), hasta alcanzar T62 mcmcMaxGaussians (o la variante escalada mediante T72/T73) . 0.05 es el valor adecuado — valores más altos provocan un crecimiento demasiado rápido (se insertan Gaussians antes de que el momentum de Adam pueda integrarlas), valores más bajos producen escenas sub-densificadas al final.

T71mcmcSigmoidK

DETALLES

Predeterminado: 100.0 Rango: 10.0 – 500.0 Definido en:

TÉCNICO

Parámetro de nitidez sigmoide para la atenuación de ruido MCMC. En el paso SGLD el ruido por Gaussian se atenúa de forma que las Gaussians muy opacas (cuyo logit es positivo) reciben exponencialmente menos ruido que las poco opacas. K = 100 es agudo, es decir, la transición de "ruido total" a "sin ruido" ocurre muy rápido alrededor de una opacidad de 0.5. K = 100 es el valor adecuado — valores menores (10–50) dejan "temblar" también a las Gaussians muy opacas (destruye Gaussians ya convergidas), valores mayores (> 500) hacen que la transición sea artificialmente abrupta y las Gaussians muertas ya no se mueven en absoluto.

T72mcmcCapMultiplier

DETALLES

Predeterminado: 3.0 (Initializer + .fullMCMC), 2.0 (.mcmcPreview), 2.5 (.mcmcBalanced), 2.98 (P8 Renderizado), 5.32 (P9 Exterior), 1.76 (P10 Interior) Rango: 0 (= desactivado) o 1.0 – 10.0

TÉCNICO

Función de 1.4.5: escalado adaptativo del límite según la escena. Cuando T73 mcmcAutoScaleByScene es true, el límite efectivo se calcula como (limitado a la capacidad del buffer). Contexto: en escenas grandes (p. ej., un vuelo de dron con 1 545 fotos → 158 K init de SfM) T62 = 150 000 es demasiado bajo — el control de densidad no podría crecer en absoluto. Con el multiplicador 3.0 el límite se escala en este ejemplo a 474 K (158 K × 3.0). Los presets de Scene-Class usan valores específicos de la escena: Exterior se beneficia de un multiplicador alto (5.32 → ~830 K de límite con 156 K de puntos de init), Interior se conforma con 1.76 (las paredes se saturan antes). Para la resolución completa del límite consulta el método -.

T73mcmcAutoScaleByScene

DETALLES

Predeterminado: true (Initializer + todos los presets MCMC) Rango: boolean

TÉCNICO

Función de 1.4.5: interruptor maestro para la lógica de límite consciente de la escena (ver T72 +). Si es false, se usa exclusivamente T62 mcmcMaxGaussians como límite (vuelve al comportamiento de 1.4.4). Está activado por defecto porque de lo contrario reaparecerían los problemas de extinción masiva en escenas grandes de 1.4.3. Desactívalo manualmente solo si quieres establecer explícitamente un límite fijo — p. ej., para entrenar una variante de 150 K cuyo tamaño final sea predecible.

Mip-Splatting (T74–T76)

Estado: Mip-Splatting no ha aportado ninguna mejora de calidad en la práctica y en algunas escenas exteriores incluso ha resultado perjudicial. Los campos siguen siendo opcionales para experimentos; en todos los ajustes preestablecidos entregados, Mip-Splatting está desactivado.

T74useMipSplatting

DETALLES

Valor por defecto: false (todos los Presets de producción), true (.fullMCMCMip — rama de investigación) Rango: booleano

TÉCNICO

Activa Mip-Splatting (Yu et al.~CVPR 2024): filtro de suavizado 3D + filtro 2D + compensación α, que limita la frecuencia por Gaussian al límite de Nyquist de la tasa de muestreo de la cámara de entrenamiento más densa. Objetivo teórico: eliminar el aliasing al renderizar en escalas fuera de entrenamiento (0.5× o 2× de la resolución de entrenamiento). Está activado y es funcionalmente correcto en los shaders de preprocesamiento y de proyección inversa. En la práctica, sin embargo, la mejora de calidad esperada no se materializó: al renderizar en la resolución de entrenamiento prácticamente no cambia nada, y en escenas exteriores la imagen incluso empeora. Una explicación posible: el suavizado 3D actúa en contra de la relocalización MCMC en cuanto hay muchos Gaussians en juego. El campo sigue disponible para tus propios experimentos multiescala.

T75mipSmoothing3DScale

DETALLES

Valor por defecto: 0.2 (valor por defecto del paper) Rango: 0.05 – 1.0

TÉCNICO

Parámetro de escala de suavizado 3D (Yu et al.~§3.3, valor por defecto del paper 0.2). Mayor = más suavizado en el espacio del mundo por Gaussian (= más anti-aliasing, pero también más desenfoque en la escala por defecto), menor = más nítido pero más propenso al aliasing. Solo se consulta cuando T74 useMipSplatting = true. No se ha optimizado más — ya con el valor por defecto del paper de 0.2, Mip-Splatting no aporta ninguna mejora.

T76mipFilter2DVariance

DETALLES

Valor por defecto: 0.3 (= exactamente el comportamiento anterior) Rango: 0.1 – 1.0

TÉCNICO

Varianza del filtro Mip 2D, que se añade a la diagonal Σ_2D (varianza directa, no al cuadrado). 0.3 es exactamente el valor que antes estaba fijo en el kernel. Si T74 useMipSplatting = false, el kernel ignora este valor por completo y escribe el 0.3 codificado — de modo que se garantiza que nada cambia respecto al comportamiento anterior. Si está activado, se utiliza el valor establecido aquí. Permanece en el catálogo de campos para los barridos (sweeps) de Mip.

Densificación Adaptativa (T77–T79)

T77adaptiveDensification

DETALLES

Default: false Range: boolean

TÉCNICO

Rolling-Median-Tracker como alternativa al T11 densifyGradThreshold fijo. Si es true, en cada Densify-Step el umbral actual se sobrescribe con median(letzte N avgGrad-Samples) × T79 adaptiveDensifyMultiplier. N = T78 adaptiveWindow. Más estricto que la variante p98 de T52, que allí dispara el Mass-Pruning: la mediana por 2 se sitúa en estado estacionario aproximadamente en el p70–p80 de la distribución de gradientes. Activado por sí solo, este campo no aporta ninguna ganancia de calidad; junto con el currículum (ver T80/T81) sí — allí el currículum aporta la ganancia, este campo más bien la estabilidad. No existe un control para esto: el campo está desactivado en todos los ajustes preestablecidos y solo puede configurarse mediante un archivo de ajuste preestablecido editado.

T78adaptiveWindow

DETALLES

Default: 1 000 Range: 100 – 10 000 Defined in:

TÉCNICO

Rolling-Median-Window en eventos de densificación (NO iteraciones — cada paso de T13 densifyInterval entrega una muestra). Default 1 000 — con esto las últimas 100 000 iteraciones de entrenamiento contribuyen a la mediana, es decir, típicamente todo el historial de entrenamiento hasta este punto. Fase temprana (antes de T78 muestras): el tracker devuelve nil → retorno al umbral fijo T11. Solo relevante si.

T79adaptiveDensifyMultiplier

DETALLES

Default: 2.0 Range: 1.0 – 4.0

TÉCNICO

Multiplicador sobre la mediana móvil para el umbral adaptativo. El valor por defecto 2.0 corresponde aproximadamente al p70–p80 de la distribución de gradientes típica. Más bajo = crecimiento más agresivo (más clones), más alto = más estricto (menos clones). En el rango 1.5–3.0, 2.0 es el mejor valor. Solo relevante si.

Curriculum (T80–T81)

T80curriculumResolutionRamp

DETALLES

Default: false Range: boolean

TÉCNICO

La resolución de entrenamiento empieza en 0.5× y cambia en T50 positionLRScheduleEndIteration / 2 (o T1 maxIterations / 2, si T50 no está definido) a T22 trainingRenderScale. Sobrescribe T23 resolutionWarmupScale cuando está activado. De los dos añadidos adaptativos (ver T77), este curriculum aporta la verdadera ganancia de calidad — el incremento gradual de la resolución le da a la app tiempo para encontrar la geometría gruesa en la resolución más baja, antes de pasar al trabajo de detalle fino. No es ajustable en la interfaz — solo mediante un archivo de preset editado, y entonces conviene combinarlo con T81.

T81curriculumSHProgression

DETALLES

Default: false Range: boolean

TÉCNICO

Sobrescribe T21 shDegreeUpgradeIterations con [maxIter/4, maxIter/2, maxIter*3/4], distribuyendo así los aumentos de grado SH uniformemente a lo largo del tiempo de entrenamiento en lugar de concentrarlos al principio. Hipótesis: se establece una geometría estable antes de la explosión de detalle de color, lo que posiciona con mayor precisión los efectos de brillo dependientes de la dirección de vista. Junto con T77 esto aporta una ganancia en algunas escenas; quien la sostiene es este campo, T77 solo no basta. No es ajustable en la interfaz — solo mediante un archivo de preset editado.

Ajustes preestablecidos estáticos (TP1–TP9)

Aquí solo se muestran las diferencias estructurales respecto al valor predeterminado del inicializador. La descripción de marketing completa de los once ajustes preestablecidos de la interfaz P1–P11 la encuentras en el capítulo 7.

TP1.preview

DETALLES

Ajuste preestablecido de diagnóstico/vista previa para sistemas ≥ 10 GB de RAM. Overrides frente al inicializador:

  • maxIterations 30 000 → 5 000
  • densifyUntilIteration 15 000 → 3 500 (70 % de maxIter)
  • positionLearningRateFinal 1.6e-6 → 1.6e-5 (10 veces más alto, decaimiento menos agresivo)
  • shDCLearningRate, shRestLearningRate, opacityLearningRate, scaleLearningRate, rotationLearningRate cada uno ×2
  • opacityResetInterval 3 000 → 100 000 (efectivamente desactivado — el reset destruiría entrenamientos tan cortos)
  • shDegreeUpgradeIterations [1K, 2K, 3K][1K, 2K] (el grado 3 no converge en ejecuciones tan cortas)
  • trainingRenderScale 1.0 → 0.5

TP2.full

DETALLES

Calidad de producción clásica. Overrides:

  • maxIterations 30 000 → 35 000 (por encima de esto amenaza el sobreentrenamiento: más Gaussians sin ganancia de calidad)
  • densifyUntilIteration 15 000 → 5 000 (valor contrastado; detenerse más tarde es peor)
  • Todos los LR ×2
  • positionLearningRateFinal 1.6e-6 → 1.6e-5 (10 veces más alto que el valor predeterminado del paper)
  • densifyGradThreshold 2e-6 → 1.1e-6 (calibrado para una resolución de 1.0×)
  • densifyInterval 100 → 200
  • pruneOpacityThreshold 0.005 → 0.001
  • opacityResetInterval 3 000 → 100 000 (efectivamente desactivado)
  • shDegreeUpgradeIterations [1K, 2K, 3K][2K, 5K, 8K] (ascenso de grado retrasado)
  • opacityDecayFactor 0.0 → 0.9995 (esquema HTGS, ganancia de calidad notable)
  • opacityDecayInterval 50 (sin cambios)
  • mergeAfterDensification false → true
  • positionLRScheduleEndIteration 0 → 20 000
  • postTrainingCompactification true (ya era el valor predeterminado del inicializador para .full)

TP3.fullClassicPaper

DETALLES

Variante clásica fiel al paper de TP2. Overrides frente a TP2:

  • maxIterations 35 000 → 30 000 (estándar del paper)
  • densifyUntilIteration 5 000 → 15 000 (paper: 50 % de maxIter)
  • positionLearningRateFinal 1.6e-5 → 1.6e-6 (valor predeterminado del paper)
  • opacityLearningRate, scaleLearningRate, rotationLearningRate de vuelta a los valores predeterminados del paper (0.05, 0.005, 0.001)
  • densifyGradThreshold 1.1e-6 → 2e-7 (calibrado para ~1–2 M Gs en Bicycle)
  • densifyInterval 200 → 100 (paper)
  • pruneOpacityThreshold 0.001 → 0.005 (valor predeterminado del paper)
  • opacityResetInterval 100 000 → 3 000 (paper §5.2, arriesgado — cuesta calidad en la configuración de RadianceKit)
  • opacityDecayFactor 0.9995 → 0.0 (el paper no tiene decaimiento)
  • positionLRScheduleEndIteration 20 000 → 30 000 (el coseno recorre el 100 % de maxIter)

TP4.fullMCMC

DETALLES

Calidad de producción MCMC. Overrides frente al inicializador:

  • maxIterations 30 000 → 200 000 (MCMC necesita alrededor de 5 veces más iteraciones que Classic)
  • densifyUntilIteration 15 000 → 160 000 (80 % de maxIter)
  • positionLearningRateFinal 1.6e-6 → 1.6e-5
  • Programación de LR como en TP2 (todos ×2)
  • ssimWeight 0.2 → 0.05 (MCMC necesita una señal L1 más fuerte)
  • shDegreeUpgradeIterations [1K, 2K, 3K][2K, 5K, 8K]
  • densificationStrategy .classic.mcmc
  • mcmcMaxGaussians 150 000 (ya en el inicializador, confirmado en el ajuste preestablecido)
  • mcmcNoiseScale 5e-5 (valor del paper, contrastado)
  • mcmcDeadOpacityThreshold 0.005 → 0.01
  • mcmcNoiseDecayEnd 0 → 160 000 (80 % de maxIter)
  • mcmcCapMultiplier 3.0 (ya en el inicializador)
  • mcmcAutoScaleByScene true (ya en el inicializador)
  • opacityResetInterval 3 000 → 200 000 (efectivamente desactivado, MCMC usa Reloc en lugar de reset)

TP5.fullMCMCMip

DETALLES

Variante Mip-Splatting de TP4 con el presupuesto de Gaussians del paper original. Overrides frente a TP4:

  • mcmcMaxGaussians 150 000 → 1 500 000 (10×, magnitud del paper)
  • useMipSplatting false → true (Mip activado)

TP6.classicBalanced

DETALLES

Classic de gama media. Overrides frente a TP2:

  • maxIterations 35 000 → 20 000 (ofrece prácticamente lo mismo que 30 000, con un tiempo de espera notablemente más corto)
  • positionLRScheduleEndIteration 20 000 → 0 (el coseno recorre maxIter = 20K, sin fase prolongada)

TP7.mcmcPreview

DETALLES

Diagnóstico MCMC. Overrides frente a TP4:

  • maxIterations 200 000 → 60 000
  • densifyUntilIteration 160 000 → 48 000 (80 %)
  • mcmcMaxGaussians 150 000 → 100 000
  • mcmcNoiseDecayEnd 160 000 → 40 000
  • mcmcCapMultiplier 3.0 → 2.0 (la vista previa escala de forma más contenida)

TP8.mcmcBalanced

DETALLES

MCMC de gama media. Overrides frente a TP4:

  • maxIterations 200 000 → 120 000
  • densifyUntilIteration 160 000 → 96 000 (80 %)
  • mcmcNoiseDecayEnd 160 000 → 96 000 (80 %)
  • mcmcCapMultiplier 3.0 → 2.5 (entre Preview 2.0 y Full 3.0)

TP9.quickTest

DETALLES

Prueba funcional pura. Overrides frente al inicializador:

  • maxIterations 30 000 → 1 000
  • densifyUntilIteration 15 000 → 500
  • densifyGradThreshold 2e-6 → 4e-6 (calibrado para una resolución de 0.25×)
  • densifyInterval 100 → 50
  • opacityResetInterval 3 000 → 100 000 (desactivado, ya que sería demasiado corto)
  • trainingRenderScale 1.0 → 0.25

Cómo determina la app el límite de gaussianas

La respuesta definitiva a la pregunta «¿hasta cuántas gaussianas puede dejar crecer MCMC como máximo?». Intervienen tres magnitudes: el valor configurado en T62 mcmcMaxGaussians, el número de puntos de inicialización SfM de tu escena y la capacidad de buffer reservada de antemano. La app calcula en este orden:

+ El valor de partida es T62. Si está en 0, la app establece 150 000 — este suelo de seguridad evita el incidente de extinción masiva de 1.4.3. + Si T73 mcmcAutoScaleByScene está activado y T72 mcmcCapMultiplier es mayor que 0, la app compara el valor de partida con «puntos de inicialización × T72» y toma el mayor de los dos valores. + Por último, limita el resultado a la capacidad del buffer.

Ejemplo: Bicycle (Mip-NeRF 360, 194 fotogramas) → inicialización SfM de ~156 K puntos, T62 = 150 000, T72 = 5.32, auto-escalado activado, capacidad de buffer de 8 M. 156 K × 5,32 da 830 K, que es más que los 150 000 y menos que los 8 M — así que el límite efectivo es 830 K. A este límite se ciñe la relocalización de MCMC.

Calcula el número máximo real de splats en MCMC. La app toma tu configuración «Max Gaussians», observa cuántos puntos tiene tu escena al principio, y escala con el multiplicador si «Auto-scale by scene» está activado. Así el límite se adapta a la escena, en lugar de imponer el mismo valor para una escena pequeña y una gigantesca. No tienes que hacer nada al respecto — la app calcula esto por sí sola al comenzar el entrenamiento.

¿Qué campo sirve para qué? (Hoja de referencia)

ObjetivoCampos a ajustar
Más detalle a distanciaT62 mcmcMaxGaussians alto, T72 mcmcCapMultiplier 5+
Más detalle en general (Classic)T1 maxIterations alto (≤ 40K), T2 densifyUntilIteration ≤ 14 % de T1
Reducir floaters en vuelos de dronT43 frustumCullEnabled activado, T20 skyMaskingEnabled activado, T45 skyDomeEnabled activado
Cielo más bonito en escenas exterioresT45 skyDomeEnabled activado, T47 skyDomeRadiusMultiplier 30–60
Archivo de exportación más pequeñoEstrategia .mcmc (T61), T56 postTrainingCompactification activado, T62 mcmcMaxGaussians ≤ 200K
Entrenamiento más rápidoT22 trainingRenderScale 0.5, reducir T1 maxIterations a la mitad — ¡pero no ambos a la vez!
Mejores reflejos especularesT21 shDegreeUpgradeIterations con [2K, 5K, 8K] (sin adelanto temprano), MCMC + 200K iter
Vista previa en directo con más frecuenciaT59 livePreviewInterval a 50 — el valor más denso que ofrece Ajustes → Entrenamiento
Transiciones más suaves en las sombrasT17 ssimWeight algo alto (0.15–0.25), pero no más de 0.3
Mantener los interiores compactosAjuste preestablecido P10 Indoor (, T72 = 1.76)

Campos peligrosos

Estos campos pueden provocar OOM, cierres de la app, extinción masiva de los Gaussians o datos de benchmark inservibles si se configuran mal. A tratar con precaución:

- T11 densifyGradThreshold — reducirlo a la mitad puede generar 2–4× más Gaussians, lo que satura rápidamente la memoria de la GPU. También hay que tener en cuenta: debe coincidir con T22 trainingRenderScale (1.0× → 1e-6, 0.5× → 2e-6, 0.25× → 4e-6). - T72 mcmcCapMultiplier — en escenas grandes con > 200 K puntos de inicialización SfM y un multiplicador > 5 se genera un Resolved-Cap de millones de Gaussians. Posible OOM en Macs con 36 GB de RAM. El valor de exteriores 5.32 funciona solo porque la escena de referencia correspondiente tiene alrededor de 156 K puntos de inicialización → 830 K de cap. - T39 testViewIndices — fijarlo manualmente en un archivo de preset puede invalidar una medición de calidad (todos los índices > N → sin holdouts). Deja la lista vacía. - T64 mcmcOpacityRegWeight y T65 mcmcScaleRegWeight — En la beta 1.4.3 se fijaron en 0.01, lo que provocó una extinción masiva (460 K → 5 Gaussians en una iteración). Desde la versión 1.4.4 están fijados en 0.0, pero aumentarlos manualmente puede reproducir el problema. - T15 opacityResetInterval — si no está en 100 000+ (efectivamente desactivado) y el entrenamiento dura menos de 10 000 iteraciones, el reset destruye la convergencia. Por eso .preview lo tiene en 100 000 a pesar de maxIterations = 5 000. - T54/T55 densifyPhase2* — La segunda fase de densificación termina en una cascada hasta llegar a cero Gaussians. Deja ambos en 0. - T74 useMipSplatting — no aporta ninguna mejora de calidad y en algunas escenas de exteriores incluso puede empeorar la calidad de imagen. Desactivado por defecto, solo para experimentos opcionales.

Si un campo está en esta lista y quieres cambiarlo, haz antes una copia de seguridad de tu preset actual (exportación como JSON) y piensa si puedes medir el resultado de forma reproducible — de lo contrario, después no sabrás si has provocado una mejora o un empeoramiento.