Guide utilisateur

Chapitre 6 — Configuration de l'entraînement

Aperçu du préréglage exporté en JSON et affiché dans TextEdit — champs id/name/category/version/createdAt/description, trainingConfig avec tous les paramètres pertinents (maxIterations 5000, densifyUntilIteration 3500, ssimWeight 0.20, renderScale 0.50, strategy classic, cameraAlignment applePhotogrammetry, densifyGradThreshold 2.0e-06, opacityResetInterval 3000, minOpacity 0.005, six interrupteurs booléens)
Aperçu du préréglage exporté en JSON et affiché dans TextEdit — champs id/name/category/version/createdAt/description, trainingConfig avec tous les paramètres pertinents (maxIterations 5000, densifyUntilIteration 3500, ssimWeight 0.20, renderScale 0.50, strategy classic, cameraAlignment applePhotogrammetry, densifyGradThreshold 2.0e-06, opacityResetInterval 3000, minOpacity 0.005, six interrupteurs booléens)

Un export JSON de préréglage typique. Champs de premier niveau : id (UUID), name, (classic | mcmc | sceneClass | custom), (version de schéma), (horodatage), (texte libre). L'objet imbriqué contient les paramètres critiques pour la reproductibilité — lors de l'import, tout le bloc est chargé dans la configuration d'entraînement, et les valeurs par défaut de la version de l'app remplissent les champs absents du JSON (par ex. après une mise à jour de l'app). Pour transmettre un préréglage à un autre Mac, il suffit d'envoyer ce fichier JSON.

La configuration d'entraînement est le cœur de chaque session d'entraînement dans RadianceKit. Elle rassemble chaque paramètre qui influence l'entraînement — du nombre maximal d'itérations aux huit taux d'apprentissage, en passant par les champs spéciaux pour MCMC, le Mip-Splatting, le curriculum et la logique de cap adaptée à la scène (scene-aware). Tu la modifies dans la barre latérale, dans la section Configuration d'entraînement (vue Expert), tu l'enregistres comme préréglage ou la transmets sous forme d'export JSON à un autre Mac. Lors de l'entraînement, c'est exactement cet objet qui est figé et transmis au backend GPU.

Ce chapitre est un document de référence pour les utilisateurs avancés. Il liste les 80 champs configurables de la configuration d'entraînement, les 9 préréglages fournis et la résolution du cap de gaussiennes selon la scène. En cas de doute, c'est la valeur définie par le préréglage choisi qui prévaut — tu la vois dans l'inspecteur ou dans l'export JSON du préréglage.

Table des matières :

+ Itération (T1–T2) + Taux d'apprentissage (T3–T10) + Densification — Classique (T11–T16) + Perte (T17–T20) + Progression du degré SH (T21) + Performance (T22–T24) + Diagnostic et préparation du nuage de points (T26–T30) + Régularisation (T31–T37) + Raffinement (T38–T44) + Sky-Dome (T45–T48) + Adam + LR-Schedule (T49–T55) + Post-traitement + Apple AI (T56–T60) + MCMC-Densification (T61–T73) + Mip-Splatting (T74–T76) + Densification adaptative (T77–T79) + Curriculum (T80–T81) + Préréglages statiques (TP1–TP9) + Comment l'app détermine le cap de gaussiennes + Quel champ sert à quoi ? (aide-mémoire) + Champs dangereux

Iteration (T1–T2)

T1maxIterations

DÉTAILS

Défaut : 30 000 (Initializer), 35 000 (.full), 200 000 (.fullMCMC) Plage : 1 000 – 500 000 (curseur UI), pas de limite supérieure stricte dans la logique

TECHNIQUE

Nombre total d'itérations d'entraînement que le backend parcourt. Une itération désigne un rendu forward d'une seule caméra d'entraînement, un passage backward sur toutes les composantes de loss (L1 + SSIM + régularisations optionnelles + masque de ciel) et un pas d'optimiseur Adam. Ce nombre agit directement sur les autres plannings : le taux d'apprentissage de position suit une courbe de cosine-annealing de 0 jusqu'à soit T1 lui-même, soit jusqu'à T50 positionLRScheduleEndIteration; la densification s'arrête à T2 densifyUntilIteration; la décroissance du bruit MCMC se termine à T69 mcmcNoiseDecayEnd; les mises à niveau du SH-Degree se produisent aux trois marques définies dans T21. Pour la densification classique, la plage éprouvée se situe entre 20 000 et 35 000 itérations, pour MCMC entre 60 000 et 200 000. Une augmentation drastique au-delà des valeurs prévues dans les préréglages apporte rarement un gain de qualité supplémentaire — le momentum d'Adam sature, et sans fin de décroissance du taux d'apprentissage, la loss stagne. Inversement, descendre en dessous de ~5 000 conduit à des géométries incomplètement convergées (le contrôle de densité a trop peu de temps pour cloner/scinder).

T2densifyUntilIteration

DÉTAILS

Défaut : 15 000 (Initializer), 5 000 (.full), 160 000 (.fullMCMC) Plage : 0 – T1 maxIterations

TECHNIQUE

Itération à partir de laquelle la densification s'arrête. Jusque là, les Gaussians sont clonés, scindés et élagués selon les règles paramétrées dans T11–T16 (Classic) ou T67–T70 (MCMC) ; ensuite, le nombre de Gaussians reste constant et seuls positions, rotations, échelles, opacités et coefficients SH sont encore optimisés (phase de refinement). Dans l'article original 3DGS, la valeur se situe à 50 % de T1, dans le préréglage .full de RadianceKit, seulement ~14 % (5 000 sur 35 000) : après environ 5 000 itérations, une densification supplémentaire dégrade plutôt le résultat — plus de floaters, plus de besoin en mémoire, aucun gain de qualité. MCMC en revanche laisse la relocation tourner jusqu'à 80 % de T1, car MCMC ne produit pas de floaters nuisibles. Si T2 est choisi trop petit (< 1 000), trop peu de Gaussians sont créés ; trop grand avec Classic (> 50 % de T1) entraîne un overgrowth et des outliers de saturation RGB (voir les constatations sur le surentraînement extérieur).

Learning Rates (T3–T10)

T3positionLearningRate

DÉTAILS

Défaut : 0.00016 Plage : 1e-7 – 1e-3 (recommandé)

TECHNIQUE

Taux d'apprentissage Adam pour la position XYZ de chaque Gaussian au début de l'entraînement (itération 0). Suit une courbe de cosine-annealing et diminue au fil de l'entraînement jusqu'à T4 positionLearningRateFinal. La valeur par défaut 0.00016 provient de l'article original 3DGS (Kerbl et al.~2023) et ne doit pas être mise à l'échelle dans RadianceKit même en cas d'augmentation de la résolution d'image — la position se déplace dans le système de coordonnées du monde, pas dans l'espace pixel. Une augmentation nette (> 0.0005) fait sauter les Gaussians sur de longues distances et déstabilise la loss ; des valeurs nettement inférieures (< 0.00005) empêchent des nuages de points mal initialisés de jamais trouver leur place. Pour la grande majorité des scènes, la valeur par défaut est donc le bon choix. Attention : avec .fullMCMC nous laissons délibérément cette valeur au défaut — MCMC a besoin de taux d'apprentissage constants pour sa logique de relocalisation, donc le tuning n'apporte rien ici.

T4positionLearningRateFinal

DÉTAILS

Défaut : 0.0000016 (Initializer + article), 0.000016 (.full, .fullMCMC — 10× plus élevé) Plage : 0 – T3 positionLearningRate

TECHNIQUE

Valeur finale de la courbe de cosine-annealing du LR de position. Elle est atteinte soit à T1 maxIterations, soit, si défini, à T50 positionLRScheduleEndIteration. Le préréglage RadianceKit .full utilise 0.000016 — soit 10× plus élevé que la valeur par défaut de l'article 0.0000016. Aussi bien une valeur finale nettement plus petite qu'une valeur de départ nettement plus grande dégradent sensiblement le résultat. La valeur finale élevée n'est pas un compromis mais un choix délibéré : en cas de decay trop fort, les Gaussians perdent pendant la phase de refinement leur capacité à s'ajuster aux nouveaux candidats de densification. La phase de schedule peut être raccourcie (T50 < T1), de sorte que T4 soit atteint avant la fin de l'entraînement et que le reste de l'entraînement se déroule avec un LR minimal constant — configuration typique : T50 = 20 000, T1 = 35 000, refinement donc à 0.000016 pendant 15 000 itérations.

T5shDCLearningRate

DÉTAILS

Défaut : 0.0025 (Initializer + article), 0.005 (.full et tous les préréglages MCMC — 2×) Plage : 0.0001 – 0.05

TECHNIQUE

Taux d'apprentissage Adam pour la composante DC (degré 0, donc l'albédo constant) de la couleur des harmoniques sphériques. SH-DC correspond au ton de base indépendant de la direction d'une Gaussian, en quelque sorte la « couleur de base ». RadianceKit double la valeur par défaut de l'article dans les préréglages Quality — cela accélère la convergence des couleurs, ce qui est nécessaire car avec un entraînement court (, 5 000 itérations) le SH-DC ne se stabiliserait sinon pas. Contrairement aux LR géométriques, le SH-DC n'a pas de decay ; le taux d'apprentissage reste constant sur toutes les itérations (ou ne suit que le decay optionnel de phase étendue de T51). Des valeurs nettement plus élevées encore (environ 0.01) dégradent à nouveau le résultat et rendent les couleurs instables.

T6shRestLearningRate

DÉTAILS

Défaut : 0.000125 (Initializer + article), 0.00025 (.full et MCMC — 2×) Plage : 0.000001 – 0.005

TECHNIQUE

