Handleiding

Hoofdstuk 2 — Inspector (Expert View)

Expertmodus leeg — Project Navigator links (Images 0, Cameras, Log), leeg viewport in het midden, Inspector rechts met Presets/Training Configuration/Enhancements/Training Metrics-secties
Expertmodus leeg — Project Navigator links (Images 0, Cameras, Log), leeg viewport in het midden, Inspector rechts met Presets/Training Configuration/Enhancements/Training Metrics-secties

Lege Inspector vóór import: Linker zijbalk toont images-teller 0 en drop-hint „Drop images here / or tap + to import". Inspector rechts is volledig functioneel, maar voorinstellingen zijn slechts informatief (geen actieve training). Standaardvoorinstelling „Preview" (5K iters) is gemarkeerd. Camera-Alignment op Apple Photogrammetry, Densification Classic, SSIM Weight 0,20, Render Scale 50%. Lege staten in Training Metrics („Start training to see live metrics") en Loss History („Loss curve will appear during training").

Inspector met 60 flowers-beelden geladen — image-zijbalk toont eerste bestandsnamen frame_0001.jpg etc., header „60 images ready”
Inspector met 60 flowers-beelden geladen — image-zijbalk toont eerste bestandsnamen frame_0001.jpg etc., header „60 images ready"

Inspector na import: Header-status „60 images ready". Image-zijbalk somt alle 60 geïmporteerde frames (frame_0001.jpg tot frame_0945.jpg, elke 16e frame van een 960-camera-bouquet-dataset als subset voor snelle iteraties). De auto-render-scale-logica controleert de beeldresolutie (1536×2048 = 3,1 MP) en past Render Scale dienovereenkomstig aan. Play-knop (groen, linksonder) is nu actief en start de training met de actieve voorinstelling.

Inspector mid-training — live-viewport toont flowers-bouquet-reconstructie, metrics-balk onderaan (Loss / LR / Gaussian-count / iteraties), voorinstellingskaart „Preview” met „Modified”-badge indien parameter aangepast
Inspector mid-training — live-viewport toont flowers-bouquet-reconstructie, metrics-balk onderaan (Loss / LR / Gaussian-count / iteraties), voorinstellingskaart „Preview" met „Modified"-badge indien parameter aangepast

Inspector tijdens training: Titelbalk toont globale voortgang „RadianceKit — Training NN%". Viewport rendert de lopende Gaussian-reconstructie in realtime (elke 50 iteraties geactualiseerd — live-preview-interval instelbaar in Instellingen → General → Training → Live Preview). Metrics-balk onder het viewport: actuele Loss, learning rate, Gaussian-count en iteraties-teller (bijv. 1.600/5.000 bij Preview-voorinstelling). Voorinstellingskaart „Preview" draagt „Modified"-badge zodra een parameter afwijkt van de built-in standaard. Zijbalk „Log" verzamelt SfM- en training-stage-events.

Inspector na voltooide training — viewport toont voltooide flowers-bouquet-reconstructie (2.991 Gaussians na 5K iteraties in 13s), titelbalk „Training Complete — 2.991 Gaussians”
Inspector na voltooide training — viewport toont voltooide flowers-bouquet-reconstructie (2.991 Gaussians na 5K iteraties in 13s), titelbalk „Training Complete — 2.991 Gaussians"

Inspector na training: Titelbalk toont het finale Gaussian-aantal (hier 2.991 — erg compact, omdat de synthetische Blender-bouquet-scène op heldere achtergrond eenvoudige geometrie heeft). Viewport toont de voltooide puntenwolk — orbitale drag-navigatie actief (roteert om het scènecentrum). Training-metrics-sectie is nu met finale waarden gevuld, loss-history-chart toont het verloop van de gehele 5.000 iteraties. Export-sectie onderaan is nu actief (alle formaatknoppen enabled).

De Inspector is de rechter zijbalk in de Expert Mode (⌘2). Hij bundelt alle training-relevante parameters in vijf inklapbare secties: Presets, Trainingsconfiguratie, Enhancements, Metrics en Loss-Chart. Elke sectie kan worden ingeklapt door op de header te klikken, de volgorde kan via drag-and-drop opnieuw worden geordend (InspectorView.swift:81-97). Standaard zijn alle secties zichtbaar, de app-state slaat de inklap- en volgorde-voorkeuren over app-starts heen op.

Een aantal bedieningselementen uit de Inspector duikt in vrijwel identieke vorm ook in de instellingen (hoofdstuk 3) op — typisch SfM-backend, sky-masking en vergelijkbare defaults. De scheiding is bewust: de instellingen leveren de app-globale standaard voor nieuw aangelegde projecten, de Inspector overschrijft die waarden voor het huidige open project. Wie eenmaal de bedieningslogica van één kant kent, kan de andere blind gebruiken.

De linker kolom in de Expert Mode — de Project Navigator — hoort niet bij de Inspector, maar is zijn directe buur. Daar kunnen geïmporteerde beelden per klik worden geselecteerd, met spatie in Quick Look worden bekeken en via de min-knop of de delete-toets worden verwijderd (met Cmd-Z om ongedaan te maken). De Inspector volgt de huidige zijbalkselectie met context-specifieke detailinformatie, de vijf hoofdsecties blijven echter altijd zichtbaar.

Voorinstellingen-sectie (I1–I11)

