Handleiding

Hoofdstuk 4 — Aux-vensters

Naast het hoofdvenster (3D-Viewport plus Inspector) beheert RadianceKit zes andere vensters, die allemaal via het Help-menu worden geopend. Het menu heeft acht items, van boven naar beneden: User Guide (⌘?), Keyboard Shortcuts (⌘/), Open Training Logs… (⇧⌘L), Open Exports Folder…, Manage Storage…, Pareto Dashboard… (⇧⌘D), Holdout Analysis… (⇧⌘H), BayesOpt Console… (⇧⌘B). De twee „Open …"-items openen geen app-venster maar de Finder; daarom worden ze hier niet verder behandeld. Drie van de vensters — Dashboard, Holdout, BayesOpt — zijn zelfstandige analyse-hulpmiddelen: ze werken onafhankelijk van het hoofdvenster en lezen of schrijven JSON-bestanden op de schijf. Elk van deze drie vensters open je via het Help-menu, waarna je zelf het bestand of de map selecteert die je wilt analyseren — via „Open Reports Folder…", „Open transforms.json…" of de „Start"-knop. Deze drie vensters zijn als enige niet vertaald: hun knoppen, schuifregelaars en kolomtitels staan in elke taalversie in het Engels. De hier genoemde labels vind je dus precies zo terug op je scherm.

De drie eenvoudige vensters (User Guide, Keyboard Shortcuts, Manage Storage) en de twee map-menu-items (Open Training Logs / Open Exports Folder) krijgen per bedieningselement een kort item. De drie analyse-vensters zijn uitgebreider gedocumenteerd — telkens met een inleiding die uitlegt wat je in het venster ziet, wanneer je het moet openen en hoe je de weergegeven afbeelding interpreteert.

Aan het einde van het hoofdstuk staat een kruisverwijzing naar de Inspector van het hoofdvenster: wat je zinvol kunt aflezen in de live-loss-grafiek en de Gaussian-count-weergave tijdens een lopende training.

Gebruikershandleiding (W1–W4)

Gebruikershandleiding-venster met sidebar links en gerenderde Markdown-inhoud rechts
Gebruikershandleiding-venster met sidebar links en gerenderde Markdown-inhoud rechts

Wat het is: Een ingebouwd hulpvenster dat de bij de app meegeleverde guide_<sprache>.md rendert. De taal wordt afgeleid uit de Settings (tab General → Language) of, als daar „System" staat, uit de macOS-taalvoorkeuren. De layout is klassiek: links een sidebar met alle kopjes, rechts de doorlopende tekst.

Als je snel aan één enkel punt herinnerd wilt worden — dus als vervanging voor steekwoorden. De uitgebreide referentie is dit handboek; het ingebouwde hulpvenster is de kortere versie voor snel opzoeken. Het wordt bij elke app-release mee bijgewerkt, maar inhoudelijk oppervlakkiger gehouden.

W1NavigationSplitView (sidebar + detail)

WAAR

Help → User Guide (⌘?).

TECHNISCH

Layout met twee kolommen: een smalle sidebar (minstens 180 pt breed) voor de inhoudsboom en een scrollbaar detailgebied voor de eigenlijke Markdown-inhoud. Het venster heeft een minimumgrootte van 700 × 500 pt. Bij het eerste openen laadt het venster de bijbehorende guide_<lang>.md uit de app-bundle (fallback guide_en.md), parseert deze naar block-records (kopjes H1–H4, alinea's, lijsten, tabellen, scheidingslijnen) en extraheert apart de kopjesstructuur voor de sidebar. Inline-opmaak (vet, cursief, code-span) wordt gerenderd via de ingebouwde Markdown-engine. De taal wordt gelezen uit de app-instellingen, met het speciale geval Chinees (zh-Hans) en Braziliaans Portugees (pt-BR), die als volledige locale-tags worden behouden omdat deze varianten verschillen van zh respectievelijk pt.

W2List (kopjes-sidebar)

WAAR

Linkerkolom in het gebruikershandleiding-venster.

TECHNISCH

Lijst van alle H2- en H3-kopjes van het huidige Markdown-document. H2-items verschijnen zonder inspringing met medium lettergewicht, H3-items met 16 pt inspringing links en een verminderde voorgrondstijl. Alle andere niveaus — zowel H1 als H4 en dieper — verschijnen niet in de sidebar, omdat ze deze anders onoverzichtelijk zouden maken. Anker-ID's worden uit de kopjestekst gegenereerd door slugificatie (kleine letters + spaties naar streepjes + filtering op letters/cijfers/streepjes — hetzelfde algoritme dat GitHub gebruikt voor zijn Markdown-ankers, zodat ook externe URL's naar de documentatie mogelijk op hetzelfde anker zouden uitkomen). De lijst gebruikt de native macOS-stijl.

W3Button (kopje → anker-sprong)

WAAR

Per sidebar-regel een button.

TECHNISCH

Elk sidebar-item is een button die het huidige anker instelt, maar er visueel uitziet als een lijst-item. Een observer-variabele triggert vervolgens de scroll-sprong naar het bijbehorende anker met een vloeiende animatie over 0,3 s. Na de sprong wordt de ankerwaarde teruggezet, zodat de volgende klik op hetzelfde anker opnieuw afvuurt (anders zou de observer niet opnieuw triggeren, omdat de waarde niet is veranderd).

W4ScrollView (detail-inhoud)

WAAR

Rechterkolom.

TECHNISCH

Scrollbaar, verticaal gestapeld inhoudsgebied met lazy rendering, omdat langere gidsen gemakkelijk meer dan 200 Markdown-blokken kunnen hebben — een niet-lazy variant zou ze allemaal tegelijk instantiëren. Elk blok krijgt een eigen ID, ofwel het kopje-anker (dat krijgt elk kopje, ongeacht het niveau) of een index-plaatshouder. De maximale breedte is 720 pt, padding 32 horizontaal / 24 verticaal, zodat lange regels een goed leesbare layout behouden. Tabellen worden cel voor cel gerenderd met horizontale stacks en scheidingslijnen; inline-code door de ingebouwde Markdown-engine. Echte codeblokken worden momenteel als paragraaf behandeld — een bekende beperking van het hulpvenster.

Toetsenbord Sneltoetsen (W5–W6)

Keyboard Shortcuts Fenster — fünf Gruppen Navigation/Views/Capture/Editor/Training mit Hotkey-Spalte links und Beschreibung rechts
Toetsenbord Sneltoetsen-venster — vijf groepen Navigation/Views/Capture/Editor/Training met hotkey-kolom links en beschrijving rechts

