Handleiding

Hoofdstuk 6 — Trainingsconfiguratie

Preview-preset geëxporteerd als JSON + weergegeven in TextEdit — velden id/name/category/version/createdAt/description, trainingConfig met alle relevante parameters (maxIterations 5000, densifyUntilIteration 3500, ssimWeight 0.20, renderScale 0.50, strategy classic, cameraAlignment applePhotogrammetry, densifyGradThreshold 2.0e-06, opacityResetInterval 3000, minOpacity 0.005, zes bool-toggles)
Preview-preset geëxporteerd als JSON + weergegeven in TextEdit — velden id/name/category/version/createdAt/description, trainingConfig met alle relevante parameters (maxIterations 5000, densifyUntilIteration 3500, ssimWeight 0.20, renderScale 0.50, strategy classic, cameraAlignment applePhotogrammetry, densifyGradThreshold 2.0e-06, opacityResetInterval 3000, minOpacity 0.005, zes bool-toggles)

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 T2T1

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 T54T1 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:

  • maxIterations 30 000 → 5 000
  • densifyUntilIteration 15 000 → 3 500 (70 % van maxIter)
  • positionLearningRateFinal 1.6e-6 → 1.6e-5 (10× hoger, minder agressieve decay)
  • shDCLearningRate, shRestLearningRate, opacityLearningRate, scaleLearningRate, rotationLearningRate telkens 2×
  • opacityResetInterval 3 000 → 100 000 (effectief uit — de reset verpest korte trainingen)
  • shDegreeUpgradeIterations [1K, 2K, 3K][1K, 2K] (graad 3 convergeert niet in zulke korte runs)
  • trainingRenderScale 1.0 → 0.5

TP2.full

DETAILS

Production-Quality Classic. Overrides:

  • maxIterations 30 000 → 35 000 (daarboven dreigt overtraining: meer Gaussians zonder kwaliteitswinst)
  • densifyUntilIteration 15 000 → 5 000 (bewezen waarde; later stoppen is slechter)
  • Alle LR's 2×
  • positionLearningRateFinal 1.6e-6 → 1.6e-5 (10× hoger dan de paper-standaard)
  • densifyGradThreshold 2e-6 → 1.1e-6 (gekalibreerd voor 1.0× resolutie)
  • densifyInterval 100 → 200
  • pruneOpacityThreshold 0.005 → 0.001
  • opacityResetInterval 3 000 → 100 000 (effectief uitgeschakeld)
  • shDegreeUpgradeIterations [1K, 2K, 3K][2K, 5K, 8K] (vertraagde opwaardering)
  • opacityDecayFactor 0.0 → 0.9995 (HTGS-schema, duidelijke kwaliteitswinst)
  • opacityDecayInterval 50 (ongewijzigd)
  • mergeAfterDensification false → true
  • positionLRScheduleEndIteration 0 → 20 000
  • postTrainingCompactification true (al Initializer-standaard voor .full)

TP3.fullClassicPaper

DETAILS

Paper-getrouwe Classic-variant van TP2. Overrides ten opzichte van TP2:

  • maxIterations 35 000 → 30 000 (paper-standaard)
  • densifyUntilIteration 5 000 → 15 000 (paper: 50 % van maxIter)
  • positionLearningRateFinal 1.6e-5 → 1.6e-6 (paper-standaard)
  • opacityLearningRate, scaleLearningRate, rotationLearningRate terug naar paper-standaarden (0.05, 0.005, 0.001)
  • densifyGradThreshold 1.1e-6 → 2e-7 (gekalibreerd voor ~1–2 M Gs op Bicycle)
  • densifyInterval 200 → 100 (paper)
  • pruneOpacityThreshold 0.001 → 0.005 (paper-standaard)
  • opacityResetInterval 100 000 → 3 000 (paper §5.2, riskant — kost in RadianceKits opzet kwaliteit)
  • opacityDecayFactor 0.9995 → 0.0 (paper heeft geen decay)
  • positionLRScheduleEndIteration 20 000 → 30 000 (cosine loopt tot 100 % van maxIter)

