Brugervejledning

Kapitel 2 — Inspector (Expert View)

Eksperttilstand tom — Project Navigator til venstre (Images 0, Cameras, Log), tom viewport i midten, Inspector til højre med Presets/Training Configuration/Enhancements/Training Metrics-sektioner
Eksperttilstand tom — Project Navigator til venstre (Images 0, Cameras, Log), tom viewport i midten, Inspector til højre med Presets/Training Configuration/Enhancements/Training Metrics-sektioner

Tom Inspector før import: Venstre sidebar viser images-counter 0 og drop-hint „Drop images here / or tap + to import". Inspector til højre er fuldt funktionel, men presets er kun informative (ingen aktiv træning). Default-preset „Preview" (5K iters) er markeret. Camera Alignment på Apple Photogrammetry, Densification Classic, SSIM Weight 0.20, Render Scale 50 %. Empty-states i Training Metrics („Start training to see live metrics") og Loss History („Loss curve will appear during training").

Inspector med 60 flowers-billeder indlæst — image-sidebaren viser de første filnavne frame_0001.jpg ff, header „60 images ready”
Inspector med 60 flowers-billeder indlæst — image-sidebaren viser de første filnavne frame_0001.jpg ff, header „60 images ready"

Inspector efter import: Header-status „60 images ready". Image-sidebaren lister alle 60 importerede frames (frame_0001.jpg til frame_0945.jpg, hver 16. frame fra det 960-cam-buket-datasæt som subset til hurtige iterationer). Auto-render-scale-logikken tjekker billed-opløsningen (1536×2048 = 3.1 MP) og tilpasser Render Scale derefter. Play-knappen (grøn, nederst til venstre) er nu aktiv og starter træningen med den aktive preset.

Inspector mid-training — live-viewport viser flowers-buket-rekonstruktion, metrik-bar nederst (Loss / LR / Gaussian-Count / Iterationer), preset-card „Preview” med „Modified”-badge hvis parametre er ændret
Inspector mid-training — live-viewport viser flowers-buket- rekonstruktion, metrik-bar nederst (Loss / LR / Gaussian-Count / Iterationer), preset-card „Preview" med „Modified"-badge, hvis parametre er ændret

Inspector under træning: Titellinjen viser globalt fremskridt „RadianceKit — Training NN %". Viewporten rendrer den løbende gaussian-rekonstruktion i realtid (opdateret hver 50 iterationer — live-preview-interval kan justeres i Settings → General → Training → Live Preview). Metrik-bar under viewporten: aktuel loss, learning rate, gaussian-count og iterationer-counter (f.eks. 1.600/5.000 ved Preview-preset). Inspector-preset-card „Preview" bærer „Modified"-badge, så snart en parameter afviger fra den indbyggede default. Sidebaren „Log" indsamler SfM- og training-stage-events.

Inspector efter trænings-afslutning — viewporten viser færdig flowers-buket-rekonstruktion (2.991 gaussians efter 5K iterationer på 13 s), titellinje „Training Complete — 2.991 Gaussians”
Inspector efter trænings-afslutning — viewporten viser færdig flowers-buket-rekonstruktion (2.991 gaussians efter 5K iterationer på 13 s), titellinje „Training Complete — 2.991 Gaussians"

Inspector efter træning: Titellinjen viser endeligt gaussian-antal (her 2 991 — meget kompakt, fordi den syntetiske Blender-buket-scene på lys baggrund har enkel geometri). Viewporten viser den færdige punktsky — orbital drag-navigation aktiv (roterer omkring scenens midtpunkt). Training-Metrik-sektionen er nu fyldt med slutværdier, loss-history-charten viser forløbet af de samlede 5 000 iterationer. Eksport-sektionen nederst er nu aktiv (alle format-knapper enabled).

Inspectoren er den højre sidebar i Expert Mode (⌘2). Den samler alle træningsrelevante parametre i fem sammenklappelige sektioner: Presets, træningskonfiguration, Enhancements, metrikker og loss- diagram. Hver sektion kan klappes sammen ved klik på headeren, rækkefølgen kan omarrangeres via træk-og-slip (InspectorView.swift:81-97). Som standard er alle sektioner synlige, app-state gemmer klap- og rækkefølge-præferencerne på tværs af app-start.

En række betjeningselementer fra Inspectoren optræder også i næsten identisk form i indstillingerne (kapitel 3) — typisk SfM-backend, sky-masking og lignende defaults. Adskillelsen er bevidst: indstillingerne leverer den app-globale skabelon for nyligt oprettede projekter, Inspectoren overskriver disse værdier for det aktuelt åbne projekt. Den, der kender betjeningslogikken i den ene side, kan bruge den anden blindt.

Den venstre kolonne i Expert Mode — Project Navigator — hører ikke til Inspectoren, men er dens direkte nabo. Der kan importerede billeder vælges med klik, ses i Quick-Look med mellemrumstasten og slettes via minus-knappen eller delete-tasten (med Cmd-Z til at fortryde). Inspectoren følger det aktuelle sidebar-valg med kontekstspecifikke detalje-informationer, men de fem hovedsektioner forbliver altid synlige.

Presets-sektion (I1–I11)