De voorinstellingen-sectie is de snelste manier om een geteste configuratie toe te passen. Built-in-voorinstellingen (Classic, MCMC, Scene-Class) leveren reproduceerbare startpunten uit 560+ gedocumenteerde experimenten; eigen voorinstellingen kunnen worden opgeslagen, geëxporteerd, geïmporteerd en gedeeld. De lijst is op categorieën gegroepeerd (Classic, MCMC, SceneClass, Custom) en meer dan één categorie kan tegelijk uitgeklapt zijn. Via het contextmenu-mechanisme (rechtsklik op een regel) zijn export, dupliceren en — bij eigen voorinstellingen — verwijderen bereikbaar.

I1Save…-knop

WAAR

Inspector → Voorinstellingen-sectie → Save…-knop (actiebalk onder).

TECHNISCH

Opent een popover met tekstveld en Save-/Cancel-knoppen. De actuele TrainingConfig-toestand wordt als nieuwe gebruikersgedefinieerde voorinstelling gepersisteerd (JSON-gecodeerd, app-overkoepelend opgeslagen). Het save-proces kopieert alle 81 trainingparameters plus de actuele densification-strategie. De voorinstelling komt automatisch in de categorie Custom terecht, ongeacht van welke built-in-voorinstelling hij is afgeleid. Lege namen en pure whitespace-invoer worden verworpen. Reeds bestaande namen worden niet afgewezen — elke voorinstelling heeft een eigen interne ID, dubbele namen zijn technisch toegestaan, maar praktisch verwarrend.

I2Preset Name-tekstveld

WAAR

Save-popover → tekstveld „Preset Name".

TECHNISCH

Eenvoudig tekstveld met afgeronde rand, brede vorm. De waarde wordt bij klik op de Save-knop als voorinstellingsnaam overgenomen. Geen lengtebegrenzing in de UI, maar de opgeslagen naam moet JSON-codeerbaar en in de UI-lijsten weergeefbaar zijn — emoji en umlauten werken. De inhoud wordt bij het openen van de popover automatisch op een lege string teruggezet. De Save-knop blijft disabled zolang het veld na trim leeg is. Er is geen auto-suggest en geen voorbelegging met de naam van de momenteel actieve voorinstelling.

I3Cancel-knop (Save-dialoog)

WAAR

Save-popover → Cancel-knop (links).

TECHNISCH

Sluit de popover zonder opslaan. Verwerpt de tekstveld-inhoud — bij het volgende openen wordt hij weer door de Save…-knop-logica (I1) op leeg teruggezet. Standaard knopstijl, geen bevestigingsdialogen, geen hotkeys. De actuele TrainingConfig blijft ongewijzigd, omdat het save-pad helemaal niet werd uitgevoerd.

I4Save-knop (Save-dialoog)

WAAR

Save-popover → Save-knop (rechts, prominentere stijl).

TECHNISCH

Triggert de eigenlijke persistering. Valideert nogmaals niet-lege naam (defensieve check) en schrijft dan de actuele TrainingConfig als JSON naar het app-geheugen. Sluit vervolgens de popover. Blauw geaccentueerd, grijs zolang het tekstveld leeg is. Wanneer het opslaan mislukt (bijv. omdat de app-opslag vol is — zeer onwaarschijnlijk), is er momenteel geen zichtbare foutdialoog; de voorinstelling zou dan bij de volgende app-start gewoon niet verschijnen.

I5Export…-knop

WAAR

Inspector → Voorinstellingen-sectie → actiebalk → Export…-knop.

TECHNISCH

Exporteert de momenteel geselecteerde voorinstelling als .radiancepreset-bestand (intern JSON). Disabled wanneer geen voorinstelling geselecteerd is. Bij klik opent de app een save-dialoog met vooraf ingestelde bestandsnaam (voorinstellingsnaam + .radiancepreset-extensie). Het opgeslagen formaat bevat de complete TrainingConfig plus metadata (naam, categorie, ID, built-in-vlag). Dubbelklik in de Finder opent de app — maar niet automatisch de import; de gebruiker moet de Import-knop (I6) gebruiken.

I6Import…-knop

WAAR

Inspector → Voorinstellingen-sectie → actiebalk → Import…-knop.

TECHNISCH

Opent een bestandsdialoog die alleen .radiancepreset-bestanden toelaat (meervoudige selectie gedeactiveerd). Bij het selecteren wordt het JSON-bestand geladen, gevalideerd en in de Custom-categorie ingevoegd — met nieuwe interne ID, zodat geen botsingen met built-ins ontstaan. De import zet automatisch de categorie op Custom, zelfs als de geëxporteerde voorinstelling oorspronkelijk bijv. een built-in was. Beschadigde of met een oudere schemaversie incompatibele bestanden worden stilzwijgend afgewezen, zonder foutdialoog (console-log geeft echter uitsluitsel).

I7Voorinstellingsregel (klik-activering)

WAAR

Inspector → Voorinstellingen-sectie → elke voorinstellingsregel in elke categorie.

TECHNISCH

Klik op een voorinstellingsregel vervangt alle velden van de TrainingConfig door de waarden uit de voorinstelling, onthoudt de ID van de actieve voorinstelling en reset de modified-status. Het actieve vinkje vóór de regel verschijnt alleen wanneer de voorinstelling geselecteerd EN ongewijzigd is. Zodra een waarde in de TrainingConfig wordt gewijzigd (slider, stepper, toggle in de andere Inspector-secties), verschijnt een oranje „Modified"-badge achter de naam. Ingebouwde voorinstellingen kunnen niet worden overschreven — bij wijziging moet via de Save-knop (I1) een eigen kopie worden aangelegd.

I8Contextmenu „Export…"

WAAR

Rechtsklik op elke voorinstellingsregel → eerste item „Export…".

TECHNISCH