Statische referentielijst in vijf secties. Navigation: Mouse Drag (Orbit/Fly), Shift+Drag/Right-Drag (Pan), Scroll (Zoom), WASD (Fly-Through-beweging), Q/E (Up/Down), F (Toggle Orbit/Fly), Double-click (Re-center), Cmd+Scroll (FoV-Adjust). Views: R (Reset Camera), T (Auto-Rotation), P (Camera Playback), B (Background-Cycle), 0–9 (Spring naar Training-Cam 1=10%/5=50%/0=last), Left/Right Arrow (Prev/Next Cam). Capture: S (Screenshot to Desktop), V (Turntable-Video), C (Copy Camera Info). Editor: Tab (Edit-modus), Click/Drag (Paint-Select), Option+Click (Deselect), X / Delete (Selectie verwijderen), Cmd-Z (Laatste verwijdering ongedaan maken), [ / ] (Penseelgrootte kleiner/groter), Esc (Selectie opheffen). Training: Option+Space (Training pauzeren/hervatten), Cmd+E (Scene exporteren). Meer staat hier niet — Start, Cancel en de verlengingen bereik je via het Training-menu (hoofdstuk 1).

Wat het is: Een simpel statisch overzicht van alle sneltoetsen — Navigation, Views, Capture, Editor, Training. De inhoud is vast ingebouwd en wordt niet uit een bestand nageladen.

Wanneer je op zoek bent naar de snelste manier om iets in de Viewport te doen. WASD-Fly-Through, R voor Camera-Reset, B voor Background-Cycling — ze staan allemaal hier.

W5ScrollView (inhoudsgebied)

WAAR

Help → Keyboard Shortcuts (⌘/).

TECHNISCH

Een eenvoudig scrollgebied met een verticale lijst erin. Padding 20 rondom, geen sidebar-navigatie-tree (de lijst is kort genoeg). Inhoud is in vijf secties gegroepeerd (Navigation, Views, Capture, Editor, Training). Per toetscombinatie een regel met vertaalbare tekst in beide kolommen. Linkerkolom (toetscode) vastgezet op 180 pt breedte, zodat de beschrijvingen rechts verticaal uitgelijnd blijven. Geen interactie behalve scrollen — klikken op een regel activeert niets, de sneltoetsen zijn echte toetsenbord-modifiers in het menu en op de Viewport.

W6VStack (sneltoets-secties)

WAAR

Binnen de ScrollView.

TECHNISCH

Links uitgelijnde, gestapelde secties met 16 pt tussenruimte. Binnen de vijf secties telkens een heading + reeks regels. Headings gebruiken een secundaire subheadline-stijl — bewust geen Title-formaat, omdat de secties niet navigeerbaar hoeven te zijn. Inhoud is bewust vlak (geen Disclosure, geen Search, geen Filter), zodat de component op elke macOS-versie ongewijzigd werkt en het bestand leesbaar blijft.

Manage Storage (W7–W12)

Manage Storage venster — Header toont „1,356 items · 55.1 GB total”, tabel met Export-PLY-bestanden gesorteerd op datum, telkens icoon + bestandsnaam + grootte + datum
Manage Storage venster — Header toont „1,356 items · 55.1 GB total", tabel met Export-PLY-bestanden gesorteerd op datum, telkens icoon + bestandsnaam + grootte + datum

Tabelweergave van alle bestanden die door RadianceKit worden beheerd. Header telt 1.356 items, 55,1 GB totale grootte. Toolbar bovenaan: „Show in Finder" + „Refresh". Elke rij: Export-icoon, bestandsnaam (bijv. training_20260718T194416Z.ply), export-datum, grootte (varieert hier van 7,8 MB tot 2,24 GB), loep-icoon (Reveal) en prullenbak-icoon (Move to Trash). Er wordt eerst gesorteerd op categorie en binnen een categorie op datum, nieuwste bovenaan. In deze opname domineren PLY-exports, omdat in deze opslaglocatie vooral trainingsresultaten zijn bewaard.

Wat het is: Een overzicht van het schijfgebruik voor alles wat RadianceKit onder ~/Documents/RadianceKit/ opslaat — logs, exports, scenes, capture-bundles (van de iOS-companion), imports (staging-kopieën van de invoerafbeeldingen). Per item een grootte in bytes en twee knoppen: „in Finder tonen" en „naar de prullenbak verplaatsen". Is GEEN automatisch opschonen — de app verwijdert zelf niets; jij beslist per item. Dit venster is vertaald: in het Nederlands heet het „Speicher verwalten" (Nederlandse app-vertaling), de beide kop-knoppen heten „Toon in Finder" en „Vernieuwen", de rij-knoppen „Toon in Finder" en „Naar de prullenbak". De Engelse namen in de items hieronder zijn de benamingen uit de Engelse versie.

Wanneer de schijf vol raakt. Vooral de logs stapelen zich op (een JSONL per trainingspoging, plus de _qualityMetrics.json); de exports natuurlijk ook (PLY 100% ruwe data, één per export). Ook handig na een crash, wanneer de imports-staging-map nog oude kopieën van de invoerafbeeldingen bevat.

W7Knop „Show in Finder"

WAAR

Header rechtsboven in het Storage Browser-venster.

TECHNISCH

Opent de RadianceKit-datamap in Finder — precies de map waarvan de inhoud in dit venster wordt weergegeven. Zo zie je de mapstructuur (Logs, Exports, Scenes, Captures, Imports) direct en kun je de bestanden ook zelf met Finder verplaatsen of kopiëren. De actie opent een nieuw Finder-venster; de lijst in het venster verandert daardoor niet mee — daarvoor is „Refresh" (W8) bedoeld.

W8Knop „Refresh"

WAAR

Header, naast de Finder-knop.

TECHNISCH

Start een achtergrond-scan die draait op een door de gebruiker gestarte asynchrone taak, zodat het scannen van grote mapstructuren de UI niet blokkeert. Het eigenlijke doorlopen gaat elke bekende submap (Logs, Exports, Scenes, Captures, Imports) langs en genereert per direct onderliggend item een storage-item. Per item wordt de recursieve grootte bepaald — bij voorkeur het werkelijke schijfgebruik (inclusief APFS-hardlinks-sharing) met terugval op de logische bestandsgrootte.

W9List (Storage-items)

WAAR

Hoofdinhoud onder de header.

TECHNISCH

Lijst met per rij deze indeling: categorie- specifiek SF Symbol-icoon (document voor Logs, upload-pijl voor Exports, kubus voor Scenes, iPhone voor Capture-bundels, tray voor Imports), naam + ondertitel (Kind-label + geformatteerde wijzigingsdatum), byte-teller rechts (rechts uitgelijnd, monospaced), Reveal-knop (loep-symbool), Trash-knop (prullenbak). Sortering: primair op Kind (Scenes eerst, dan Exports, Logs, Captures, Imports, Other), secundair op wijzigingsdatum aflopend (nieuwste bovenaan). Als de scan nog loopt, toont deze plek in plaats daarvan een „Scanning…"-voortgangsindicator. Als er niets gevonden is, verschijnt een lege-status-weergave met tray-icoon.

W10Rij-knop „Reveal in Finder"

WAAR

Per rij, loep-symbool rechts.

TECHNISCH

Opent Finder en selecteert het specifieke item (bestand of map). Verschil met W7: W7 opent de hoofdmap; W10 markeert precies dit ene item. Praktische workflow: identificeer een groot item, klik op de loep, kopieer het bijvoorbeeld daarna naar een extern volume.

W11Rij-knop „Move to Trash"

WAAR

Per rij, prullenbak-symbool rechts naast de loep.

TECHNISCH