Presets-sektionen er den hurtigste måde at anvende en afprøvet konfiguration. Indbyggede presets (Classic, MCMC, Scene-Class) leverer reproducerbare startpunkter fra 560+ dokumenterede eksperimenter; egne presets kan gemmes, eksporteres, importeres og deles. Listen er grupperet efter kategorier (Classic, MCMC, SceneClass, Custom), og mere end én kategori kan være foldet ud samtidigt. Via kontekstmenu-mekanismen (højreklik på en linje) er eksport, duplikering og — ved egne presets — sletning tilgængelig.

I1Save…-knap

HVOR

Inspector → Presets-sektion → Save…-knap (action-bjælke nederst).

TEKNISK

Åbner en popover med tekstfelt og save-/cancel-knapper. Den aktuelle TrainingConfig-tilstand persisteres som ny brugerdefineret preset (JSON-kodet, gemt på tværs af appen). Save- operationen kopierer alle 81 trænings-parametre plus den aktuelle densification-strategi. Presetet lander automatisk i kategorien Custom, uafhængigt af hvilken indbygget preset det blev afledt fra. Tomme navne og rene whitespace-input forkastes. Allerede eksisterende navne afvises ikke — hvert preset har sit eget interne ID, dobbelte navne er teknisk tilladt, men praktisk forvirrende.

I2Preset Name TextField

HVOR

Save-popover → tekstfelt „Preset Name".

TEKNISK

Simpelt tekstfelt med afrundet ramme, bred form. Værdien overtages som preset-navn ved klik på save-knappen. Ingen længdebegrænsning i UI'en, men det gemte navn skal være JSON-kodbart og visningsbart i UI-listerne — emoji og specialtegn fungerer. Indholdet nulstilles automatisk til en tom streng ved åbning af popoveren. Save-knappen forbliver deaktiveret, så længe feltet efter trim er tomt. Der er ingen auto-suggest og ingen forudfyldning med navnet på den aktuelt aktive preset.

I3Cancel-knap (save-dialog)

HVOR

Save-popover → Cancel-knap (til venstre).

TEKNISK

Lukker popoveren uden at gemme. Forkaster tekstfeltets indhold — ved næste åbning nulstilles det igen til tomt via save…-knap-logikken (I1). Standard button-stil, ingen bekræftelsesdialoger, ingen hotkeys. Den aktuelle TrainingConfig forbliver uændret, da save-stien slet ikke blev udført.

I4Save-knap (save-dialog)

HVOR

Save-popover → Save-knap (til højre, prominent stil).

TEKNISK

Udløser den egentlige persistering. Validerer endnu en gang ikke-tomt navn (defensiv check) og skriver derefter den aktuelle TrainingConfig som JSON ind i app-lageret. Lukker derefter popoveren. Blå fremhævet, grånet ud så længe tekstfeltet er tomt. Hvis gemningen mislykkes (f.eks. fordi app-lageret er fuldt — meget usandsynligt), er der i øjeblikket ingen synlig fejldialog; presetet ville så bare ikke optræde ved næste app-start.

I5Export…-knap

HVOR

Inspector → Presets-sektion → action-bjælke → Export…-knap.

TEKNISK

Eksporterer det aktuelt valgte preset som .radiancepreset-fil (internt JSON). Deaktiveret, hvis intet preset er valgt. Ved klik åbner appen en save-dialog med forudgivent filnavn (preset-navn + .radiancepreset-extension). Det gemte format indeholder den komplette TrainingConfig plus metadata (navn, kategori, ID, built-in-flag). Dobbeltklik i Finder åbner appen — men ikke automatisk importen; brugeren skal bruge import-knappen (I6).

I6Import…-knap

HVOR

Inspector → Presets-sektion → action-bjælke → Import…-knap.

TEKNISK

Åbner en fildialog, der kun tillader .radiancepreset-filer (multivalg deaktiveret). Ved valg indlæses JSON-filen, valideres og indsættes i Custom-kategorien — med nyt internt ID, så der ikke opstår kollisioner med built-ins. Importen sætter automatisk kategorien til Custom, selv hvis det eksporterede preset oprindeligt var en built-in. Beskadigede eller inkompatible filer med ældre skemaversion afvises i stilhed uden fejldialog (konsol-log giver dog besked).

I7Preset-linje (klik-aktivering)

HVOR

Inspector → Presets-sektion → hver preset-linje i hver kategori.

TEKNISK

Klik på en preset-linje erstatter alle felter i TrainingConfig med værdierne fra presetet, husker ID for det aktive preset og nulstiller modified-status. Aktiv-fluebenet foran linjen optræder kun, når presetet er valgt OG umodificeret. Så snart en værdi i TrainingConfig ændres (slider, stepper, toggle i de andre Inspector-sektioner), optræder et orange „Modified"-badge bag navnet. Indbyggede presets kan ikke overskrives — ved modifikation skal en egen kopi oprettes via save-knappen (I1).

I8Kontekstmenu „Export…"

HVOR

Højreklik på hver preset-linje → første post „Export…".

TEKNISK

Identisk funktionalitet som I5 (Export…-knap), men mere bekvemt tilgængelig — uden at presetet skal vælges først. Eksporterer direkte det preset, der blev klikket på i linjen. Fungerer ens for alle preset-kategorier (built-in eller Custom), ingen begrænsning. Eksporten indeholder built-in-flag og originalkategori, men ved re-import mappes kategorien som beskrevet under I6 til Custom.