Taux d'apprentissage Adam pour les coefficients SH d'ordre supérieur (degrés 1, 2, 3 — donc les composantes de couleur dépendant de la direction de vue, qui produisent les reflets, les réflexions et l'ombrage doux). 20× plus petit que T5 par convention de l'article, car ces coefficients croissent quadratiquement en nombre (3 pour le degré 1, 5 pour le degré 2, 7 pour le degré 3 → au total 15 flottants par Gaussian) et sans un taux d'apprentissage plus petit, ils saturerait l'image. Est débloqué en deux étapes — jusqu'au premier seuil dans T21 shDegreeUpgradeIterations, seul le degré 0 est actif (donc seulement T5), ensuite 1, plus tard 2, enfin 3. Des valeurs basses ici sont particulièrement importantes sur les scènes avec beaucoup d'éclairage diffus ; sur des surfaces très brillantes (carrosserie automobile, eau) ce n'est pas la peine de régler — la représentation SH en elle-même est limitée.

T7opacityLearningRate

DÉTAILS

Défaut : 0.05 (Initializer + article), 0.1 (.full, MCMC — 2×) Plage : 0.001 – 1.0

TECHNIQUE

Taux d'apprentissage Adam pour l'opacité en logit de chaque Gaussian. L'app stocke l'opacité comme une valeur flottante non bornée et la transforme avec une sigmoïde en [0, 1] ; le LR agit dans l'espace logit. Les préréglages Quality doublent la valeur par défaut de l'article à 0.1 ; cela rend le pruning plus efficace — les Gaussians mortes retombent plus vite en dessous de T14 pruneOpacityThreshold. La valeur la mieux adaptée dépend cependant de la configuration Adam ; l'interaction des deux n'est pas triviale. Des valeurs basses (< 0.01) font que les Gaussians « mortes » traînent éternellement et consomment de la mémoire ; des valeurs trop élevées (> 0.5) peuvent provoquer une explosion d'opacité, c'est pourquoi l'optimiseur limite fermement la valeur logit à [-15, 3].

T8opacityLearningRateFinal

DÉTAILS

Défaut : 0.0 (= « pas de decay ») Plage : 0 ou 0.001 – T7 opacityLearningRate

TECHNIQUE

Valeur finale optionnelle de cosine-decay pour le LR d'opacité. Si 0.0, le decay est désactivé et le LR d'opacité reste constant à T7 sur tout l'entraînement. Un decay de 0.1 à 0.01 dégrade nettement le résultat ; c'est pourquoi la valeur par défaut est « désactivé ». L'hypothèse derrière ce champ : dans la phase de refinement, un LR d'opacité constant pourrait provoquer une oscillation, de sorte que des splats ayant déjà atteint le bon degré de transparence soient à nouveau déplacés par des fluctuations aléatoires du gradient. Empiriquement, cela ne se confirme pas — la logique de clamping du logit y remédie de toute façon. Le champ reste disponible pour de futures expérimentations ; même des runs MCMC très longs (> 500K itérations) pourraient en profiter.

T9scaleLearningRate

DÉTAILS

Défaut : 0.005 (Initializer + article), 0.01 (.full, MCMC — 2×) Plage : 0.0001 – 0.1

TECHNIQUE

Taux d'apprentissage Adam pour les trois composantes d'échelle de chaque Gaussian dans l'espace log (RadianceKit stocke log(scale), pour que les échelles restent positives). La valeur par défaut de l'article 0.005, doublée dans RadianceKit à 0.01 pour une meilleure convergence d'échelle avec les configurations de taux d'apprentissage ajustées. Si la valeur reste à la valeur par défaut de l'article en combinaison avec les autres taux d'apprentissage Quality, il en résulte visiblement trop peu de Gaussians — le contrôle de densité ne peut pas cloner, car les mises à jour d'échelle suivent trop lentement. L'échelle contrôle l'étendue de chaque Gaussian — un apprentissage trop rapide produit des Gaussians en « aiguille » (splats extrêmement longs et fins, voir T34 scaleRatioPruneThreshold), un apprentissage trop lent laisse les splats rester trop compacts et le contrôle de densité doit trop souvent diviser.

T10rotationLearningRate

DÉTAILS

Défaut : 0.001 (Initializer + article), 0.002 (.full, MCMC — 2×) Plage : 0.0001 – 0.05

TECHNIQUE

Taux d'apprentissage Adam pour les quatre composantes de quaternion de chaque Gaussian. Le quaternion est renormalisé (norme L2 = 1) à chaque étape de l'optimiseur après la mise à jour Adam — sinon la matrice de covariance dégénérerait. RadianceKit double la valeur par défaut de l'article dans les préréglages Quality, car la rotation présente des magnitudes de gradient absolues plus petites que l'échelle / la position (sur la sphère unité chaque pas reste court) et sans ce doublement, la rotation serait nettement sous-convergée dans la fenêtre de 35 000 itérations. Sur les scènes NeRF-Blender (Lego, Chair), la rotation a un effet particulièrement marqué — les arêtes des objets ne s'alignent correctement qu'après 5 000–10 000 itérations.

Densification — Classic (T11–T16)

T11densifyGradThreshold

DÉTAILS

Par défaut : 0.000002 (Initializer, calibré pour une résolution 0.5×), 0.0000011 (.full, calibré pour 1.0×), 0.000004 (.quickTest, calibré pour 0.25×), 2e-7 (.fullClassicPaper) Plage : 1e-8 – 1e-3 (dépendant de la résolution)

TECHNIQUE

Seuil pour la norme L2 du gradient de position projeté dans l'espace écran, au-delà duquel une Gaussian est marquée pour clonage ou split. La valeur absolue dépend directement de la résolution d'entraînement — elle évolue approximativement comme 1/résolution² (plus de pixels = gradients par pixel plus petits). C'est pourquoi chaque niveau de T22 trainingRenderScale nécessite un seuil calibré : 0.25× → 4e-6, 0.5× → 2e-6, 1.0× → 5e-8 … 1.1e-6 (.full). La valeur par défaut du paper, 0.0002, est normalisée en NDC et n'est pas directement comparable dans le pipeline en espace monde de RadianceKit. Avec le flag T52 adaptiveDensifyThreshold, la valeur peut être calculée à l'exécution à partir du p98 de la distribution actuelle des gradients — sur des scènes réelles, le nombre de Gaussians s'effondre alors toutefois de façon spectaculaire (élagage massif) ; le flag reste désactivé. T77–T79 proposent une logique adaptative alternative via une médiane glissante. Ce champ n'est pas sans danger — diviser par deux génère 2–4× plus de Gaussians (pression mémoire, risque d'OOM) ; doubler la valeur peut sous-densifier la scène.

T12densifyFromIteration

DÉTAILS

Par défaut : 500 Plage : 100 – 5 000

TECHNIQUE

Première itération à partir de laquelle la Densification devient active. Avant cela, seul un apprentissage « brut » a lieu sur le nuage de points SfM initial, sans création de nouvelles Gaussians. La valeur par défaut 500 provient du paper 3DGS et laisse à l'initialisation le temps de se stabiliser — si la densification démarrait dès l'itération 0, des points SfM mal positionnés se cloneraient de nombreuses fois avant même de trouver leur véritable place. Un démarrage nettement plus tardif (vers 1 000) dégrade légèrement le résultat ; reste sur la valeur par défaut.

T13densifyInterval

DÉTAILS

Par défaut : 100 (Initializer, MCMC), 200 (.full) Plage : 50 – 1 000

TECHNIQUE

Le nombre d'itérations séparant deux étapes de Densification. Avec la valeur par défaut du paper, 100 — toutes les 100 itérations, la liste des candidats à la densification est évaluée, clonée/splittée, et simultanément la liste des candidats à l'élagage (sigmoid(opacity) < T14 pruneOpacityThreshold) est supprimée. Pour .full, 200 s'est avéré efficace — cela allège le GPU, car moins de passes de réorganisation sont exécutées, et laisse à chaque Gaussian plus de temps pour se stabiliser après une action de clonage. Des intervalles plus courts entraînent, dans la configuration Quality, une surdensification : nettement plus de Gaussians sont créées sans amélioration de l'image. Sous MCMC, ce même champ est interprété comme intervalle de relocalisation ; voir T67 mcmcRelocationInterval pour la logique spécifique à MCMC.

T14pruneOpacityThreshold

DÉTAILS

Par défaut : 0.005 (Initializer, Paper, MCMC), 0.001 (.full) Plage : 0.0001 – 0.1

TECHNIQUE

Seuil d'opacité sigmoïde en dessous duquel une Gaussian est supprimée lors de la prochaine étape de Densification. Agit en combinaison avec T7 opacityLearningRate et la logique de clamp-logit dans l'optimiseur. Dans .full, la valeur est de 0.001 au lieu de 0.005 — les splats qui ne jouent un rôle que sous des angles de vue exotiques sont ainsi conservés plus longtemps et contribuent au détail SH. Des valeurs encore plus petites (environ 0.0001) n'apportent plus rien : trop peu d'élagage est effectué et de la mémoire est gaspillée. Important : le contrôle de densité doit TOUJOURS élaguer, même si la capacité du buffer est déjà pleine par d'autres mesures — sinon les Gaussians mortes s'accumulent et le compte se fige.

T15opacityResetInterval

DÉTAILS

Par défaut : 3 000 (Initializer + Paper), 100 000 (.full = effectivement désactivé), 200 000 (.fullMCMC = désactivé) Plage : 1 000 – 100 000+

TECHNIQUE

Tous les combien d'itérations l'opacité de toutes les Gaussians est-elle réinitialisée à une valeur basse (~0.01) — une mesure issue du paper 3DGS pour réévaluer les splats « figés ». En combinaison avec le warmup de RadianceKit, la configuration d'entraînement stochastique et les taux d'apprentissage doublés, la réinitialisation d'opacité coûte sensiblement en qualité, et le clamp-logit dans l'optimiseur couvre de toute façon déjà cette fonction. Elle est donc pratiquement désactivée dans .full (100 000 > 35 000 = jamais déclenchée). Dans .fullClassicPaper (variante fidèle au paper), elle est délibérément remise à 3 000 — il s'agit là d'atteindre les budgets de Gaussians du paper original.

T16maxScreenSize

DÉTAILS

Par défaut : 0.0 (= désactivé) Plage : 0 (off) ou > 0

TECHNIQUE

Taille maximale en espace écran (en pixels projetés) qu'une Gaussian est autorisée à atteindre avant d'être forcée à se splitter. La valeur est fixée à 0 — le contrôle de densité de RadianceKit utilise à la place le seuil d'échelle en espace monde issu de la même logique de gradient. Reste dans le catalogue de champs car de futures expériences avec le Mip-Splatting (T74–T76) ou des stratégies de splatting spécifiques à la scène pourraient en bénéficier. L'activer (valeur > 0, p. ex. 20) forcerait les splats devenus très grands à l'écran à se diviser — pertinent pour de grandes surfaces murales lisses, où un seul splat géant offre trop peu de détail.

Loss (T17–T20)

T17ssimWeight

DÉTAILS

Défaut : 0.2 (Initialiseur + Paper + .full), 0.05 (tous les présets MCMC) Plage : 0.0 – 1.0

TECHNIQUE

Poids de la composante D-SSIM dans la fonction de perte combinée loss = (1 - λ) * L1 + λ * D-SSIM, où λ = T17. La valeur par défaut du paper 3DGS de 0.2 est le bon choix pour la Classic-Densification — déjà 0.3 dégrade nettement le résultat. Pour MCMC, la valeur adaptée se situe en revanche à 0.05, car MCMC, du fait de son exploration stochastique, a besoin d'une composante de signal L1 plus forte — des poids SSIM plus élevés diluraient les décisions de relocalisation. SSIM est nettement plus coûteux à calculer que L1 (fenêtres locales 11×11 sur toute l'image) ; RadianceKit utilise une implémentation accélérée par MPS qui reste sous 1 ms par image 1080p. Les présets Scene-Class utilisent des valeurs spécifiques à la scène entre 0.082 (.outdoorPreset) et 0.171 (.indoorPreset).

T18ssimWeightRefinement

DÉTAILS

Défaut : 0.0 (= « pas de changement, conserver ssimWeight ») Plage : 0 ou 0 – 1.0

TECHNIQUE

Valeur SSIM optionnelle pour la phase de raffinement après T2 densifyUntilIteration. Une augmentation de 0.2 à 0.3 pendant la phase de raffinement dégrade le résultat sur les deux mesures — L1 comme SSIM ; c'est pourquoi la valeur par défaut est 0.0. L'hypothèse derrière ce champ était qu'après la densification — lorsque plus aucun nouveau Gaussian n'apparaît — une composante SSIM plus forte maximiserait la netteté structurelle. Empiriquement faux : augmenter le poids SSIM revient indirectement à diminuer le poids L1, et L1 est le signal nettement plus pertinent lors de la phase de raffinement final. Le champ reste disponible pour de futures expériences avec une perte perceptuelle (T60) ou une perte de contour (T19), où une composition de perte spécifique au raffinement pourrait avoir du sens.