Identieke functionaliteit als I5 (Export…-knop), maar comfortabeler bereikbaar — zonder dat de voorinstelling vooraf geselecteerd hoeft te zijn. Exporteert direct de in de regel aangeklikte voorinstelling. Werkt voor alle voorinstellingscategorieën gelijk (built-in of custom), geen beperking. De export bevat de built-in-vlag en de oorspronkelijke categorie, maar bij re-import wordt de categorie zoals onder I6 beschreven op Custom gemapt.

I9Contextmenu „Duplicate"

WAAR

Rechtsklik op elke voorinstellingsregel → tweede item „Duplicate".

TECHNISCH

Kloont de voorinstelling naar de Custom-categorie. Genereert een nieuwe interne ID, hangt „ Copy" aan de naam en slaat de kopie op. Werkt ook voor built-in-voorinstellingen — de kloon is dan bewerkbaar. Het origineel blijft onaangeroerd. De TrainingConfig wordt waarde-voor-waarde gekopieerd (JSON-roundtrip), zodat geen referentie-bindingen tussen origineel en kopie bestaan.

I10Contextmenu „Delete"

WAAR

Rechtsklik op eigen voorinstellingsregels → laatste item „Delete" (rood, destructive).

TECHNISCH

Alleen zichtbaar voor custom-voorinstellingen. Built-ins kunnen niet worden verwijderd. Het item is als destructief gemarkeerd, verschijnt in het contextmenu rood en wordt achter een divider gezet, zodat men hem niet per ongeluk klikt. Er is geen bevestigings- dialoog — één klik verwijdert de voorinstelling onmiddellijk. De verwijderde voorinstelling is niet herstelbaar (Cmd-Z werkt hier niet — undo bestaat in de huidige build alleen voor de beeldlijst, niet voor voorinstellings- operaties). Was de verwijderde voorinstelling juist actief, blijft de huidige TrainingConfig ongewijzigd, alleen de actieve voorinstellings-selectie wordt op nul gezet.

I11Categorie-header (uitklappen/inklappen)

WAAR

Inspector → Voorinstellingen-sectie → elke categorie-header (Classic, MCMC, SceneClass, Custom).

TECHNISCH

Inklap-status per categorie met verschillende standaard: Classic start uitgeklapt, MCMC, SceneClass en Custom starten ingeklapt. De status wordt niet gepersisteerd — bij app-herstart zijn alle categorieën weer in de standaard-toestand. De chevron-pijl roteert geanimeerd. Het getal rechts in de header toont het aantal voorinstellingen in deze categorie. De klik-hit-area omvat het hele header-gebied.

Trainingsconfiguratie-sectie (I12–I22)

Crop alleen Trainingsconfiguratie-sectie — Camera Alignment (Apple Photogrammetry actief, Native (Beta) inactief), Densification (Classic actief), Max Iterations 5.000 / Densify Until 3.500 met link-symbool, SSIM Weight slider 0,20, Render Scale slider op 100% (1.536×2.048 = 3,1 MP)
Crop alleen Trainingsconfiguratie-sectie — Camera Alignment (Apple Photogrammetry actief, Native (Beta) inactief), Densification (Classic actief), Max Iterations 5.000 / Densify Until 3.500 met link-symbool, SSIM Weight slider 0,20, Render Scale slider op 100% (1.536×2.048 = 3,1 MP)

Hier komen de centrale hefbomen samen: welk SfM-backend moet rekenen, hoe de densification werkt, hoeveel iteraties, hoe groot de SSIM-weging. Bij MCMC-strategie duiken twee extra toggles op („MCMC Quality" en „Auto-scale by scene"), die in Classic-modus worden verborgen. Bij Native-SfM-backend komt het FOV-override-veld erbij, dat alleen voor videoframes zonder EXIF-brandpuntsafstand nodig is.

I12Camera Alignment-keuze

WAAR

Inspector → Trainingsconfiguratie → Camera Alignment (segmented picker boven).

TECHNISCH

Segmented picker met twee opties: Apple Photogrammetry en Native (Beta). De keuze bepaalt het gebruikte SfM-backend bij de volgende camerareconstructie. Hij beïnvloedt tegelijk welke andere Inspector-elementen zichtbaar zijn: Native toont aanvullend het FOV-override (I13), dat alleen bij EXIF-loze video- frames nodig is. Tip: voor zeer grote outdoor-opnames kun je het resultaat van een externe tool (Metashape of COLMAP) via workspace-import inladen — zie hoofdstuk 1 (M5) en hoofdstuk 9 (Q3, Q6).

I13FOV Override-veld (Native SfM)

WAAR

Inspector → Trainingsconfiguratie → FOV Override (alleen zichtbaar bij Camera Alignment = Native).

TECHNISCH

Numeriek tekstveld (range 0-170°), standaard 0 = automatische bepaling uit EXIF of heuristiek. Handmatige invoer is nodig wanneer de invoerbeelden uit een video zijn geëxtraheerd dat geen brandpuntsafstand-metadata bevat. Typische waarden: iPhone Wide ≈ 73°, DJI Mavic Wide-Crop ≈ 70°, drone met fullframe-sensor ≈ 84°. De waarde wordt op [0, 170] geclampt — waarden buiten worden direct teruggestuwd. Werkt alleen op de native SfM-pipeline (Q4/Q5); Apple Photogrammetry negeert deze waarde volledig.

I15Densification-keuze

WAAR

Inspector → Trainingsconfiguratie → Densification (segmented picker, altijd zichtbaar).

TECHNISCH

