Hoofdstuk 6 — Trainingsconfiguratie

Een typische preset-JSON-export. Top-level velden: id (UUID), name, (classic | mcmc | sceneClass | custom), (schemaversie), (tijdstempel), (vrije tekst). Genest -object bevat de parameters die cruciaal zijn voor reproduceerbaarheid — bij het importeren wordt het volledige blok ingelezen in de trainingsconfiguratie, en standaardwaarden uit de app-versie vullen de velden die in de JSON ontbreken (bijv. na een app-update). Wie een preset naar een andere Mac wil overzetten, stuurt gewoon dit JSON-bestand door.
De trainingsconfiguratie is het hart van elke trainingsrun in RadianceKit. Ze verzamelt elke parameter die de training beïnvloedt — van het maximale aantal iteraties over de acht leersnelheden tot de speciale velden voor MCMC, Mip-Splatting, het curriculum en de scene-aware cap-logica. Je bewerkt ze in de sidebar in het gedeelte Trainingsconfiguratie-sectie (Expert View), slaat ze op als preset of geeft ze door als JSON-export aan een andere Mac. Tijdens de training wordt precies dit object bevroren en doorgegeven aan de GPU-backend.
Dit hoofdstuk is referentiemateriaal voor powerusers. Het somt de 80 instelbare velden van de trainingsconfiguratie op, de 9 meegeleverde presets en de scèneafhankelijke bepaling van de Gaussian-cap. Bij twijfel geldt de waarde die het gekozen preset instelt — je ziet hem in de Inspector of in de JSON-export van het preset.
Inhoudsopgave:
+ Iteratie (T1–T2) + Leersnelheden (T3–T10) + Densification — Classic (T11–T16) + Loss (T17–T20) + SH-Degree-Progression (T21) + Prestaties (T22–T24) + Diagnose en puntenwolkvoorbereiding (T26–T30) + Regularisatie (T31–T37) + Refinement (T38–T44) + Sky-Dome (T45–T48) + Adam + LR-Schedule (T49–T55) + Post-Processing + Apple AI (T56–T60) + MCMC-Densification (T61–T73) + Mip-Splatting (T74–T76) + Adaptieve Densification (T77–T79) + Curriculum (T80–T81) + Statische presets (TP1–TP9) + Hoe de app de Gaussian-cap bepaalt + Welk veld waarvoor? (cheatsheet) + Gevaarlijke velden
Iteratie (T1–T2)
T1maxIterations
DETAILS
Standaard: 30 000 (Initializer), 35 000 (.full), 200 000 (.fullMCMC) Bereik: 1 000 – 500 000 (UI-schuifregelaar), geen harde bovengrens in de logica
TECHNISCH
Totaal aantal trainingsiteraties dat de backend doorloopt. Een iteratie betekent één forward-render van een enkele trainingscamera, één backward-pass over alle loss-componenten (L1 + SSIM + optionele regularisaties + sky-mask) en één Adam-optimizerstap. Dit getal werkt direct door in de andere schedules: de position-leersnelheid volgt een cosine-annealing-curve van 0 tot óf T1 zelf, óf tot T50 positionLRScheduleEndIteration; densification stopt bij T2 densifyUntilIteration; MCMC-noise-decay eindigt bij T69 mcmcNoiseDecayEnd; SH-degree-upgrades vinden plaats op de drie in T21 gedefinieerde markeringen. Bij klassieke densification ligt het bewezen bereik bij 20 000–35 000 iteraties, bij MCMC bij 60 000–200 000. Een drastische verhoging boven de in de preset vastgelegde waarden levert zelden extra kwaliteit op — Adam-momentum verzadigt, en zonder LR-decay-einde stagneert de loss. Omgekeerd leidt onderschrijding van ~5 000 tot onvolledig geconvergeerde geometrieën (density-control heeft te weinig tijd om te klonen/splitsen).
T2densifyUntilIteration
DETAILS
Standaard: 15 000 (Initializer), 5 000 (.full), 160 000 (.fullMCMC) Bereik: 0 – T1 maxIterations
TECHNISCH
Iteratie waarna de densification stopt. Tot hier worden Gaussians volgens de in T11–T16 (Classic) of T67–T70 (MCMC) geparametriseerde regels gekloond, gesplitst en gesnoeid; daarna blijft het aantal Gaussians constant en worden alleen nog posities, rotaties, schalen, opaciteiten en SH-coëfficiënten geoptimaliseerd (refinement-fase). In het originele 3DGS-paper ligt de waarde op 50 % van T1, in RadianceKits .full-preset op slechts ~14 % (5 000 van 35 000): na ongeveer 5 000 iteraties verslechtert verdere densificatie het resultaat eerder — meer floaters, meer geheugenverbruik, geen kwaliteitswinst. MCMC daarentegen laat de relocation tot 80 % van T1 doorlopen, omdat MCMC geen schadelijke floaters produceert. Wordt T2 te klein gekozen (< 1 000), dan ontstaan er te weinig Gaussians; te groot bij Classic (> 50 % van T1) leidt tot overgrowth en RGB-saturation-outliers (zie outdoor-overtraining-bevindingen).
Learningrates (T3–T10)
T3positionLearningRate
DETAILS
Standaard: 0.00016 Bereik: 1e-7 – 1e-3 (aanbevolen)
TECHNISCH
Adam-leerrate voor de XYZ-positie van elke Gaussian aan het begin van de training (iteratie 0). Volgt een cosine-annealing-curve en daalt in de loop van de training naar T4 positionLearningRateFinal. De standaardwaarde 0.00016 komt uit het originele 3DGS-paper (Kerbl et al.~2023) en hoeft in RadianceKit ook bij een verhoging van de beeldresolutie niet geschaald te worden — de positie beweegt zich in het wereld-coördinatensysteem, niet in de pixelruimte. Een aanzienlijke verhoging (> 0.0005) zorgt ervoor dat Gaussians over lange afstanden springen en de loss instabiel wordt; waarden ver eronder (< 0.00005) zorgen ervoor dat verkeerd geïnitialiseerde puntenwolken nooit hun plek vinden. Voor de meeste scènes is de standaardwaarde daarmee de juiste keuze. Let op: bij .fullMCMC laten we deze waarde bewust op de standaard staan — MCMC heeft constante leerrates nodig voor zijn relocation-logica, dus tunen hier levert niets op.
T4positionLearningRateFinal
DETAILS
Standaard: 0.0000016 (initializer + paper), 0.000016 (.full, .fullMCMC — 10× hoger) Bereik: 0 – T3 positionLearningRate
TECHNISCH
Eindwaarde van de position-LR-cosine-annealing-curve. Deze wordt bereikt bij T1 maxIterations of, indien ingesteld, bij T50 positionLRScheduleEndIteration. Het RadianceKit-.full-preset gebruikt 0.000016 — dus 10× hoger dan de paper-standaard 0.0000016. Zowel een aanzienlijk kleinere eindwaarde als een aanzienlijk grotere startwaarde verslechteren het resultaat merkbaar. De hoge eindwaarde is geen trade-off, maar een bewuste keuze: bij te sterke decay verliezen de Gaussians tijdens de refinement-fase hun vermogen om zich aan te passen aan nieuw toegevoegde densification-kandidaten. De schedule-fase kan worden verkort (T50 < T1), zodat T4 al vóór het einde van de training wordt bereikt en de rest van de training bij constante mini-LR verloopt — typische configuratie: T50 = 20 000, T1 = 35 000, refinement dus bij 0.000016 gedurende 15 000 iteraties.
T5shDCLearningRate
DETAILS
Standaard: 0.0025 (initializer + paper), 0.005 (.full en alle MCMC-presets — 2×) Bereik: 0.0001 – 0.05
TECHNISCH
Adam-leerrate voor het DC-aandeel (degree 0, dus constante albedo) van de spherical-harmonic-kleur. SH-DC komt overeen met de richtingsonafhankelijke grondtoon van een Gaussian, als het ware de "basiskleur". RadianceKit verdubbelt de paper-standaard in de quality-presets — dat versnelt de kleurconvergentie, wat nodig is omdat bij korte training (< 5 000 iteraties) de SH-DC anders niet op orde komt. In tegenstelling tot de geometrische LR's heeft SH-DC geen decay; de leerrate blijft over alle iteraties constant (of volgt alleen de optionele extended-phase-decay uit T51). Nog aanzienlijk hogere waarden (rond 0.01) verslechteren het resultaat weer en maken de kleuren instabiel.
T6shRestLearningRate
DETAILS
Standaard: 0.000125 (initializer + paper), 0.00025 (.full en MCMC — 2×) Bereik: 0.000001 – 0.005
TECHNISCH
Adam-leerrate voor de SH-coëfficiënten van hogere orde (degree 1, 2, 3 — dus de kleuraandelen die afhankelijk zijn van de kijkrichting en zorgen voor glanspunten, reflecties en zachte schaduwvorming). 20× kleiner dan T5 volgens paper-conventie, omdat deze coëfficiënten kwadratisch in aantal groeien (3 voor degree 1, 5 voor degree 2, 7 voor degree 3 → in totaal 15 floats per Gaussian) en zonder kleinere leerrate het beeld zouden oververzadigen. Wordt in twee stappen vrijgeschakeld — tot de eerste markering in T21 shDegreeUpgradeIterations is alleen degree 0 actief (dus alleen T5), daarna 1, later 2, uiteindelijk 3. Lage waarden hier zijn vooral belangrijk bij scènes met veel diffuus licht; bij zeer glanzende oppervlakken (autolak, water) loont draaien niet — de SH-representatie op zich is beperkt.
T7opacityLearningRate
DETAILS
Standaard: 0.05 (initializer + paper), 0.1 (.full, MCMC — 2×) Bereik: 0.001 – 1.0
TECHNISCH
Adam-leerrate voor de logit-opacity van elke Gaussian. De app slaat opacity op als een onbegrensde float-waarde en transformeert deze met sigmoid naar [0, 1]; de LR werkt in de logit-space. De quality-presets verdubbelen de paper-standaard naar 0.1; dat maakt het pruning efficiënter — dode Gaussians vallen sneller onder de T14 pruneOpacityThreshold. Welke waarde het beste werkt, hangt daarbij af van de Adam-configuratie; de wisselwerking tussen beide is niet triviaal. Lage waarden (< 0.01) zorgen ervoor dat "dead" Gaussians eeuwig blijven rondliggen en geheugen verbruiken; te hoge waarden (> 0.5) kunnen tot opacity-explosie leiden, daarom begrenst de optimizer de logit-waarde vast op [-15, 3].
T8opacityLearningRateFinal
DETAILS
Standaard: 0.0 (= "geen decay") Bereik: 0 of 0.001 – T7 opacityLearningRate
TECHNISCH
Optionele cosine-decay-eindwaarde voor de opacity-LR. Als 0.0, is decay uitgeschakeld en blijft de opacity-LR over de hele training constant op T7. Een decay van 0.1 naar 0.01 verslechtert het resultaat aanzienlijk; daarom staat de standaard op "uit". De hypothese achter dit veld: in de refinement-fase zou een constante opacity-LR tot oscillatie kunnen leiden, waardoor splats die al de juiste mate van transparantie hebben bereikt, door willekeurige gradiëntschommelingen weer verschuiven. Empirisch bevestigt zich dat niet — de logit-clamping-logica vangt dat sowieso op. Het veld blijft beschikbaar voor toekomstige experimenten; ook zeer lange MCMC-runs (> 500K iteraties) zouden hiervan kunnen profiteren.
T9scaleLearningRate
DETAILS
Standaard: 0.005 (initializer + paper), 0.01 (.full, MCMC — 2×) Bereik: 0.0001 – 0.1
TECHNISCH
Adam-leerrate voor de drie schaalcomponenten van elke Gaussian in de log-space (RadianceKit slaat log(scale) op, zodat schalen positief blijven). De paper-standaard 0.005, in RadianceKit verdubbeld naar 0.01 voor betere scale-convergentie bij de afgestemde leerrate-configuraties. Blijft de waarde in combinatie met de overige quality-leerrates op de paper-standaard, ontstaan zichtbaar te weinig Gaussians — density-control kan niet klonen, omdat de scale-updates te langzaam bijblijven. Schaal bepaalt de uitgebreidheid van elke Gaussian — te snel leren leidt tot "needle"-Gaussians (extreem lange dunne splats, zie T34 scaleRatioPruneThreshold), te langzaam leren laat splats te compact blijven en density-control moet te vaak splitten.
T10rotationLearningRate
DETAILS
Standaard: 0.001 (initializer + paper), 0.002 (.full, MCMC — 2×) Bereik: 0.0001 – 0.05
TECHNISCH
Adam-leerrate voor de vier quaternion-componenten van elke Gaussian. Het quaternion wordt bij elke optimizer-stap na de Adam-update opnieuw genormaliseerd (L2-norm = 1) — anders zou de covariantiematrix ontaarden. RadianceKit verdubbelt de paper-standaard in de quality-presets, omdat rotatie ten opzichte van schaal / positie kleinere absolute gradiëntgroottes heeft (op de eenheidssfeer blijft elke stap kort) en zonder 2× zou de rotatie in het venster van 35 000 iteraties duidelijk onder-geconvergeerd zijn. Bij NeRF-Blender-scènes (Lego, Chair) heeft rotatie bijzonder veel invloed — de randen van de objecten richten zich pas na 5 000–10 000 iteraties goed uit.
Densification — Klassiek (T11–T16)
T11densifyGradThreshold
DETAILS
Standaard: 0.000002 (Initializer, gekalibreerd voor 0,5× resolutie), 0,0000011 (.full, gekalibreerd voor 1,0×), 0,000004 (.quickTest, gekalibreerd voor 0,25×), 2e-7 (.fullClassicPaper) Bereik: 1e-8 – 1e-3 (resolutie-afhankelijk)
TECHNISCH
Drempelwaarde voor de L2-norm van de in beeldruimte geprojecteerde positie-gradiënt, waarboven een Gaussian wordt gemarkeerd voor klonen of splitsen. De absolute waarde hangt direct af van de trainingsresolutie — deze schaalt ongeveer met 1/resolutie² (meer pixels = kleinere gradiënten per pixel). Daarom heeft elke T22 trainingRenderScale-stap een gekalibreerde drempelwaarde nodig: 0,25× → 4e-6, 0,5× → 2e-6, 1,0× → 5e-8 … 1,1e-6 (.full). De paper-standaard 0,0002 is NDC-genormaliseerd en in RadianceKits world-space-pipeline niet direct vergelijkbaar. Met de T52 adaptiveDensifyThreshold-vlag kan de waarde tijdens runtime worden berekend uit de p98 van de huidige gradiëntverdeling — bij echte scènes zakt het aantal Gaussians daarbij echter dramatisch in (mass-pruning); de vlag blijft uit. T77–T79 bieden een alternatieve adaptieve logica via rolling median. Dit veld is niet zonder risico — halvering levert 2–4× meer Gaussians op (geheugendruk, OOM-risico); verdubbeling kan de scène onder-densifiëren.
T12densifyFromIteration
DETAILS
Standaard: 500 Bereik: 100 – 5 000
TECHNISCH
Eerste iteratie vanaf welke Densification actief wordt. Daarvoor gebeurt alleen „kaal" leren op de initiële SfM-puntenwolk, zonder dat nieuwe Gaussians worden aangemaakt. De standaard 500 komt uit het 3DGS-paper en geeft de initialisatie tijd om te stabiliseren — als er al vanaf iteratie 0 wordt gedensificeerd, klonen verkeerd gepositioneerde SfM-punten zich veelvuldig, voordat ze hun juiste plek überhaupt hebben gevonden. Een aanzienlijk latere start (bijvoorbeeld 1 000) verslechtert het resultaat licht; blijf bij de standaard.
T13densifyInterval
DETAILS
Standaard: 100 (Initializer, MCMC), 200 (.full) Bereik: 50 – 1 000
TECHNISCH
Hoeveel iteraties er tussen twee Densification-stappen liggen. In de paper-standaard 100 — elke 100 iteraties wordt de lijst van densify-kandidaten geëvalueerd, gekloond/gesplitst en tegelijkertijd wordt de lijst van prune-kandidaten (sigmoid(opacity) < T14 pruneOpacityThreshold) verwijderd. Voor .full heeft 200 zich bewezen — dit ontlast de GPU, omdat er minder reorganisatie-passes lopen, en geeft elke Gaussian meer tijd om zich na een kloon-actie in te stellen. Kortere intervallen leiden in de Quality-setup tot overdensificatie: er ontstaan aanzienlijk meer Gaussians, zonder dat het beeld beter wordt. Bij MCMC wordt hetzelfde veld geïnterpreteerd als relocation-interval; zie T67 mcmcRelocationInterval voor de MCMC-specifieke logica.
T14pruneOpacityThreshold
DETAILS
Standaard: 0,005 (Initializer, Paper, MCMC), 0,001 (.full) Bereik: 0,0001 – 0,1
TECHNISCH
Sigmoid-opaciteitsdrempel waaronder een Gaussian bij de volgende densification-stap wordt verwijderd. Werkt samen met T7 opacityLearningRate en de logit-clamp-logica in de optimizer. In .full ligt de waarde op 0,001 in plaats van 0,005 — splats die alleen bij uitzonderlijke kijkhoeken een rol spelen, blijven daardoor langer behouden en dragen bij aan het SH-detail. Nog kleinere waarden (bijvoorbeeld 0,0001) leveren niets meer op: er wordt te weinig gepruned en geheugen verspild. Belangrijk: Density-Control moet ALTIJD prunen, ook als de buffercapaciteit door andere maatregelen al vol is — anders accumuleren dode Gaussians en bevriest de count.
T15opacityResetInterval
DETAILS
Standaard: 3 000 (Initializer + Paper), 100 000 (.full = effectief gedeactiveerd), 200 000 (.fullMCMC = gedeactiveerd) Bereik: 1 000 – 100 000+
TECHNISCH
Om de hoeveel iteraties wordt de opaciteit van alle Gaussians teruggezet naar een lage waarde (~0,01) — een maatregel uit het 3DGS-paper om „bevroren" splats opnieuw te beoordelen. Samen met RadianceKits warmup, de stochastische trainingsopzet en de verdubbelde leersnelheden kost de opacity-reset merkbaar kwaliteit, en de logit-clamp in de optimizer dekt zijn functie sowieso al af. Daarom in .full praktisch gedeactiveerd (100 000 > 35 000 = wordt nooit geactiveerd). Bij .fullClassicPaper (paper-getrouwe variant) is deze bewust weer op 3 000 gezet — daar gaat het erom de Gaussian-budgetten van het originele paper te bereiken.
T16maxScreenSize
DETAILS
Standaard: 0,0 (= gedeactiveerd) Bereik: 0 (uit) of > 0
TECHNISCH
Maximale schermruimte-grootte (in geprojecteerde pixels) die een Gaussian mag bereiken, voordat deze gedwongen wordt gesplitst. De waarde staat op 0 — RadianceKits Density-Control gebruikt in plaats daarvan de world-space-schaaldrempelwaarde uit dezelfde gradiëntlogica. Blijft in de veldcatalogus opgenomen, omdat toekomstige experimenten met mip-splatting (T74–T76) of scène-specifieke splatting-strategieën hiervan zouden kunnen profiteren. Activering (waarde > 0, bijv. 20) zou zeer groot geworden splats op het scherm dwingen zich op te splitsen — relevant bij grote, gladde wandvlakken, waar een enkele reuzensplat te weinig detail biedt.
Loss (T17–T20)
T17ssimWeight
DETAILS
Standaard: 0.2 (Initializer + Paper + .full), 0.05 (alle MCMC-Presets) Bereik: 0.0 – 1.0
TECHNISCH
Gewicht van het D-SSIM-aandeel in de gecombineerde Loss-functie loss = (1 - λ) * L1 + λ * D-SSIM, waarbij λ = T17. De 3DGS-paper-standaard 0.2 is voor Classic-Densification de juiste keuze — al bij 0.3 verslechtert het resultaat duidelijk. Voor MCMC ligt de passende waarde daarentegen bij 0.05, omdat MCMC door zijn stochastische exploratie een sterker L1-signaalaandeel nodig heeft — hogere SSIM-gewichten zouden de Relocation-beslissingen verwateren. SSIM is aanzienlijk duurder om te berekenen dan L1 (lokale 11×11-vensters over het hele beeld); RadianceKit gebruikt een MPS-versnelde implementatie die onder 1 ms per 1080p-beeld blijft. De Scene-Class-Presets gebruiken scène-specifieke waarden tussen 0.082 (.outdoorPreset) en 0.171 (.indoorPreset).
T18ssimWeightRefinement
DETAILS
Standaard: 0.0 (= „geen wissel, behoud ssimWeight") Bereik: 0 of 0 – 1.0
TECHNISCH
Optionele SSIM-waarde voor de refinement-fase na T2 densifyUntilIteration. Een verhoging van 0.2 naar 0.3 in de refinement-fase verslechtert het resultaat in beide maten — L1 zowel als SSIM; daarom staat de standaard op 0.0. De hypothese achter dit veld was dat na de densification — wanneer er geen nieuwe Gaussians meer ontstaan — een sterker SSIM-aandeel de structurele scherpte zou maximaliseren. Empirisch onjuist: het SSIM-gewicht verhogen betekent indirect het L1-gewicht verlagen, en L1 is het aanzienlijk zeggingskrachtigere signaal in de finale refinement-fase. Het veld blijft beschikbaar voor toekomstige experimenten met perceptuele loss (T60) of edge-loss (T19), waar een refinement-specifieke loss-compositie zinvol zou kunnen zijn.
T19edgeLossWeight
DETAILS
Standaard: 0.0 (= uitgeschakeld) Bereik: 0 of 0.001 – 1.0
TECHNISCH
Experimentele loss-term: gewicht van een Sobel-gradient-domain-L1-loss, die de beeldranden direct vergelijkt (Ground-Truth-Sobel vs Render-Sobel) bovenop L1+SSIM. Hypothese: randinformatie is een perceptuele hoeksteen van beeldkwaliteit en een expliciete term zou Gaussians moeten aanmoedigen om randen beter te treffen. In de praktijk levert het niets op: een merkbaar gewicht (0.1) verslechtert het resultaat, een klein gewicht (0.01) verandert niets aan de kwaliteit, maar kost wel rekentijd. De Sobel-pass kost een extra MPS-forward op Ground-Truth en render. Daarom permanent uitgeschakeld. Toekomstig use-case: scènes met harde kunstmatige randen (architectuur, meubels, renderings) zouden ervan kunnen profiteren — De Scene-Class-Presets gebruiken hiervoor echter niet deze term, maar schalen het SSIM-gewicht.
T20skyMaskingEnabled
DETAILS
Standaard: false (Initializer en alle presets) Bereik: boolean
TECHNISCH
Schakelt Sky Masking in. Daarbij wordt in elk beeld met behulp van het Apple-Vision-framework de hemelregio uitgemaskeerd, en de loss in dat gebied op nul gezet. Reden: buitenscènes lijden er vaak onder dat blauwe/grijze/witte hemelpixels de app ertoe brengen Gaussians precies daar te plaatsen — wat als „floater" wordt waargenomen. Zonder sky-mask zou de loss in dat gebied nooit nul zijn, omdat de hemel in het beeld licht varieert en de app eindeloos probeert dit met splats na te bouwen. Het Vision-masker wordt één keer per camera vóór het trainen berekend en in het RAM bewaard. Wordt doorgaans samen met T45 skyDomeEnabled geactiveerd (UI-logica in de Settings-view). Bij binnenscènes of synthetische renderings uitgeschakeld laten — het masker zou daar ten onrechte plafonds of muren als „hemel" herkennen.
SH-Degree-Progressie (T21)
T21shDegreeUpgradeIterations
DETAILS
Standaard: [1_000, 2_000, 3_000] (Initializer), [2_000, 5_000, 8_000] (.full, MCMC), [1_000, 2_000] (.preview — Graad 3 overgeslagen) Bereik: [Int], elke waarde binnen [0, maxIterations], monotoon stijgend
TECHNISCH
Iteraties waarop de actieve SH-graad van 0→1, 1→2, 2→3 wordt opgehoogd. Vóór de eerste marker zijn alleen de DC-componenten actief (dus T5 shDCLearningRate), na de eerste marker de DC + 3 graad-1-coëfficiënten, na de tweede marker + 5 graad-2-coëfficiënten, na de derde marker alle 15 coëfficiënten. Het geheugenverbruik per Gaussian groeit daarbij trapsgewijs — 4 floats → 16 floats → 36 floats → 64 floats. De Quality-Presets vertragen de opwaarderingen ten opzichte van de Initializer-standaardwaarden, omdat de geometrie eerst moet stabiliseren voordat de kleurdetails met hun hogere frequentie erbij komen. De eerdere markers [1K, 2K, 3K] leveren in .full een merkbaar slechter resultaat. .preview stopt bij graad 2, omdat graad 3 in 5 000 iteraties niet convergeert en alleen optimizer-capaciteit verspilt. Het curriculum (T80–T81) biedt een alternatieve logica die deze lijst dynamisch overschrijft.
Prestaties (T22–T24)
T22trainingRenderScale
DETAILS
Standaard: 1.0 (Initializer, .full, MCMC, Scene-Class), 0.5 (.preview), 0.25 (.quickTest) Bereik: 0.05 – 2.0 (typisch 0.25, 0.5, 1.0)
TECHNISCH
Render-resolutie tijdens training relatief tot de originele resolutie van de trainingsafbeeldingen. Bij 0.5 wordt elke afbeelding teruggerekend naar 50 % breedte × 50 % hoogte (dus 25 % van de pixels) en vindt de Gaussian-rendering plaats op deze kleinere resolutie. Reduceert zowel geheugen- als rekenbelasting kwadratisch. Belangrijk: T11 densifyGradThreshold moet passen bij de gekozen resolutie — de gradiëntgroottes schalen met 1/resolutie², daarom heeft .quickTest (0.25×) een veel hogere drempel (4e-6) dan .full (1.0×, 1.1e-6). RadianceKit waarschuwt bij zeer grote afbeeldingen en past zich automatisch aan — 3-MP-doelresolutie. Bij extreme 4K-invoerafbeeldingen zou 0.5 of zelfs 0.25 zinvol zijn, anders draait elke Mac ook alleen in CPU-Compaction.
T23resolutionWarmupScale
DETAILS
Standaard: 0.0 (= uitgeschakeld) Bereik: 0 of 0.1 –
TECHNISCH
Train de Densification-fase (Iter 0 tot T2) op een lagere resolutie dan de Refinement-fase. Voor .full staat dit uitgeschakeld, omdat bij T22 = 1.0 en Cosine-Annealing de tijdwinst gering uitvalt en de kwaliteit licht lijdt. Blijft in de veldencatalogus, omdat het bij 4K-invoer en lange trainingssessies weer zinvol zou kunnen worden — het Curriculum (T80) grijpt terug op een vergelijkbare logica, maar daar is het gekoppeld aan de LR-schema. Als geactiveerd en T80 curriculumResolutionRamp ook true is, wint het Curriculum en overschrijft het deze waarde.
T24tileSize
DETAILS
Standaard: 16 Bereik: 8, 16, 32
TECHNISCH
Grootte van de rasterisatie-tiles in pixels. De Gaussian-Splatting-rendering is tile-gebaseerd: het beeld wordt opgedeeld in 16×16-pixel-tegels, elke tegel verzamelt de voor haar relevante Gaussians, sorteert ze op diepte en blendt ze in. 16 is de door vrijwel alle 3DGS-implementaties gebruikte standaard en in de RadianceKit-Metal-kernels hardgecodeerd; een wijziging van deze waarde zou her-compilatie van de shaders vereisen en is in de huidige stand niet effectief. Blijft als veld staan, voor het geval een toekomstige engine-versie Tile-Size dynamisch ondersteunt.
Diagnose en puntenwolk-voorbereiding (T26–T30)
T26depthDistortionWeight
DETAILS
Default: 0.0 (= gedeactiveerd) Range: 0 of 0.0001 – 0.05
TECHNISCH
Experimenteel: gewicht van een Depth-Distortion-regularisatie-loss. Bestraft Gaussians die weliswaar diep gestaffeld zijn langs een renderstraal, maar conceptueel tot dezelfde oppervlakte behoren — dit encouraged geconcentreerde dieptedistributies en vermindert floaters. Bij alle geteste sterktes wordt het resultaat slechter in plaats van beter. Het theoretische voordeel — multi-view-consistentie verbeteren — vertaalt zich niet naar de L1-loss, omdat de hypothese impliciet aanneemt dat de SfM-geometrie correct is en de Gaussians alleen „gestapeld" hoeven te worden. In de praktijk is de SfM-puntenwolk meestal het zwakste onderdeel, niet de stapeling. Blijft beschikbaar voor multi-view-datasets met bijzonder schone poses (synthetisch, Mip-NeRF 360 met ground truth).
T27singleViewOverfit
DETAILS
Default: false Range: boolean
TECHNISCH
Diagnose-flag: als true wordt in elke trainingsiteratie verplicht camera-index 0 gebruikt in plaats van een willekeurige uit de camera-pool. Doel: als het model niet eens één enkele view kan overfitten (dat wil zeggen, de loss op view 0 gaat ook na 10 000 iteraties niet naar nul), zit er een fundamentele bug in de forward/backward-pass. Deze schakelaar werd tijdens de ontwikkeling van de Metal-shaders en de differentiable-rasterizer-kernels intensief gebruikt. Tegenwoordig alleen nog beschikbaar als sanity-check, wanneer iemand iets aan de trainings-backend heeft veranderd en dit wil controleren. In de interface is hiervoor geen schakelaar — het veld staat in alle presets uit en blijft dat.
T28maxCameras
DETAILS
Default: 0 (= „alle camera's gebruiken") Range: 0 of 1 – N
TECHNISCH
Diagnose-limiet: train alleen met de eerste N camera's, negeer alle overige. Doel oorspronkelijk: de hypothese testen dat te veel camera's gradiëntconflicten veroorzaken (te veel tegenstrijdige loss-signalen voor dezelfde Gaussian). Een kunstmatige beperking levert geen voordeel op — meer frames leveren vrijwel altijd meer kwaliteit op. In de interface is hiervoor geen bedieningselement; het veld staat in alle presets op 0, dus „alle camera's".
T29maxInitialPoints
DETAILS
Default: 0 (= „alle SfM-punten gebruiken") Range: 0 of 1 000 – 200 000+
TECHNISCH
Beveiliging: beperkt het aantal initiële SfM-punten waarmee de training start. Dichte COLMAP-reconstructies kunnen > 60 000 punten produceren, wat bij grote initiële schalen leidt tot 200–300 Gaussians per pixel-overlap — dat vormt een „mistveld" waarin de training niet convergeert. Subsampling naar ~16 000 punten (hard-cap-logica in de training-engine) brengt de initiële dichtheid op het niveau dat de referentie-3DGS gebruikt, en vermindert overlap drastisch. De app stelt dit bij zeer dichte reconstructies zelf in; een bedieningselement hiervoor bestaat niet.
T30cameraClusterOutlierMultiplier
DETAILS
Default: 10.0 (alle presets — nooit overschreven) Range: 1.0 – 100.0
TECHNISCH
Multiplicator voor het camera-cluster-outlierfilter. Vóór de training berekent de training-engine het centroid van alle camerapositie's en de maximale afstand van een camera tot het centroid. SfM-punten waarvan de afstand tot het centroid multiplier × maxCameraDistance overschrijdt, worden als outlier verworpen. De default 10× is bewust ruim gekozen. Een subtiel neveneffect: krappere SfM (camera's dichter bij elkaar) → kleinere → kleinere drempelwaarde → meer punten worden als outlier verworpen. Losser SfM → grotere drempelwaarde → minder punten verworpen. Hieruit volgt een verrassend effect: een krappere en op zich betere SfM-reconstructie kan de training verslechteren, omdat te veel initiële punten worden verworpen. Het veld staat in alle presets op 10 en is in de interface niet aanpasbaar. Waarden onder 5 zijn meestal te restrictief, boven 20 werkeloos.
Regularisatie (T31–T37)
T31coarseToFineBlurRadius
DETAILS
Default: 0 (= gedeactiveerd) Bereik: 0 of 1 – 10
TECHNISCH
Experimenteel: Box-Blur-radius, die aan het begin van de Densification-fase op het Ground-Truth-beeld wordt toegepast en lineair tot het einde van de Densification (T2) op 0 wordt teruggebracht. Hypothese: Coarse-to-Fine-Training — eerst grove structuren leren, dan details — zou stabielere geometrie moeten opleveren. Bij alle geteste radii wordt het resultaat slechter. De reden voor het mislukken: de Densification beslist op basis van beelddomein-gradiënten, en blur reduceert precies de signalen, die voor „hier moet gekloond worden" belangrijk zijn. Blijft in de veldcatalogus voor toekomstige tests met een ander Density-Control-schema.
T32scaleRegWeight
DETAILS
Default: 0.0 (= gedeactiveerd) Bereik: 0 of 0.0001 – 0.05
TECHNISCH
Experimenteel: L1-regularisatie op de wereldruimtelijke schaal. Bestraft Gaussians die te groot worden — voorkomt „mega-splats", die hele wandvlakken met één Gaussian bedekken. Ingeschakeld explodeert het aantal Gaussians naar miljoenen en wordt het resultaat een veelvoud slechter. De reden: schaal-regularisatie komt in conflict met Density-Control — kleinere schalen betekenen dat meer Gaussians nodig zijn, dus splitst Density-Control vaker, wat weer meer gradiënt-belasting betekent. Uitgeschakeld, maar gedocumenteerd voor Mip-Splatting-experimenten (T74): in deze context zou een schaal-ondergrens zinvol kunnen zijn.
T33anisotropyRegWeight
DETAILS
Default: 0.0 (= gedeactiveerd) Bereik: 0 of 0.0001 – 0.05
TECHNISCH
Experimenteel: Penalty op de max(scale)/min(scale)-verhouding, moet extreem uitgerekte „needle"-Gaussians voorkomen, die als floater worden waargenomen. Bij alle geteste sterktes wordt het resultaat duidelijk slechter. De reden: regularisatie dwingt splats richting een „ronde" vorm, wat op een vlak oppervlak (wand, tafel, vloer) precies fout is — daar is een platte, brede Gaussian efficiënter dan een bolvormige. Uitgeschakeld. T34 scaleRatioPruneThreshold streeft hetzelfde doel gerichter na, staat echter ook standaard uit.
T34scaleRatioPruneThreshold
DETAILS
Default: 0.0 (= gedeactiveerd) Bereik: 0 of 5.0 – 100.0 (typisch 10.0 – 30.0)
TECHNISCH
Experimentele post-Training-pruning, die elke Gaussian verwijdert waarvan de max(scale)/min(scale)-verhouding de hier ingestelde lineaire drempelwaarde overschrijdt. Richt zich op extreem uitgerekte „needle/disc"-floaters, die door regularisatie alleen niet geëlimineerd kunnen worden. In de test verwijderde de pruning floaters zoals gehoopt, maar tegelijkertijd ook zinvolle vlakke splats op wanden en vloeren — het beeld werd gaatjesachtiger. Daarom standaard uit. Sinds versie 1.8 is hiervoor de schakelaar Remove Needle/Disc Floaters in het Inspector-gedeelte „Training" beschikbaar, onder de tussenregel „Runs automatically at the end of training". Ingeschakeld werkt hij bewust conservatief (alleen splats waarvan de langste as ongeveer 50× de kortste overschrijdt) en werkt vanaf de volgende trainingsrun.
T35opacityRegWeight
DETAILS
Default: 0.0 (= gedeactiveerd) Bereik: 0 of 0.0001 – 0.05
TECHNISCH
Experimenteel: Binary-Cross-Entropy-penalty, die opaciteit richting 0 of 1 trekt (dus weg van „half-transparant"). Hypothese: een scherpere opaciteitsverdeling zou de beeldscherpte verbeteren. Samen met T33 kost de regularisatie kwaliteit; beide zijn gedeactiveerd. Let op: in 1.4.3-Beta dook een bug op, die precies dit veld een default-waarde-wijziging (initializer = 0.01) gaf, wat leidde tot mass-extinction van het Gaussian-aantal (460 K → 5 in één iteratie). Sinds 1.4.4 staat het vast op 0.0 als default.
T36opacityDecayFactor
DETAILS
Default: 0.0 (initializer = gedeactiveerd), 0.9995 (.full, .classicBalanced — HTGS-standaard) Bereik: 0 (uit) of 0.95 – 1.0
TECHNISCH
Implementatie van het HTGS-schema (Hierarchical Time-Gating, Eurographics 2025): elke T37 opacityDecayInterval iteraties wordt de sigmoid-opaciteit van elke Gaussian met deze factor vermenigvuldigd. 0.9995 × 100 toepassingen resulteert in ~95 % behoud per Densification-fase — een lichte maar gestage neerwaartse druk op alle opacities, die zwak bijdragende Gaussians betrouwbaar onder de T14 pruneOpacityThreshold laat zakken. Het resultaat is een duidelijk beter resultaat dan zonder decay. Alleen actief tijdens de Densification-fase (tot T2), daarna loopt de training verder zonder decay, zodat de tijdens Refinement gevestigde opacities stabiel blijven. Niet gebruikt bij MCMC (MCMC heeft eigen mechanismen via T67 mcmcRelocationInterval + T68 mcmcDeadOpacityThreshold).
T37opacityDecayInterval
DETAILS
Default: 50 Bereik: 10 – 500
TECHNISCH
Iteratie-interval, waarin T36 opacityDecayFactor wordt toegepast. HTGS-paper-default 50, in .full behouden. Lange intervallen (>200) heffen het effect deels op, omdat tussen twee toepassingen genoeg gradiënt-updates plaatsvinden, zodat de opacity weer stijgt. Kortere intervallen (<20) maken decay te agressief. Alleen actief in de Densification-fase.
Verfijning (T38–T44)
T38gradientAccumulationSteps
DETAILS
Standaard: 1 (= „één view per Adam-stap") Bereik: 1 – 8
TECHNISCH
Aantal views waarvan de gradiënten geaccumuleerd worden voordat een Adam-update wordt uitgevoerd. Bij > 1 draait de app op een apart, „unfused" backward-project-pad, dat de gradiënten in een aparte buffer optelt; de uiteindelijke toepassing schaalt met 1/N om de magnitude constant te houden. Bij klassieke training levert de waarde 2 geen kwaliteitswinst op, maar kost het tijd, omdat het unfused-pad duurder is dan het fused-pad. Bij MCMC daarentegen verkleint accum = 2 het kwaliteitsverschil met Classic merkbaar — daarom wordt het daar als schakelaar aangeboden. In de presets staat de waarde op 1. In de interface bereik je hem via de schakelaar MCMC Quality in de Inspector-sectie „Training": ingeschakeld accumuleert de app 2 views per stap, uitgeschakeld 1. Andere waarden dan 1 en 2 zijn alleen via een bewerkt preset in te stellen.
T39testViewIndices
DETAILS
Standaard: [] (= leeg, alle views worden voor training gebruikt) Bereik: Set<Int>, willekeurige deelverzameling van de Camera-indices
TECHNISCH
Set van Camera-indices die NIET voor training gebruikt worden, maar als holdout voor PSNR/SSIM/LPIPS-evaluatie worden bewaard. Wordt alleen ingevuld bij de interne meetruns: dan elke achtste view, beginnend bij index 0 (LLFF-standaard, identiek aan de Mip-NeRF-360- en 3DGS-paper-conventies). In de uitgeleverde staat blijft dit veld leeg — de training gebruikt alle views, en er is in de interface geen bedieningselement hiervoor. Let op: het handmatig instellen van dit veld in een preset-bestand zonder begrip van de indices maakt een meting onbruikbaar (bv. als alle indices boven N worden gezet, terwijl er maar N-50 views zijn → geen holdouts → geen evaluatie). Bij het exporteren van je eigen preset wordt testViewIndices niet meegeschreven, omdat het scèneafhankelijk is en anders tussen verschillende datasets zinloze waarden zou achterlaten.
T40refinementPruneInterval
DETAILS
Standaard: 0 (= uitgeschakeld) Bereik: 0 of 100 – 5 000
TECHNISCH
Elke N iteraties tijdens de verfijningsfase (na T2) wordt een extra prune-pass uitgevoerd, die Gaussians met sigmoid(opacity) < T41 refinementPruneOpacityThreshold verwijdert. Reden: tijdens Densification zijn er regelmatige density-control-calls, daarna niet meer — Gaussians waarvan de opacity blijft dalen, blijven echter in de buffer. In de praktijk schaadt deze extra pruning: samen met de tweede densification-fase (T54) kan het het volledige bestand aan Gaussians leegvegen. Staat in alle presets op 0 en is in de interface niet instelbaar; mocht men het toch via een bewerkt preset-bestand instellen, dan zijn 1 000 of 2 000 zinvolle waarden.
T41refinementPruneOpacityThreshold
DETAILS
Standaard: 0.0 (= „gebruik T14") Bereik: 0 of 0.001 – 0.1
TECHNISCH
Aparte opacity-drempelwaarde voor refinement-pruning. Na densification hebben de meeste Gaussians een duidelijk hogere opacity bereikt (> 0.001), waardoor de standaard T14 pruneOpacityThreshold te laks zou zijn. Als T40 actief is, bepaalt dit veld de eigen drempelwaarde. Bij 0.0 wordt T14 verder gebruikt. Alleen relevant als T40 > 0.
T42midTrainingCompactificationIterations
DETAILS
Standaard: [] (= uitgeschakeld) Bereik: [Int], waarden in (densifyUntilIteration, maxIterations)
TECHNISCH
Expliciete iteratiepunten tijdens de verfijningsfase, waarop een compactification-pass loopt (verwijdert sigmoid(opacity) < 0.01 + outlier-scale-Gaussians, dezelfde logica als T56 postTrainingCompactification). Reden: lange verfijningsfasen kunnen confetti-/floater-accumulatie vertonen, waarvan de SH dan op view-specifieke artefacten overfit raakt. Typische configuratie indien geactiveerd: [10000, 20000, 30000] voor 40K Classic. MAAR: vrij gekozen opruimmomenten verslechteren het eindresultaat doorgaans — het aantal Gaussians daalt weliswaar duidelijk, maar de beeldfout stijgt sterker. Als vrij instelbare iteratielijst blijft dit veld daarom in alle presets leeg. Het effect zelf bereik je in de interface via de schakelaar Floater Cleanup in de Inspector-sectie „Training": bij klassieke runs vanaf 30 000 iteraties legt hij twee opruimrondes midden in de training. Eigen momenten kun je alleen via een bewerkt preset-bestand instellen.
T43frustumCullEnabled
DETAILS
Standaard: false Bereik: boolean
TECHNISCH
Na de training worden alle Gaussians verwijderd die zich buiten de vereniging van alle trainings-camera-frusta bevinden. Zulke Gaussians zijn nooit door het loss-signaal beperkt en zijn altijd floaters. Bijzonder effectief voor scènes waarin de novel-view achter of naast het camerapad ligt (bv. de achterkant van een lineaire dronevlucht) — de floaters daar worden tijdens de trainingsfase nooit zichtbaar, maar bij het latere bewegen in de 3D-viewer wel degelijk. Bij dronevluchten levert dit merkbaar minder floaters op, daarom als opt-in beschikbaar. Standaard false, omdat bij object-captures met volledige orbit-coverage de frustum-unie de hele scène omvat en de functie niets verwijdert — wordt aangeboden onder Instellingen bij „Floater Reduction". Het Outdoor-preset activeert het niet, omdat de sky-dome daar hetzelfde probleem beter oplost.
T44frustumCullExpansion
DETAILS
Standaard: 1.1 Bereik: 1.0 – 2.0
TECHNISCH
NDC-marge voor T43 frustumCullEnabled. 1.0 zou precies aan de beeldrand snijden, wat wiebelige splats aan de beeldrand te sterk zou inkorten. 1.1 = 10 % padding boven de exacte camera-framing uit — geeft wat tolerantie voor randpixels die in een licht verschoven novel-view toch zichtbaar zouden kunnen worden. Waarden > 1.2 maken de cull praktisch onwerkzaam, omdat het uitgebreide frustum veel meer ruimte omvat.
Sky-Dome (T45–T48)
T45skyDomeEnabled
DETAILS
Default: false (Initializer + alle Presets behalve P9 Outdoor) Range: boolean
TECHNISCH
Voor het begin van de training wordt een bolvormige puntenwolk gegenereerd (Fibonacci-sphere met T46 Sample-Points), geplaatst in een straal van T47 skyDomeRadiusMultiplier × scene_extent rond het middelpunt van de scène en geïnitialiseerd met de kleuren uit de sky-gemaskeerde pixels van alle trainingscamera's (zie T20 skyMaskingEnabled). Deze Sky-Dome-Gaussians worden aan het begin van de Gaussian-buffer ingevoegd en tijdens de training „bevroren" (positie/schaal/rotatie-gradiënten = 0, alleen SH en Opacity blijven optimaliseerbaar). Effect: in plaats van zwarte „confetti"-gebieden in de verte ziet de gebruiker in Novel-Views een echte hemel. Bij drone- en landschapsscènes werkt dit heel goed; in de Outdoor-preset (P9) staat het standaard aan. Bij binnenscènes uit laten — de sphere zou zinloos buiten de ruimte hangen.
T46skyDomeSampleCount
DETAILS
Default: 5 000 Range: 1 000 – 50 000 (typisch 2 000 – 10 000)
TECHNISCH
Aantal Fibonacci-Sphere-Sample-punten op de Sky-Dome-Sphere. Hogere waarden → dichtere Sky-Dome (beter bij grote resoluties en veel zichtbare hemel), maar meer geheugengebruik. 5 000 is de sweet spot voor 4K-renderings; bij lagere resoluties volstaan 2 000–3 000. De punten worden op basis van cosine-distance tot elke trainingscamera-view-vector geïnitialiseerd met de bijbehorende sky-gemaskeerde pixels — Sample-Points waarvan de view-cone door geen enkele camera wordt gezien, blijven met een lage initiële opaciteitswaarde achteraan, maar worden tijdens de training niet veranderd (bevroren).
T47skyDomeRadiusMultiplier
DETAILS
Default: 30.0 (Initializer + de meeste Presets), 59.0 (P9 Outdoor) Range: 5.0 – 200.0
TECHNISCH
Straal van de Sky-Dome-Sphere relatief tot de scène-omvang (= gemiddelde afstand tussen cameraposities). 30 = de bol heeft de 30-voudige diameter van de camerawolk. Te klein (< 5) → Sky-Dome interfereert met de scène zelf (bijv. een Sky-Dome-splat komt in de voorgrond terecht); te groot (> 100) → float32-precisieverlies bij de Sky-Dome-posities, wat render-glitches in de verte veroorzaakt. Voor uitgestrekte buitenscènes is 59.0 de juiste waarde — de standaardwaarde 30.0 is voor diepe landschappen te klein, dan renderen de Sky-Dome-pixels aan de beeldranden zichtbaar als een „muur".
T48frozenGaussianCount
DETAILS
Default: 0 (= geen bevroren Gaussians) Range: 0 of 1 – T46
TECHNISCH
Aantal Gaussians aan het begin van de buffer, waarvan de positie/schaal/rotatie-gradiënten in de optimizer op nul worden gezet — ze blijven gedurende de hele training ruimtelijk star. Density-Control mag ze niet klonen, splitsen of prunen. Gebruikt voor Sky-Dome-injectie (zie T45): als Sky-Dome aan staat, wordt dit veld automatisch ingesteld op T46 skyDomeSampleCount. Handmatig instellen is mogelijk (bijv. om een vooraf geplaatste puntenwolk uit een LiDAR-scan te bevriezen), maar is niet direct toegankelijk in de UI. Belangrijk: de eerste N Gaussians in de buffer zijn altijd de bevroren — de volgorde in de buffer bepaalt dit, niet een expliciete index.
Adam + LR-Schedule (T49–T55)
T49adamResetIteration
DETAILS
Standaard: 0 (= uitgeschakeld) Bereik: 0 of 100 –
TECHNISCH
Iteratie waarop de momentum-accumulators van de Adam-optimizer (m1, m2) worden teruggezet naar nul. De bias-correctie loopt daarna met (iter - adamResetIteration) in plaats van met iter. Een reset na het einde van de Densification verslechtert het resultaat aanzienlijk. Reden: het Adam-momentum dat zich tijdens Densification heeft opgebouwd, bevat informatie over de typische gradiëntgroottes en versnelt de Refinement-fase. Het weggooien kost de eerste ~500 Refinement-iteraties aan convergentie. Staat daarom in alle Presets op 0 en is in de interface niet instelbaar.
T50positionLRScheduleEndIteration
DETAILS
Standaard: 0 (Initializer = "gebruik maxIterations"), 20 000 (.full — Cosine eindigt bij 20K ondanks maxIter=35K), 30 000 (.fullClassicPaper) Bereik: 0 of 1 000 –
TECHNISCH
Iteratie waarop de cosine-annealingcurve voor Position-LR zijn minimum bereikt. Als 0, is dit identiek aan T1 maxIterations. Als > 0, loopt de schedule tot deze waarde en blijft daarna constant op T4 positionLearningRateFinal. Dit maakt een "extended refinement phase" mogelijk met minimale maar constante leersnelheid — verfijnt posities langzaam zonder opnieuw te decayen. .full doet dit (schedule eindigt bij 20K, training loopt tot 35K); in de omgeving — 15K tot 25K — verandert nauwelijks iets, 20K is het beste compromis. Wordt in combinatie met T51 verder gebruikt, om ook de niet-Position-LR's in de extended phase aan te passen.
T51extendedPhaseLRDecay
DETAILS
Standaard: 0.0 (= uitgeschakeld, constante LR's) Bereik: 0 of 0.01 – 1.0
TECHNISCH
Minimale multiplicator voor de niet-Position-LR's (schaal, rotatie, opacity, SH) in de "extended phase" — ofwel: nadat T50 is bereikt en de Position-LR al bij T4 staat. Als 0.1, worden schaal/rotatie/opacity/SH op hun beurt cosine-decayed van 1.0 (= hun standaard-LR) naar 0.1× hun standaard. Als 0.0 (standaard), blijven ze constant. Volledige decay tot nul levert hetzelfde resultaat als helemaal geen decay — het gedrag oogt met decay netter, maar is niet meetbaar beter. Staat daarom in alle Presets op 0 en is in de interface niet instelbaar.
T52adaptiveDensifyThreshold
DETAILS
Standaard: false Bereik: boolean
TECHNISCH
Experimenteel: als true, berekent de app bij elke Densification-stap het p98 van de huidige gradiëntverdeling en gebruikt dit als dynamische drempelwaarde (geclampt op minstens 0.5× van de geconfigureerde waarde uit T11, zodat hij niet te veel uitschiet). Hypothese: automatische aanpassing aan de huidige scènefase zou Density-Control robuuster maken — bijv. aan het begin strenger pruning, later losser, of omgekeerd. In de praktijk stort het aantal Gaussians dramatisch in — massa-pruning, omdat het p98 in de eerste iteraties extreem hoog is en daarna bijna niets meer de drempelwaarde overschrijdt. De vaste threshold is al goed gekalibreerd, dynamische aanpassing schaadt meer dan hij helpt. T77 biedt een alternatieve adaptieve logica via rolling median, die dit probleem omzeilt.
T53mergeAfterDensification
DETAILS
Standaard: false (Initializer), true (.full, .classicBalanced, .fullClassicPaper) Bereik: boolean
TECHNISCH
Aan het einde van de Densification-fase (iteratie T2) wordt een eenmalige merge-pass uitgevoerd, die dicht bij elkaar liggende Gaussians met vergelijkbare schaal en kleur samenvoegt. Reduceert het aantal Gaussians met doorgaans 5–15 % zonder zichtbaar kwaliteitsverlies. Reden: na intensief klonen ontstaan clusters van vrijwel identieke Gaussians die niets nieuws bijdragen — de merge geeft optimizer-capaciteit vrij voor andere gebieden. Standaard in Classic-Quality-Presets. Bij MCMC niet gebruikt, omdat MCMC door zijn Relocation-logica dergelijke clusters helemaal niet laat ontstaan.
T54densifyPhase2FromIteration
DETAILS
Standaard: 0 (= uitgeschakeld) Bereik: 0 of T2 – T1
TECHNISCH
Experimenteel: maakt een tweede Densification-fase mogelijk, die na de Refinement-pauze bij deze iteratie start en tot T55 loopt. Hypothese: na een Refinement-fase hebben de gradiënt-accumulators stabielere groottes en kunnen preciezer aangeven welke gebieden nog extra Gaussians nodig hebben. In de praktijk eindigt de tweede Densification-fase in een cascade tot op nul Gaussians — samen met de Refinement-pruning (T40) veegt hij de buffer helemaal leeg. Staat daarom in alle Presets op 0 en is in de interface niet instelbaar.
T55densifyPhase2UntilIteration
DETAILS
Standaard: 0 Bereik: 0 of T54 – T1 Gedefinieerd in:
TECHNISCH
Einde van de tweede Densification-fase. Alleen relevant als T54 > 0. Beide velden samen disabled.
Post-Processing + Apple AI (T56–T60)
T56postTrainingCompactification
DETAILS
Default: true (in alle Production-Presets), false (.quickTest, .preview) Range: boolean
TECHNISCH
Na afloop van de training worden Gaussians met sigmoid(opacity) < 0.01 hard verwijderd (ze dragen praktisch niet meer bij aan het beeld). Vermindert het aantal Gaussians met doorgaans 58 % en de exportbestandsgrootte met 55 % zonder zichtbaar kwaliteitsverlies. Standaard actief in Production-Presets — het eindresultaat moet zo compact mogelijk kunnen worden opgeleverd. In .quickTest uit, omdat een diagnoserun toch niet wordt geëxporteerd. Anders dan bij T42 midTrainingCompactificationIterations vindt de compactification pas aan het einde plaats — refinement kan tot dan toe alle Gaussians gebruiken.
T57metalFXUpscaling
DETAILS
Default: false Range: boolean
TECHNISCH
⚠ Sinds 2026-07-18 buiten werking gesteld en zonder enig effect. Het veld hoorde bij de kiezer „Viewport Scaling" (Off/MetalFX/Lanczos) in de Inspector. De renderer heeft het nooit gelezen: de blit-beslissing is puur geometrisch (supersampled gerenderd ⇒ MPS-Lanczos-downsample voor kantvervaging, anders bilineair), en voor het MetalFX-pad was er helemaal geen aanroeppunt. De kiezer en de twee foutieve meldingen die hij voedde, zijn verwijderd; het overlay-label heet nu „Sampling", niet „Scaling", en nergens in de app wordt via MetalFX opgeschaald. Het veld zelf blijft bestaan, omdat de trainingsconfiguratie volledig wordt opgeslagen — het zit in elke opgeslagen scene, in elk preset en in de instellingencommentaar van reeds geëxporteerde PLY's; verwijderen zou de key bij het herschrijven stilletjes laten vervallen en die uitwisseling breken. Om dezelfde reden is het veld uitgesloten van de „Modified"-vergelijking: een oude scene kan true bevatten, en er is geen manier meer om dat via de interface terug te zetten. Niets leest het — niet opnieuw aansluiten.
T58mpsLanczosScaling
DETAILS
Default: false Range: boolean
TECHNISCH
⚠ Sinds 2026-07-18 buiten werking gesteld en zonder enig effect — zie T57 metalFXUpscaling, daar staat ook waarom het veld toch mee opgeslagen moet blijven. Een voor de hand liggende denkfout wordt hier uitdrukkelijk genoemd: de app gebruikt wel degelijk MPS-Lanczos in de viewport, maar dat wordt uitsluitend door de geometrie bepaald — een supersampled gerenderd beeld wordt voor kantvervaging teruggerekend. Dat is een verkleinende, geen vergrotende schaling, en dit veld heeft dat nooit veroorzaakt.
T59livePreviewInterval
DETAILS
Default: 50 (initializer; presets stellen dit veld niet in) Range: 0 (uit), 50, 250 of 1 000 in de kiezer bij Instellingen
TECHNISCH
Hoe vaak de 3D-viewer tijdens de training met de actuele Gaussians wordt bijgewerkt. 50 = elke 50 iteraties een nieuwe render — goed genoeg om de voortgang te volgen zonder de training merkbaar te vertragen. 0 = de viewer wordt helemaal niet bijgewerkt (training op de achtergrond, maximale snelheid). Bij lange MCMC-runs lonen 250 of 1 000, omdat de update-overhead in totaal meetelt. Bijzondere rol: het veld hoort weliswaar bij de trainingsconfiguratie, maar is een app-brede instelling (Instellingen → Training) en geen onderdeel van het trainingsrecept. Het is daarom uitgesloten van de „Modified"-vergelijking, blijft behouden bij het wisselen van preset en wordt sinds 2026-07-18 bij het openen van een scene niet meer uit het bestand overgenomen — voorheen verving een geladen scene de framerate van de gebruiker stilletjes door die van de scene-auteur, „Uit" inbegrepen, en er was geen tweede plek waar hij zich had kunnen terughalen.
T60perceptualLossWeight
DETAILS
Default: 0.0 (= uitgeschakeld) Range: 0 of 0.001 – 0.5
TECHNISCH
Gewicht van een perceptuele loss-term (multi-scale-blur-feature-matching). Meet structurele en texturele gelijkenis op een hoger niveau dan L1+SSIM — doorgaans daar waar „pixel-perfect" minder belangrijk is dan „ziet er realistisch uit". De waarde staat in alle presets op 0.0 (uit). In de interface stel je dit in via de schuifregelaar Perceptual Loss in het Inspector-onderdeel „Training", bereik 0 tot 0,20 in stappen van 0,01; bij 0 toont de app „Off".
MCMC-Densificatie (T61–T73)
T61densificationStrategy
DETAILS
Default: .classic (Initializer + Classic-Presets), .mcmc (alle MCMC-Presets + Scene-Class) Range: .classic of .mcmc
TECHNISCH
Kiest tussen Classic-Densificatie (Klon/Split/Prune, Kerbl et al.~2023) en MCMC-Densificatie (Stochastic Gradient Langevin Dynamics met Relocation, Kheradmand et al.~NeurIPS 2024). Bij .classic worden T11–T16 uitgevoerd, bij .mcmc de T62–T73. Let op bij het wisselen: Classic Defaults en MCMC Defaults zijn volledig anders gekalibreerd — wie de Picker in de Expert View omzet zonder een passend Preset te laden, riskeert 1.4.3-bug-achtige Mass-Extinction (460 K → 5 in één iteratie, omdat MCMC-OpacityReg op 0.01 de Classic-Opacities om zeep helpt). Daarom zijn de MCMC-Init Defaults bewust „verzacht" (alle Reg-waarden 0.0).
T62mcmcMaxGaussians
DETAILS
Default: 150 000 (Initializer + .fullMCMC + .mcmcBalanced), 100 000 (.mcmcPreview), 1 500 000 (.fullMCMCMip — Mip-Splatting-variant met 10× budget), 1.19 M (.renderPreset), 1.25 M (.outdoorPreset), 670 K (.indoorPreset) Range: 0 (= „gebruik Buffer-capaciteit") of 10 000 – 5 000 000 Defined in:
TECHNISCH
Harde bovengrens voor het aantal Gaussians bij MCMC-strategie. Het aantal groeit geleidelijk met T70 mcmcGrowthRate (typisch 5 %) per Relocation-Step tot aan deze cap. 150 K is een goed uitgangspunt — duidelijk daarboven verdunt de splat-kwaliteit (te veel kleine, redundante Gaussians), duidelijk daaronder blijft de scène onder-gedensificeerd. Bij zeer grote scènes (bijv. 1 545-foto-drone-vlucht met 158 K SfM-init) is 150 K te laag — vandaar de 1.4.5-uitbreiding T72 mcmcCapMultiplier + T73 mcmcAutoScaleByScene. De Scene-Class-Presets gebruiken scène-specifieke waarden tussen 670 K (Indoor) en 1.25 M (Outdoor). Bij waarde 0 gebruikt de engine de volledige Buffer-capaciteit als cap.
T63mcmcNoiseScale
DETAILS
Default: 0.00005 (5e-5 = Paper-Default) Range: 1e-6 – 1e-3
TECHNISCH
Multiplicator voor de Gaussische ruis die in elke MCMC-iteratie bij de positie van elke Gaussian wordt opgeteld (SGLD-logica). Hoger = meer exploratie (Gaussians bewegen meer, vinden potentieel betere plekken), lager = meer exploitatie (Gaussians blijven waar ze al goed zijn). 5e-5 is de juiste waarde — duidelijk kleiner betekent te weinig exploratie, duidelijk groter (1e-4) te veel, dan lopen de splats uiteen. Wordt over de trainingstijd cosine-decayed tot T69 mcmcNoiseDecayEnd — aan het einde van het decay-bereik is de ruis effectief 0 en convergeren de Gaussians.
T64mcmcOpacityRegWeight
DETAILS
Default: 0.0 (= uitgeschakeld in de RadianceKit-defaults, Paper: 0.01) Range: 0 of 0.001 – 0.05
TECHNISCH
MCMC-specifieke L1-penalty op opacity. Paper-default 0.01 (drukt ongebruikte Gaussians naar nul, maakt ze beschikbaar voor relocation). In RadianceKit is het resultaat zonder deze regularisatie meetbaar beter. Reden: het met T68 mcmcDeadOpacityThreshold gedefinieerde pruning-criterium volstaat alleen al — een extra L1-penalty dwingt ook waardevolle, laag-opake Gaussians tot sterven. Vandaar default 0. Let op: in de 1.4.3-bètabuild was de Initializer-default foutief 0.01, wat resulteerde in de Mass-Extinction-bug (zie T61-toelichting); sinds 1.4.4 vastgezet op 0.0.
T65mcmcScaleRegWeight
DETAILS
Default: 0.0 (= uitgeschakeld, Paper: 0.01) Range: 0 of 0.001 – 0.05
TECHNISCH
MCMC-specifieke L1-penalty op de schaal-eigenwaarden. Paper-default 0.01. Ook hier is het resultaat zonder regularisatie beter, om dezelfde reden als bij T64. Uitgeschakeld in alle RadianceKit-MCMC-presets. Let op zoals bij T64: 1.4.3-bug.
T66mcmcRelocationInterval
DETAILS
Default: 100 (Initializer + alle MCMC-presets, Paper-standaard), 155 (P9 Outdoor) Range: 50 – 500
TECHNISCH
Iteratie-interval waarin MCMC dode Gaussians (sigmoid(opacity) < T68 mcmcDeadOpacityThreshold) naar nieuwe posities verplaatst (relocation). Kortere intervallen (bijvoorbeeld 50) werken te disruptief, het verlies schommelt; duidelijk langere (bijvoorbeeld 200) ontnemen MCMC de reactiesnelheid. 100 is de juiste waarde. Voor buitenscènes ligt deze met 155 iets hoger — de langere intervallen geven Adam meer tijd om nieuw geplaatste Gaussians te integreren voordat de volgende relocation-gebeurtenis ze onder druk zet.
T67mcmcWarmupIterations
DETAILS
Default: 500 Range: 100 – 5 000
TECHNISCH
Aantal initiële iteraties waarin nog geen MCMC-relocation plaatsvindt. Pas na deze warmup begint de relocation-logica. Reden: in de eerste iteraties zijn de opacity-waarden nog niet ingesteld — zou direct met relocation gestart worden, dan zouden Gaussians op de verkeerde plekken geplaatst worden en meteen weer verplaatst moeten worden, wat het Adam-momentum vernietigt. Paper-default 500. RadianceKit neemt deze waarde over, omdat die robuust is gebleken.
T68mcmcDeadOpacityThreshold
DETAILS
Default: 0.005 (Initializer, Paper-standaard), 0.01 (.fullMCMC en alle MCMC-presets) Range: 0.001 – 0.05
TECHNISCH
sigmoid(opacity)-drempelwaarde waaronder een Gaussian als „dood" geldt en in aanmerking komt voor relocation. 0.01 is de juiste waarde — 0.005 verandert nauwelijks iets, 0.02 is slechter. Hoger = agressievere relocation (meer Gaussians worden verplaatst), lager = voorzichtiger. 0.01 komt ongeveer overeen met „0,5 % visuele zichtbaarheid". P10 Indoor gebruikt 0.0142.
T69mcmcNoiseDecayEnd
DETAILS
Default: 0 (Initializer = „geen decay"), 160 000 (.fullMCMC = 80 % van 200K), 96 000 (.mcmcBalanced = 80 % van 120K), 40 000 (.mcmcPreview) Range: 0 of 1 000 –
TECHNISCH
Iteratie waarop de T63 mcmcNoiseScale-ruis volledig naar nul wordt gedempt (cosine-decay van iteratie 0 tot hier). 80 % van maxIterations is de juiste waarde — dat geeft MCMC genoeg exploratietijd, maar laat de laatste 20 % convergeren zonder ruis. 0 = constante ruis over alle iteraties (zelden zinvol, MCMC kan dan niet convergeren).
T70mcmcGrowthRate
DETAILS
Default: 0.05 (Paper-standaard = 5 %) Range: 0.01 – 0.2
TECHNISCH
Groeisnelheid van de MCMC-populatiedoelwaarde per relocation-step. De logica: bij elke relocation-gebeurtenis wordt de doel-populatiegrootte verhoogd met (1 + growthRate), tot T62 mcmcMaxGaussians (of de via T72/T73 geschaalde variant) bereikt is. 0.05 is de juiste waarde — hogere waarden leiden tot te snelle groei (Gaussians worden ingevoegd voordat het Adam-momentum ze kan integreren), lagere waarden leiden tot onder-gedensificeerde scènes aan het einde.
T71mcmcSigmoidK
DETAILS
Default: 100.0 Range: 10.0 – 500.0 Defined in:
TECHNISCH
Sigmoid-scherpteparameter voor de MCMC-Noise-Attenuation. In de SGLD-stap wordt de ruis per Gaussian gedempt — sterk-opake Gaussians (waarvan de logit positief is) krijgen exponentieel minder ruis dan zwak-opake. K = 100 is scherp, oftewel de overgang van „volle ruis" naar „geen ruis" gebeurt zeer snel rond opacity 0.5. K = 100 is de juiste waarde — kleinere waarden (10–50) laten ook sterk-opake Gaussians mee-wiebelen (vernietigt geconvergeerde Gaussians), grotere (> 500) maken de overgang kunstmatig hard en dode Gaussians worden helemaal niet meer verplaatst.
T72mcmcCapMultiplier
DETAILS
Default: 3.0 (Initializer + .fullMCMC), 2.0 (.mcmcPreview), 2.5 (.mcmcBalanced), 2.98 (P8 Render), 5.32 (P9 Outdoor), 1.76 (P10 Indoor) Range: 0 (= uitgeschakeld) of 1.0 – 10.0
TECHNISCH
1.4.5-feature: scène-adaptieve capschaling. Als T73 mcmcAutoScaleByScene true is, wordt de effectieve cap als berekend (geclamped op Buffer-capaciteit). Achtergrond: bij grote scènes (bijv. 1 545-foto-drone-vlucht → 158 K SfM-init) is T62 = 150 000 te laag — density-control zou dan helemaal niet kunnen groeien. Met multiplier 3.0 wordt de cap bij dit voorbeeld naar 474 K geschaald (158 K × 3.0). De Scene-Class-Presets gebruiken scène-specifieke waarden: Outdoor profiteert van een hoge multiplier (5.32 → ~830 K cap bij 156 K init-punten), Indoor volstaat met 1.76 (wanden verzadigen sneller). Volledige uitwerking van de cap zie -methode.
T73mcmcAutoScaleByScene
DETAILS
Default: true (Initializer + alle MCMC-presets) Range: boolean
TECHNISCH
1.4.5-feature: master-switch voor de scene-aware capschaling (zie T72 +). Als false, wordt uitsluitend T62 mcmcMaxGaussians als cap gebruikt (terug naar 1.4.4-gedrag). Standaard aan, omdat de Mass-Extinction-problemen bij grote scènes uit 1.4.3 anders terugkeren. Handmatig uitschakelen alleen als je expliciet een harde cap wilt instellen — bijvoorbeeld om een 150 K-variant te trainen waarvan de eindomvang planbaar is.
Mip-Splatting (T74–T76)
Status: Mip-Splatting heeft in de praktijk geen kwaliteitswinst opgeleverd en bij sommige buitenscènes zelfs geschaad. De velden blijven opt-in voor experimenten; in alle geleverde Presets is Mip-Splatting uitgeschakeld.
T74useMipSplatting
DETAILS
Default: false (alle Production-Presets), true (.fullMCMCMip — research-sibling) Range: boolean
TECHNISCH
Activeert Mip-Splatting (Yu et al.~CVPR 2024): 3D-smoothingfilter + 2D-filter + α-compensatie, die de per-Gaussian-frequentie begrenst tot de Nyquist-grens van de dichtste trainingscamera-sampling-rate. Theoretisch doel: eliminatie van aliasing bij rendering op off-training-schalen (0.5× of 2× van de trainingsresolutie). In de preprocess- en backward-projection-shaders geactiveerd en functioneel correct. In de praktijk bleef de gehoopte kwaliteitswinst echter uit: bij het renderen op de trainingsresolutie verandert er vrijwel niets, en bij buitenscènes wordt het beeld zelfs slechter. Een mogelijke verklaring: de 3D-smoothing werkt tegen de MCMC-relocatie in zodra veel Gaussians in het spel zijn. Het veld blijft beschikbaar voor eigen multi-scale-experimenten.
T75mipSmoothing3DScale
DETAILS
Default: 0.2 (paper-default) Range: 0.05 – 1.0
TECHNISCH
3D-smoothing-schaalparameter (Yu et al.~§3.3, paper-default 0.2). Groter = meer wereldruimte-smoothing per Gaussian (= meer anti-aliasing, maar ook meer blur op de default-schaal), kleiner = scherper maar gevoeliger voor aliasing. Wordt alleen geraadpleegd wanneer T74 useMipSplatting = true. Niet verder geoptimaliseerd — al met de paper-default 0.2 levert Mip-Splatting geen winst op.
T76mipFilter2DVariance
DETAILS
Default: 0.3 (= exact het vorige gedrag) Range: 0.1 – 1.0
TECHNISCH
2D-mip-filter-variantie, die aan de Σ_2D-diagonaal wordt toegevoegd (variantie direct, niet gekwadrateerd). 0.3 is exact de waarde die vóór Mip-Splatting vast in de kernel stond. Wanneer T74 useMipSplatting = false, negeert de kernel deze waarde volledig en schrijft het de hardgecodeerde 0.3 — zodat er aan het vorige gedrag gegarandeerd niets verandert. Indien wel, wordt de hier ingestelde waarde gebruikt. Blijft in de veldcatalogus voor mip-sweeps.
Adaptive Densification (T77–T79)
T77adaptiveDensification
DETAILS
Default: false Range: boolean
TECHNISCH
Rolling-Median-Tracker als alternatief voor de vaste T11 densifyGradThreshold. Als true, wordt in elke Densify-Step de huidige drempelwaarde met median(laatste N avgGrad-samples) × T79 adaptiveDensifyMultiplier overschreven. N = T78 adaptiveWindow. Strikter dan de p98-variant uit T52, die daar de Mass-Pruning veroorzaakt: mediaan maal 2 zit in ingezwongen toestand ongeveer bij p70–p80 van de gradiëntverdeling. Alleen ingeschakeld levert dit veld geen kwaliteitswinst op; samen met het curriculum (zie T80/T81) wel — daar draagt het curriculum de winst, dit veld eerder de stabiliteit. Een bedieningselement is hiervoor niet voorzien: het veld staat in alle presets uit en kan alleen via een bewerkt preset-bestand worden ingesteld.
T78adaptiveWindow
DETAILS
Default: 1 000 Range: 100 – 10 000 Defined in:
TECHNISCH
Rolling-Median-Window in Densification-Events (NIET iteraties — elke T13 densifyInterval-Step levert een sample). Default 1 000 — daarbij betekent dit dat de laatste 100 000 trainingsiteraties bijdragen aan de mediaan, dus doorgaans de volledige trainingsgeschiedenis tot dit punt. Vroege fase (vóór T78 samples): tracker geeft nil terug → fallback op vaste drempelwaarde T11. Alleen relevant wanneer.
T79adaptiveDensifyMultiplier
DETAILS
Default: 2.0 Range: 1.0 – 4.0
TECHNISCH
Multiplicator op de Rolling-Median voor de adaptieve drempelwaarde. Default 2.0 komt ongeveer overeen met p70–p80 van de typische gradiëntverdeling. Lager = agressievere groei (meer klonen), hoger = strenger (minder klonen). In het bereik 1.5–3.0 is 2.0 de beste waarde. Alleen relevant wanneer.
Curriculum (T80–T81)
T80curriculumResolutionRamp
DETAILS
Standaard: false Bereik: boolean
TECHNISCH
De trainingsresolutie start op 0.5× en wisselt bij T50 positionLRScheduleEndIteration / 2 (of T1 maxIterations / 2, als T50 niet is ingesteld) naar T22 trainingRenderScale. Overschrijft T23 resolutionWarmupScale, indien geactiveerd. Van de twee adaptieve extra's (zie T77) levert dit curriculum de eigenlijke kwaliteitswinst — de stapsgewijze resolutieverhoging geeft de app tijd om grove geometrie op de lagere resolutie te vinden, voordat ze overgaat naar het fijne detailwerk. In de interface niet aan te passen — alleen via een bewerkt Preset-bestand, en dan zinvol samen met T81.
T81curriculumSHProgression
DETAILS
Standaard: false Bereik: boolean
TECHNISCH
Overschrijft T21 shDegreeUpgradeIterations met [maxIter/4, maxIter/2, maxIter*3/4], verdeelt de SH-opwaarderingen dus gelijkmatig over de trainingstijd in plaats van ze front-loaded te laten plaatsvinden. Hypothese: stabiele geometrie wordt vastgelegd vóór de kleurdetail-explosie, wat de view-direction-afhankelijke glanseffecten preciezer positioneert. Samen met T77 levert dat bij sommige scènes winst op; die wordt gedragen door dit veld, T77 alleen is niet genoeg. In de interface niet aan te passen — alleen via een bewerkt Preset-bestand.
Statische Presets (TP1–TP9)
Hier alleen de structurele verschillen ten opzichte van de Initializer-standaard. De volledige marketingbeschrijving van de elf UI-Presets P1–P11 vind je in hoofdstuk 7.
TP1.preview
DETAILS
Diagnose-/voorbeeld-Preset voor systemen ≥ 10 GB RAM. Overrides ten opzichte van de Initializer:
maxIterations30 000 → 5 000densifyUntilIteration15 000 → 3 500 (70 % van maxIter)positionLearningRateFinal1.6e-6 → 1.6e-5 (10× hoger, minder agressieve decay)shDCLearningRate,shRestLearningRate,opacityLearningRate,scaleLearningRate,rotationLearningRatetelkens 2×opacityResetInterval3 000 → 100 000 (effectief uit — de reset verpest korte trainingen)shDegreeUpgradeIterations[1K, 2K, 3K]→[1K, 2K](graad 3 convergeert niet in zulke korte runs)trainingRenderScale1.0 → 0.5
TP2.full
DETAILS
Production-Quality Classic. Overrides:
maxIterations30 000 → 35 000 (daarboven dreigt overtraining: meer Gaussians zonder kwaliteitswinst)densifyUntilIteration15 000 → 5 000 (bewezen waarde; later stoppen is slechter)- Alle LR's 2×
positionLearningRateFinal1.6e-6 → 1.6e-5 (10× hoger dan de paper-standaard)densifyGradThreshold2e-6 → 1.1e-6 (gekalibreerd voor 1.0× resolutie)densifyInterval100 → 200pruneOpacityThreshold0.005 → 0.001opacityResetInterval3 000 → 100 000 (effectief uitgeschakeld)shDegreeUpgradeIterations[1K, 2K, 3K]→[2K, 5K, 8K](vertraagde opwaardering)opacityDecayFactor0.0 → 0.9995 (HTGS-schema, duidelijke kwaliteitswinst)opacityDecayInterval50 (ongewijzigd)mergeAfterDensificationfalse → truepositionLRScheduleEndIteration0 → 20 000postTrainingCompactificationtrue (al Initializer-standaard voor.full)
TP3.fullClassicPaper
DETAILS
Paper-getrouwe Classic-variant van TP2. Overrides ten opzichte van TP2:
maxIterations35 000 → 30 000 (paper-standaard)densifyUntilIteration5 000 → 15 000 (paper: 50 % van maxIter)positionLearningRateFinal1.6e-5 → 1.6e-6 (paper-standaard)opacityLearningRate,scaleLearningRate,rotationLearningRateterug naar paper-standaarden (0.05, 0.005, 0.001)densifyGradThreshold1.1e-6 → 2e-7 (gekalibreerd voor ~1–2 M Gs op Bicycle)densifyInterval200 → 100 (paper)pruneOpacityThreshold0.001 → 0.005 (paper-standaard)opacityResetInterval100 000 → 3 000 (paper §5.2, riskant — kost in RadianceKits opzet kwaliteit)opacityDecayFactor0.9995 → 0.0 (paper heeft geen decay)positionLRScheduleEndIteration20 000 → 30 000 (cosine loopt tot 100 % van maxIter)
TP4.fullMCMC
DETAILS
Production-Quality MCMC. Overrides ten opzichte van de Initializer:
maxIterations30 000 → 200 000 (MCMC heeft ongeveer 5× meer iteraties nodig dan Classic)densifyUntilIteration15 000 → 160 000 (80 % van maxIter)positionLearningRateFinal1.6e-6 → 1.6e-5- LR-schema zoals TP2 (allemaal 2×)
ssimWeight0.2 → 0.05 (MCMC heeft een sterker L1-signaal nodig)shDegreeUpgradeIterations[1K, 2K, 3K]→[2K, 5K, 8K]densificationStrategy.classic→.mcmcmcmcMaxGaussians150 000 (al in de Initializer, bevestigd in het Preset)mcmcNoiseScale5e-5 (paper-waarde, bewezen)mcmcDeadOpacityThreshold0.005 → 0.01mcmcNoiseDecayEnd0 → 160 000 (80 % van maxIter)mcmcCapMultiplier3.0 (al in de Initializer)mcmcAutoScaleByScenetrue (al in de Initializer)opacityResetInterval3 000 → 200 000 (effectief uit, MCMC gebruikt Reloc in plaats van reset)
TP5.fullMCMCMip
DETAILS
Mip-Splatting-variant van TP4 met het Gaussian-budget van het originele paper. Overrides ten opzichte van TP4:
mcmcMaxGaussians150 000 → 1 500 000 (10×, paper-orde van grootte)useMipSplattingfalse → true (Mip aan)
TP6.classicBalanced
DETAILS
Mid-Tier Classic. Overrides ten opzichte van TP2:
maxIterations35 000 → 20 000 (levert vrijwel hetzelfde op als 30 000, bij merkbaar kortere wachttijd)positionLRScheduleEndIteration20 000 → 0 (cosine loopt tot maxIter = 20K, geen verlengde fase)
TP7.mcmcPreview
DETAILS
MCMC-diagnose. Overrides ten opzichte van TP4:
maxIterations200 000 → 60 000densifyUntilIteration160 000 → 48 000 (80 %)mcmcMaxGaussians150 000 → 100 000mcmcNoiseDecayEnd160 000 → 40 000mcmcCapMultiplier3.0 → 2.0 (Preview schaalt terughoudender)
TP8.mcmcBalanced
DETAILS
Mid-Tier MCMC. Overrides ten opzichte van TP4:
maxIterations200 000 → 120 000densifyUntilIteration160 000 → 96 000 (80 %)mcmcNoiseDecayEnd160 000 → 96 000 (80 %)mcmcCapMultiplier3.0 → 2.5 (tussen Preview 2.0 en Full 3.0)
TP9.quickTest
DETAILS
Pure functietest. Overrides ten opzichte van de Initializer:
maxIterations30 000 → 1 000densifyUntilIteration15 000 → 500densifyGradThreshold2e-6 → 4e-6 (gekalibreerd voor 0.25× resolutie)densifyInterval100 → 50opacityResetInterval3 000 → 100 000 (uit, want veel te kort)trainingRenderScale1.0 → 0.25
Hoe de app de Gaussian-cap bepaalt
Het bindende antwoord op de vraag „hoeveel Gaussians mag MCMC maximaal laten groeien?". Drie grootheden spelen hierbij een rol: de ingestelde waarde uit T62 mcmcMaxGaussians, het aantal SfM-init-punten van je scène en de vooraf gereserveerde buffercapaciteit. De app rekent in deze volgorde:
+ Startwaarde is T62. Staat deze op 0, dan stelt de app 150.000 in — deze veiligheidsbodem voorkomt het mass-extinction-voorval uit 1.4.3. + Is T73 mcmcAutoScaleByScene ingeschakeld en T72 mcmcCapMultiplier groter dan 0, dan vergelijkt de app de startwaarde met „init-punten × T72" en neemt de grootste van beide waarden. + Ten slotte begrenst ze het resultaat tot de buffercapaciteit.
Voorbeeld: Bicycle (Mip-NeRF 360, 194 fotoframes) → SfM-init ~156 K punten, T62 = 150 000, T72 = 5.32, auto-scale aan, buffercapaciteit 8 M. 156 K × 5,32 geeft 830 K, dat is meer dan de 150.000 en minder dan de 8 M — de effectieve cap is dus 830 K. Aan deze grens houdt de MCMC-relocation zich.
Berekent het werkelijke maximale aantal splats bij MCMC. De app neemt je instelling „Max Gaussians", kijkt hoeveel punten je scène in het begin heeft, en schaalt met de vermenigvuldigingsfactor, als „Auto-scale by scene" is ingeschakeld. Zo past de cap zich aan de scène aan, in plaats van voor een kleine en een enorme scène dezelfde waarde af te dwingen. Je hoeft hiervoor niets te doen — de app berekent dit zelf bij het starten van de training.
Welk veld is voor wat? (Cheatsheet)
| Doel | Velden om aan te draaien |
|---|---|
| Meer detail op afstand | T62 mcmcMaxGaussians hoog, T72 mcmcCapMultiplier 5+ |
| Meer detail algemeen (Classic) | T1 maxIterations hoog (≤ 40K), T2 densifyUntilIteration ≤ 14 % van T1 |
| Floaters bij dronevluchten verminderen | T43 frustumCullEnabled aan, T20 skyMaskingEnabled aan, T45 skyDomeEnabled aan |
| Mooiere lucht in buitenscènes | T45 skyDomeEnabled aan, T47 skyDomeRadiusMultiplier 30–60 |
| Kleiner exportbestand | Strategie .mcmc (T61), T56 postTrainingCompactification aan, T62 mcmcMaxGaussians ≤ 200K |
| Sneller trainen | T22 trainingRenderScale 0.5, T1 maxIterations halveren — maar niet beide tegelijk! |
| Betere glanslichten | T21 shDegreeUpgradeIterations met [2K, 5K, 8K] (geen early-front-load), MCMC + 200K iter |
| Live-voorvertoning vaker | T59 livePreviewInterval op 50 — de dichtste waarde die Instellingen → Training biedt |
| Zachtere overgangen bij schaduwen | T17 ssimWeight iets hoog (0.15–0.25), maar niet boven 0.3 |
| Interieurs compact houden | P10 Indoor-preset (, T72 = 1.76) |
Gevaarlijke velden
Deze velden kunnen bij een verkeerde configuratie tot OOM, app-crashes, massale extinctie van de Gaussians of onbruikbare benchmarkgegevens leiden. Met voorzichtigheid te behandelen:
- T11 densifyGradThreshold — een halvering kan 2–4× zoveel Gaussians genereren, wat het GPU-geheugen al snel doet ontploffen. Let ook op: moet passen bij de T22 trainingRenderScale (1.0× → 1e-6, 0.5× → 2e-6, 0.25× → 4e-6). - T72 mcmcCapMultiplier — bij grote scènes met > 200 K SfM-init-punten en een multiplier > 5 ontstaat een Resolved Cap van miljoenen Gaussians. Op Macs met 36 GB RAM is OOM mogelijk. De outdoor-waarde 5.32 werkt alleen omdat de bijbehorende referentiescène ongeveer 156 K init-punten heeft → 830 K cap. - T39 testViewIndices — handmatig instellen in een preset-bestand kan een kwaliteitsmeting onbruikbaar maken (alle indices > N → geen holdouts). Laat de lijst leeg. - T64 mcmcOpacityRegWeight en T65 mcmcScaleRegWeight — In 1.4.3-bèta op 0.01 gezet, wat tot massale extinctie leidde (460 K → 5 Gaussians in één iteratie). Sinds 1.4.4 vastgezet op 0.0, maar handmatig verhogen kan het probleem opnieuw veroorzaken. - T15 opacityResetInterval — als dit niet op 100 000+ (effectief uit) staat en de training korter dan 10 000 iteraties duurt, verwoest de reset de convergentie. .preview heeft het daarom op 100 000 staan, ondanks maxIterations = 5 000. - T54/T55 densifyPhase2* — De tweede densificatiefase eindigt in een cascade tot nul Gaussians. Laat beide op 0. - T74 useMipSplatting — levert geen kwaliteitswinst op en kan op sommige buitenscènes de beeldkwaliteit zelfs verslechteren. Standaard uit, opt-in alleen voor experimenten.
Als een veld op deze lijst staat en je wilt het wijzigen, maak dan eerst een back-up van je huidige preset (exporteer als JSON) en bedenk of je het resultaat reproduceerbaar kunt meten — anders weet je achteraf niet of je een verbetering of een verslechtering hebt teweeggebracht.