T19edgeLossWeight

DÉTAILS

Défaut : 0.0 (= désactivé) Plage : 0 ou 0.001 – 1.0

TECHNIQUE

Terme de perte expérimental : poids d'une perte L1 en domaine de gradient de Sobel, qui compare directement les contours de l'image (Sobel de la vérité terrain vs Sobel du rendu) en plus de L1+SSIM. Hypothèse : l'information de contour est une pierre angulaire perceptuelle de la qualité d'image et un terme explicite devrait encourager les Gaussians à mieux correspondre aux contours. En pratique, cela n'apporte rien : un poids notable (0.1) dégrade le résultat, un poids faible (0.01) ne change rien à la qualité, mais coûte du temps de calcul. La passe Sobel coûte un forward MPS supplémentaire sur la vérité terrain et le rendu. Donc désactivé en permanence. Cas d'usage futur : les scènes avec des contours artificiels nets (architecture, mobilier, rendus) pourraient en bénéficier — Les présets Scene-Class n'utilisent cependant pas ce terme à cette fin, mais mettent plutôt à l'échelle le poids SSIM.

T20skyMaskingEnabled

DÉTAILS

Défaut : false (Initialiseur et tous les présets) Plage : boolean

TECHNIQUE

Active le Sky Masking. Dans chaque image, à l'aide du framework Apple Vision, la région du ciel est masquée, et la perte dans cette zone est mise à zéro. But : les scènes extérieures souffrent souvent du fait que les pixels bleus/gris/blancs du ciel amènent l'app à placer des Gaussians précisément à cet endroit — ce qui est perçu comme un « floater ». Sans masque de ciel, la perte dans cette zone ne serait jamais nulle, car le ciel varie légèrement dans l'image et l'app essaie sans cesse de le reconstruire avec des splats. Le masque Vision est calculé une fois par caméra avant l'entraînement et conservé en RAM. Généralement activé conjointement avec T45 skyDomeEnabled (logique UI dans la vue des réglages). Pour les scènes intérieures ou les rendus synthétiques, laisser désactivé — le masque y détecterait à tort des plafonds ou des murs comme du « ciel ».

Progression du degré SH (T21)

T21shDegreeUpgradeIterations

DÉTAILS

Par défaut : [1_000, 2_000, 3_000] (Initializer), [2_000, 5_000, 8_000] (.full, MCMC), [1_000, 2_000] (.preview — degré 3 ignoré) Plage : [Int], chaque valeur dans [0, maxIterations], croissante de manière monotone

TECHNIQUE

Itérations auxquelles le degré SH actif est monté de 0→1, 1→2, 2→3. Avant le premier seuil, seules les composantes DC sont actives (donc T5 shDCLearningRate), après le premier seuil les DC + 3 coefficients de degré 1, après le deuxième seuil + 5 coefficients de degré 2, après le troisième seuil les 15 coefficients au complet. Le besoin en mémoire par Gaussian croît alors par paliers — 4 floats → 16 floats → 36 floats → 64 floats. Les préréglages de qualité retardent ces montées en degré par rapport aux valeurs par défaut de l'Initializer, car la géométrie doit d'abord se stabiliser avant que les détails de couleur, avec leur fréquence plus élevée, ne s'ajoutent. Les seuils plus précoces [1K, 2K, 3K] donnent en .full un résultat sensiblement moins bon. .preview plafonne au degré 2, car le degré 3 ne converge pas en 5 000 itérations et ne fait que consommer de la capacité de l'optimiseur inutilement. Le curriculum (T80–T81) propose une logique alternative qui remplace dynamiquement cette liste.

Performance (T22–T24)

T22trainingRenderScale

DÉTAILS

Défaut : 1.0 (Initializer, .full, MCMC, Scene-Class), 0.5 (.preview), 0.25 (.quickTest) Plage : 0.05 – 2.0 (typiquement 0.25, 0.5, 1.0)

TECHNIQUE

Résolution de rendu pendant l'entraînement relative à la résolution originale des images d'entraînement. À 0.5, chaque image est sous-échantillonnée à 50 % de largeur × 50 % de hauteur (donc 25 % des pixels) et le rendu gaussien s'effectue à cette résolution réduite. Réduit à la fois la charge mémoire et de calcul de manière quadratique. Important : T11 densifyGradThreshold doit correspondre à la résolution choisie — les magnitudes de gradient s'échelonnent en 1/résolution², c'est pourquoi .quickTest (0.25×) a un seuil bien plus élevé (4e-6) que .full (1.0×, 1.1e-6). RadianceKit avertit en cas d'images très grandes et s'ajuste automatiquement — résolution cible de 3 MP. Pour des images d'entrée 4K extrêmes, 0.5 voire 0.25 serait judicieux, sinon chaque Mac finirait en compaction CPU uniquement.

T23resolutionWarmupScale

DÉTAILS

Défaut : 0.0 (= désactivé) Plage : 0 ou 0.1 –

TECHNIQUE

Entraîne la phase de densification (itér 0 à T2) à une résolution plus basse que la phase de raffinement. Pour .full, ceci est désactivé, car avec T22 = 1.0 et l'annealing cosinus, le gain de temps est faible et la qualité en pâtit légèrement. Reste dans le catalogue de champs, car cela pourrait redevenir pertinent pour des entrées 4K et de longues sessions d'entraînement — le curriculum (T80) reprend une logique similaire, mais elle y est couplée au calendrier du taux d'apprentissage (LR-Schedule). Si activé et que T80 curriculumResolutionRamp est également true, le curriculum gagne et écrase cette valeur.

T24tileSize

DÉTAILS

Défaut : 16 Plage : 8, 16, 32

TECHNIQUE

Taille des tuiles de rastérisation en pixels. Le rendu Gaussian Splatting est basé sur des tuiles : l'image est décomposée en carreaux de 16×16 pixels, chaque carreau collecte les Gaussians qui lui sont pertinents, les trie par profondeur et les fond en fondu. 16 est la valeur standard utilisée par pratiquement toutes les implémentations 3DGS et est codée en dur dans les noyaux Metal de RadianceKit ; une modification de cette valeur nécessiterait une recompilation des shaders et n'est pas effective dans l'état actuel. Reste comme champ au cas où une future version du moteur prendrait en charge la taille de tuile de manière dynamique.

Diagnostic et préparation du nuage de points (T26–T30)

T26depthDistortionWeight

DÉTAILS

Défaut : 0.0 (= désactivé) Plage : 0 ou 0.0001 – 0.05

TECHNIQUE

Expérimental : poids d'une perte de régularisation de distorsion de profondeur (depth distortion). Elle pénalise les Gaussians qui sont étagées en profondeur le long d'un rayon de rendu mais appartiennent conceptuellement à la même surface — cela encourage des distributions de profondeur concentrées et réduit les floaters. Dans toutes les intensités testées, le résultat empire au lieu de s'améliorer. L'avantage théorique — améliorer la cohérence multi-vues — ne se traduit pas dans la perte L1, car l'hypothèse suppose implicitement que la géométrie SfM est correcte et que les Gaussians doivent seulement être « empilées ». En pratique, le nuage de points SfM est généralement le composant le plus faible, pas l'empilement. Reste disponible pour des jeux de données multi-vues avec des poses particulièrement propres (synthétiques, Mip-NeRF 360 avec vérité terrain).

T27singleViewOverfit

DÉTAILS

Défaut : false Plage : booléen

TECHNIQUE

Indicateur de diagnostic : si true, l'index de caméra 0 est obligatoirement utilisé à chaque itération d'entraînement au lieu d'un index choisi aléatoirement dans le pool de caméras. Objectif : si le modèle ne parvient même pas à surapprendre une seule vue (c'est-à-dire que la perte sur la vue 0 ne tend pas vers zéro même après 10 000 itérations), il y a un bug fondamental dans le passage avant/arrière. Ce commutateur a été intensivement utilisé pendant le développement des shaders Metal et des noyaux du rasteriseur différentiable. Aujourd'hui, il n'est plus disponible que comme test de cohérence, lorsque quelqu'un a modifié quelque chose dans le backend d'entraînement et veut vérifier. Il n'existe aucun commutateur pour cela dans l'interface — le champ est désactivé dans tous les préréglages et le reste.

T28maxCameras

DÉTAILS

Défaut : 0 (= « utiliser toutes les caméras ») Plage : 0 ou 1 – N

TECHNIQUE

Limite de diagnostic : entraîner uniquement avec les N premières caméras, en ignorant toutes les autres. Objectif initial : tester l'hypothèse que trop de caméras génèrent des conflits de gradients (trop de signaux de perte contradictoires pour la même Gaussian). Une limitation artificielle n'apporte aucun avantage — davantage d'images apportent presque toujours plus de qualité. Il n'existe aucun contrôle pour cela dans l'interface ; le champ est réglé sur 0 dans tous les préréglages, donc « toutes les caméras ».

T29maxInitialPoints

DÉTAILS

Défaut : 0 (= « utiliser tous les points SfM ») Plage : 0 ou 1 000 – 200 000+

TECHNIQUE