Activeert het bevestigingsdialoogvenster (W12). Pas na bevestiging wordt de macOS-standaardactie „naar de prullenbak verplaatsen" uitgevoerd (dus omkeerbaar, geen directe verwijdering). Na succesvol verplaatsen naar de prullenbak wordt het item uit de lijst verwijderd en de totale byte-teller bijgewerkt. Bij fouten verschijnt een modaal foutdialoogvenster.

W12ConfirmationDialog (verwijderbevestiging)

WAAR

Wordt geactiveerd door W11, weergegeven als macOS-sheet.

TECHNISCH

Standaard bevestigingsdialoogvenster met dynamische titel „Delete <name>?" en een berichtregel die expliciet vermeldt dat het item in de prullenbak terechtkomt en van daaruit hersteld kan worden (totdat de prullenbak geleegd wordt). Twee knoppen: „Move to Trash" als destructieve actie (rood weergegeven) en „Cancel" met automatische Esc-koppeling. Het dialoogvenster is non-modaal in die zin dat het alleen dit venster blokkeert, niet de hele app — dat is macOS-standaard voor omkeerbare verwijderingen.

Pareto Dashboard (W13–W22)

Pareto Dashboard — leerer Zustand vor Report-Import
Pareto Dashboard — lege staat vóór het importeren van rapporten

Lege staat (na eerste keer openen) — Empty-State met Call-to-Action „Open Reports Folder…". De datapunten verschijnen zodra trainingsrapporten geladen zijn, zie volgende afbeelding.

Pareto Dashboard mit 384 geladenen Benchmark-Reports — Gaussians vs PSNR mit Pareto-Front, Scene/Strategy/Mip-Filter
Pareto Dashboard met 384 geladen benchmarkrapporten — Gaussians vs PSNR met Pareto-front, Scene/Strategy/Mip-filter

De koptoolbar toont rechts „384 reports of 384" (alle rapporten in de gekozen map zijn succesvol geparst); links naast de knop „Open Reports Folder…" staat de naam van de geladen map, hier „Benchmarks". Assen: X-Axis-picker op Gaussians, Y-Axis-picker op PSNR (dB), daarnaast het actieve vinkje „Show Pareto Front". Legenda linksboven: blauw = mcmc, groen = classic, oranje = hybrid, plus de symboolvorm voor Mip-Splatting On/Off. De gestippelde Pareto-front-lijn loopt langs de best behaalde PSNR-waarden en vlakt af rond PSNR≈30 dB vanaf ca. 300K Gaussians; de puntenwolk loopt door tot ruim 1,5 miljoen Gaussians. Filter-chips rechts: meer dan 30 scenes (o.a. bicycle, bonsai, family, flowers, garden, kitchen, stump, truck en de doorgenummerde 360-, drone- en photo-testreeksen), 3 strategies (classic, hybrid, mcmc), 3 Mip-Splatting-opties (All, On, Off) met „All" actief. Op dit moment is er geen scene- of strategy-filter ingesteld, vandaar de dichte puntencluster.

Wat het is: Een multi-run-vergelijkingstool. Je hebt in het verleden meerdere scenes getraind of dezelfde scene met verschillende presets — uit een benchmarkanalyse ontstaat per trainingsrun een JSON-rapportbestand dat onder andere Final-PSNR, SSIM, LPIPS, Gaussian-count en wallclock-tijd bevat. Een schakelaar voor deze analyse is er niet in de interface; het dashboard analyseert wat al als rapport in de gekozen map staat. Het leest een hele map met dergelijke rapporten tegelijk in en plot ze als 2D-scatter met selecteerbare assen. Daarnaast wordt de Pareto-front (de verzameling niet-gedomineerde punten) als gestippelde lijn ingetekend.

Nadat je minstens drie of vier trainingsrapporten hebt aangemaakt. Met minder punten is de frontier-lijn niet betekenisvol. Typische use-case: je hebt geprobeerd een outdoor-scene te reconstrueren en hebt achtereenvolgens P3 Balanced (Classic), P4 Quality (Classic), P8 Quality (MCMC) en P9 Drone / Aerial doorlopen — nu wil je weten welke configuratie de beste PSNR per seconde trainingstijd oplevert of welke de minste Gaussians nodig heeft voor een gegeven PSNR.

Beide assen zijn vrij te kiezen (X-as: Gaussians, trainingstijd, PSNR, SSIM, LPIPS, …; Y-as evenzo). De Pareto-front-berekening weet voor elke metriek of „kleiner = beter" (LPIPS, Gaussians, Training Time, BRISQUE) of „groter = beter" (PSNR, SSIM, FSIM, MS-SSIM) — de lijn loopt dus afhankelijk van de askeuze van linksonder naar rechtsboven of van linksboven naar rechtsonder, altijd langs de best behaalde combinatie. Een punt is Pareto-optimaal als GEEN ander punt in BEIDE dimensies minstens even goed is (dus geen ander punt domineert het). Pareto-optimale punten liggen op de lijn, andere punten rechts/erboven (afhankelijk van de asoriëntatie) daarvan. Punten OP de lijn zijn de echte kandidaten voor „beste preset"; punten VER van de lijn zijn verspilde trainingstijd.

Je kunt de selectie beperken tot een bepaalde scene (bijvoorbeeld als je alleen outdoor-runs wilt vergelijken), tot een bepaalde strategie (classic, hybrid of mcmc), of tot Mip-Splatting aan/uit (Mip-Splatting is een optionele instelling voor gevorderden, daarom loont de directe vergelijking).

Je hebt drie rapporten voor de „truck"-scene in een reports-map: Run A (P4 Quality (Classic), 524K Gs, 105 s, PSNR 23.4), Run B (P8 Quality (MCMC), 150K Gs, 693 s, PSNR 24.6), Run C (P5 Ultra Detail, 1.25M Gs, 312 s, PSNR 25.8). Zet X-as op Training Time, Y-as op PSNR. Run B ligt rechtsboven, Run C nog verder rechtsboven, Run A linksonder. De Pareto-front verbindt A en C — beide niet-gedomineerd. Run B is „lost" (C is beter in zowel Time als PSNR). Inzicht: voor „truck" loont de MCMC-weg niet; ofwel snel+ok (A) ofwel lang+zeer goed (C). Configuratie van C als eigen preset opslaan (Inspector → I1 Save Preset).

Volgende actie: Beste configuratie als preset opslaan. Concreet: bekijk de Pareto-punten (hover toont PSNR/SSIM/LPIPS/Gs/Time in de tooltip), bepaal welke het beste bij jouw Time-vs-Quality-afweging past, open het bijbehorende rapport (bestandsnaam bevat run-timestamp), kopieer de bijbehorende trainingsconfiguratie naar een nieuwe run of sla deze na de volgende trainingssessie als preset op via de Inspector.

W13Knop „Open Reports Folder…"

WAAR

Toolbar linksboven.

TECHNISCH