Schakelt tussen de twee densification-strategieën: Classic (origineel 3DGS-procedure met clone/split/prune en gradiënt-drempel) en MCMC (Stochastic Gradient Langevin Dynamics met relocation, NeurIPS 2024). Bij wisseling van Classic naar MCMC zet de app de MCMC-specifieke velden automatisch op beproefde standaardwaarden (reg-weights = 0, MCMC-cap- multiplier 3.0, sample-/noise-schedule). Zonder deze automatische initialisatie leden sessies met oude voorinstellingen onder de 1.4.4-MCMC-collapse-bug (460K→5 Gaussians, watchdog-kill). De picker- selectie bepaalt aanvullend welke Inspector-elementen zichtbaar zijn — bij MCMC duiken I16/I17 op. Gedetailleerde veldwerking in hoofdstuk 6, T11–T16 (Classic) en T61–T73 (MCMC).

I16MCMC Quality-toggle

WAAR

Inspector → Trainingsconfiguratie → MCMC Quality (alleen bij Densification = MCMC).

TECHNISCH

Schakelt de gradient-accumulation op 2 stappen (actief) resp. 1 stap (inactief). Accumuleert de gradiënten uit twee opeenvolgende camera-views, voordat de optimizer-step wordt uitgevoerd. Empirisch (sessie 33, V544a) reduceert dat de finale L1-fout met ca. 6% (0,0246 met Quality vs 0,0261 zonder, bij 3-trial-gemiddelde op Horse-Full-MCMC). De prijs: verdubbelde trainingstijd. Bij zeer lange trainingen (200K iteraties) leidt dat tot bijkomstige 10+ minuten wachttijd — dus alleen lonend wanneer de laatste paar procent kwaliteit werkelijk nodig zijn. Werkt alleen op de training in, niet op het export-formaat of de viewport-weergave.

I17Auto-scale by scene-toggle

WAAR

Inspector → Trainingsconfiguratie → Auto-scale by scene (alleen bij MCMC).

TECHNISCH

Wanneer actief, schaalt de effectieve Max-Gaussians- bovengrens met de SfM-init-point-count × MCMC-cap-multiplier (standaard 3.0). Voorbeeld: SfM levert 250K initpunten, basis-cap = 150K, multiplier 3.0 → effectieve bovengrens = max(150K, 750K) = 750K. Wanneer gedeactiveerd, geldt strikt alleen de basis. Werd voor v1.4.5 ingevoerd, omdat grote outdoor-opnames met meer dan 1000 frames en overeenkomstig hoge SfM-puntendichtheid met de starre 150K-cap-standaard de densification hebben uitgehongerd — overbodige punten bleven, nieuwe mochten niet ontstaan. Standaard OFF in custom-voorinstellingen, ON in MCMC-built-ins. Werkt alleen tijdens de training in, niet bij de export.

I18Max Iterations-stepper

WAAR

Inspector → Trainingsconfiguratie → GroupBox → Max Iterations.

TECHNISCH

Stepper met range 1.000–100.000, stapgrootte 1.000. Bepaalt het totale aantal optimizer-iteraties. Lineair gecorreleerd met de trainingstijd (halvering = ca. 50% tijd). Empirische sweet-spots: 20K (Classic Balanced, L1≈0,028), 40K (Classic Quality, L1≈0,023), 200K (MCMC Full, L1≈0,0246). Boven 40K bij Classic brengt gemiddeld nauwelijks verbetering — diminishing returns. Bij het wijzigen wordt, indien de link-functie (I19) actief is, Densify Until proportioneel meegetrokken (standaard-ratio: 0,5, d.w.z. Densify-Until = Max/2).

I19Link/Unlink-knop (Densify ↔ Iterations)

WAAR

Inspector → Trainingsconfiguratie → GroupBox → kleine Link-knop tussen Max Iterations en Densify Until.

TECHNISCH

Toggle-knop die de verhouding van Densify Until tot Max Iterations bevriest. Bij actief (link-icoon geaccentueerd) wordt bij elke wijziging van Max Iterations Densify Until proportioneel nagetrokken. Bij unlink (link-plus-icoon) blijven de waarden onafhankelijk. Standaard is linked, omdat dat de typische correlatie weerspiegelt — wanneer je de training op dubbele iteraties trekt, wil je meestal ook de densification proportioneel langer laten lopen. De verhouding wordt bij het instellen van de link-knop uit de actuele waarde berekend; een typische verhouding is 0,5 (Densify-Until = halve iteratie-aantal).

I20Densify Until-stepper

WAAR

Inspector → Trainingsconfiguratie → GroupBox → Densify Until.

TECHNISCH

Stepper met range 500–50.000, stapgrootte 500. Bepaalt de iteratie-index vanaf waar geen nieuwe Gaussians meer door clone/split (Classic) of relocation (MCMC) bijkomen. Na bereiken worden alleen nog positie en kleur verfijnd. Hogere waarden = meer Gaussians = groter bestand, langere per-iteratie-tijd (+30-60% GPU-time per stap). Typische waarden: 15K (voor 30K Max-Iter), 20K (voor 40K), 100K (voor 200K MCMC). Bij actieve link (I19) automatisch meegeschaald. Werkt anders bij Classic vs MCMC: Classic stopt volledig de groei, MCMC stopt de relocation-logica, maar sample-/noise-adaptatie loopt door.

I21SSIM Weight-slider

WAAR

Inspector → Trainingsconfiguratie → GroupBox → SSIM Weight.

TECHNISCH