Garde-fou : limite le nombre de points SfM initiaux avec lesquels l'entraînement démarre. Des reconstructions COLMAP denses peuvent produire > 60 000 points, ce qui, avec de grandes échelles initiales, mène à 200–300 Gaussians par chevauchement de pixel — cela crée un « champ de brouillard » dans lequel l'entraînement ne converge pas. Un sous-échantillonnage à ~16 000 points (logique de plafond fixe dans le moteur d'entraînement) ramène la densité initiale au niveau utilisé par le 3DGS de référence et réduit drastiquement le chevauchement. L'application applique cela elle-même pour les reconstructions très denses ; il n'existe pas de contrôle pour cela.

T30cameraClusterOutlierMultiplier

DÉTAILS

Défaut : 10.0 (tous les préréglages — jamais modifié) Plage : 1.0 – 100.0

TECHNIQUE

Multiplicateur pour le filtre de valeurs aberrantes du cluster de caméras (camera cluster outlier). Avant l'entraînement, le moteur d'entraînement calcule le centroïde de toutes les positions de caméra et la distance maximale d'une caméra au centroïde. Les points SfM dont la distance au centroïde dépasse multiplier × maxCameraDistance sont rejetés comme valeurs aberrantes. La valeur par défaut de 10× est délibérément généreuse. Un effet secondaire subtil : un SfM plus resserré (caméras plus proches les unes des autres) → un plus petit → un seuil plus petit → davantage de points rejetés comme aberrants. Un SfM plus lâche → un seuil plus grand → moins de points rejetés. Il en découle un effet surprenant : une reconstruction SfM plus resserrée et en soi meilleure peut dégrader l'entraînement, car trop de points initiaux sont rejetés. Le champ est réglé sur 10 dans tous les préréglages et n'est pas modifiable dans l'interface. Des valeurs inférieures à 5 sont généralement trop restrictives, au-delà de 20 elles sont sans effet.

Régularisation (T31–T37)

T31coarseToFineBlurRadius

DÉTAILS

Défaut : 0 (= désactivé) Plage : 0 ou 1 – 10

TECHNIQUE

Expérimental : rayon de flou en boîte (box blur), appliqué à l'image de référence (ground truth) au début de la phase de Densification et réduit linéairement jusqu'à 0 à la fin de la Densification (T2). Hypothèse : un entraînement du grossier vers le fin (coarse-to-fine) — d'abord apprendre les structures grossières, puis les détails — devrait fournir une géométrie plus stable. Pour tous les rayons testés, le résultat est moins bon. La raison de cet échec : la Densification décide sur la base des gradients dans le domaine image, et le flou réduit précisément les signaux importants pour « ici il faut cloner ». Reste dans le catalogue des champs pour de futurs tests avec un autre schéma de Density-Control.

T32scaleRegWeight

DÉTAILS

Défaut : 0.0 (= désactivé) Plage : 0 ou 0.0001 – 0.05

TECHNIQUE

Expérimental : régularisation L1 sur l'échelle dans l'espace monde. Pénalise les Gaussians qui deviennent trop grandes — empêche les « méga-splats » qui recouvrent des pans de mur entiers avec une seule Gaussian. Activée, le nombre de Gaussians explose jusqu'à plusieurs millions et le résultat devient nettement pire. La raison : la régularisation d'échelle entre en conflit avec le Density-Control — des échelles plus petites signifient que plus de Gaussians sont nécessaires, donc le Density-Control divise (split) plus souvent, ce qui implique à son tour davantage de calcul de gradients. Désactivé, mais documenté pour des expériences de Mip-Splatting (T74) : dans ce contexte, une limite inférieure d'échelle pourrait avoir du sens.

T33anisotropyRegWeight

DÉTAILS

Défaut : 0.0 (= désactivé) Plage : 0 ou 0.0001 – 0.05

TECHNIQUE

Expérimental : pénalité sur le rapport max(scale)/min(scale), censée empêcher les Gaussians en forme « d'aiguille » extrêmement allongées, perçues comme des floaters. Pour toutes les intensités testées, le résultat est nettement moins bon. La raison : la régularisation force les splats vers une forme « ronde », ce qui est précisément inadapté sur une surface plane (mur, table, sol) — là, une Gaussian plate et large est plus efficace qu'une Gaussian sphérique. Désactivé. T34 scaleRatioPruneThreshold poursuit le même objectif de manière plus ciblée, mais est également désactivé par défaut.

T34scaleRatioPruneThreshold

DÉTAILS

Défaut : 0.0 (= désactivé) Plage : 0 ou 5.0 – 100.0 (typiquement 10.0 – 30.0)

TECHNIQUE

Élagage (pruning) expérimental post-entraînement qui supprime chaque Gaussian dont le rapport max(scale)/min(scale) dépasse le seuil linéaire défini ici. Vise les floaters extrêmement allongés en forme « d'aiguille/disque », que la régularisation seule ne peut pas éliminer. Dans les tests, l'élagage a bien retiré les floaters comme espéré, mais a également supprimé en même temps des splats plats pertinents sur les murs et les sols — l'image est devenue plus trouée. Par conséquent désactivé par défaut. Depuis la version 1.8, il existe pour cela l'interrupteur Remove Needle/Disc Floaters dans la section « Training » de l'inspecteur, sous la ligne intermédiaire « Runs automatically at the end of training ». Activé, il agit délibérément de manière conservatrice (uniquement les splats dont l'axe le plus long dépasse environ 50× le plus court) et prend effet dès le prochain entraînement.

T35opacityRegWeight

DÉTAILS

Défaut : 0.0 (= désactivé) Plage : 0 ou 0.0001 – 0.05

TECHNIQUE