I9Kontekstmenu „Duplicate"

HVOR

Højreklik på hver preset-linje → anden post „Duplicate".

TEKNISK

Kloner presetet ind i Custom-kategorien. Genererer et nyt internt ID, vedhæfter „ Copy" til navnet og gemmer kopien. Fungerer også for built-in-presets — klonen er så redigerbar. Originalen forbliver urørt. TrainingConfig kopieres værdi-for- værdi (JSON-roundtrip), så der ikke består referenceforbindelser mellem original og kopi.

I10Kontekstmenu „Delete"

HVOR

Højreklik på egne preset-linjer → sidste post „Delete" (rød, destruktiv).

TEKNISK

Kun synlig for custom-presets. Built-ins kan ikke slettes. Posten er markeret som destruktiv, vises rød i kontekstmenuen og placeres efter en divider, så den ikke klikkes ved et uheld. Der findes ingen bekræftelsesdialog — et klik sletter presetet med det samme. Det slettede preset kan ikke gendannes (Cmd-Z virker ikke her — undo findes i den aktuelle build kun for billedlisten, ikke for preset-operationer). Var det slettede preset netop aktivt, forbliver den aktuelle TrainingConfig uændret, kun det aktive preset-valg nulstilles.

I11Kategori-header (udfold/sammenklap)

HVOR

Inspector → Presets-sektion → hver kategori-header (Classic, MCMC, SceneClass, Custom).

TEKNISK

Klap-status pr. kategori med forskellig default: Classic starter foldet ud, MCMC, SceneClass og Custom starter sammenklappet. Status persisteres ikke — ved app-genstart er alle kategorier igen i default-tilstand. Chevron-pilen roterer animeret. Tallet til højre i headeren viser antallet af presets i denne kategori. Klik-hit-arealet omfatter hele headerområdet.

Trænings-konfigurations-sektion (I12–I22)

Crop kun training-konfigurations-sektion — Camera Alignment (Apple Photogrammetry aktiv, Native (Beta) inaktiv), Densification (Classic aktiv), Max Iterations 5.000 / Densify Until 3.500 med link-symbol, SSIM Weight slider 0.20, Render Scale slider på 100 % (1.536×2.048 = 3.1 MP)
Crop kun training-konfigurations-sektion — Camera Alignment (Apple Photogrammetry aktiv, Native (Beta) inaktiv), Densification (Classic aktiv), Max Iterations 5.000 / Densify Until 3.500 med link-symbol, SSIM Weight slider 0.20, Render Scale slider på 100 % (1.536×2.048 = 3.1 MP)

Her lander de centrale håndtag: hvilket SfM-backend der skal beregne, hvordan densification arbejder, hvor mange iterationer, hvor stor SSIM-vægtningen er. Ved MCMC-strategi optræder to ekstra toggles („MCMC Quality" og „Auto-scale by scene"), som skjules i Classic-tilstand. Ved Native-SfM-backend kommer FOV-override-feltet til, som kun behøves til video-frames uden EXIF-brændvidde.

I12Camera Alignment-vælger

HVOR

Inspector → træningskonfiguration → Camera Alignment (segmenteret vælger øverst).

TEKNISK

Segmenteret vælger med to muligheder: Apple Photogrammetry og Native (Beta). Valget bestemmer det anvendte SfM-backend ved næste kamera-rekonstruktion. Det påvirker samtidigt, hvilke andre Inspector-elementer der er synlige: Native viser desuden FOV-overriden (I13), der kun behøves ved EXIF-løse video-frames. Bemærk: ved meget store outdoor-optagelser kan du indlæse resultatet fra et eksternt værktøj (Metashape eller COLMAP) via workspace-import — se kapitel 1 (M5) og kapitel 9 (Q3, Q6).

I13FOV Override-felt (Native SfM)

HVOR

Inspector → træningskonfiguration → FOV Override (kun synlig ved Camera Alignment = Native).

TEKNISK

Numerisk tekstfelt (range 0-170°), default 0 = automatisk bestemmelse fra EXIF eller heuristik. Manuel indtastning er nødvendig, hvis input-billederne er udtrukket fra en video, der ikke indeholder brændvidde-metadata. Typiske værdier: iPhone Wide ≈ 73°, DJI Mavic Wide-Crop ≈ 70°, drone med fuldformatsensor ≈ 84°. Værdien klampes til [0, 170] — værdier udenfor stuves direkte tilbage. Påvirker kun den native SfM-pipeline (Q4/Q5); Apple Photogrammetry ignorerer denne værdi helt.

I15Densification-vælger

HVOR

Inspector → træningskonfiguration → Densification (segmenteret vælger, altid synlig).

TEKNISK