Slider 0,0–1,0 in stappen van 0,05, weergave als „0,20". Mengt L1-loss (0,0) en SSIM-loss (1,0). L1 strakt de helderheid per pixel aan, SSIM de structurele gelijkenis (randen, lokale statistieken). Standaard 0,2 is de waarde uit het originele 3DGS-paper (Kerbl 2023) en reverse-engineered als robuust compromis in talrijke sessies. Hogere waarden (0,5+) bevoordelen detailbehoud, kunnen echter lokale helderheidsfouten negeren. Lagere waarden (< 0,1) leiden tot detailverlies bij scherpe randen. De SSIM- berekening loopt in de shader met een 11×11-Gaussian-window. Performance: bij 0,0 (alleen L1) is de training ca. 8-12% sneller, omdat de SSIM-berekening in de shader wordt overgeslagen.

I22Render Scale-slider

WAAR

Inspector → Trainingsconfiguratie → GroupBox → Render Scale.

TECHNISCH

Slider 0,25–1,0 in stappen van 0,25, weergave als „100%". Schaalt de trainings-rendering-resolutie relatief aan de bronbeeld-grootte. Grootste hefboom op de performance: 50% reduceert GPU-tijd met ca. 75% (omdat 4× minder pixels), 25% met ca. 94%. De gradient-drempel wordt automatisch meegeschaald. Onder de slider verschijnt een live-resolutieweergave in MP (bijv. „2304×1296 (3,0 MP)"). Mocht de actuele waarde afwijken van de aanbevolen, wordt in oranje schrift „— recommended: 50%" ingeblend. De aanbeveling mikt op ~3 MP effectieve resolutie — het door Apple Silicon GPU's meest efficiënt verwerkbare bereik. 4K-bronbeelden krijgen bijv. automatisch 25% aanbevolen, FullHD-beelden 100%. Een wijziging triggert aanvullend de buffer-reallocatie.

Enhancements-sectie (I26–I29)