Opent een mapkeuzedialoog met de vraag „Select a folder containing benchmark .json reports". Na bevestiging loopt een achtergrondtaak die alle .json-bestanden in de map sequentieel parst. Foutieve rapporten (kapotte JSON, verkeerd schema) worden verzameld en onderaan in de sidebar getoond als „N file failed to parse" — geen crash. Als er een tweede keer wordt geklikt terwijl een eerste load nog loopt, wordt de vorige taak geannuleerd, zodat niet twee resultaten tegelijk in de state schrijven.

De gekozen map wordt niet permanent onthouden: na het openen van het venster via Help → Pareto Dashboard… (⇧⌘D) kies je hem hier opnieuw. De naam van de geladen map verschijnt daarna rechts naast de knop.

W14Picker „X-Axis"

WAAR

Boven de grafiek, links.

TECHNISCH

Menu-picker met alle beschikbare metriek-assen van de dashboard-module (PSNR, SSIM, LPIPS, Gaussian-count, trainingstijd enzovoort). Standaard is Gaussian-count. Bij het wisselen wordt het gehoverde punt gereset, omdat een tot dan toe gemarkeerde positie in het oude assenstelsel na een aswissel geen zin meer heeft. De picker heeft een beperkte breedte, zodat hij niet over de volledige breedte doorloopt.

W15Picker „Y-Axis"

WAAR

Boven de grafiek, naast X-Axis.

TECHNISCH

Identiek aan W14, alleen is het standaard PSNR. De askeuze wordt onafhankelijk opgeslagen, dus de gebruiker kan ook onzinnige combinaties kiezen (X=PSNR, Y=PSNR — zou alle punten op een diagonaal gooien). Zulke combinaties worden echter niet tegengehouden; bewuste keuze, omdat een vergelijking „SSIM vs PSNR" best interessant is om te zien hoe consistent de metrieken zich gedragen.

W16Toggle „Show Pareto Front"

WAAR

Rechts naast de as-pickers.

TECHNISCH

Een aanvinkvakje, standaard aangevinkt. De Pareto-front wordt naast de puntenwolk als lijn over de grafiek gelegd — gestippeld (streeppatroon 4–4), grijs halftransparant, lijndikte 1,5 pt. Let op: In de uitgeleverde versie heeft het vinkje geen effect op de grafiek — de front-lijn wordt altijd getekend, aangevinkt of niet. De front wordt bij elke aswissel en na elke filterwijziging opnieuw bepaald.

W17Chips „Scene"-filter

WAAR

Rechter sidebar in het dashboardvenster.

TECHNISCH

Filter-chips voor elke scene die in de geladen rapporten voorkomt. Eigen flow-layout dat chips automatisch over meerdere regels verdeelt zodra de breedte vol is. Actieve chips krijgen de accentachtergrond, inactieve een neutrale standaard-materiaalachtergrond. Meervoudige selectie is mogelijk (set-semantiek); als geen chip geselecteerd is, gelden alle scenes als „doorgelaten" — d.w.z. de set-logica is „lege selectie = alles", niet „lege selectie = niets".

W18Chips „Strategy"-filter

WAAR

Onder scene-filter in de sidebar.

TECHNISCH

Precies zoals W17, maar voor trainingsstrategieën — doorgaans de drie waarden „classic", „hybrid" en „mcmc", afgeleid uit het strategy-veld van de benchmarkrapport-JSON's. Handig wanneer je rapporten van meerdere strategieën gemengd hebt en slechts één soort wilt zien (bijv. „alleen MCMC-runs tonen, want ik heb Classic al uitgesloten").

W19Chips „Mip-Splatting"-filter

WAAR

Onder strategy-filter in de sidebar.

TECHNISCH

Drie-waardige filter (in plaats van set zoals W17/W18): „All" / „On" / „Off". Achtergrond: Mip-Splatting is een multi-schaal-uitbreiding die afhankelijk van de scene wel of niet helpt — daarom blijft het een bewust in te schakelen instelling en geen standaard. Als je Mip-on/off-vergelijkingen maakt, wil je vaak heel scherp kunnen scheiden. Vandaar de speciale ternaire filter met de statussen „alles doorlaten", „alleen Mip aan", „alleen Mip uit". De sidebar-sectie verschijnt zodra de geladen set überhaupt rapporten bevat — dus praktisch altijd; hij verdwijnt alleen als er helemaal niets geladen is.

W20ChipButton (filter-toggle, all/on/off)

WAAR

Helper-component, wordt gebruikt in W17/W18/W19.

TECHNISCH

Minimalistische button-wrapper. Inhoud: label- tekst met caption-lettergrootte en padding 10 horizontaal / 5 verticaal. Achtergrond conditioneel: indien actief → app-accentkleur met witte tekst; anders neutrale standaard-materiaalachtergrond met de normale tekstkleur (past zich aan licht en donker uiterlijk aan). Vorm is een capsule (pilvormig). Plain-buttonstyle, zodat het capsule- materiaal niet door een systeemrand wordt overlapt.

W21Chart (Pareto-scatter)

WAAR

Middenvlak van het dashboard.

TECHNISCH

Swift-Charts-diagram met twee lagen: 1. een punt per rapport — positie op basis van de gekozen X- en Y-metrieken, kleur naar strategy, symbool naar Mip-status. Symboolgrootte normaal 80, gemarkeerd 200 (als de ID overeenkomt met het momenteel gehoverde rapport). 2. een lijn voor de Pareto-front (zie W16 — deze wordt altijd getekend). Daarnaast toont het net gehoverde punt de scenenaam als kleine capsule erboven.

Chart-overlay: een transparante rechthoek registreert muisbeweging; per frame wordt de euclidisch dichtstbijzijnde puntpositie in het plot-frame bepaald en het gehoverde rapport bijgewerkt, mits de afstand onder 24 px ligt (anders gereset). Zo krijg je de tooltip zonder te klikken — hoveren volstaat.

W22Tooltip (hover-detail)

WAAR

Onder de grafiek, verschijnt bij hover.

TECHNISCH

Horizontale stack: scenenaam (headline), strategy-tag (caption), scheidingslijn, dan PSNR/SSIM/LPIPS/Gs/Time-metrieken elk in een kleine verticale groep (label + monospaced waarde). Als Mip actief was, bovendien een „Mip"-capsule-tag in accentkleur. Achtergrond halftransparante blur, afgerond rechthoek met 8 pt radius. Wordt alleen getoond als de muis daadwerkelijk boven een punt staat. Verdwijnt automatisch bij het verlaten.

Holdout Analysis (W23–W29)

Holdout Analysis — lege toestand vóór het laden van een transforms.json
Holdout Analysis — lege toestand vóór het laden van een transforms.json

Lege toestand met Empty-State en Call-to-Action „Open transforms.json…". Accepteert het NeRF-Studio- en Instant-NGP-formaat. De camera-markers verschijnen zodra een transforms.json geladen is — zie de volgende afbeelding.

Holdout-Globe met 86 camera's, 5 folds, Angular-strategie actief
Holdout-Globe met 86 camera's, 5 folds, Angular-strategie actief