Expérimental : pénalité d'entropie croisée binaire (binary cross-entropy) qui tire l'opacité vers 0 ou 1 (donc à l'écart de « semi-transparent »). Hypothèse : une distribution d'opacité plus nette améliorerait la clarté de l'image. Combinée à T33, cette régularisation coûte en qualité ; les deux sont désactivées. Attention : dans la 1.4.3-Beta est apparu un bug qui affectait précisément ce champ via une modification de la valeur par défaut (initialiseur = 0.01), provoquant une extinction massive du nombre de Gaussians (460 K → 5 en une itération). Depuis la 1.4.4, la valeur par défaut est fixée durablement à 0.0.

T36opacityDecayFactor

DÉTAILS

Défaut : 0.0 (initialiseur = désactivé), 0.9995 (.full, .classicBalanced — standard HTGS) Plage : 0 (désactivé) ou 0.95 – 1.0

TECHNIQUE

Implémentation du schéma HTGS (Hierarchical Time-Gating, Eurographics 2025) : toutes les T37 opacityDecayInterval itérations, l'opacité sigmoïde de chaque Gaussian est multipliée par ce facteur. 0.9995 × 100 applications donne environ 95 % de rétention par phase de Densification — une pression descendante légère mais constante sur toutes les opacités, qui fait baisser de manière fiable les Gaussians faiblement contributives en dessous du T14 pruneOpacityThreshold. Le résultat est nettement meilleur qu'sans decay. Actif uniquement pendant la phase de Densification (jusqu'à T2), après quoi l'entraînement continue sans decay, afin que les opacités établies durant le raffinement restent stables. Non utilisé avec MCMC (MCMC a ses propres mécanismes via T67 mcmcRelocationInterval + T68 mcmcDeadOpacityThreshold).

T37opacityDecayInterval

DÉTAILS

Défaut : 50 Plage : 10 – 500

TECHNIQUE

Intervalle d'itérations auquel T36 opacityDecayFactor est appliqué. Valeur par défaut de l'article HTGS : 50, conservée dans .full. Des intervalles longs (>200) annulent partiellement l'effet, car suffisamment de mises à jour de gradient se produisent entre deux applications pour que l'opacité remonte. Des intervalles plus courts (<20) rendent le decay trop agressif. Actif uniquement en phase de Densification.

Affinement (T38–T44)

T38gradientAccumulationSteps

DÉTAILS

Défaut : 1 (= « une View par étape Adam ») Plage : 1 – 8

TECHNIQUE

Nombre de views dont les gradients sont accumulés avant qu'une mise à jour Adam soit exécutée. Pour > 1, l'app fonctionne sur un chemin Backward-Project séparé, « unfused », qui somme les gradients dans un buffer séparé ; l'application finale s'ajuste avec 1/N pour garder la magnitude constante. En entraînement classique, la valeur 2 n'apporte aucun gain de qualité mais coûte du temps, car le chemin unfused est plus coûteux que le fused. Pour MCMC en revanche, accum = 2 réduit sensiblement l'écart de qualité avec Classic — c'est pourquoi il est proposé là comme option. Dans les préréglages, la valeur est fixée à 1. Dans l'interface, tu y accèdes via le commutateur MCMC Quality dans la section « Training » de l'inspecteur : activé, l'app accumule 2 views par étape, désactivé, 1. Des valeurs autres que 1 et 2 ne peuvent être définies que via un préréglage modifié.

T39testViewIndices

DÉTAILS

Défaut : [] (= vide, toutes les views sont utilisées pour l'entraînement) Plage : Set<Int>, sous-ensemble quelconque des indices de caméra

TECHNIQUE

Ensemble d'indices de caméra qui ne sont PAS utilisés pour l'entraînement, mais réservés comme holdout pour l'évaluation PSNR/SSIM/LPIPS. N'est renseigné que dans les mesures internes : alors une view sur huit, en commençant à l'indice 0 (standard LLFF, identique aux conventions des papiers Mip-NeRF-360 et 3DGS). Dans l'état livré, le champ reste vide — l'entraînement utilise toutes les views, et il n'y a dans l'interface aucun contrôle pour cela. Attention : définir manuellement ce champ dans un fichier de préréglage sans comprendre les indices rend une mesure inutilisable (par ex. si tous les indices sont fixés au-dessus de N alors qu'il n'y a que N-50 views → aucun holdout → aucune évaluation). Lors de ton propre export de préréglage, testViewIndices n'est pas inclus, car il dépend de la scène et laisserait sinon des valeurs absurdes entre différents jeux de données.

T40refinementPruneInterval

DÉTAILS

Défaut : 0 (= désactivé) Plage : 0 ou 100 – 5 000

TECHNIQUE

Toutes les N itérations pendant la phase de raffinement (après T2), une passe de prune supplémentaire est exécutée, qui supprime les Gaussians dont sigmoid(opacity) < T41 refinementPruneOpacityThreshold. Raison d'être : pendant la densification, il y a des appels réguliers de density-control, plus après — mais les Gaussians dont l'opacité continue de baisser restent dans le buffer. En pratique, ce pruning supplémentaire est nuisible : combiné avec la seconde phase de densification (T54), il peut vider complètement le stock de Gaussians. Il est fixé à 0 dans tous les préréglages et n'est pas réglable dans l'interface ; si on le renseigne malgré tout via un fichier de préréglage modifié, 1 000 ou 2 000 sont des valeurs raisonnables.

T41refinementPruneOpacityThreshold

DÉTAILS

Défaut : 0.0 (= « utiliser T14 ») Plage : 0 ou 0.001 – 0.1

TECHNIQUE

Seuil d'opacité séparé pour le pruning de raffinement. Après la densification, la plupart des Gaussians ont atteint une opacité nettement plus élevée (> 0.001), de sorte que le T14 pruneOpacityThreshold standard serait trop laxiste. Si T40 est actif, ce champ détermine son propre seuil. À 0.0, T14 est utilisé à sa place. Pertinent uniquement si T40 > 0.

T42midTrainingCompactificationIterations

DÉTAILS

Défaut : [] (= désactivé) Plage : [Int], valeurs dans (densifyUntilIteration, maxIterations)

TECHNIQUE

Points d'itération explicites pendant la phase de raffinement, où s'exécute une passe de compactification (supprime les Gaussians dont sigmoid(opacity) < 0.01 + les Gaussians à échelle aberrante, la même logique que T56 postTrainingCompactification). Raison d'être : de longues phases de raffinement peuvent montrer une accumulation de confettis/floaters, dont les SH surapprennent ensuite des artefacts spécifiques à une view. Configuration typique si activée : [10000, 20000, 30000] pour 40K Classic. MAIS : des marques de nettoyage choisies librement dégradent systématiquement le résultat final — le nombre de Gaussians baisse certes nettement, mais l'erreur d'image augmente plus fortement. En tant que liste d'itérations librement choisie, le champ reste donc vide dans tous les préréglages. Tu obtiens cet effet toi-même dans l'interface via le commutateur Floater Cleanup dans la section « Training » de l'inspecteur : pour les runs classiques à partir de 30 000 itérations, il place deux passes de nettoyage au milieu de l'entraînement. Des marques personnalisées ne peuvent être définies que via un fichier de préréglage modifié.

T43frustumCullEnabled

DÉTAILS

Défaut : false Plage : boolean

TECHNIQUE

Après l'entraînement, tous les Gaussians situés en dehors de l'union de tous les frusta des caméras d'entraînement sont supprimés. De tels Gaussians n'ont jamais été contraints par le signal de loss et sont toujours des floaters. Particulièrement efficace pour les scènes où la novel-view se situe derrière ou à côté du chemin de caméra (par ex. l'arrière d'un vol de drone linéaire) — les floaters à cet endroit ne sont jamais visibles pendant la phase d'entraînement, mais bien lors d'un déplacement ultérieur dans le viewer 3D. Sur les vols de drones, cela réduit visiblement les floaters, d'où sa disponibilité en opt-in. Défaut à false, car pour les captures d'objets avec une couverture orbitale complète, l'union des frusta englobe toute la scène et la fonctionnalité ne supprime rien — proposé dans les réglages sous « Floater Reduction ». Le préréglage Outdoor ne l'active pas, car le sky-dome y résout mieux le même problème.

T44frustumCullExpansion

DÉTAILS

Défaut : 1.1 Plage : 1.0 – 2.0

TECHNIQUE

Marge NDC pour T43 frustumCullEnabled. 1.0 couperait exactement au bord de l'image, ce qui raccourcirait trop les splats instables au bord de l'image. 1.1 = 10 % de padding au-delà du cadrage caméra exact — offre une certaine tolérance pour les pixels de bord qui pourraient tout de même devenir visibles dans une novel-view légèrement décalée. Des valeurs > 1.2 rendent le cull pratiquement inefficace, car le frustum élargi englobe beaucoup plus d'espace.

Sky-Dome (T45–T48)

T45skyDomeEnabled

DÉTAILS

Défaut : false (Initializer + tous les préréglages sauf P9 Outdoor) Plage : booléen

TECHNIQUE

Avant le début de l'entraînement, un nuage de points sphérique est généré (Fibonacci-sphere avec T46 points d'échantillonnage), placé dans un rayon de T47 skyDomeRadiusMultiplier × scene_extent autour du centre de la scène et initialisé avec les couleurs issues des pixels masqués comme ciel de toutes les caméras d'entraînement (voir T20 skyMaskingEnabled). Ces Gaussians de Sky-Dome sont insérés au début du buffer de gaussiennes et « gelés » pendant l'entraînement (gradients position/échelle/rotation = 0, seuls SH et opacity restent optimisables). Effet : au lieu de zones « confetti » noires au loin, l'utilisateur voit dans les nouvelles vues un véritable ciel. Sur les scènes de drone et de paysage, cela fonctionne très bien ; dans le préréglage Outdoor (P9), c'est activé par défaut. Pour les scènes d'intérieur, désactive-le — la sphère flotterait de manière incohérente en dehors de la pièce.

T46skyDomeSampleCount

DÉTAILS

Défaut : 5 000 Plage : 1 000 – 50 000 (typiquement 2 000 – 10 000)

TECHNIQUE

Nombre de points d'échantillonnage Fibonacci-sphere sur la sphère du Sky-Dome. Des valeurs plus élevées → Sky-Dome plus dense (mieux pour les grandes résolutions et beaucoup de ciel visible), mais besoin de mémoire accru. 5 000 est le point optimal pour des rendus 4K ; pour des résolutions plus basses, 2 000–3 000 suffisent. Les points sont initialisés selon la distance cosinus à chaque vecteur de vue de caméra d'entraînement avec les pixels masqués comme ciel correspondants — les points d'échantillonnage dont le cône de vue n'est vu par aucune caméra restent en arrière-plan avec une valeur d'opacité initiale faible, mais ne sont pas modifiés pendant l'entraînement (gelés).

T47skyDomeRadiusMultiplier

DÉTAILS

Défaut : 30.0 (Initializer + la plupart des préréglages), 59.0 (P9 Outdoor) Plage : 5.0 – 200.0

TECHNIQUE

Rayon de la sphère du Sky-Dome par rapport à l'étendue de la scène (= distance moyenne entre les positions de caméra). 30 = la sphère a 30 fois le diamètre du nuage de caméras. Trop petit (< 5) → le Sky-Dome interfère avec la scène elle-même (par ex. un splat de Sky-Dome atterrit au premier plan) ; trop grand (> 100) → perte de précision float32 aux positions du Sky-Dome, ce qui provoque des artefacts de rendu au loin. Pour les scènes extérieures étendues, 59.0 est la valeur adaptée — le 30.0 par défaut est trop petit pour les paysages profonds, les pixels du Sky-Dome se rendent alors visiblement comme un « mur » sur les bords de l'image.

T48frozenGaussianCount

DÉTAILS

Défaut : 0 (= aucune gaussienne gelée) Plage : 0 ou 1 – T46

TECHNIQUE

Nombre de gaussiennes au début du buffer dont les gradients position/échelle/rotation sont mis à zéro dans l'optimiseur — elles restent spatialement figées pendant tout l'entraînement. Le contrôle de densité n'a pas le droit de les cloner, diviser ou éliminer. Utilisé pour l'injection du Sky-Dome (voir T45) : quand le Sky-Dome est activé, ce champ est automatiquement réglé sur T46 skyDomeSampleCount. Un réglage manuel est possible (par ex. pour geler un nuage de points pré-placé issu d'un scan LiDAR), mais n'est pas directement accessible dans l'interface. Important : les N premières gaussiennes du buffer sont toujours celles gelées — c'est l'ordre dans le buffer qui décide, pas un index explicite.

Adam + Planification du LR (T49–T55)

T49adamResetIteration

DÉTAILS

Défaut : 0 (= désactivé) Plage : 0 ou 100 –

TECHNIQUE

Itération à laquelle les accumulateurs de momentum de l'optimiseur Adam (m1, m2) sont remis à zéro. La correction de biais fonctionne ensuite avec (iter - adamResetIteration) au lieu de iter. Une réinitialisation après la fin de la Densification dégrade nettement le résultat. Raison : le momentum Adam, accumulé pendant la Densification, porte une information sur les magnitudes de gradient typiques et accélère la phase de Refinement. Le jeter coûte aux premières ~500 itérations de Refinement de la convergence. Ce paramètre reste donc à 0 dans tous les préréglages et n'est pas modifiable dans l'interface.

T50positionLRScheduleEndIteration

DÉTAILS

Défaut : 0 (Initializer = « utiliser maxIterations »), 20 000 (.full — le Cosine se termine à 20K malgré maxIter=35K), 30 000 (.fullClassicPaper) Plage : 0 ou 1 000 –

TECHNIQUE

Itération à laquelle la courbe de Cosine-Annealing pour le LR de position atteint son minimum. Si 0, cela est identique à T1 maxIterations. Si > 0, la planification se poursuit jusqu'à cette valeur et reste ensuite constante à T4 positionLearningRateFinal. Cela permet une « extended refinement phase » avec un taux d'apprentissage minimal mais constant — affine lentement les positions sans nouvelle décroissance. .full fait cela (fin de la planification à 20K, l'entraînement se poursuit jusqu'à 35K) ; dans le voisinage — de 15K à 25K — presque rien ne change, 20K est le meilleur compromis. Continue d'être utilisé conjointement avec T51, pour modifier également les LR autres que la position pendant l'extended phase.

T51extendedPhaseLRDecay

DÉTAILS

Défaut : 0.0 (= désactivé, LR constants) Plage : 0 ou 0.01 – 1.0

TECHNIQUE

Multiplicateur minimal pour les LR autres que la position (échelle, rotation, opacité, SH) dans l'« extended phase » — c'est-à-dire après avoir atteint T50 et que le LR de position est déjà à T4. Si 0.1, échelle/rotation/opacité/SH sont à leur tour décroîtes en cosine de 1.0 (= leur LR standard) à 0.1× de leur standard. Si 0.0 (défaut), elles restent constantes. Une décroissance complète jusqu'à zéro donne le même résultat que pas de décroissance du tout — le comportement paraît plus propre avec la décroissance, mais n'est pas mesurablement meilleur. Ce paramètre reste donc à 0 dans tous les préréglages et n'est pas modifiable dans l'interface.

T52adaptiveDensifyThreshold

DÉTAILS

Défaut : false Plage : booléen

TECHNIQUE

Expérimental : si true, l'application calcule à chaque étape de Densification le p98 de la distribution de gradients actuelle et l'utilise comme seuil dynamique (plafonné à au moins 0,5× de la valeur configurée dans T11, pour éviter qu'il ne s'écarte trop). Hypothèse : une adaptation automatique à la phase de scène actuelle rendrait le contrôle de densité plus robuste — p. ex. élagage plus strict au début, plus permissif ensuite, ou l'inverse. En pratique, le nombre de Gaussians s'effondre dramatiquement — élagage massif, car le p98 est extrêmement élevé lors des premières itérations et presque plus rien ne dépasse ensuite le seuil. Le seuil fixe est déjà bien calibré, l'adaptation dynamique nuit plus qu'elle n'aide. T77 propose une logique adaptative alternative via une médiane glissante, qui contourne le problème.

T53mergeAfterDensification

DÉTAILS

Défaut : false (Initializer), true (.full, .classicBalanced, .fullClassicPaper) Plage : booléen

TECHNIQUE

À la fin de la phase de Densification (itération T2), une passe de fusion unique est effectuée, qui regroupe les Gaussians proches les uns des autres ayant une échelle et une couleur similaires. Réduit le nombre de Gaussians de typiquement 5 à 15 % sans perte de qualité visible. But : après un clonage intensif, il se forme des clusters de Gaussians quasi identiques qui n'apportent rien de nouveau — la fusion libère de la capacité d'optimiseur pour d'autres zones. Standard dans les préréglages Classic-Quality. Non utilisé avec MCMC, car MCMC empêche d'emblée la formation de tels clusters grâce à sa logique de Relocation.

T54densifyPhase2FromIteration

DÉTAILS

Défaut : 0 (= désactivé) Plage : 0 ou T2T1

TECHNIQUE

Expérimental : permet une deuxième phase de Densification, qui démarre à cette itération après la pause de Refinement et se poursuit jusqu'à T55. Hypothèse : après une phase de Refinement, les accumulateurs de gradient ont des magnitudes plus stables et peuvent indiquer plus précisément quelles zones ont encore besoin de Gaussians supplémentaires. En pratique, la deuxième phase de Densification se termine par une cascade jusqu'à zéro Gaussian — conjuguée à l'élagage de Refinement (T40), elle vide entièrement le buffer. Ce paramètre reste donc à 0 dans tous les préréglages et n'est pas modifiable dans l'interface.

T55densifyPhase2UntilIteration

DÉTAILS

Défaut : 0 Plage : 0 ou T54T1 Défini dans :

TECHNIQUE

Fin de la deuxième phase de Densification. Pertinent uniquement si T54 > 0. Les deux champs sont désactivés ensemble.

Post-traitement + Apple AI (T56–T60)

T56postTrainingCompactification

DÉTAILS

Défaut : true (dans tous les préréglages de production), false (.quickTest, .preview) Plage : boolean

TECHNIQUE

Après la fin de l'entraînement, les Gaussians avec sigmoid(opacity) < 0.01 sont supprimés de manière définitive (ils ne contribuent pratiquement plus à l'image). Réduit le nombre de Gaussians typiquement de 58 % et la taille du fichier d'export de 55 % sans perte de qualité visible. Actif par défaut dans les préréglages de production — le résultat final doit pouvoir être livré aussi compact que possible. Désactivé dans .quickTest, car un passage de diagnostic n'est de toute façon pas exporté. Contrairement à T42 midTrainingCompactificationIterations, la compactification n'a lieu qu'à la fin — le raffinement peut jusque-là utiliser tous les Gaussians.

T57metalFXUpscaling

DÉTAILS

Défaut : false Plage : boolean

TECHNIQUE

⚠ Désactivé depuis le 18/07/2026 et sans aucun effet. Ce champ appartenait au sélecteur « Viewport Scaling » (Off/MetalFX/Lanczos) dans l'inspecteur. Le moteur de rendu ne l'a jamais lu : la décision de blit est purement géométrique (rendu supersampled ⇒ downsampling MPS-Lanczos pour le lissage des bords, sinon bilinéaire), et il n'existait aucun point d'appel pour le chemin MetalFX. Le sélecteur et les deux informations erronées qu'il alimentait ont été supprimés ; l'étiquette de l'overlay s'appelle désormais « Sampling » et non plus « Scaling », et nulle part dans l'app un upscaling par MetalFX n'a lieu. Le champ lui-même subsiste car la configuration d'entraînement est entièrement enregistrée — il se trouve dans chaque scène sauvegardée, dans chaque préréglage et dans le commentaire de paramètres des PLY déjà exportés ; le supprimer ferait silencieusement disparaître la clé lors d'une réécriture et casserait cet échange. Pour la même raison, ce champ est exclu de la comparaison « Modified » : une ancienne scène peut porter true, et il n'existe plus aucun moyen de le réinitialiser via l'interface. Rien ne le lit — ne pas le recâbler.

T58mpsLanczosScaling

DÉTAILS

Défaut : false Plage : boolean

TECHNIQUE

⚠ Désactivé depuis le 18/07/2026 et sans aucun effet — voir T57 metalFXUpscaling, qui explique aussi pourquoi le champ doit malgré tout rester enregistré. Un malentendu évident mérite d'être précisé : l'app utilise bel et bien MPS-Lanczos dans le viewport, mais cela est contrôlé uniquement par la géométrie — une image rendue en supersampling est downscalée pour lisser les bords. C'est un downscaling, pas un upscaling, et ce champ ne l'a jamais déclenché.

T59livePreviewInterval

DÉTAILS

Défaut : 50 (initialiseur ; les préréglages ne définissent pas ce champ) Plage : 0 (désactivé), 50, 250 ou 1 000 dans le sélecteur des réglages

TECHNIQUE

Fréquence à laquelle la vue 3D est actualisée avec les Gaussians actuels pendant l'entraînement. 50 = un nouveau rendu toutes les 50 itérations — suffisant pour observer la progression sans ralentir sensiblement l'entraînement. 0 = la vue n'est pas actualisée du tout (entraînement en arrière-plan, vitesse maximale). Pour les longs passages MCMC, 250 ou 1 000 valent le coup, car la surcharge de mise à jour finit par peser dans le total. Rôle particulier : bien que ce champ appartienne à la configuration d'entraînement, il s'agit d'un réglage global de l'app (Réglages → Entraînement) et non d'une partie de la recette d'entraînement. Il est donc exclu de la comparaison « Modified », persiste lors d'un changement de préréglage et, depuis le 18/07/2026, n'est plus repris du fichier à l'ouverture d'une scène — auparavant, une scène chargée remplaçait silencieusement la fréquence d'image de l'utilisateur par celle de l'auteur de la scène, y compris « Off », et il n'existait aucun autre endroit permettant de la récupérer.

T60perceptualLossWeight

DÉTAILS

Défaut : 0.0 (= désactivé) Plage : 0 ou 0.001 – 0.5

TECHNIQUE

Poids d'un terme de perte perceptuelle (multi-scale blur feature matching). Capture la similarité structurelle et texturale à un niveau supérieur à L1+SSIM — typiquement là où « pixel-perfect » compte moins que « a l'air réaliste ». La valeur est à 0.0 (désactivé) dans tous les préréglages. Dans l'interface, tu le règles via le curseur Perceptual Loss dans la section « Training » de l'inspecteur, plage de 0 à 0,20 par pas de 0,01 ; à 0, l'app affiche « Off ».

Densification MCMC (T61–T73)

T61densificationStrategy

DÉTAILS

Défaut : .classic (Initializer + préréglages Classic), .mcmc (tous les préréglages MCMC + Scene-Class) Plage : .classic ou .mcmc

TECHNIQUE

Choisit entre la densification Classic (clonage/division/élagage, Kerbl et al.~2023) et la densification MCMC (Stochastic Gradient Langevin Dynamics avec Relocation, Kheradmand et al.~NeurIPS 2024). Avec .classic, ce sont T11–T16 qui s'appliquent, avec .mcmc les T62–T73. Attention lors du changement : les valeurs par défaut Classic et MCMC sont calibrées de façon totalement différente — qui bascule le sélecteur dans la vue Expert sans charger un préréglage adapté risque une extinction de masse façon bug de la 1.4.3 (460 K → 5 en une itération, parce que le MCMC-OpacityReg à 0,01 tue les opacités Classic). C'est pourquoi les valeurs par défaut d'initialisation MCMC sont volontairement « adoucies » (toutes les valeurs de régularisation à 0.0).

T62mcmcMaxGaussians

DÉTAILS

Défaut : 150 000 (Initializer + .fullMCMC + .mcmcBalanced), 100 000 (.mcmcPreview), 1 500 000 (.fullMCMCMip — variante Mip-Splatting avec budget 10×), 1,19 M (.renderPreset), 1,25 M (.outdoorPreset), 670 K (.indoorPreset) Plage : 0 (= « utiliser la capacité du buffer ») ou 10 000 – 5 000 000 Défini dans :

TECHNIQUE

Limite dure du nombre de Gaussians pour la stratégie MCMC. Le nombre croît graduellement de T70 mcmcGrowthRate (typiquement 5 %) par étape de relocalisation jusqu'à ce plafond. 150 K est une bonne valeur de départ — nettement au-dessus, la qualité des splats se dilue (trop de petits Gaussians redondants), nettement en dessous, la scène reste sous-densifiée. Pour de très grandes scènes (par ex. un vol de drone de 1 545 photos avec 158 K SfM-init), 150 K est trop bas — d'où l'extension 1.4.5 T72 mcmcCapMultiplier + T73 mcmcAutoScaleByScene. Les préréglages Scene-Class utilisent des valeurs spécifiques à la scène entre 670 K (intérieur) et 1,25 M (extérieur). Avec la valeur 0, le moteur utilise la pleine capacité du buffer comme plafond.

T63mcmcNoiseScale

DÉTAILS

Défaut : 0,00005 (5e-5 = valeur par défaut du papier) Plage : 1e-6 – 1e-3

TECHNIQUE

Multiplicateur du bruit gaussien ajouté à la position de chaque Gaussian à chaque itération MCMC (logique SGLD). Plus élevé = plus d'exploration (les Gaussians se déplacent davantage, trouvent potentiellement de meilleures positions), plus bas = plus d'exploitation (les Gaussians restent là où elles sont déjà bonnes). 5e-5 est la valeur adaptée — nettement plus petit signifie trop peu d'exploration, nettement plus grand (1e-4) trop, et les splats se délitent alors. Fait l'objet d'un decay cosinus sur la durée d'entraînement jusqu'à T69 mcmcNoiseDecayEnd — à la fin de la plage de decay, le bruit est effectivement nul et les Gaussians convergent.

T64mcmcOpacityRegWeight

DÉTAILS

Défaut : 0,0 (= désactivé dans les valeurs par défaut RadianceKit, papier : 0,01) Plage : 0 ou 0,001 – 0,05

TECHNIQUE

Pénalité L1 spécifique à MCMC sur l'opacité. Valeur par défaut du papier 0,01 (pousse les Gaussians inutilisés vers zéro, les rendant disponibles pour la relocalisation). Dans RadianceKit, le résultat est mesurablement meilleur sans cette régularisation. Raison : le critère d'élagage défini par T68 mcmcDeadOpacityThreshold suffit à lui seul — une pénalité L1 supplémentaire force aussi des Gaussians précieux à faible opacité à disparaître. D'où la valeur par défaut de 0. Attention : dans la build bêta 1.4.3, la valeur par défaut de l'Initializer était par erreur 0,01, ce qui a provoqué le bug d'extinction de masse (voir l'explication de T61) ; corrigé à 0,0 depuis la 1.4.4.

T65mcmcScaleRegWeight

DÉTAILS

Défaut : 0,0 (= désactivé, papier : 0,01) Plage : 0 ou 0,001 – 0,05

TECHNIQUE

Pénalité L1 spécifique à MCMC sur les valeurs propres d'échelle. Valeur par défaut du papier 0,01. Ici aussi, le résultat est meilleur sans régularisation, pour la même raison que pour T64. Désactivé dans tous les préréglages MCMC de RadianceKit. Attention comme pour T64 : bug de la 1.4.3.

T66mcmcRelocationInterval

DÉTAILS

Défaut : 100 (Initializer + tous les préréglages MCMC, standard du papier), 155 (P9 Outdoor) Plage : 50 – 500

TECHNIQUE

Intervalle d'itérations auquel MCMC relocalise les Gaussians morts (sigmoid(opacity) < T68 mcmcDeadOpacityThreshold) vers de nouvelles positions. Des intervalles plus courts (environ 50) sont trop disruptifs, la perte oscille ; des intervalles nettement plus longs (environ 200) privent MCMC de sa réactivité. 100 est la bonne valeur. Pour les scènes extérieures, elle est un peu plus élevée à 155 — les intervalles plus longs laissent à Adam plus de temps pour intégrer les Gaussians nouvellement placés avant que le prochain événement de relocalisation ne les mette sous pression.

T67mcmcWarmupIterations

DÉTAILS

Défaut : 500 Plage : 100 – 5 000

TECHNIQUE

Nombre d'itérations initiales pendant lesquelles aucune relocalisation MCMC n'a lieu. La logique de relocalisation ne démarre qu'après cette phase d'échauffement. Sens : durant les premières itérations, les valeurs d'opacité ne se sont pas encore stabilisées — si la relocalisation démarrait directement, les Gaussians seraient placés aux mauvais endroits et devraient tout de suite être déplacés à nouveau, ce qui détruit le momentum d'Adam. Valeur par défaut du papier : 500. RadianceKit reprend cette valeur car elle s'est révélée robuste.

T68mcmcDeadOpacityThreshold

DÉTAILS

Défaut : 0,005 (Initializer, standard du papier), 0,01 (.fullMCMC et tous les préréglages MCMC) Plage : 0,001 – 0,05

TECHNIQUE

Seuil de sigmoid(opacité) en dessous duquel une Gaussian est considérée « morte » et éligible pour relocalisation. 0,01 est la valeur adaptée — 0,005 ne change presque rien, 0,02 est moins bon. Plus élevé = relocalisation plus agressive (plus de Gaussians déplacés), plus bas = plus prudent. 0,01 correspond approximativement à « 0,5 % de visibilité visuelle ». P10 Indoor utilise 0,0142.

T69mcmcNoiseDecayEnd

DÉTAILS

Défaut : 0 (Initializer = « pas de decay »), 160 000 (.fullMCMC = 80 % de 200K), 96 000 (.mcmcBalanced = 80 % de 120K), 40 000 (.mcmcPreview) Plage : 0 ou 1 000 –

TECHNIQUE

Itération à laquelle le bruit T63 mcmcNoiseScale est complètement amorti à zéro (decay cosinus de l'itération 0 jusqu'ici). 80 % de maxIterations est la valeur adaptée — cela donne à MCMC assez de temps d'exploration, tout en laissant les 20 % derniers pour converger sans bruit. 0 = bruit constant sur toutes les itérations (rarement utile, MCMC ne peut alors pas converger).

T70mcmcGrowthRate

DÉTAILS

Défaut : 0,05 (standard du papier = 5 %) Plage : 0,01 – 0,2

TECHNIQUE

Taux de croissance de la population cible MCMC par étape de relocalisation. La logique : à chaque événement de relocalisation, la taille de la population cible est augmentée de (1 + growthRate), jusqu'à ce que T62 mcmcMaxGaussians (ou la variante mise à l'échelle via T72/T73) soit atteint. 0,05 est la valeur adaptée — des valeurs plus élevées entraînent une croissance trop rapide (les Gaussians sont insérés avant que le momentum d'Adam puisse les intégrer), des valeurs plus basses des scènes sous-densifiées à la fin.

T71mcmcSigmoidK

DÉTAILS

Défaut : 100,0 Plage : 10,0 – 500,0 Défini dans :

TECHNIQUE

Paramètre de netteté sigmoïde pour l'atténuation du bruit MCMC. Dans l'étape SGLD, le bruit par Gaussian est atténué — les Gaussians très opaques (dont le logit est positif) reçoivent exponentiellement moins de bruit que celles peu opaques. K = 100 est net, c'est-à-dire que la transition de « bruit complet » à « pas de bruit » se produit très rapidement autour d'une opacité de 0,5. K = 100 est la valeur adaptée — des valeurs plus petites (10–50) laissent aussi les Gaussians très opaques trembler (détruit les Gaussians convergés), des valeurs plus grandes (> 500) rendent la transition artificiellement abrupte et les Gaussians morts ne sont plus du tout déplacés.

T72mcmcCapMultiplier

DÉTAILS

Défaut : 3,0 (Initializer + .fullMCMC), 2,0 (.mcmcPreview), 2,5 (.mcmcBalanced), 2,98 (P8 Render), 5,32 (P9 Outdoor), 1,76 (P10 Indoor) Plage : 0 (= désactivé) ou 1,0 – 10,0

TECHNIQUE

Fonctionnalité 1.4.5 : mise à l'échelle adaptative du plafond selon la scène. Si T73 mcmcAutoScaleByScene est true, le plafond effectif est calculé comme (limité par la capacité du buffer). Contexte : pour les grandes scènes (par ex. un vol de drone de 1 545 photos → 158 K SfM-init), T62 = 150 000 est trop bas — le contrôle de densité ne pourrait pas croître du tout. Avec un multiplicateur de 3,0, le plafond est mis à l'échelle dans cet exemple à 474 K (158 K × 3,0). Les préréglages Scene-Class utilisent des valeurs spécifiques à la scène : Outdoor profite d'un multiplicateur élevé (5,32 → ~830 K de plafond pour 156 K points d'initialisation), Indoor se contente de 1,76 (les murs saturent plus vite). Pour la résolution complète du plafond, voir la méthode .