Skifter mellem de to densification-strategier: Classic (original 3DGS-metode med clone/split/prune og gradient- tærskel) og MCMC (Stochastic Gradient Langevin Dynamics med relocation, NeurIPS 2024). Ved skift fra Classic til MCMC sætter appen automatisk MCMC-specifikke felter til afprøvede default- værdier (reg-weights = 0, MCMC-cap-multiplier 3.0, sample-/ noise-schedule). Uden denne automatiske initialisering led sessioner med gamle presets under 1.4.4-MCMC-collapse-bug'en (460K→5 gaussians, watchdog-kill). Vælger-valget bestemmer desuden, hvilke Inspector-elementer der er synlige — ved MCMC optræder I16/I17. Detaljeret felt-virkning i kapitel 6, T11–T16 (Classic) og T61–T73 (MCMC).

I16MCMC Quality-toggle

HVOR

Inspector → træningskonfiguration → MCMC Quality (kun ved Densification = MCMC).

TEKNISK

Slår gradient-accumulation til 2 trin (aktiv) eller 1 trin (inaktiv). Akkumulerer gradienterne fra to på hinanden følgende kamera-views, før optimizer-step udføres. Empirisk (session 33, V544a) reducerer det den endelige L1-fejl med ca. 6 % (0.0246 med Quality vs 0.0261 uden, ved 3-trial-gennemsnit på Horse-Full-MCMC). Prisen: fordoblet træningstid. Ved meget lange træninger (200K iterationer) fører det til yderligere 10+ minutters ventetid — så kun værd, hvis de sidste par procent kvalitet virkelig er nødvendige. Påvirker kun træningen, ikke eksportformatet eller viewport-visningen.

I17Auto-scale by scene-toggle

HVOR

Inspector → træningskonfiguration → Auto-scale by scene (kun ved MCMC).

TEKNISK

Hvis aktiv, skaleres den effektive max-gaussians- overgrænse med SfM-init-point-count × MCMC-cap-multiplier (default 3.0). Eksempel: SfM leverer 250K initpunkter, basis-cap = 150K, multiplier 3.0 → effektiv overgrænse = max(150K, 750K) = 750K. Hvis deaktiveret, gælder strengt kun basen. Blev indført til v1.4.5, fordi store outdoor-optagelser med over 1000 frames og tilsvarende høj SfM-punktdensitet med den stive 150K-cap-default udsultede densificationen — overflødige punkter blev tilbage, nye fik ikke lov at opstå. Default OFF i custom- presets, ON i MCMC-built-ins. Påvirker kun til træningstidspunkt, ikke i eksporten.

I18Max Iterations-stepper

HVOR

Inspector → træningskonfiguration → GroupBox → Max Iterations.

TEKNISK

Stepper med range 1 000–100 000, skridtstørrelse 1 000. Bestemmer det samlede antal optimizer-iterationer. Lineært korreleret med træningstiden (halvering = ca. 50 % tid). Empiriske sweet-spots: 20K (Classic Balanced, L1≈0.028), 40K (Classic Quality, L1≈0.023), 200K (MCMC Full, L1≈0.0246). Over 40K ved Classic giver i gennemsnit næppe forbedring — diminishing returns. Ved ændring trækkes Densify Until proportionalt med, hvis link-funktionen (I19) er aktiv (default-ratio: 0.5, dvs. Densify-Until = Max/2).

I19Link/Unlink-knap (Densify ↔ Iterations)

HVOR

Inspector → træningskonfiguration → GroupBox → lille link-knap mellem Max Iterations og Densify Until.

TEKNISK

Toggle-knap, der fryser forholdet mellem Densify Until og Max Iterations. Ved aktiv (link-ikon fremhævet) trækkes Densify Until proportionalt med ved hver ændring af Max Iterations. Ved unlink (link-plus-ikon) forbliver værdierne uafhængige. Default er linked, fordi det afspejler den typiske korrelation — hvis du trækker træningen til dobbelt iterationer, vil du som regel også lade densificationen køre proportionalt længere. Forholdet beregnes ved indstilling af link-knappen ud fra den aktuelle værdi; et typisk forhold er 0.5 (Densify-Until = halve iterations-antal).

I20Densify Until-stepper

HVOR

Inspector → træningskonfiguration → GroupBox → Densify Until.

TEKNISK

Stepper med range 500–50 000, skridtstørrelse 500. Bestemmer iterations-indekset, hvorfra der ikke længere kommer nye gaussians til via clone/split (Classic) eller relocation (MCMC). Efter opnåelse forfines kun position og farve. Højere værdier = flere gaussians = større fil, længere pr.-iteration-tid (+30-60 % GPU-tid pr. skridt). Typiske værdier: 15K (til 30K max-iter), 20K (til 40K), 100K (til 200K MCMC). Ved aktiv link (I19) skaleres automatisk med. Virker forskelligt ved Classic vs MCMC: Classic stopper væksten helt, MCMC stopper relocation- logikken, men sample-/noise-adaptation kører videre.

I21SSIM Weight-slider

HVOR

Inspector → træningskonfiguration → GroupBox → SSIM Weight.

TEKNISK

Slider 0.0–1.0 i 0.05-skridt, visning som „0.20". Blander L1-loss (0.0) og SSIM-loss (1.0). L1 strammer lysstyrken pr. pixel, SSIM den strukturelle lighed (kanter, lokale statistikker). Default 0.2 er værdien fra det oprindelige 3DGS-paper (Kerbl 2023) og reverse-engineered som robust kompromis i talrige sessioner. Højere værdier (0.5+) foretrækker detaljebevarelse, men kan ignorere lokale lysstyrkefejl. Lavere værdier (< 0.1) fører til detaljetab ved skarpe kanter. SSIM-beregningen kører i shaderen med et 11×11-gaussian-vindue. Performance: ved 0.0 (kun L1) er træningen ca. 8-12 % hurtigere, fordi SSIM-beregningen i shaderen springes over.