TP4.fullMCMC

DETAILS

Production-Quality MCMC. Overrides ten opzichte van de Initializer:

  • maxIterations 30 000 → 200 000 (MCMC heeft ongeveer 5× meer iteraties nodig dan Classic)
  • densifyUntilIteration 15 000 → 160 000 (80 % van maxIter)
  • positionLearningRateFinal 1.6e-6 → 1.6e-5
  • LR-schema zoals TP2 (allemaal 2×)
  • ssimWeight 0.2 → 0.05 (MCMC heeft een sterker L1-signaal nodig)
  • shDegreeUpgradeIterations [1K, 2K, 3K][2K, 5K, 8K]
  • densificationStrategy .classic.mcmc
  • mcmcMaxGaussians 150 000 (al in de Initializer, bevestigd in het Preset)
  • mcmcNoiseScale 5e-5 (paper-waarde, bewezen)
  • mcmcDeadOpacityThreshold 0.005 → 0.01
  • mcmcNoiseDecayEnd 0 → 160 000 (80 % van maxIter)
  • mcmcCapMultiplier 3.0 (al in de Initializer)
  • mcmcAutoScaleByScene true (al in de Initializer)
  • opacityResetInterval 3 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:

  • mcmcMaxGaussians 150 000 → 1 500 000 (10×, paper-orde van grootte)
  • useMipSplatting false → true (Mip aan)

TP6.classicBalanced

DETAILS

Mid-Tier Classic. Overrides ten opzichte van TP2:

  • maxIterations 35 000 → 20 000 (levert vrijwel hetzelfde op als 30 000, bij merkbaar kortere wachttijd)
  • positionLRScheduleEndIteration 20 000 → 0 (cosine loopt tot maxIter = 20K, geen verlengde fase)

TP7.mcmcPreview

DETAILS

MCMC-diagnose. Overrides ten opzichte van 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 (Preview schaalt terughoudender)

TP8.mcmcBalanced

DETAILS

Mid-Tier MCMC. Overrides ten opzichte van TP4:

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

TP9.quickTest

DETAILS

Pure functietest. Overrides ten opzichte van de Initializer:

  • maxIterations 30 000 → 1 000
  • densifyUntilIteration 15 000 → 500
  • densifyGradThreshold 2e-6 → 4e-6 (gekalibreerd voor 0.25× resolutie)
  • densifyInterval 100 → 50
  • opacityResetInterval 3 000 → 100 000 (uit, want veel te kort)
  • trainingRenderScale 1.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)

DoelVelden om aan te draaien
Meer detail op afstandT62 mcmcMaxGaussians hoog, T72 mcmcCapMultiplier 5+
Meer detail algemeen (Classic)T1 maxIterations hoog (≤ 40K), T2 densifyUntilIteration ≤ 14 % van T1
Floaters bij dronevluchten verminderenT43 frustumCullEnabled aan, T20 skyMaskingEnabled aan, T45 skyDomeEnabled aan
Mooiere lucht in buitenscènesT45 skyDomeEnabled aan, T47 skyDomeRadiusMultiplier 30–60
Kleiner exportbestandStrategie .mcmc (T61), T56 postTrainingCompactification aan, T62 mcmcMaxGaussians ≤ 200K
Sneller trainenT22 trainingRenderScale 0.5, T1 maxIterations halveren — maar niet beide tegelijk!
Betere glanslichtenT21 shDegreeUpgradeIterations met [2K, 5K, 8K] (geen early-front-load), MCMC + 200K iter
Live-voorvertoning vakerT59 livePreviewInterval op 50 — de dichtste waarde die Instellingen → Training biedt
Zachtere overgangen bij schaduwenT17 ssimWeight iets hoog (0.15–0.25), maar niet boven 0.3
Interieurs compact houdenP10 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.