T73mcmcAutoScaleByScene

DÉTAILS

Défaut : true (Initializer + tous les préréglages MCMC) Plage : booléen

TECHNIQUE

Fonctionnalité 1.4.5 : interrupteur maître pour la logique de plafond adaptative à la scène (voir T72 +). Si false, seul T62 mcmcMaxGaussians est utilisé comme plafond (retour au comportement de la 1.4.4). Activé par défaut, car sinon les problèmes d'extinction de masse sur les grandes scènes de la 1.4.3 réapparaîtraient. Ne le désactive manuellement que si tu veux explicitement fixer un plafond dur — par ex. pour entraîner une variante à 150 K dont la taille finale est planifiable.

Mip-Splatting (T74–T76)

Statut : Le Mip-Splatting n'a apporté aucun gain de qualité en pratique et a même nui à certaines scènes extérieures. Les champs restent opt-in pour l'expérimentation ; dans tous les préréglages livrés, le Mip-Splatting est désactivé.

T74useMipSplatting

DÉTAILS

Défaut : false (tous les préréglages de production), true (.fullMCMCMip — variante de recherche) Plage : boolean

TECHNIQUE

Active le Mip-Splatting (Yu et al.~CVPR 2024) : filtre de lissage 3D + filtre 2D + compensation α, qui limite la fréquence par-Gaussienne à la limite de Nyquist du taux d'échantillonnage de la caméra d'entraînement la plus dense. Objectif théorique : élimination de l'aliasing lors du rendu à des échelles hors entraînement (0,5× ou 2× de la résolution d'entraînement). Activé et fonctionnellement correct dans les shaders de prétraitement et de projection arrière. En pratique, le gain de qualité espéré ne s'est toutefois pas concrétisé : lors du rendu à la résolution d'entraînement, presque rien ne change, et sur les scènes extérieures l'image devient même moins bonne. Une explication possible : le lissage 3D agit contre la relocalisation MCMC dès que de nombreuses Gaussiennes entrent en jeu. Le champ reste disponible pour des essais multi-échelles personnels.