Crop alleen Enhancements-sectie — vier rijen: Post-Training Compactification (toggle aan), MetalFX Spatial Upscaling (toggle uit), MPS Lanczos Scaling (toggle uit), Perceptual Loss (slider op „Off”). Elke rij met ondertitel verklaart functie
Crop alleen Enhancements-sectie — vier rijen: Post-Training Compactification (toggle aan), MetalFX Spatial Upscaling (toggle uit), MPS Lanczos Scaling (toggle uit), Perceptual Loss (slider op „Off"). Elke rij met ondertitel verklaart functie

De Enhancements-sectie groepeert vier functies die beeldkwaliteit verbeteren zonder de kerntrainingsloop zelf te veranderen. De eerste drie (I26-I28) zijn post-training- resp. viewport-stadia: Compactification ruimt na het trainingseinde op, MetalFX en MPS Lanczos zijn pure viewport-renderers die de lopende training niet beïnvloeden. De Perceptual Loss (I29) is ondanks de sectie-toebehoorigheid een trainingsbestanddeel — hij wordt tijdens de training als extra loss-term geactiveerd, vandaar de scheiding van de viewport-toggles via een divider.

I26Post-Training Compactification-toggle

WAAR

Inspector → Enhancements → Post-Training Compactification.

TECHNISCH

Activeert de V443-post-processing: na afronding van de trainingsiteraties worden Gaussians met opacity onder 0,01 (1% zichtbaarheid) verwijderd. Empirisch reduceert dat de bestandsgrootte met ~55-58% bij nul zichtbaar kwaliteitsverlies — omdat deze Gaussians visueel toch niet bijdragen. De compactification loopt als GPU-compact-pass en duurt al naar gelang Gaussian-count seconden-fracties tot enkele seconden. Beïnvloedt de trainingsperformance niet. Als deze toggle uit is, worden ook invisible Gaussians geëxporteerd — relevant alleen wanneer je het formaat voor een verdere training-stage wilt gebruiken (Continue Training), anders verspilling van geheugen.

I27MetalFX Spatial Upscaling-toggle

WAAR

Inspector → Enhancements → MetalFX Spatial Upscaling.

TECHNISCH

Activeert Apple's MetalFX spatial upscaler in de viewport-renderer. Wanneer de trainings-resolutie (door I22 Render Scale) lager is dan de viewport-grootte, schaalt MetalFX de gerenderde frame ML-gebaseerd op naar de weergavegrootte. Levert de scherpste resultaten van alle schaalopties, omdat het ML-upscaler-model op scherpe randen is geoptimaliseerd. De renderer-pipeline wordt bij omschakelen live geherconfigureerd — direct zichtbaar, zonder herstart. Heeft voorrang op MPS Lanczos (I28): zijn beide actief, wint MetalFX. Performance- overhead in het viewport ca. 1-2 ms per frame op M3-GPU's. Werkt alleen op het live-viewport, niet op gerenderde exports (orbit-video, screenshots) — die worden in volle bronresolutie gerenderd.

I28MPS Lanczos Scaling-toggle

WAAR

Inspector → Enhancements → MPS Lanczos Scaling.

TECHNISCH

Activeert Apple's Metal Performance Shaders met Lanczos-resampling als viewport-upscaler. Lanczos is klassiek resampling met 8-tap-sinc-filter — scherper dan bilineair, klassiek algoritme zonder ML. De renderer-pipeline wordt bij omschakelen live opnieuw geconfigureerd. Wordt genegeerd wanneer MetalFX (I27) eveneens actief is. Minimale overhead (<0,5 ms per frame), maar kwaliteit ligt onder MetalFX. Toepassing: fallback voor scènes waarin MetalFX artefacten produceert (bijv. sterke lijnenstructuren die de ML-upscaler incidenteel „gladstrijkt"). Werkt zoals I27 alleen in het live-viewport, niet in exports.

I29Perceptual Loss-slider

WAAR

Inspector → Enhancements → Perceptual Loss.

TECHNISCH

Slider 0,0–0,2 in stappen van 0,01, weergave bij 0,0 als „Off", anders als „0,05" etc. Activeert een extra loss-term, die multi-geschaalde Gaussian-blur van de rendering met het ground-truth-beeld vergelijkt (3 blur-schalen). Vangt structurele verschillen op die L1+SSIM alleen niet herkennen. V460-implementatie. Empirisch verbetert een waarde van 0,05-0,1 de L1-score in sessies met enkele procent, kost echter ~5% trainingstijd (extra forward-pass door de blur-kernels). Boven 0,15 wordt de training instabiel en L1 verslechtert weer (loss-term domineert de optimalisatie). Werkt tijdens de training, niet in het post-processing — ondanks de positie in de „Enhancements"-sectie is dit dus geen pure opwaardering achteraf.

Metrics-sectie (I30–I38)

Crop alleen Training Metrics-sectie na voltooide training op bouquet (5K iteraties, 2.991 Gaussians finaal) — tabel met trainingmetrics (Iteration, Loss, SSIM Loss, Combined Loss, Gaussian Count, Learning Rate, Elapsed, ETA)
Crop alleen Training Metrics-sectie na voltooide training op bouquet (5K iteraties, 2.991 Gaussians finaal) — tabel met trainingmetrics (Iteration, Loss, SSIM Loss, Combined Loss, Gaussian Count, Learning Rate, Elapsed, ETA)

Terwijl een training loopt, toont de metrics-sectie negen live-waarden uit de trainingsloop. Vóór de start van een training is de sectie leeg („Start training to see live metrics"). Alle waarden worden elke ~30 iteraties geactualiseerd (update-frequentie van de -stream). De sectie is read-only — geen element is klikbaar of veranderbaar. Voor diepere analyse de JSONL-trainings-logs onder ~/Documents/RadianceKit/Logs/ raadplegen (script python3 scripts/analyze_logs.py best 5).

I30Iteration

WAAR

Inspector → Metrics → Iteration. Read-only.

TECHNISCH

Weergave in het formaat „4523 / 40000" — actuele iteratie boven totaal geplande iteraties. Telt synchroon mee met de trainingsloop die de waarden elke ~30 iter pushed. De tweede getalwaarde komt overeen met de Max-Iterations-waarde op het startmoment; hij verandert niet meer, ook al verstelt de gebruiker de stepper daarna — de lopende run gebruikt zijn eigen snapshot-kopie. Wanneer de app via het training-menu iteraties bovenop schuift (Continue Training +5K/+10K/+20K), neemt de noemer toe.

I31Loss

WAAR

Inspector → Metrics → Loss. Read-only.

TECHNISCH

Float-waarde met zes decimalen (bijv. „0,024385"). Meet de gecombineerde L1+SSIM-loss (mix gecontroleerd via I21 SSIM Weight) plus optioneel Perceptual Loss (I29) en andere regularizers. Schaal is niet absoluut, maar scène-afhankelijk — vereist voor de meeste vergelijkingen dezelfde dataset. Typische eindwaarden bij goede configuraties: - Classic Quality 40K iters: 0,022–0,025 (Horse, Truck, Garden) - MCMC Full 200K iters: 0,024–0,028 - Outdoor drone 30K: 0,030–0,060 (geometrie-bepaald slechter) - Indoor apartments: 0,018–0,025

Waarden boven 0,10 na 5K iteraties duiden op SfM-problemen (slechte cameraposes) — afbreken en SfM opnieuw berekenen.

I32Learning Rate

WAAR

Inspector → Metrics → Learning Rate. Read-only.

TECHNISCH

Wetenschappelijke-notatie-weergave (bijv. „1,60e-04"). Actuele leerratio voor de position-parameters (3DGS heeft zes onafhankelijke LR's voor position, SH-DC, SH-rest, opacity, scale, rotation — weergegeven wordt hier de position-LR als representatieve grootheid). Standaard-aanvangswaarde 1,6e-4, die via een exponentieel verval tot ~1,6e-6 aan het trainingseinde afzakt. Het verval is via het LR-schedule-veld in de Trainings- configuratie (T-veld in hfd. 6) aanpasbaar. Wanneer de LR ongewoon hoog blijft (bijv. 1e-3 of meer na 10K iteraties), kan dat op een verkeerd geladen configuratie wijzen.

I33SH Degree

WAAR

Inspector → Metrics → SH Degree. Read-only.

TECHNISCH

Geheel getal 0-3. Spherical-harmonics-graad voor de kleurrepresentatie. Begint bij 0 (alleen de DC-component, d.w.z. richtings-onafhankelijke kleur per Gaussian — dus slechts één RGB-constante) en stijgt in de loop van de training progressief naar 3. De standaard-schedule heft de graad bij 1000/2000/3000 iteraties met 1 op. SH-3 komt overeen met 48 kleur-coëfficiënten per Gaussian (3 RGB-channels × 16 SH-basisfuncties). Hogere SH-graad = meer richtings-afhankelijke reflectie (glanzende oppervlakken zien er onder verschillende kijkhoeken correct anders uit), maar ook meer geheugen en langzamere training.

I34Gaussians

WAAR

Inspector → Metrics → Gaussians. Read-only.

TECHNISCH

Actuele aantal Gaussians in het model, geformatteerd met locale-separator (bijv. „524.318"). Groei: - Classic: start bij de SfM-init-punten (typisch 50K-300K), groeit door clone/split tot kort voor Densify Until, daarna statisch tot trainingseinde (modulo pruning) - MCMC: sample-punten worden toegevoegd tot het MCMC-cap, daarna alleen nog relocation

Gezonde eindwaarden: - Classic Quality: 400K-700K (Horse 524K, Garden 800K) - MCMC Full: exact op de cap (standaard 150K, met auto-scale multiplier × SfM-count al naar gelang scène 500K-1,5M)

Bij MCMC valt het getal naar < 60% van de cap → anomalie (collapse-indicator, wijst op te agressieve regularizers).

I35GPU Memory

WAAR

Inspector → Metrics → GPU Memory. Read-only.

TECHNISCH

Schatting van het Gaussian-buffer-geheugenverbruik als Gaussian-count × 616 bytes (geformatteerd in memory-stijl). 616 bytes is de empirische grootte van een volledig uitgeruste Gaussian (position, scale, rotation, opacity, SH-coëfficiënten graad 3, gradient- accumulator). De weergave erkent niet de renderer-overhead (tile-buffer, sort-buffer, backward-buffer) — de reële GPU- geheugenbehoefte ligt typisch 2-3× boven deze waarde. Bij 500K Gaussians: weergegeven ~290 MB, reëel ~700 MB. Bij 1,5M Gaussians: weergegeven ~880 MB, reëel ~2,5 GB. Op M3 Max met 64+ GB Unified Memory onkritisch, op M3 Pro met 18 GB al een limiet.

I36Speed

WAAR

Inspector → Metrics → Speed. Read-only.

TECHNISCH

Iteraties-per-seconde met één decimaal („24,3 it/s"). Berekend door de trainer als glijdend gemiddelde over de laatste ~100 iteraties. Typische waarden: - Quick voorinstelling (1K iters): 80-120 it/s (kort, geen steady-state) - Classic 20K @ 1,0 Render Scale (Truck-scène, M3 Max): 25-35 it/s - Classic 20K @ 0,5 Render Scale: 80-120 it/s - MCMC 200K @ 0,5 Render Scale: 25-50 it/s (langzamer vanwege relocation) - Bij 1M+ Gaussians en volle resolutie: < 10 it/s

Dalende speed in de loop van de training is normaal — meer Gaussians = meer compute per iteratie. Plotselinge inzinkingen (bijv. van 30 → 5 it/s) duiden op GPU-thermal-throttling of concurrerende apps.

I37Elapsed

WAAR

Inspector → Metrics → Elapsed. Read-only.

TECHNISCH

Reeds verstreken tijd als „4:23" (m:ss) of „1:23:45" (h:mm:ss). Format-switch vanaf 1 uur. Meet alleen de pure trainingstijd, niet de voorafgaande fasen (SfM-berekening, beeld- import). Bij pauze/hervatten loopt de klok door — is dus wall-clock, geen CPU-tijd.

I38ETA

WAAR

Inspector → Metrics → ETA. Read-only.

TECHNISCH

Geschatte resttijd als „17:42" of „1:12:35". Berekening: (Max Iterations − actuele iteratie) / iteraties-per- seconde. Toont „–" wanneer de speed momenteel nul is (helemaal aan het begin of bij pauze). De schatting wordt niet aan de typische vertraging tegen het trainingseinde aangepast — vooral bij MCMC en Classic met grote Densify-Until-waarden neigt de training ertoe langzamer te worden, omdat steeds meer Gaussians in het beeld komen. Reëel blijft het typisch 10-20% boven de aanvangs-ETA.

Loss-chart-sectie (I39–I41)

Crop alleen Loss History-sectie na voltooide training — Current 0,0064, Min 0,0035 (groen), blauw verloop van 0,027 (iteratie 1) tot 0,0035 (iteratie 5K) met karakteristieke knik rond iter 200, daaronder Gaussian Count-Chart oranje
Crop alleen Loss History-sectie na voltooide training — Current 0,0064, Min 0,0035 (groen), blauw verloop van 0,027 (iteratie 1) tot 0,0035 (iteratie 5K) met karakteristieke knik rond iter 200, daaronder Gaussian Count-Chart oranje

De Loss-Chart-sectie visualiseert het trainingsverloop over de tijd. Hij bestaat uit twee charts: een Loss-Curve-Chart (groot, boven, blauw) en een Gaussian-count-chart (kleiner, onder, oranje). Beide worden live tijdens de training opgebouwd en persisteren tot de volgende trainingstart. Vóór de eerste training is het gebied leeg („Loss curve will appear during training"). De charts zijn pure SwiftUI-path-drawings (geen Swift-Charts-framework), zodat ze ook bij 100K+ punten vloeiend renderen.

I39Current Loss (weergave)

WAAR

Inspector → Loss-Chart → linker labelgebied „Current: 0,0287". Read-only.

TECHNISCH

Float-waarde van het laatste loss-samplepunt, geformatteerd met vier decimalen. Identiek aan I31 (Loss in de Metrics-sectie), alleen hier compacter geformatteerd. Bron is de Loss- history — een lijst die per ~30 iteraties een entry krijgt. Alleen eindige waarden worden in de lijst opgenomen — NaN/infinity (zeer zelden, bij een gradient-explosion-bug) worden gefilterd.

I40Min Loss (weergave)

WAAR

Inspector → Loss-Chart → rechter labelgebied „Min: 0,0245" (groen). Read-only.

TECHNISCH

Minimum van alle ooit geziene loss-waarden van de actuele trainings-run. Wordt live uit de loss-history herberekend — geen separate persistentie. Wordt met groene schrift weergegeven, omdat „Min" = „best so far". De gestreepte groene lijn aan de onderste chart-rand markeert deze Y-positie visueel. Bij Continue-Training- sessies start de min-tracking opnieuw — de oude history wordt in de UI door de nieuwe vervangen (niet aangehangen). Wanneer de actuele training slechter loopt dan de voorgaande, kan de Min-weergave dus groter zijn dan het voorgaande eindresultaat.

I41Gaussian Count Chart

WAAR

Inspector → Loss-Chart → tweede chart eronder (oranje). Read-only.

TECHNISCH

Lijndiagram van het Gaussian-aantal over de trainingsiteraties. Bron: de Gaussian-count-history (lijst van (iter, count)-paren, gevuld door de trainer elke ~30 iter). Y-schaal dynamisch tussen minimum en maximum van de history. Bij Classic- strategie ziet de curve er typisch zo uit: gestaag stijgend tot Densify Until, daarna vlak (met kleine pruning-schommelingen). Bij MCMC: steile stijging tot cap, daarna horizontale lijn (relocation houdt de getalwaarde constant). Wanneer de curve daalt ondanks actieve training, pruned de densification te agressief — aanwijzing voor verkeerde defaults of een bekende MCMC-collapse-bug (v1.4.4-hotfix-thema).

Hoe lees je de loss-curve?

De Loss-Chart is het belangrijkste diagnose-tool in de Inspector — geen andere indicator toont zo direct of de training nuttig voortgaat of vasthangt. De typische gezonde vorm is een snelle daling in de eerste 1000-3000 iteraties (van ~0,15 naar ~0,05), gevolgd door een langzame, gelijkmatige daling tot het trainingseinde (op 0,020-0,030). Logaritmisch oogt de curve daarbij als een gladde diagonaal.

Wat betekent een plateau bij de loss? Wanneer de curve over meerdere duizenden iteraties vlak blijft, zijn er twee mogelijke interpretaties: (a) training is „geconvergeerd" — de loss kan niet meer significant dalen, omdat het model zo goed is als het met de gegeven data en settings kan zijn. Dat is gewenst; dat is „klaar". (b) Training „hangt" — de loss kan eigenlijk nog dalen, maar de optimalisatie stagneert (lokaal minimum, leerratio te klein, densification uit). Onderscheiden: wanneer de loss-waarde in een typisch goed bereik ligt (0,020-0,030 bij indoor/object, 0,040-0,060 bij outdoor) en de curve sinds 5K iteraties vlak is, is het geconvergeerd. Wanneer de waarde duidelijk hoger is dan bij vergelijkbare scènes (bijv. 0,08), hangt het.

Let op Gaussian-plateau ≠ Loss-plateau. Een plateau in het Gaussian-aantal betekent niet „training is klaar". Het betekent slechts dat de densification is opgehouden nieuwe punten toe te voegen — ofwel omdat bereikt is (Classic) ofwel omdat het MCMC-cap vol is. De training loopt daarna verder en verfijnt alleen nog de bestaande punten. Het eigenlijke „klaar"-signaal lees je aan de loss-curve en aan de iteratieweergave (I30), niet hier.

Vuistregel voor afbreken: Wanneer de loss-curve na 5000+ iteraties boven 0,08 ligt en nauwelijks nog daalt, is met hoge waarschijnlijkheid de SfM-reconstructie scheef. Training afbreken, in hoofdstuk 9 nakijken of het gekozen SfM-backend bij de scène past, evt. naar COLMAP/Native overschakelen, dan opnieuw starten. Beter 10 minuten in betere SfM investeren dan 2 uur training met slechte camerauitlijning.

Wanneer naar de Inspector grijpen?

Snelreferentie: welke sectie + welke controls voor welk typisch use-case?

Common-TaskSectieControl-ID's
Voorgefabriceerde setup ladenPresetsI7 (regel aanklikken)
Eigen setup opslaanPresetsI1 → I2 → I4
Setup met collega's delenPresetsI5 (Export) resp. I6 (Import)
SfM-backend wisselen (bijv. omdat Apple-PG te instabiel)TrainingsconfiguratieI12 (zie hfd. 9)
Videoframes zonder EXIF-brandpuntsafstand verwerkenTrainingsconfiguratieI13 (FOV Override)
COLMAP-performance: GLOMAP in plaats van klassiekTrainingsconfiguratieI14
Van Classic naar MCMC overschakelenTrainingsconfiguratieI15
Training langer laten lopenTrainingsconfiguratieI18 (Max Iter) + I20 (Densify Until) — gekoppeld via I19
GPU-tijd halverenTrainingsconfiguratieI22 (Render Scale op 50%)
Trainingskwaliteit +6% (MCMC)TrainingsconfiguratieI16 (MCMC Quality)
Outdoor-scène met veel SfM-puntenTrainingsconfiguratieI17 (Auto-scale by scene)
COLMAP-pad inrichten / wisselenTrainingsconfiguratieI23 / I24 / I25
Exportbestanden kleiner makenEnhancementsI26 (altijd aan laten)
Viewport scherper zonder meer trainingstijdEnhancementsI27 (MetalFX)
MetalFX strijkt te veel glad → alternatiefEnhancementsI28 (MPS Lanczos)
Laatste beetje detail bij fijne structurenEnhancementsI29 (Perceptual Loss 0,05-0,1)
Training bewakenMetricsI30 (voortgang), I36 (tempo), I38 (resttijd)
Kwaliteit vroeg inschattenMetricsI31 (Loss < 0,05 na 5K = goed)
Verdenking op SfM-probleemMetrics + Loss-ChartI31 + I39 (Loss > 0,08 na 5K → SfM opnieuw)
Convergence vs stuck onderscheidenLoss-ChartI39 + I40 (Loss-plateau lezen)
Densification-probleem herkennenLoss-ChartI41 (Gaussian-curve daalt → bug)