I22Render Scale-slider

HVOR

Inspector → træningskonfiguration → GroupBox → Render Scale.

TEKNISK

Slider 0.25–1.0 i 0.25-skridt, visning som „100 %". Skalerer training-rendering-opløsningen relativt til kildebillede-størrelsen. Største håndtag på performance: 50 % reducerer GPU-tid med ca. 75 % (fordi 4× færre pixel), 25 % med ca. 94 %. Gradient-tærsklen skaleres automatisk med. Under slideren optræder en live-opløsnings-visning i MP (f.eks. „2304×1296 (3.0 MP)"). Hvis den aktuelle værdi afviger fra den anbefalede, indkobles i orange skrift „— recommended: 50 %". Anbefalingen sigter på ~3 MP effektiv opløsning — det område, Apple Silicon GPU'er behandler mest effektivt. 4K-kildebilleder får f.eks. automatisk 25 % anbefalet, FullHD-billeder 100 %. En ændring udløser desuden buffer-reallokationen.

Enhancements-sektion (I26–I29)

Crop kun Enhancements-sektion — fire rækker: Post-Training Compactification (toggle til), MetalFX Spatial Upscaling (toggle fra), MPS Lanczos Scaling (toggle fra), Perceptual Loss (slider på „Off”). Hver række med undertitel forklarer funktionen
Crop kun Enhancements-sektion — fire rækker: Post-Training Compactification (toggle til), MetalFX Spatial Upscaling (toggle fra), MPS Lanczos Scaling (toggle fra), Perceptual Loss (slider på „Off"). Hver række med undertitel forklarer funktionen

Enhancements-sektionen grupperer fire features, der forbedrer billedkvalitet uden at ændre selve kerne-trænings-loopet. De første tre (I26-I28) er post-training- eller viewport-trin: compactification rydder op efter trænings-slut, MetalFX og MPS Lanczos er rene viewport-renderers, der ikke påvirker den løbende træning. Perceptual Loss (I29) er trods sektion-tilhørsforholdet en træningsbestanddel — den aktiveres under træningen som ekstra loss-term, deraf adskillelsen fra viewport-toggles via en divider.

I26Post-Training Compactification-toggle

HVOR

Inspector → Enhancements → Post-Training Compactification.

TEKNISK

Aktiverer V443-post-processing: efter afslutningen af trænings-iterationerne slettes gaussians med opacity under 0.01 (1 % synlighed). Empirisk reducerer det filstørrelsen med ~55-58 % ved nul synligt kvalitetstab — fordi disse gaussians visuelt alligevel ikke bidrager. Compactificationen kører som GPU-compact- pas og varer afhængigt af gaussian-count brøkdele af sekunder til få sekunder. Påvirker ikke trænings-performance. Hvis denne toggle er slukket, eksporteres også usynlige gaussians — kun relevant, hvis du vil bruge formatet til endnu et trænings-stage (Continue Training), ellers spild af lagerplads.

I27MetalFX Spatial Upscaling-toggle

HVOR

Inspector → Enhancements → MetalFX Spatial Upscaling.

TEKNISK

Aktiverer Apples MetalFX Spatial Upscaler i viewport-rendereren. Hvis trænings-opløsningen (via I22 Render Scale) er lavere end viewport-størrelsen, skalerer MetalFX det rendrede frame ML-baseret op til visningsstørrelsen. Leverer de skarpeste resultater af alle skalerings-muligheder, fordi ML-upscaler-modellen er optimeret til skarpe kanter. Renderer- pipelinen omkonfigureres live ved skift — synlig med det samme, uden genstart. Har forrang over MPS Lanczos (I28): er begge aktive, vinder MetalFX. Performance-overhead i viewporten ca. 1-2 ms pr. frame på M3-GPU'er. Påvirker kun live-viewporten, ikke rendrede eksporter (orbit-video, screenshots) — de rendres i fuld kildeopløsning.

I28MPS Lanczos Scaling-toggle

HVOR

Inspector → Enhancements → MPS Lanczos Scaling.

TEKNISK

Aktiverer Apples Metal Performance Shaders med Lanczos-resampling som viewport-upscaler. Lanczos er klassisk resampling med 8-tap-sinc-filter — skarpere end bilineær, klassisk algoritme uden ML. Renderer-pipelinen omkonfigureres live ved skift. Ignoreres, hvis MetalFX (I27) ligeledes er aktiv. Minimal overhead (<0.5 ms pr. frame), men kvaliteten ligger under MetalFX. Anvendelse: fallback til scener, hvor MetalFX producerer artefakter (f.eks. stærke linje-strukturer, som ML-upscaleren lejlighedsvis „glatter ud"). Virker som I27 kun i live-viewporten, ikke i eksporter.

I29Perceptual Loss-slider

HVOR

Inspector → Enhancements → Perceptual Loss.

TEKNISK

Slider 0.0–0.2 i 0.01-skridt, visning ved 0.0 som „Off", ellers som „0.05" osv. Aktiverer en ekstra loss-term, der sammenligner multi-skaleret gaussian-blur af renderingen med ground-truth-billedet (3 blur-skalaer). Fanger strukturelle forskelle, som L1+SSIM alene ikke genkender. V460-implementering. Empirisk forbedrer en værdi på 0.05-0.1 L1-scoren i sessioner med et par procent, men koster ~5 % træningstid (ekstra forward-pas gennem blur-kernerne). Over 0.15 bliver træningen ustabil, og L1 forværres igen (loss-term'en dominerer optimeringen). Virker under træningen, ikke i post-processing — trods placering i „Enhancements"-sektionen er det altså ikke en ren opgradering bagefter.

Metrik-sektion (I30–I38)

Crop kun Training Metrics-sektion efter afsluttet træning på buket (5K iterationer, 2 991 gaussians endelig) — tabel med trænings-metrikker (Iteration, Loss, SSIM Loss, Combined Loss, Gaussian Count, Learning Rate, Elapsed, ETA)
Crop kun Training Metrics-sektion efter afsluttet træning på buket (5K iterationer, 2 991 gaussians endelig) — tabel med trænings-metrikker (Iteration, Loss, SSIM Loss, Combined Loss, Gaussian Count, Learning Rate, Elapsed, ETA)

Mens en træning kører, viser metrik-sektionen ni live-værdier fra trænings-loopet. Før start af en træning er sektionen tom („Start training to see live metrics"). Alle værdier opdateres hver ~30 iterationer (opdaterings-frekvens for streamen). Sektionen er read-only — intet element kan klikkes eller ændres. Til dybere analyse trækkes JSONL-trænings-loggene under ~/Documents/RadianceKit/Logs/ ind (script python3 scripts/analyze_logs.py best 5).

I30Iteration

HVOR

Inspector → Metrikker → Iteration. Read-only.

TEKNISK

Visning i formatet „4523 / 40000" — aktuel iteration over total planlagte iterationer. Tæller synkront med trænings-loopet, der pusher værdierne hver ~30 iter. Det andet tal svarer til max-iterations-værdien på start-tidspunktet; det ændres ikke længere, selv hvis brugeren justerer stepperen derefter — den løbende kørsel bruger sin egen snapshot-kopi. Hvis appen via training-menuen lægger iterationer på (Continue Training +5K/+10K/+20K), øges nævneren.

I31Loss

HVOR

Inspector → Metrikker → Loss. Read-only.

TEKNISK

Float-værdi med seks decimaler (f.eks. „0.024385"). Måler den kombinerede L1+SSIM-loss (blanding kontrolleres via I21 SSIM Weight) plus valgfrit Perceptual Loss (I29) og andre regularizere. Skalaen er ikke absolut, men scene-afhængig — kræver for de fleste sammenligninger samme datasæt. Typiske slutværdier ved gode konfigurationer: - 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 (geometri-betinget dårligere) - Indendørs lejligheder: 0.018–0.025

Værdier over 0.10 efter 5K iterationer indikerer SfM-problemer (dårlige kamera-positioner) — afbryd og lav SfM på ny.

I32Learning Rate

HVOR

Inspector → Metrikker → Learning Rate. Read-only.

TEKNISK

Visning i scientific notation (f.eks. „1.60e-04"). Aktuel læringsrate for position-parametrene (3DGS har seks uafhængige LR'er for position, SH-DC, SH-rest, opacity, scale, rotation — her vises position-LR'en som repræsentativ værdi). Default-startværdi 1.6e-4, der over en exponential-decay synker ned til ~1.6e-6 i træningens slutning. Forfaldet kan justeres via LR-schedule-feltet i trænings-konfigurationen (T-felt i kap. 6). Hvis LR'en bliver usædvanlig høj (f.eks. 1e-3 eller mere efter 10K iterationer), kan det indikere en fejlindlæst konfiguration.

I33SH Degree

HVOR

Inspector → Metrikker → SH Degree. Read-only.

TEKNISK

Heltal 0-3. Spherical-harmonics-grad for farverepræsentationen. Begynder ved 0 (kun DC-komponenten, dvs. retnings-uafhængig farve pr. gaussian — altså bare en RGB-konstant) og stiger progressivt til 3 i træningens forløb. Standard-schedule hæver graden ved 1000/2000/3000 iterationer med 1 hver. SH-3 svarer til 48 farve-koefficienter pr. gaussian (3 RGB-channels × 16 SH-basisfunktioner). Højere SH-grad = mere retnings-afhængig refleksion (blanke overflader ser korrekt forskellige ud under forskellige synsvinkler), men også mere lager og langsommere træning.

I34Gaussians

HVOR

Inspector → Metrikker → Gaussians. Read-only.

TEKNISK

Aktuelt antal gaussians i modellen, formateret med locale-separator (f.eks. „524.318"). Vækst: - Classic: starter ved SfM-init-punkterne (typisk 50K-300K), vokser via clone/split indtil kort før Densify Until, derefter statisk indtil trænings-slut (modulo pruning) - MCMC: sample-punkter tilføjes indtil MCMC-cap'et, derefter kun relocation

Healthy slutværdier: - Classic Quality: 400K-700K (Horse 524K, Garden 800K) - MCMC Full: præcis på cap'et (default 150K, med auto-scale multiplier × SfM-count alt efter scene 500K-1.5M)

Ved MCMC falder tallet til < 60 % af cap'et → anomali (collapse-indikator, peger på for aggressive regularizere).

I35GPU Memory

HVOR

Inspector → Metrikker → GPU Memory. Read-only.

TEKNISK

Skøn af gaussian-bufferens hukommelsesforbrug som gaussian-count × 616 bytes (formateret i memory-style). 616 bytes er den empiriske størrelse af en fuldt udstyret gaussian (position, skalering, rotation, opacity, SH-koefficienter grad 3, gradient-akkumulator). Visningen fanger ikke renderer- overhead (tile-buffer, sort-buffer, backward-buffer) — det reelle GPU-lagerbehov ligger typisk 2-3× over denne værdi. Ved 500K gaussians: vist ~290 MB, reelt ~700 MB. Ved 1.5M gaussians: vist ~880 MB, reelt ~2.5 GB. På M3 Max med 64+ GB unified memory ukritisk, på M3 Pro med 18 GB allerede en grænse.

I36Speed

HVOR

Inspector → Metrikker → Speed. Read-only.

TEKNISK

Iterationer pr. sekund med en decimal („24.3 it/s"). Beregnes af træneren som glidende gennemsnit over de seneste ~100 iterationer. Typiske værdier: - Quick-preset (1K iters): 80-120 it/s (kort, ingen steady-state) - Classic 20K @ 1.0 Render Scale (Truck-scene, 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 (langsommere pga. relocation) - Ved 1M+ gaussians og fuld opløsning: < 10 it/s

Faldende speed i træningens forløb er normalt — flere gaussians = mere compute pr. iteration. Pludselige fald (f.eks. fra 30 → 5 it/s) indikerer GPU-thermal-throttling eller konkurrerende apps.

I37Elapsed

HVOR

Inspector → Metrikker → Elapsed. Read-only.

TEKNISK

Allerede forløbet tid som „4:23" (m:ss) eller „1:23:45" (h:mm:ss). Format-switch fra 1 time. Måler kun den rene trænings-tid, ikke de forudliggende faser (SfM-beregning, billed-import). Ved pause/resume kører uret videre — det er altså wall-clock, ikke CPU-tid.

I38ETA

HVOR

Inspector → Metrikker → ETA. Read-only.

TEKNISK

Estimeret resttid som „17:42" eller „1:12:35". Beregning: (Max Iterations − aktuel iteration) / iterationer-pr.- sekund. Viser „–", når speed lige er nul (helt i starten eller ved pause). Estimatet tilpasses ikke den typiske forlangsomning mod trænings-slut — især ved MCMC og Classic med store Densify-Until-værdier har træningen tendens til at blive langsommere, fordi flere og flere gaussians kommer ind i billedet. Reelt bliver det typisk 10-20 % over start-ETA.

Loss-diagram-sektion (I39–I41)

Crop kun Loss History-sektion efter afsluttet træning — Current 0.0064, Min 0.0035 (grøn), blåt forløb fra 0.027 (iteration 1) til 0.0035 (iteration 5K) med karakteristisk knæk omkring iter 200, derunder Gaussian Count-chart orange
Crop kun Loss History-sektion efter afsluttet træning — Current 0.0064, Min 0.0035 (grøn), blåt forløb fra 0.027 (iteration 1) til 0.0035 (iteration 5K) med karakteristisk knæk omkring iter 200, derunder Gaussian Count-chart orange

Loss-diagram-sektionen visualiserer trænings-forløbet over tid. Den består af to charts: et loss-curve-chart (stort, øverst, blå) og et gaussian-count-chart (mindre, nederst, orange). Begge bygges op live under træningen og persisterer indtil næste trænings- start. Før første træning er området tomt („Loss curve will appear during training"). Charts er rene SwiftUI-path-tegninger (ingen Swift-Charts-framework), så de også rendrer flydende ved 100K+ punkter.

I39Current Loss (visning)

HVOR

Inspector → loss-diagram → venstre label-område „Current: 0.0287". Read-only.

TEKNISK

Float-værdi af det sidste loss-sample-punkt, formateret med fire decimaler. Identisk med I31 (Loss i metrics-sektionen), bare her mere kompakt formateret. Kilden er loss-history — en liste, der får en post pr. ~30 iterationer. Kun endelige værdier optages i listen — NaN/Infinity (meget sjældent, i tilfælde af gradient-explosion-bug) filtreres.

I40Min Loss (visning)

HVOR

Inspector → loss-diagram → højre label-område „Min: 0.0245" (grøn). Read-only.

TEKNISK

Minimum af alle nogensinde sete loss-værdier i den aktuelle trænings-kørsel. Genberegnes live ud fra loss-history — ingen separat persistens. Vises med grøn skrift, fordi „Min" = „best so far". Den stiplede grønne linje ved chartens nederste rand markerer denne Y-position visuelt. Ved continue-training- sessioner starter min-sporingen forfra — den gamle history erstattes i UI'en af den nye (ikke vedhæftet). Hvis den aktuelle træning kører dårligere end den foregående, kan min-visningen altså være større end det forrige slutresultat.

I41Gaussian Count Chart

HVOR

Inspector → loss-diagram → andet chart derunder (orange). Read-only.

TEKNISK

Linje-diagram af gaussian-antallet over trænings- iterationerne. Kilde: gaussian-count-history (liste af (iter, count)-par, fyldt af træneren hver ~30 iter). Y-skala dynamisk mellem minimum og maksimum af history'en. Ved Classic- strategi ser kurven typisk sådan ud: jævnt stigende indtil Densify Until, derefter flad (med små pruning-udsving). Ved MCMC: stejl stigning indtil cap, derefter horisontal linje (relocation holder tallet konstant). Hvis kurven falder trods aktiv træning, prunner densificationen for aggressivt — tegn på forkerte defaults eller en kendt MCMC-collapse-bug (v1.4.4-hotfix-tema).

Hvordan læser man loss-kurven?

Loss-charten er det vigtigste diagnose-værktøj i Inspectoren — ingen anden indikator viser så direkte, om træningen skrider nyttigt frem eller hænger fast. Den typiske sunde form er et hurtigt fald i de første 1000-3000 iterationer (fra ~0.15 til ~0.05), efterfulgt af et langsomt, jævnt fald til trænings-slut (til 0.020-0.030). Logaritmisk virker kurven som en glat diagonal.

Hvad betyder et plateau ved loss'en? Hvis kurven over flere tusinde iterationer forbliver flad, er der to mulige læsninger: (a) træningen er „konvergeret" — loss'en kan ikke længere falde signifikant, fordi modellen er så god, som den kan blive med de givne data og indstillinger. Det er ønsket; det er „færdig". (b) Træningen „hænger" — loss'en kan egentlig stadig falde, men optimeringen stagnerer (lokalt minimum, læringsrate for lille, densification slukket). At skelne: hvis loss-værdien ligger i et typisk godt område (0.020-0.030 ved indoor/object, 0.040-0.060 ved outdoor), og kurven har været flad i 5K iterationer, er det konvergeret. Hvis værdien er markant højere end ved sammenlignelige scener (f.eks. 0.08), hænger den fast.

Advarsel: gaussian-plateau ≠ loss-plateau. Et plateau i gaussian-antallet betyder ikke „træning er færdig". Det betyder kun, at densificationen er holdt op med at tilføje nye punkter — enten fordi er nået (Classic), eller fordi MCMC-cap'et er fuldt. Træningen kører bagefter videre og forfiner kun de eksisterende punkter. Det egentlige „færdig"-signal læser du af loss-kurven og iteration-visningen (I30), ikke her.

Tommelfingerregel til afbrydelse: Hvis loss-kurven efter 5000+ iterationer ligger over 0.08 og næppe falder mere, er SfM-rekonstruktionen med høj sandsynlighed skæv. Afbryd træning, slå op i kapitel 9, om det valgte SfM-backend passer til scenen, skift evt. til COLMAP/Native, start så på ny. Bedre at investere 10 minutter i bedre SfM end 2 timers træning med dårlig kamera- justering.

Hvornår række ud efter Inspectoren?

Hurtig-reference: hvilken sektion + hvilke controls til hvilket typisk use-case?

Common-taskSektionControl-ID'er
Indlæse forudfremstillet opsætningPresetsI7 (klik på linje)
Gemme egen opsætningPresetsI1 → I2 → I4
Dele opsætning med kollegerPresetsI5 (eksport) eller I6 (import)
Skifte SfM-backend (f.eks. fordi Apple-PG er for ustabil)træningskonfigurationI12 (se kap. 9)
Behandle video-frames uden EXIF- brændviddetræningskonfigurationI13 (FOV-override)
COLMAP-performance: GLOMAP i stedet for klassisktræningskonfigurationI14
Skifte fra Classic til MCMCtræningskonfigurationI15
Lade træningen køre længeretræningskonfigurationI18 (Max iter) + I20 (Densify Until) — koblet via I19
Halvere GPU-tidtræningskonfigurationI22 (Render Scale til 50 %)
Trænings-kvalitet +6 % (MCMC)træningskonfigurationI16 (MCMC Quality)
Outdoor-scene med mange SfM- punktertræningskonfigurationI17 (Auto-scale by scene)
Opsætte / skifte COLMAP-stitræningskonfigurationI23 / I24 / I25
Gøre eksport-filer mindreEnhancementsI26 (lad altid være tændt)
Skarpere viewport uden ekstra trænings-tidEnhancementsI27 (MetalFX)
MetalFX glatter for meget → alternativEnhancementsI28 (MPS Lanczos)
Sidste kvantitet detalje ved fine strukturerEnhancementsI29 (Perceptual Loss 0.05-0.1)
Overvåge træningMetrikkerI30 (fremskridt), I36 (tempo), I38 (resttid)
Vurdere kvalitet tidligtMetrikkerI31 (Loss < 0.05 efter 5K = god)
Mistanke om SfM-problemMetrikker + loss-chartI31 + I39 (Loss > 0.08 efter 5K → SfM på ny)
Skelne konvergens vs hængendeloss-diagramI39 + I40 (læs loss-plateau)
Genkende densification-problemloss-diagramI41 (gaussian-kurve falder → bug)