T75mipSmoothing3DScale

DÉTAILS

Défaut : 0.2 (valeur par défaut de l'article) Plage : 0.05 – 1.0

TECHNIQUE

Paramètre d'échelle de lissage 3D (Yu et al.~§3.3, valeur par défaut de l'article 0.2). Plus grand = plus de lissage dans l'espace monde par Gaussienne (= plus d'anti-aliasing, mais aussi plus de flou à l'échelle par défaut), plus petit = plus net mais plus sensible à l'aliasing. Consulté uniquement si T74 useMipSplatting = true. Non optimisé davantage — déjà avec la valeur par défaut 0.2 de l'article, le Mip-Splatting n'apporte aucun gain.

T76mipFilter2DVariance

DÉTAILS

Défaut : 0.3 (= exactement le comportement précédent) Plage : 0.1 – 1.0

TECHNIQUE

Variance du filtre Mip 2D, ajoutée à la diagonale Σ_2D (variance directe, non mise au carré). 0,3 est exactement la valeur qui était figée dans le noyau avant le Mip-Splatting. Si T74 useMipSplatting = false, le noyau ignore complètement cette valeur et écrit la valeur codée en dur 0.3 — de sorte que rien ne change garantie par rapport au comportement précédent. Sinon, la valeur définie ici est utilisée. Reste dans le catalogue de champs pour les balayages Mip.

Densification adaptative (T77–T79)

T77adaptiveDensification

DÉTAILS

Défaut : false Plage : boolean

TECHNIQUE

Rolling-Median-Tracker en alternative au seuil fixe T11 densifyGradThreshold. Si true, à chaque Densify-Step le seuil actuel est écrasé par median(dernières N avgGrad-Samples) × T79 adaptiveDensifyMultiplier. N = T78 adaptiveWindow. Plus strict que la variante p98 de T52, qui y déclenche le Mass-Pruning : médiane fois 2 se situe en régime établi environ au p70–p80 de la distribution des gradients. Activé seul, ce champ n'apporte aucun gain de qualité ; combiné au curriculum (voir T80/T81) si — c'est alors le curriculum qui apporte le gain, ce champ plutôt la stabilité. Il n'existe pas de contrôle pour cela : le champ est désactivé dans tous les préréglages et ne peut être renseigné que via un fichier de préréglage édité.

T78adaptiveWindow

DÉTAILS

Défaut : 1 000 Plage : 100 – 10 000 Défini dans :

TECHNIQUE

Rolling-Median-Window en Densification-Events (PAS en itérations — chaque étape T13 densifyInterval fournit un échantillon). Défaut 1 000 — cela signifie que les 100 000 dernières itérations d'entraînement contribuent à la médiane, donc typiquement tout l'historique d'entraînement jusqu'ici. Phase précoce (avant T78 échantillons) : le tracker renvoie nil → repli sur le seuil fixe T11. Pertinent uniquement si.

T79adaptiveDensifyMultiplier

DÉTAILS

Défaut : 2.0 Plage : 1.0 – 4.0

TECHNIQUE

Multiplicateur appliqué à la médiane glissante pour le seuil adaptatif. Le défaut 2.0 correspond approximativement au p70–p80 de la distribution typique des gradients. Plus bas = croissance plus agressive (plus de clones), plus haut = plus strict (moins de clones). Dans la plage 1.5–3.0, 2.0 est la meilleure valeur. Pertinent uniquement si.

Curriculum (T80–T81)

T80curriculumResolutionRamp

DÉTAILS

Défaut : false Plage : booléen

TECHNIQUE

La résolution d'entraînement démarre à 0.5× et passe à T50 positionLRScheduleEndIteration / 2 (ou T1 maxIterations / 2, si T50 n'est pas défini) à T22 trainingRenderScale. Écrase T23 resolutionWarmupScale lorsque activé. Des deux ajouts adaptatifs (voir T77), c'est ce curriculum qui apporte le véritable gain de qualité — l'augmentation progressive de la résolution laisse à l'app le temps de trouver une géométrie grossière à basse résolution avant de passer au travail fin des détails. Non réglable dans l'interface — uniquement via un fichier de préréglage modifié, et dans ce cas idéalement en combinaison avec T81.

T81curriculumSHProgression

DÉTAILS

Défaut : false Plage : booléen

TECHNIQUE

Écrase T21 shDegreeUpgradeIterations avec [maxIter/4, maxIter/2, maxIter*3/4], répartissant ainsi les montées en degré SH uniformément sur la durée d'entraînement plutôt que de les concentrer au début. Hypothèse : une géométrie stable s'établit avant l'explosion des détails de couleur, ce qui positionne plus précisément les effets de brillance dépendants de la direction de vue. Combiné avec T77, cela apporte un gain sur certaines scènes ; c'est ce champ qui porte ce gain, T77 seul ne suffit pas. Non réglable dans l'interface — uniquement via un fichier de préréglage modifié.

Préréglages statiques (TP1–TP9)

Voici uniquement les différences structurelles par rapport au réglage par défaut de l'initialiseur. La description marketing complète des onze préréglages UI P1–P11 se trouve au chapitre 7.

TP1.preview

DÉTAILS

Préréglage de diagnostic/aperçu pour les systèmes ≥ 10 GB RAM. Overrides par rapport à l'initialiseur :

  • maxIterations 30 000 → 5 000
  • densifyUntilIteration 15 000 → 3 500 (70 % de maxIter)
  • positionLearningRateFinal 1.6e-6 → 1.6e-5 (10× plus élevé, decay moins agressif)
  • shDCLearningRate, shRestLearningRate, opacityLearningRate, scaleLearningRate, rotationLearningRate chacun ×2
  • opacityResetInterval 3 000 → 100 000 (effectivement désactivé — le reset détruirait un entraînement aussi court)
  • shDegreeUpgradeIterations [1K, 2K, 3K][1K, 2K] (le degree 3 ne converge pas sur des runs aussi courts)
  • trainingRenderScale 1.0 → 0.5