Header toont het geladen bestand (transforms.json) en het aantal camera's („86 cameras"). Linker sidebar: Strategy-picker met twee opties — Angular (longitudinal) actief (sorteert de camera's op hun lengtehoek rond de baan en verdeelt ze vervolgens beurtelings over de folds) vs Linear (round-robin) (dezelfde beurtelingsverdeling, maar op basis van beeldvolgorde in plaats van kijkhoek). De k-Folds-schuifregelaar staat op 5, de Test-Fold-picker op Fold 1. De Export-knop genereert een fold-assignment.json voor verder gebruik in externe evaluatie-tools. Middenpaneel: 3D-Globe-projectie van alle 86 camera's, verdeeld over de hele bol — groene punten = train, rode punten = huidige test-fold (Fold 1 met 18 camera's). Rechter sidebar (Angular Correlation): per fold het aantal camera's + Mean Nearest Angle (Fold 1: 18 cams / 8,5°, Fold 2: 17 / 6,1°, Fold 3: 17 / 6,2°, Fold 4: 17 / 6,7°, Fold 5: 17 / 6,4°) — een kleinere waarde betekent dat elke test-camera een nabijgelegen trainingscamera heeft, waardoor de test makkelijker is.

Wat het is: Een 3D-visualisatietool voor jouw camera-opstelling met cross-validation-logica. Je laadt een transforms.json (het standaardformaat van Nerfstudio / Instant-NGP voor camera-poses), de app leest alle camera's uit, projecteert hun kijkrichtingen op een eenheidsbol en toont ze als kleine bolvormige markers op een virtuele globe. Vervolgens verdeelt de app de camera's in k folds (volgens de gekozen strategie: angular of linear), markeert het trainingsdeel groen en het testdeel (holdout) rood, en berekent per fold een Angular-Correlation-Score, die je vertelt hoe ver de test-fold qua kijkhoek van de trainings-fold verwijderd ligt.

Als je een holdout-evaluatie wilt uitvoeren — dus: hoe goed generaliseert je model naar ongeziene kijkhoeken? De standaard tijdens training is „every-8th view als holdout" (Mip-NeRF360-conventie), maar dat is een erg lineaire verdeling. Als je afbeeldingen bijvoorbeeld tijdgeclusterd zijn (eerst de ene kant van het object, dan de andere), dan is „every-8th" niet representatief — een willekeurige positie in de reeks komt in de test terecht, maar al haar buren zitten in de training, dat is te makkelijk. Met „angular" stratificeer je in plaats daarvan over de kijkhoekruimte: elke fold bevat camera's uit alle delen van de baan, zodat de test echt generalisatiehiaten test.

Angular vs Linear: - Angular (standaard): sorteert alle camera's op hun lengtehoek (φ-coördinaat rond de Y-as) en verdeelt ze vervolgens beurtelings over de k folds — de eerste camera van de ring komt in Fold 1, de tweede in Fold 2, en na k camera's begint de cyclus weer van voren af aan. Voordeel: elke fold bevat camera's uit alle richtingen van de baan, gelijkmatig verdeeld over de ring. Goed voor klassieke orbit-opnames, omdat de verdeling dan niet meer afhankelijk is van de opnamevolgorde. - Linear (Round-Robin): dezelfde beurtelingsverdeling, maar op basis van de beeldpositie in plaats van de hoek (fold-index = image_index modulo k). Dit is de simpele „every-k-th"-verdeling. Werkt goed als de beeldvolgorde GEEN ruimtelijke bias heeft (bijv. willekeurig gesorteerde drone-opnames). Werkt slecht als de beelden tijdgeclusterd zijn — dan liggen naburige frames in verschillende folds en wordt de test te makkelijk.

In de 3D-globe zie je meteen: groene punten (training) en rode punten (test). Als de rode punten allemaal in één hoek clusteren, is de holdout slecht (geen goede generalisatietest). Als ze gelijkmatig tussen de groene liggen, is hij goed. De Angular-Correlation-Score per fold (rechter sidebar, in graden) vertelt bovendien: kleinere waarde = de test ligt dicht bij de training (elke test-camera heeft een nabijgelegen trainingscamera, makkelijkere test); grotere waarde = de test ligt ver van de training (moeilijkere generalisatie).

Je hebt je Truck-scene opgenomen met 251 afbeeldingen, exporteert via menu-item M33 (Export SfM transforms.json) een nerfstudio-bestand. Open het Holdout-venster (⇧⌘H), laad de JSON via „Open transforms.json…", bekijk de globe. k=5 (standaard) geeft je 5 folds. Klik op „Fold 3" — kijk of de rode markers redelijk gelijkmatig verdeeld zijn. Zo ja: „Export fold-assignment.json". Het geëxporteerde bestand is bedoeld voor externe evaluatie-tools (Nerfstudio, Instant-NGP); RadianceKit zelf leest het niet opnieuw in en traint nog steeds tegen zijn eigen holdout-standaard „every-8th". Het venster dient hier dus om te beoordelen of jouw camera-set überhaupt een eerlijke test toelaat.

W23Knop „Open transforms.json…"

WAAR

Werkbalk linksboven.

TECHNISCH

Opent een bestandskeuzedialoog die beperkt is tot JSON-bestanden. Na bevestiging laadt de Holdout-module het bestand. De loader parseert zowel het nerfstudio-formaat (camera-intrinsics plus lijst van frames met beeldpad en transformatiematrix) als het instant-ngp-formaat (dezelfde opbouw). Per frame wordt de kijkrichting uit de transformatiematrix geëxtraheerd (z-as van de lokale camerabasis) en opgeslagen. Als het parsen mislukt, verschijnt er een melding in de linker sidebar — maar alleen als daar al eerder een scene geladen was; bij de allereerste poging blijft het venster in de lege toestand zonder zichtbare melding.

Het geladen bestand wordt niet permanent onthouden: na het openen van het venster via Help → Holdout Analysis… (⇧⌘H) kies je het hier opnieuw uit. De naam ervan verschijnt daarna rechts naast de knop.

W24Picker „Strategy" (angular/linear)

WAAR

Linker sidebar, bovenaan.

TECHNISCH

Radio-picker met twee opties: Angular en Linear. Het wisselen van strategie triggert automatisch een herberekening van de folds. De kijkrichtingen zijn een lijst van 3D-eenheidsvectoren op de sfeer; de Angular-strategie sorteert ze op hun lengtehoek φ en wijst ze vervolgens beurtelings aan de folds toe, de Linear-strategie doet dezelfde beurtelingstoewijzing op basis van de frame-index en negeert de geometrie volledig. Beide strategieën genereren daarom even grote folds; ze verschillen alleen in waarop vooraf gesorteerd wordt.

W25Schuifregelaar „k Folds"

WAAR

Linker sidebar, in het midden.

TECHNISCH

Schuifregelaar van 3 tot 10, stapgrootte 1. Bij wijziging wordt de fold-berekening automatisch opnieuw gestart, zodat de folds-lijst, de train/test-indices en de per-fold-score meteen opnieuw berekend worden. De gekozen waarde wordt als monospaced-cijfertekst rechts naast het label weergegeven.

Vuistregel: k=5 is standaard (geeft je 20% test per fold, dat is gebruikelijk voor cross-validation). k=10 als je heel veel data hebt en meer folds nodig hebt voor statistische zeggingskracht. k=3 als je weinig data hebt.