TP2.full

DÉTAILS

Production-Quality Classic. Overrides :

  • maxIterations 30 000 → 35 000 (au-delà, risque de surentraînement : plus de Gaussians sans gain de qualité)
  • densifyUntilIteration 15 000 → 5 000 (valeur éprouvée ; arrêter plus tard donne un résultat moins bon)
  • Tous les LR ×2
  • positionLearningRateFinal 1.6e-6 → 1.6e-5 (10× plus élevé que la valeur par défaut du paper)
  • densifyGradThreshold 2e-6 → 1.1e-6 (calibré pour une résolution 1.0×)
  • densifyInterval 100 → 200
  • pruneOpacityThreshold 0.005 → 0.001
  • opacityResetInterval 3 000 → 100 000 (effectivement désactivé)
  • shDegreeUpgradeIterations [1K, 2K, 3K][2K, 5K, 8K] (montée en degree retardée)
  • opacityDecayFactor 0.0 → 0.9995 (schéma HTGS, gain de qualité net)
  • opacityDecayInterval 50 (inchangé)
  • mergeAfterDensification false → true
  • positionLRScheduleEndIteration 0 → 20 000
  • postTrainingCompactification true (déjà la valeur par défaut de l'initialiseur pour .full)

TP3.fullClassicPaper

DÉTAILS

Variante Classic fidèle au paper, dérivée de TP2. Overrides par rapport à TP2 :

  • maxIterations 35 000 → 30 000 (standard du paper)
  • densifyUntilIteration 5 000 → 15 000 (paper : 50 % de maxIter)
  • positionLearningRateFinal 1.6e-5 → 1.6e-6 (valeur par défaut du paper)
  • opacityLearningRate, scaleLearningRate, rotationLearningRate retour aux valeurs par défaut du paper (0.05, 0.005, 0.001)
  • densifyGradThreshold 1.1e-6 → 2e-7 (calibré pour ~1–2 M Gs sur Bicycle)
  • densifyInterval 200 → 100 (paper)
  • pruneOpacityThreshold 0.001 → 0.005 (valeur par défaut du paper)
  • opacityResetInterval 100 000 → 3 000 (paper §5.2, risqué — coûte en qualité dans la configuration de RadianceKit)
  • opacityDecayFactor 0.9995 → 0.0 (le paper n'a pas de decay)
  • positionLRScheduleEndIteration 20 000 → 30 000 (le cosine s'étend sur 100 % de maxIter)

TP4.fullMCMC

DÉTAILS

Production-Quality MCMC. Overrides par rapport à l'initialiseur :

  • maxIterations 30 000 → 200 000 (MCMC a besoin d'environ 5× plus d'itérations que Classic)
  • densifyUntilIteration 15 000 → 160 000 (80 % de maxIter)
  • positionLearningRateFinal 1.6e-6 → 1.6e-5
  • Schedule de LR comme TP2 (tous ×2)
  • ssimWeight 0.2 → 0.05 (MCMC a besoin d'un signal L1 plus fort)
  • shDegreeUpgradeIterations [1K, 2K, 3K][2K, 5K, 8K]
  • densificationStrategy .classic.mcmc
  • mcmcMaxGaussians 150 000 (déjà dans l'initialiseur, confirmé dans le préréglage)
  • mcmcNoiseScale 5e-5 (valeur du paper, éprouvée)
  • mcmcDeadOpacityThreshold 0.005 → 0.01
  • mcmcNoiseDecayEnd 0 → 160 000 (80 % de maxIter)
  • mcmcCapMultiplier 3.0 (déjà dans l'initialiseur)
  • mcmcAutoScaleByScene true (déjà dans l'initialiseur)
  • opacityResetInterval 3 000 → 200 000 (effectivement désactivé, MCMC utilise Reloc au lieu de Reset)

TP5.fullMCMCMip

DÉTAILS

Variante Mip-Splatting de TP4 avec le budget de Gaussians du paper original. Overrides par rapport à TP4 :

  • mcmcMaxGaussians 150 000 → 1 500 000 (×10, magnitude du paper)
  • useMipSplatting false → true (Mip activé)

TP6.classicBalanced

DÉTAILS

Classic milieu de gamme. Overrides par rapport à TP2 :

  • maxIterations 35 000 → 20 000 (donne pratiquement le même résultat que 30 000, avec un temps d'attente nettement plus court)
  • positionLRScheduleEndIteration 20 000 → 0 (le cosine s'étend jusqu'à maxIter = 20K, pas de phase prolongée)

TP7.mcmcPreview

DÉTAILS

Diagnostic MCMC. Overrides par rapport à 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 (l'aperçu monte en échelle plus prudemment)

TP8.mcmcBalanced

DÉTAILS

MCMC milieu de gamme. Overrides par rapport à TP4 :

  • maxIterations 200 000 → 120 000
  • densifyUntilIteration 160 000 → 96 000 (80 %)
  • mcmcNoiseDecayEnd 160 000 → 96 000 (80 %)
  • mcmcCapMultiplier 3.0 → 2.5 (entre l'aperçu 2.0 et le full 3.0)

TP9.quickTest

DÉTAILS

Pur test fonctionnel. Overrides par rapport à l'initialiseur :

  • maxIterations 30 000 → 1 000
  • densifyUntilIteration 15 000 → 500
  • densifyGradThreshold 2e-6 → 4e-6 (calibré pour une résolution 0.25×)
  • densifyInterval 100 → 50
  • opacityResetInterval 3 000 → 100 000 (désactivé, car bien trop court)
  • trainingRenderScale 1.0 → 0.25

Comment l'application détermine le plafond de Gaussians

La réponse définitive à la question « jusqu'à combien de Gaussians le MCMC peut-il les faire croître ? ». Trois grandeurs entrent en jeu : la valeur définie dans T62 mcmcMaxGaussians, le nombre de points d'initialisation SfM de ta scène et la capacité de buffer réservée à l'avance. L'application calcule dans cet ordre :

+ La valeur de départ est T62. Si elle est à 0, l'application applique 150 000 — ce plancher de sécurité empêche l'incident d'extinction massive décrit en 1.4.3. + Si T73 mcmcAutoScaleByScene est activé et que T72 mcmcCapMultiplier est supérieur à 0, l'application compare la valeur de départ à « points d'initialisation × T72 » et retient la plus grande des deux valeurs. + Enfin, elle limite le résultat à la capacité du buffer.

Exemple : Bicycle (Mip-NeRF 360, 194 images photo) → init SfM ~156 K points, T62 = 150 000, T72 = 5.32, auto-scale activé, capacité de buffer 8 M. 156 K × 5,32 donne 830 K, ce qui est plus que 150 000 et moins que 8 M — le plafond effectif est donc 830 K. C'est cette limite que respecte la relocation MCMC.

Calcule le nombre maximal réel de splats en MCMC. L'application prend ton réglage « Max Gaussians », regarde combien de points ta scène possède au départ, et applique le multiplicateur si « Auto-scale by scene » est activé. Ainsi, le plafond s'adapte à la scène au lieu d'imposer la même valeur pour une petite scène et une scène gigantesque. Tu n'as rien à faire pour cela — l'application calcule elle-même cette valeur au démarrage de l'entraînement.

Quel champ pour quoi ? (aide-mémoire)

ObjectifChamps à ajuster
Plus de détails au loinT62 mcmcMaxGaussians élevé, T72 mcmcCapMultiplier 5+
Plus de détails en général (Classic)T1 maxIterations élevé (≤ 40K), T2 densifyUntilIteration ≤ 14 % de T1
Réduire les artefacts flottants dans les vols de droneT43 frustumCullEnabled activé, T20 skyMaskingEnabled activé, T45 skyDomeEnabled activé
Beau ciel dans les scènes extérieuresT45 skyDomeEnabled activé, T47 skyDomeRadiusMultiplier 30–60
Fichier d'export plus petitStratégie .mcmc (T61), T56 postTrainingCompactification activé, T62 mcmcMaxGaussians ≤ 200K
Entraînement plus rapideT22 trainingRenderScale 0.5, diviser T1 maxIterations par deux — mais pas les deux à la fois !
Meilleurs reflets spéculairesT21 shDegreeUpgradeIterations avec [2K, 5K, 8K] (pas de montée en charge précoce), MCMC + 200K iter
Aperçu en direct plus fréquentT59 livePreviewInterval à 50 — la valeur la plus dense que propose Réglages → Entraînement
Transitions plus douces au niveau des ombresT17 ssimWeight un peu élevé (0.15–0.25), mais pas au-dessus de 0.3
Garder les intérieurs compactsPréréglage Intérieur P10 (, T72 = 1.76)

Champs dangereux

Ces champs peuvent, en cas de mauvaise configuration, provoquer un OOM, un crash de l'application, une extinction massive des Gaussians ou des données de benchmark inutilisables. À manier avec précaution :

  • T11 densifyGradThreshold — diviser cette valeur par deux peut générer 2 à 4× plus de Gaussians, ce qui sature rapidement la mémoire GPU. À noter également : doit correspondre à T22 trainingRenderScale (1.0× → 1e-6, 0.5× → 2e-6, 0.25× → 4e-6).
  • T72 mcmcCapMultiplier — pour de grandes scènes avec > 200 K points d'initialisation SfM et un multiplicateur > 5, il en résulte un cap résolu de plusieurs millions de Gaussians. Un OOM est possible sur les Mac à 36 Go de RAM. La valeur 5.32 pour l'extérieur ne fonctionne que parce que la scène de référence associée compte environ 156 K points d'initialisation → cap de 830 K.
  • T39 testViewIndices — une définition manuelle dans un fichier de préréglage peut rendre une mesure de qualité inutilisable (tous les indices > N → aucun holdout). Laisse la liste vide.
  • T64 mcmcOpacityRegWeight et T65 mcmcScaleRegWeight — réglés sur 0.01 dans la version bêta 1.4.3, ce qui a provoqué une extinction massive (460 K → 5 Gaussians en une seule itération). Fixés à 0.0 depuis la version 1.4.4, mais une augmentation manuelle peut reproduire le problème.
  • T15 opacityResetInterval — si la valeur n'est pas 100 000+ (effectivement désactivée) et que l'entraînement dure moins de 10 000 itérations, le reset détruit la convergence. .preview la fixe donc à 100 000 malgré maxIterations = 5 000.
  • T54/T55 densifyPhase2* — la deuxième phase de densification se termine par une cascade jusqu'à zéro Gaussian. Laisse les deux valeurs à 0.
  • T74 useMipSplatting — n'apporte aucun gain de qualité et peut même dégrader la qualité d'image sur certaines scènes extérieures. Désactivé par défaut, à activer uniquement pour des expérimentations.

Si un champ figure dans cette liste et que tu souhaites le modifier, effectue d'abord une sauvegarde de ton préréglage actuel (export au format JSON) et réfléchis à la manière dont tu pourras mesurer le résultat de façon reproductible — sinon, tu ne sauras pas ensuite si tu as obtenu une amélioration ou une dégradation.