W26Picker „Test Fold"

WAAR

Linker sidebar, onder de k-schuifregelaar.

TECHNISCH

Menu-picker. Deze toont precies zoveel items als er folds ingesteld zijn, gelabeld van „Fold 1" tot „Fold N". Als de eerder gekozen index ≥ k is (bijv. omdat je k van 10 naar 5 hebt verlaagd), wordt deze automatisch teruggezet naar 0. De gekozen test-fold wordt in de globe rood weergegeven, alle andere groen.

W27Knop „Export fold-assignment.json"

WAAR

Linker sidebar, onderaan.

TECHNISCH

Opent een opslaandialoog met standaard bestandsnaam fold-assignment.json. Na bevestiging codeert de Holdout- module de huidige verdeling in een JSON-schema (per-frame fold- toewijzing plus strategy-meta-blok). Het bestand is bedoeld voor externe evaluatie-tools — RadianceKit leest het niet opnieuw in. De knop is uitgegrijsd zolang er geen camera-bestand geladen is. Succes wordt gemeld als „Saved to (filename)", een schrijffout als „Export failed: …" — beide verschijnen op dezelfde plek onder de knop en beide in groene tekst, de kleur maakt dus geen onderscheid tussen de gevallen.

W28SCNView (3D Camera Globe)

WAAR

Middenpaneel in het Holdout-venster.

TECHNISCH

SceneKit-globe-view. De scene bestaat uit: een wireframe-bol (straal 1.0, 36 segmenten, donkergrijs), drie gekleurde asstompjes (rood/groen/blauw voor X/Y/Z, elk 1.2 lang), en per camera een kleine markerbol (straal 0.03) op de bijbehorende kijkrichtingspositie op de eenheidsbol (net erbuiten, zodat deze niet IN de wireframe-bol verdwijnt). De markers worden bij elke fold-wijziging NIET opnieuw opgebouwd — een rebuild is alleen nodig wanneer de framelijst verandert (dus wanneer een nieuwe JSON geladen wordt). In plaats daarvan loopt er per update een in-place-update van de materiaal- kleuren: rood voor test-indices, groen voor training, lichtgrijs indien geen van beide van toepassing is. Zo blijven schuifregelaar-ticks performant, zelfs bij N > 1000 camera's.

De camerabesturing is ingeschakeld — je kunt met de muis de globe draaien, zoomen, pannen. Belichting zorgt ervoor dat de markers niet plat ogen. De achtergrond is donkergrijs.

W29FoldCard (Tap to Select Fold)

WAAR

Rechter sidebar, sectie „Angular Correlation".

TECHNISCH

Per fold een kaart-view — afgerond rechthoek met een straal van 6 pt, padding 10, verticale layout met twee regels (boven „Fold N" + aantal camera's, onder „Mean nearest angle:" + waarde in graden). Achtergrondkleur conditioneel: actieve fold = accentkleur halftransparant, inactieve = neutraal standaardmateriaal. Tikken selecteert de fold, en de globe kleurt live om.

De „Mean nearest angle"-score is de gemiddelde kleinste hoek per test-camera tot de dichtstbijzijnde trainingscamera (intern berekend in radialen, in graden weergegeven in de UI).

BayesOpt Console (W30–W39)

BayesOpt-console — lege staat vóór Trial-start
BayesOpt-console — lege staat vóór Trial-start

Lege staat met Search-Space-Picker (RadianceKit defaults (6-dim)), Trial-Budget-Slider (standaard 40), Random-Seed (42) en drie lege panelen voor Convergence-Chart, Trial Log en Search-Space-Parameter-Lijst. Convergence-Chart en Trial-tabel vullen zich zodra een Run gestart is — zie volgende afbeelding.

BayesOpt-console na 40 trials — Convergence-Chart stijgt steil tot Trial 13, Best Value 0.9943, Trial Log met init/bo/restart-tags
BayesOpt-console na 40 trials — Convergence-Chart stijgt steil tot Trial 13, Best Value 0.9943, Trial Log met init/bo/restart-tags

Status rechtsboven „Finished — best 0.9943 after 40 trials", ernaast de knop „Save Best Config"; linksboven de knop „Start". Linkerzijbalk: Search-Space-Picker op RadianceKit defaults (6-dim), Trial-Budget 40, Random Seed 42. Parameterlijst toont de zes af te stemmen hyperparameters met hun waardebereiken: mipSmoothing3DScale [0.05, 0.5], mipFilter2DVariance [0.1, 0.6], densifyGradThreshold [5e-07, 5e-06], ssimWeight [0.05, 0.5], mcmcNoiseScale [1e-05, 0.0001], mcmcRelocationInterval [50, 200]. Midden: Convergence-Chart „Convergence (best value so far)" (X = Trial-index 0–40, Y = Objective Value 0–1) — blauwe punten = initiële samples, groene punten = BayesOpt-acquisitie, oranje punten = restart-trials (#22 met 0.5303 en #31 met 0.4885). De blauwe beste-waarde-lijn stijgt steil tot Trial ~5, daarna slechts marginale verbetering tot Trial ~13, vanaf daar een vlak plateau nabij 1.0. Rechterzijbalk: Trial-log, hier gescrold naar de trials #8–#36, met score + tag (init/bo/restart). Save-Best-Config-knop rechtsboven schrijft bayesopt-best.json.

Wat het is: Een Bayes-optimalisatieconsole voor hyperparameter-zoektochten. Bayes-opt is een automatische methode die probeert met zo weinig mogelijk experimenten het optimale punt van een onbekende functie te vinden — typisch: „welke combinatie van Gaussian-bovengrens, SSIM-gewicht en densify-drempel levert de beste PSNR voor mijn scèneklasse op?" In plaats van een grid van 6^4 = 1296 trials probeert Bayes-opt ongeveer 40–100 geïnformeerde trials en komt daarmee dicht bij het optimum.

Belangrijk: De huidige, in de app uitgeleverde versie voert de optimalisatie niet uit tegen echte trainingsruns (dat zou dagen duren), maar tegen een synthetische demo-objective — een multimodaal landschap met een hill-climbing-karakter plus lichte ruis. Dat is met opzet zo: het venster moet je het gedrag van de optimalisator laten zien (convergentieverloop, samplepunten, best-so-far) en je de search-space-definities laten begrijpen. Voor echte, trainingsgedreven BayesOpt-runs (zoals gebruikt bij de ontwikkeling van de meegeleverde presets) wordt een aparte evaluatieweg buiten de app gebruikt; het venster is de live-variant om naar te kijken.

Drie toepassingen: 1. Je wilt begrijpen hoe BayesOpt werkt — start dan een demo-run en observeer de convergence-chart. 2. Je plant een nieuwe scèneklasse (bijvoorbeeld „aquaria" of „antieke meubels"), waarvoor de vijftien ingebouwde presets niet perfect passen. Definieer mentaal een zoekruimte, test deze hier met „Bowl demo (1-dim)" of „densify-until + ssim-weight + grad-thresh", exporteer vervolgens de best-config als JSON en gebruik deze als startpunt voor een echte trainingsrun. 3. Je wilt de meegeleverde standaard-zoekruimtes (Mip-subset, RadianceKit Defaults) inspecteren — die worden opgelijst in het parameterpaneel van de linkerzijbalk.

- Convergence-Chart (middelste kolom): Y = beste tot dusver bereikte objective-functiewaarde. X = Trial-index. Aanvankelijk sterk stijgend (BayesOpt probeert de initiële samples willekeurig, sommige daarvan zijn gelukkig), daarna steeds vlakker, omdat de bijna-optimum-regio is uitgeput. Als de lijn 20+ trials lang vlak blijft, kun je de run stoppen — verdere trials leveren niets meer op. De individuele punten in de chart zijn de individuele trial-waarden (dus niet „best so far"), gekleurd naar fase: blauw = initial sample, groen = bayesopt acquisition, oranje = restart. - Trial-tabel (rechterkolom): #1, #2, #3, … elk met waarde en fase-tag. De tot dusver beste trial is gemarkeerd met een gele ster. Uit de tabel kun je de beste trial identificeren en de parameterwaarden ervan later bij de export bekijken. - Search-Space-Inspector (linkerzijbalk): toont voor de gekozen preset alle parameternamen en hun zoekbereiken [lo, hi]. Als je bij de preset „RadianceKit defaults (6-dim)" staat, zie je bijvoorbeeld „densifyGradThreshold [5e-7, 5e-6]" — dus log-uniform tussen deze twee waarden.

Kies de preset „RadianceKit defaults (6-dim)", Trial-Budget 40, Seed 42. Klik op „Start". Observeer: de eerste 8 trials zijn blauw (initiële samples, Latin-Hypercube), de volgende zijn groen (BayesOpt-geacquireerd). De convergence-chart stijgt steil tot Trial ~13, daarna vlakt hij af. Bij Trial ~30–40 stabiliseert de beste waarde zich. Klik op „Save Best Config" — een bayesopt-best.json wordt opgeslagen met de presetnaam, trial-index, waarde en de gedecodeerde parameterwaarden. Deze JSON kun je vervolgens handmatig in je preset-definitie overnemen.

W30Knop „Start"

WAAR

Werkbalk links, in de Idle/Finished-status.

TECHNISCH

Zet de trial-lijst terug, wisselt naar de Running-status, genereert een nieuwe Run-ID (voor stale-detectie bij meerdere start-klikken) en creëert een frisse pause-gate. Vervolgens start een achtergrondtaak, die de optimalisator als asynchrone stream uitvoert. Het aantal initiële samples groeit mee met het budget, maar maximaal tot 8 — dus doorgaans 8 Latin-Hypercube-samples vanaf een budget van 28, minder bij een kleiner budget. Trial-updates worden incrementeel ontvangen en aan de lijst toegevoegd. Stale-run-bescherming: als ondertussen een tweede start-klik de Run-ID opnieuw instelt, worden updates uit de oude run verworpen.

Primary-action-stijl voor de prominente knop-look.

W31Knop „Pause"

WAAR

Werkbalk links, in de Running-status.

TECHNISCH

Zet de pause-gate actief en wisselt naar de Paused-status. Het eigenlijke effect: de runner wacht in een 50-ms-polling-loop voordat hij de volgende objective-functie evalueert. Dat betekent dat een lopende trial wordt afgemaakt (het is immers synthetisch en duurt slechts microseconden), maar geen nieuwe trial wordt gestart. Zodra Resume loopt, gaat het verder waar het gebleven was.

W32Knop „Stop"

WAAR

Werkbalk links, in de Running- en Paused-status.

TECHNISCH

Breekt de runner-taak af, zet de referentie op nul, lost de pause-gate op (indien nog gepauzeerd), en wisselt naar de Finished-status (als er trials bestaan) of Idle-status (als er geen zijn). De reeds berekende trials blijven zichtbaar in de lijst — Stop verwijdert ze niet. Destructieve knoprol toont de knop in rood, omdat hij de run afbreekt.

W33Knop „Resume"

WAAR

Werkbalk links, in de Paused-status.

TECHNISCH

Lost de pause-gate op en wisselt terug naar de Running-status. De runner-taak loopt al (hij wacht immers in de polling-loop); zodra de loop merkt dat de pauze is opgeheven, gaat hij verder en start de volgende trial.

W34Knop „Save Best Config"

WAAR

Werkbalk rechts, altijd zichtbaar (maar grijs, zolang nog geen beste run beschikbaar is).

TECHNISCH

Opent een opslaandialoog met standaard bestandsnaam bayesopt-best.json, beperkt tot JSON. Na bevestiging wordt een payload-dictionary gebouwd: presetnaam, trial-index, waarde (objective-score), parameters (dictionary van gedecodeerde parameter- namen → waarden). De decodering projecteert de genormaliseerde zoekruimte-coördinaten in [0,1]^d terug naar het oorspronkelijke waardebereik (met log-uniform/lineaire/integer-schalen naargelang). JSON-output is pretty-printed en met gesorteerde keys. Bij schrijffouten wordt (in de huidige demoversie) stilzwijgend genegeerd — geen error-UI, omdat dit een demo-pad is.

De knop blijft grijs, zolang er geen trial gelopen heeft.

W35Picker „Search Space"-preset

WAAR

Linkerzijbalk, bovenaan.

TECHNISCH

Menu-picker met vier preset-opties: - „RadianceKit defaults (6-dim)" — de volledige standaard-zoekruimte met alle zes standaard-hyperparameters. - „Mip subset (2-dim)" — alleen mipSmoothing3DScale [0.05, 0.5] log-uniform en mipFilter2DVariance [0.1, 0.6] lineair. Nuttig als je Mip-Splatting voor een scèneklasse wilt afstemmen. - „densify-until + ssim-weight + grad-thresh" — drie densify-relevante parameters (densifyGradThreshold log-uniform, ssimWeight lineair, densifyUntilIter integer). - „Bowl demo (1-dim)" — pedagogische single-parameter-zoekruimte voor „zo werkt BayesOpt"-demo's.

Terwijl een run actief is, kan de zoekruimte niet gewisseld worden (dat zou de optimalisator in de war brengen).

W36Slider „Trial Budget"

WAAR

Linkerzijbalk, onder de Search-Space-Picker.

TECHNISCH

Slider van 10 tot 200, stapgrootte 5. Standaard 40. Dat betekent: BayesOpt mag maximaal N trials uitvoeren. Daarvan zijn de eerste paar initiële samples (Latin-Hypercube), de rest zijn echte BayesOpt-trials. Vuistregels voor de praktijk: een zoekruimte met d dimensies heeft ongeveer tien- tot twintigmaal d aan trials nodig voor een goed optimum. Bij 6-dim defaults dus 60–120, bij 2-dim Mip-subset 20–40, bij 1-dim Bowl-demo 10–20.

Tijdens de run is de slider uitgeschakeld.

W37Slider „Random Seed"

WAAR

Linkerzijbalk, onder de Budget-Slider.

TECHNISCH

Slider van 1 tot 100, stapgrootte 1. Standaard 42. De seed wordt zowel aan de initiële Latin-Hypercube-samples als aan de ruis-component van de demo-objective doorgegeven. Reproduceerbaarheid: dezelfde seed + dezelfde zoekruimte + hetzelfde budget levert exact dezelfde trial-sequentie op. Nuttig voor „krijgen al je collega's dezelfde run als ze de demo nabouwen?". Tijdens de run uitgeschakeld.

W38Chart (Convergence)

WAAR

Middelste kolom van het venster.

TECHNISCH

Swift-Charts-diagram met twee lagen: 1. een lijn voor „best-value-so-far" per trial — een monotoon stijgende of gelijkblijvende curve in accentkleur. 2. een punt per trial met de individuele objective-waarde, gekleurd naar fase. Symboolgrootte 40. Drie fase-labels: „init" (blauw), „bo" (groen), „restart" (oranje).

Een kleine legenda toont de fasekleuren linksboven. Als de trial- lijst leeg is (vóór de eerste start), wordt in plaats daarvan een empty-state-weergave met chart-icoon en de melding „Press Start to begin a BayesOpt run." getoond.

W39Table (Trial Log)

WAAR

Rechterkolom van het venster.

TECHNISCH

Scrollgebied met lazy gestapelde trial- rijen. Per rij een horizontale stack: trial-nummer (3-cijferig monospaced, links), waarde (monospaced, rechts uitgelijnd, 70 pt breed), fase- tag (capsule, gevuld met 25% opaciteit — grijs voor „init", blauw voor „bo", oranje voor „restart"; dit zijn bewust andere kleuren dan de puntkleuren in de chart ernaast), optioneel een gele ster als deze trial op dit moment de beste is. Een auto-scroll-mechanisme springt automatisch naar het einde zodra een nieuwe trial erbij komt — zodat je het live-verloop onderaan het scherm kunt meelezen, zonder zelf te scrollen.

Hoofdvenster: verliesverloop en Gaussian-telling (I39–I41, kruisverwijzing)

Drie van de Inspector-weergaven in het hoofdvenster verdienen een eigen uitleg, omdat ze tijdens een lopende training voortdurend te zien zijn en er belangrijke vuistregels bestaan voor wanneer het verloop er gezond uitziet. De weergaven bevinden zich in de Inspector in de sectie Voortgang, in de uitklapbare groep Verliesverloop (zie hoofdstuk 2 — Inspector), en vullen de holdout-analyse uit het Aux-venster hierboven aan.

Wanneer is de loss-curve gezond? Een gezonde loss-curve toont drie fasen: (1) Warmup — de eerste 200–500 iteraties daalt de loss steil van hoog (typisch 0.15–0.25 voor gecombineerde L1+SSIM, afhankelijk van de scène) naar ongeveer de helft. Als de loss in deze fase NIET daalt, is meestal de invoer fout (afbeeldingen beschadigd, SfM-poses slecht, aantal initiële Gaussians te klein). (2) Densification — tussen ~500 en densifyUntilIteration (klassiek 15K, MCMC tot 20K of 25K) daalt de loss verder, vaak met kleine sprongen omlaag wanneer densify-operaties nieuwe Gaussians invoegen en de optimizer ze benut. De Gaussian-telling stijgt in deze fase. (3) Refinement — daarna loopt de loss in een steeds vlakker wordende staart. Typische eindwaarden ter oriëntatie: een goed verlichte objectscène (bijvoorbeeld Tanks-&-Temples Truck met P4 Quality) komt uit op L1 ≈ 0.023, ruime buitenscènes zoals die van Mip-NeRF 360 blijven van nature daarboven (0.04–0.07).

Wat betekent een plateau? Een plateau (loss-curve verloopt horizontaal over meerdere duizenden iteraties) heeft twee interpretaties: (a) het model is geconvergeerd, verder trainen levert niets meer op — dat is het goede geval. (b) het model zit vast (lokaal minimum, slechte gradiëntinformatie, een cap op de buffer-limiet) — het slechte geval. Beide zien er in de grafiek identiek uit. Onderscheid: kijk naar de Gaussian-telling. Als die ook vlak is EN dicht bij de MCMC-cap zit (bijv. 150K van 150K bij preset P8 Quality (MCMC)), zit je aan de limiet — ofwel de cap verhogen ofwel het plateau accepteren. Als de Gaussian-telling nog groeit, maar de loss niet daalt, zit je vast.

Wanneer afbreken versus doortrainen? Vuistregel: 10K iteraties lang geen verbetering van de min-loss → afbreken, verdere iteraties zijn verspild. Daarvoor: via het Training-menu → Continue Training → „+5,000 iterations" kun je nog een verlenging toevoegen, mocht je een marginale verbetering zien (daarvoor bestaat geen sneltoets). Let op: bij MCMC is het plateau vaak echt — de cap is de natuurlijke grens.

Een plateau in de Gaussian-telling is GEEN „klaar"-signaal. Het betekent alleen dat MCMC de cap heeft bereikt of dat Classic Densification is uitgeput. De echte „klaar"-vraag wordt pas beantwoord door PSNR/SSIM/LPIPS op een onafhankelijke testset — de cijfers daarvoor staan in de benchmarkrapporten die je in het Pareto Dashboard (W13–W22) analyseert. Het Holdout-venster (W23–W29) levert deze metrieken niet; het beoordeelt alleen of je camera-set überhaupt een eerlijke verdeling in trainings- en testperspectieven toelaat.

PSNR/holdout is de waarheid, loss slechts een proxy. De loss is een relatieve metriek: hij daalt terwijl je model zich aanpast aan de trainingsviews. Een lage loss betekent echter niet automatisch een goed model — als het model de trainingsafbeeldingen uit zijn hoofd heeft geleerd (overfitting), zou de loss klein zijn, maar de PSNR op ongeziene views (holdout) slecht. Kijk daarom voor de uiteindelijke kwaliteitsbeoordeling altijd naar holdout-metrieken, niet alleen naar de eind-loss.

Vuistregel-vak

- User Guide en Keyboard Shortcuts zijn statische hulp — bij vragen over losse begrippen snel, voor diepgang dit voorliggende manual gebruiken. - Manage Storage openen zodra de schijf onder 10% vrije ruimte komt. Logs en Imports-staging zijn de gebruikelijke boosdoeners. - Pareto Dashboard is pas zinvol na minstens drie of vier trainings-reports. X-as = kosten (Time / Gs), Y-as = kwaliteit (PSNR / SSIM). Pareto-front toont de efficiënte combinaties. - Holdout Analysis gebruiken voordat je PSNR-benchmarks met anderen publiceert — zo weet je zeker dat je testset echt representatief is. De geëxporteerde fold-verdeling is voor externe tools; RadianceKit blijft trainen tegen „every-8th". - BayesOpt Console is primair een leer- en inspectie-tool voor zoekruimte-definities — hij rekent tegen een demo-functie, niet tegen echte trainingsruns. - Loss-plateau en Gaussian-count-plateau moeten los van elkaar geïnterpreteerd worden. Cap-limiet is geen „klaar"-signaal. Echte kwaliteit meet je alleen aan Holdout-PSNR. - 10K iteraties zonder verbetering van de min-loss → training stoppen.