Kapitel 2 — Inspector (Expert View)

Leerer Inspector vor Import: Die linke Spalte zeigt die Punkte Images, Cameras und Log, darunter die Kopfzeile „Images (0)" und die Ablegefläche „Drop images here / or tap + to import". Der Viewport in der Mitte ist leer. Rechts steht der Inspector mit sechs eingeklappten Sektionen: Presets, Cameras & Capture, Training, Progress, Look und Export. Unter jeder Überschrift nennt eine graue Zeile, was die Sektion tut und wann sie wirkt — „Ready-made recipes — they replace the training settings" (Presets), „Before training · decides how camera positions are solved · applies to the next run" (Cameras & Capture), „Before training · drives scene build-up and optimization · applies to the next run" (Training), „Display only" (Progress), „After training · applies immediately · reversible any time" (Look) und „Leveling the floor turns the view at once; the chosen orientation and format apply when saving" (Export). Ganz unten läuft die Statuszeile mit dem Status „Idle" sowie dem grünen Start- und dem roten Stopp-Knopf; oben rechts steht der Umschalter Simple/Expert, hier auf Expert.

Inspector nach Import: Die Kopfzeile der Bilderliste zeigt „Images (35)", darunter stehen die importierten Aufnahmen mit aufsteigenden Dateinamen ab IMG_0953.JPG. Die Bilder dieser Testreihe liegen mit 4032×3024 Pixeln vor; die Auto-Render-Scale-Logik liest diese Auflösung und schlägt eine dazu passende Render Scale vor. Der Viewport ist noch leer, die Statuszeile steht auf „Idle". Der grüne Start-Knopf unten links ist jetzt aktiv und startet das Training mit dem aktiven Preset.

Inspector während Training: Die Titelleiste zeigt den globalen Fortschritt, hier „RadianceKit — Training 23%". Der Viewport rendert die laufende Rekonstruktion in Echtzeit — eine Stoffente auf einem Schaffell, schon deutlich zu erkennen (das Aktualisierungs-Intervall der Live-Vorschau steht in Settings → General → Training → Live Preview). Unter dem Viewport laufen der Fortschritt („4,700/20,000", „ETA 1m9s") und die Metrikleiste mit Loss 0.0109, LR 2.0e-04, SH 1 und Gaussians 16.0K; links unten liegen Pause- und Stopp-Knopf. Im Inspector ist die Gruppe CLASSIC aufgeklappt, „Balanced 20K iters" trägt das grüne Häkchen. Ein „Modified"-Abzeichen erscheint erst, sobald ein Parameter vom Preset abweicht — hier ist keines zu sehen. Die Sidebar „Log" sammelt SfM- und Training-Stage-Events.

Inspector nach Training: Die Titelleiste nennt das Ergebnis: „Training Complete — 8,708 Gaussians". In der linken Spalte steht „Complete" mit derselben Zahl, dazu Images 25 und Cameras 35 — 25 Bilder deshalb, weil der Frame-Quality-Dialog zehn verwackelte von 35 Aufnahmen aussortiert hat. Die Statuszeile meldet „Completed" bei 20,000/20,000, die Metrikleiste Loss 0.0075, LR 0.0e+00, SH 3 und Gaussians 9.7K. Der Viewport zeigt die fertige Punktwolke formatfüllend — orbitale Drag-Navigation aktiv (rotiert um den Szenen-Mittelpunkt).
Dass hier zwei verschiedene Gaussian-Zahlen stehen, ist beabsichtigt: Metrikleiste und Training Metrics nennen den Stand am Ende des Trainings (hier 9,660, gerundet 9.7K), Titelleiste und Szene den Stand nach den automatischen Aufräum-Durchgängen (8,708). Dazwischen liegen Post-Training Compactification und das Entfernen nadel- und scheibenförmiger Splats. Die kleinere Zahl ist die, die im Viewport steht und die beim Export gesichert wird. Die Gruppen Training Metrics und Loss History sind jetzt mit den Endwerten gefüllt, die Export-Sektion ist aktiv.
Der Inspector ist die rechte Seitenleiste im Expert Mode (⌘2). Er bündelt sämtliche trainingsrelevanten Parameter in sechs einklappbaren Sektionen, die seit 2026-07-18 nach Domäne gruppiert sind. Die Default-Reihenfolge von oben nach unten ist: Presets, Kameras & Aufnahme, Training, Fortschritt, Look und Export. Unter jeder Überschrift steht eine zweite Zeile, die die Phase nennt — wann die Sektion wirkt und wie umkehrbar sie ist (z.B. „Before training · decides how camera positions are solved · applies to the next run" bei Kameras & Aufnahme, „After training · applies immediately · reversible any time" bei Look, „Display only" bei Fortschritt). Zwei frühere Sektionen sind aufgegangen: Metriken und Verlust-Diagramm sind jetzt zwei getrennt klappbare Gruppen („Training Metrics" und „Loss History") innerhalb von Fortschritt, und die frühere Enhancements-Sektion steckt vollständig in Training. Die „Look"-Sektion (post-Training-Bildanpassungen) ist die reale UI-Umbenennung der früheren „Finishing"-Sektion — ihr interner Name bleibt aus Kompatibilitätsgründen „Finishing", die angezeigte Überschrift heißt „Look" (dasselbe Muster bei Training, das intern „Training Configuration" heißt). Jede Sektion lässt sich per Klick auf den Header zuklappen, die Reihenfolge per Drag-and-Drop neu anordnen. Beim ersten Start sind die Sektionen eingeklappt — im Bild oben sind alle sechs zu; der App-State speichert Klapp- und Reihenfolge-Präferenzen danach über App-Starts hinweg. Eine bereits gespeicherte alte Anordnung wird beim ersten Start einmalig auf die neue Gruppierung migriert; Viewport ▸ Reset Inspector Layout stellt den Auslieferungszustand wieder her.
Eine Reihe von Bedienelementen aus dem Inspector taucht in fast identischer Form auch in den Einstellungen (Kapitel 3) auf — typischerweise SfM-Backend, Sky-Masking und ähnliche Defaults. Die Trennung ist bewusst: Die Einstellungen liefern die App-globale Vorlage für neu angelegte Projekte, der Inspector überschreibt diese Werte für das aktuell offene Projekt. Wer einmal die Bedienlogik der einen Seite kennt, kann die andere blind benutzen.
Die linke Spalte im Expert Mode — der Project Navigator — gehört nicht zum Inspector, ist aber sein direkter Nachbar. Dort lassen sich importierte Bilder per Klick auswählen, mit Leertaste in Quick-Look ansehen und über den Minus-Button oder die Entfernen-Taste löschen (mit Cmd-Z zum Rückgängigmachen). Der Inspector folgt der aktuellen Sidebar-Auswahl mit kontextspezifischen Detail-Informationen, die sieben Hauptsektionen bleiben aber immer verfügbar.
Look-Sektion (L1–L5)
Die Look-Sektion (intern weiterhin „Finishing" genannt) ist seit der Domänen-Neugruppierung die fünfte Inspector-Sektion — zwischen Fortschritt und Export — und sammelt die post-Training -Bildanpassungen an einem Ort. Alle Regler arbeiten nicht destruktiv: Jeder Slider wendet die Look-Berechnung erneut auf einen unveränderten Pristine-Snapshot (Original-DC-Farbe, -Opacity, -Skalierung) an — die Anpassung ist damit idempotent, nicht kumulativ. Das Ergebnis erscheint live im Viewport (WYSIWYG, exakt so wie der spätere Export) und wird in jeden Export eingebacken. Die Sektion ist erst nach Abschluss eines Trainings-Laufs verfügbar (vorher steht „Available after a training run completes."); ihre Werte werden bei jedem neuen Training zurückgesetzt. Solange ein Export läuft, sind alle Regler gesperrt — ein Lock-Hinweis „Locked while exporting — the file uses the current settings." erscheint und die GroupBox ist disabled.
L1Saturation-Slider
WO
Inspector → Look-Sektion → GroupBox → Saturation.
TECHNISCH
Slider 0.5–1.2, Anzeige zweistellig (z.B. „1.00"). Skaliert die SH-DC-Chroma jedes Splats um den Luminanz-Wert: 1.0 = unverändert, < 1.0 = entsättigt (Farbe zur Graustufe gezogen), > 1.0 = kräftiger. Mathematisch wird die DC-Farbe aus dem Pristine-Snapshot zurückgerechnet, sodass wiederholtes Schieben nicht aufsummiert. Wurde auf DJI-Drohnen-Material validiert (Pensford-Viadukt), das tendenziell überzeichnet — der Drohnen-Default liegt bei 0.82. Wirkt nur auf die Farb-Basis (SH-Grad 0), höhere SH-Koeffizienten bleiben unberührt.
L2Splat length-Slider
WO
Inspector → Look-Sektion → GroupBox → Splat length.
TECHNISCH
Slider 0.3–1.0, Anzeige zweistellig. Zieht die drei Skalierungs-Achsen jedes Gaussians im Log-Raum zu ihrem Mittelwert hin (je kleiner der Wert, desto stärker): 1.0 = unverändert, kleinere Werte machen längliche „Nadel"-Splats runder, 0 wären reine Kugeln. Greift nadel-artige, überdehnte Splats an, ohne die Gesamt-Größe zu verändern, und reduziert dadurch typische „Konfetti"-Artefakte. Vom Pristine-Snapshot (Original-Log-Skalierung) aus angewendet, daher idempotent. Kommutiert mit Splat size (L3), weil beides im Log-Raum arbeitet.
L3Splat size-Slider
WO
Inspector → Look-Sektion → GroupBox → Splat size.
TECHNISCH
Slider 0.5–2.0, Anzeige zweistellig. Skaliert jeden Gaussian auf allen drei Achsen uniform: 1.0 = unverändert, < 1.0 = kleiner/dichter/schärfer, > 1.0 = größer/„fluffiger" (füllt Lücken zwischen den Splats). Da die Skalierungen im Log-Raum liegen, wird die Multiplikation dort zu einer additiven Verschiebung — das kommutiert mit Splat length (L2), weil ein konstanter Offset die Abweichung-vom-Mittelwert unangetastet lässt. Vom Pristine-Snapshot aus, also idempotent. Neu in dieser Version.
L4Fade far region (mit Sub-Slidern)
WO
Inspector → Look-Sektion → GroupBox → Toggle „Fade far region" plus die Sub-Slider „Fade start ×radius" und „Fade floor".
TECHNISCH
Toggle, der einen radialen Opacity-Abfall mit der Distanz vom Kamera-Schwerpunkt aktiviert — die schwach beobachteten „Far-Konfetti" im Hintergrund werden ausgeblendet. Nur für Orbit-Aufnahmen: Der Toggle ist ausgegraut, wenn die Szene dafür nicht in Frage kommt (lineare Flüge, zu wenige oder degenerierte Kameras); dann erscheint statt der Sub-Slider der Hinweis „Far-fade applies only to orbit captures (not this scene)." Die Eignung wird per Azimut-Abdeckung der Kamera-Positionen ermittelt (ein Orbit umkreist den Schwerpunkt und füllt viele Kompass-Sektoren, ein Linearflug nur ~2). Zwei Sub-Slider steuern die Geometrie: Fade start ×radius (1.0–3.0) setzt den Innenradius als Vielfaches des Orbit-Radius, innerhalb dessen volle Opacity gilt; Fade floor (0.0–1.0) ist der Opacity-Faktor weit jenseits des Fade-Radius. Wichtig: Der Fade überspringt den Sky-Dome-Bereich (die eingefrorenen Gaussians der Kuppel), damit die absichtliche Hintergrund-Kuppel nicht mitgedimmt wird.
L5Reset finishing-Button
WO
Inspector → Look-Sektion → GroupBox → „Reset finishing" (unten, kleiner Button).
TECHNISCH
Setzt alle Look-Settings auf die Defaults zurück (Saturation 1.0, Fade aus, Splat length 1.0, Splat size 1.0) und löst sofort ein erneutes Finishing aus, sodass der Viewport auf den unveränderten trainierten Zustand zurückspringt. Da der ganze Look-Stack idempotent vom Pristine-Snapshot aus rechnet, ist „zurück auf Default" exakt der ursprüngliche Trainings-Output — kein Qualitätsverlust durch mehrfaches Hin und Her. Wie alle Regler der Sektion während eines laufenden Exports gesperrt.
Presets-Sektion (I1–I11)
Die Presets-Sektion ist der schnellste Weg, eine getestete Konfiguration anzuwenden. Built-in-Presets (Capture Class, Classic, MCMC, Hybrid) liefern erprobte, reproduzierbare Startpunkte; eigene Presets lassen sich speichern, exportieren, importieren und teilen. Die Liste ist nach Kategorien gruppiert (Capture Class, Classic, MCMC, Hybrid, Custom) und mehr als eine Kategorie kann gleichzeitig aufgeklappt sein. Über den Kontextmenü-Mechanismus (Rechtsklick auf eine Zeile) sind Export, Duplizieren und — bei eigenen Presets — Löschen erreichbar.
I1Save…-Button
WO
Inspector → Presets-Sektion → Save…-Button (Action-Leiste unten).
TECHNISCH
Öffnet ein Popover mit Textfeld und Save-/Cancel-Buttons. Der aktuelle Stand der Trainings-Einstellungen wird als neues benutzerdefiniertes Preset persistiert (JSON-codiert, App-übergreifend gespeichert). Der Save-Vorgang kopiert alle 81 Trainings-Parameter plus die aktuelle Densification-Strategie. Das Preset landet automatisch in der Kategorie Custom, unabhängig davon, von welchem Built-in-Preset es abgeleitet wurde. Leere Namen und reine Whitespace-Eingaben werden verworfen. Schon existierende Namen werden nicht abgewiesen — jedes Preset hat eine eigene interne ID, doppelte Namen sind technisch erlaubt, aber praktisch verwirrend.
I2Preset Name TextField
WO
Save-Popover → Textfeld „Preset Name".
TECHNISCH
Einfaches Textfeld mit gerundetem Rahmen, breiter Form. Der Wert wird beim Klick auf den Save-Button als Preset-Name übernommen. Keine Längenbegrenzung im UI, aber der gespeicherte Name muss JSON-codierbar und in den UI-Listen darstellbar sein — Emoji und Umlaute funktionieren. Der Inhalt wird beim Öffnen des Popovers automatisch auf einen leeren String zurückgesetzt. Der Save-Button bleibt disabled, solange das Feld nach Trim leer ist. Es gibt kein Auto-Suggest und keine Vorbelegung mit dem Namen des gerade aktiven Presets.
I3Cancel-Button (Save-Dialog)
WO
Save-Popover → Cancel-Button (links).
TECHNISCH
Schließt den Popover ohne Speichern. Verwirft den Textfeld-Inhalt — beim nächsten Öffnen wird er wieder durch die Save…-Button-Logik (I1) auf leer zurückgesetzt. Standard-Button-Style, keine Bestätigungs-Dialoge, keine Hotkeys. Die aktuelle TrainingConfig bleibt unverändert, da der Save-Pfad gar nicht ausgeführt wurde.
I4Save-Button (Save-Dialog)
WO
Save-Popover → Save-Button (rechts, prominenter Stil).
TECHNISCH
Triggert die eigentliche Persistierung. Validiert nochmal nicht-leerer Name (defensiver Check) und schreibt dann die aktuelle TrainingConfig als JSON in den App-Speicher. Schließt anschließend den Popover. Blau hervorgehoben, ausgegraut solange das Textfeld leer ist. Wenn das Speichern fehlschlägt (z.B. weil der App-Speicher voll ist — sehr unwahrscheinlich), gibt es momentan keinen sichtbaren Fehlerdialog; das Preset würde dann beim nächsten App-Start einfach nicht erscheinen.
I5Export…-Button
WO
Inspector → Presets-Sektion → Action-Leiste → Export…-Button.
TECHNISCH
Exportiert das aktuell ausgewählte Preset als .radiancepreset-Datei (intern JSON). Disabled, wenn kein Preset selektiert ist. Beim Klick öffnet die App einen Save-Dialog mit vorgegebenem Dateinamen (Preset-Name + .radiancepreset-Extension). Das gespeicherte Format enthält die komplette TrainingConfig plus Metadaten (Name, Kategorie, ID, Built-in-Flag). Doppelklick im Finder öffnet die App — aber nicht automatisch den Import; der Anwender muss den Import-Button (I6) verwenden.
I6Import…-Button
WO
Inspector → Presets-Sektion → Action-Leiste → Import…-Button.
TECHNISCH
Öffnet einen Datei-Dialog, der nur .radiancepreset-Dateien zulässt (Mehrfachauswahl deaktiviert). Beim Auswählen wird die JSON-Datei geladen, validiert und in die Custom-Kategorie eingefügt — mit neuer interner ID, damit keine Kollisionen mit Built-ins entstehen. Der Import setzt automatisch die Kategorie auf Custom, selbst wenn das exportierte Preset ursprünglich z.B. ein Built-in war. Beschädigte oder mit einer älteren Schema-Version inkompatible Dateien werden stillschweigend abgewiesen, ohne Fehlerdialog (Console-Log gibt aber Auskunft).
I7Preset-Zeile (Klick-Aktivierung)
WO
Inspector → Presets-Sektion → jede Preset-Zeile in jeder Kategorie.
TECHNISCH
Klick auf eine Preset-Zeile ersetzt alle Felder der TrainingConfig durch die Werte aus dem Preset, merkt sich die ID des aktiven Presets und setzt den Modified-Status zurück. Das Aktiv-Häkchen vor der Zeile erscheint nur, wenn das Preset ausgewählt UND unmodifiziert ist. Sobald ein Wert in der TrainingConfig geändert wird (Slider, Stepper, Toggle in den anderen Inspector-Sektionen), erscheint ein orangenes „Modified"-Badge hinter dem Namen. Eingebaute Presets können nicht überschrieben werden — bei Modifikation muss via Save-Button (I1) eine eigene Kopie angelegt werden.
I8Context-Menü „Export…"
WO
Rechtsklick auf jede Preset-Zeile → erster Eintrag „Export…".
TECHNISCH
Identische Funktionalität wie I5 (Export…-Button), aber bequemer erreichbar — ohne dass das Preset vorher selektiert sein muss. Exportiert direkt das in der Zeile angeklickte Preset. Funktioniert für alle Preset-Kategorien gleich (Built-in oder Custom), keine Einschränkung. Der Export enthält das Built-in-Flag und die Original- Kategorie, aber beim Re-Import wird die Kategorie wie unter I6 beschrieben auf Custom gemappt.
I9Context-Menü „Duplicate"
WO
Rechtsklick auf jede Preset-Zeile → zweiter Eintrag „Duplicate".
TECHNISCH
Klont das Preset in die Custom-Kategorie. Erzeugt eine neue interne ID, hängt „ Copy" an den Namen an und speichert die Kopie. Funktioniert auch für Built-in-Presets — der Klon ist dann editierbar. Das Original bleibt unangetastet. Die TrainingConfig wird Wert-für-Wert kopiert (JSON-Roundtrip), sodass keine Referenz-Bindungen zwischen Original und Kopie bestehen.
I10Context-Menü „Delete"
WO
Rechtsklick auf eigene Preset-Zeilen → letzter Eintrag „Delete" (rot, destructive).
TECHNISCH
Nur sichtbar für Custom-Presets. Built-ins lassen sich nicht löschen. Der Eintrag ist als destruktiv markiert, erscheint im Kontextmenü rot und wird hinter einem Divider abgesetzt, damit man ihn nicht versehentlich klickt. Es gibt keinen Confirmation- Dialog — ein Klick löscht das Preset sofort. Das gelöschte Preset ist nicht wiederherstellbar (Cmd-Z funktioniert hier nicht — Undo gibt es im aktuellen Build nur für die Bild-Liste, nicht für Preset- Operationen). War das gelöschte Preset gerade aktiv, bleibt die aktuelle TrainingConfig unverändert, nur die aktive Preset-Auswahl wird genullt.
I11Kategorie-Header (Aufklappen/Einklappen)
WO
Inspector → Presets-Sektion → jeder Kategorie-Header (Capture Class, Classic, MCMC, Hybrid, Custom).
TECHNISCH
Klapp-Status pro Kategorie mit unterschiedlichem Default: die kuratierte Gruppe Capture Class startet aufgeklappt, Classic, MCMC, Hybrid und Custom starten zugeklappt. Der Status wird nicht persistiert — bei App-Neustart sind alle Kategorien wieder im Default-Zustand. Der Chevron-Pfeil rotiert animiert. Die Zahl rechts im Header zeigt die Anzahl der Presets in dieser Kategorie. Die Klick-Hit-Area umfasst den ganzen Header-Bereich.
Trainingskonfiguration-Sektion (I12–I22)

Hier landen die zentralen Hebel für den Trainings-Lauf: wie die Densification arbeitet, wieviele Iterationen, wie groß die SSIM-Gewichtung — dazu am unteren Ende die früher eigenständigen Enhancements (Perceptual Loss, Outdoor-Gruppe, Advanced Densifier, Post-Training-Pässe). Ganz oben steht die Densification als Dreier-Umschalter Classic | MCMC | Hybrid. Das SfM-Backend ist nicht mehr hier, sondern in der eigenen Sektion Kameras & Aufnahme (I12, I13). Die drei MCMC-Zeilen („MCMC Quality", „Auto-scale by scene" und „Max Gaussians") verschwinden im Classic-Modus nicht mehr, sondern bleiben sichtbar und werden ausgegraut; darunter steht eine Zeile mit Schloss-Symbol, die sagt, was zu ändern ist („Only used by the MCMC and Hybrid densifiers — switch Densification above to change these."). Ein abgesetzter Block darunter fasst die Zeilen zusammen, die in jedem Densifier gelten: Depth-Priority Scatter, Full-Resolution Training, das gekoppelte Paar Max Iterations / Densify Until sowie die Regler SSIM Weight und Render Scale.
I12Camera Alignment-Picker
WO
Inspector → Kameras & Aufnahme → Camera Alignment (Pop-up-Menü unter dem Projection-Picker).
TECHNISCH
Pop-up-Menü, kein segmentierter Picker — die Labels sprengen die schmale Inspector-Spalte. Welche Einträge erscheinen, hängt vom Build ab: die sandboxed App-Store-Version bietet Apple Photogrammetry und Native, Dev-/DMG-Builds zusätzlich COLMAP. Grund: COLMAP ist ein externes Kommandozeilen-Programm, und sandboxed Apps dürfen keine fremden Binaries starten (App-Review-Richtlinie 2.5.2) — deshalb fehlt der Backend-Eintrag samt Mapper-Picker und Binary-Pfad im Store-Build ganz, statt dauerhaft ausgegraut zu sein: eine Zeile, die nie aufleuchten kann, ist kein Hinweis, sondern Rauschen. Nicht verwechseln: Der Import und Export eines COLMAP-Workspace ist reines Swift-Datei-Parsen, braucht keine COLMAP-Installation und funktioniert in jedem Build (Kapitel 1, M5). Der Zusatz „(Beta)" am Native-Eintrag ist entfallen — Native ist seit v1.5.2 keine Beta mehr. Die Auswahl bestimmt das SfM-Backend des nächsten Laufs und steuert zugleich, welche Zeilen darunter bedienbar sind (I13, High-Quality, Native SfM Recipe). Fußnote im UI: Bei einem unsortierten Fotoset richtet die Pipeline immer mit Native aus, egal was der Picker zeigt — dieses Rezept gibt es nur dort. Der Picker wird dabei bewusst nicht gesperrt (der Wert ist nicht unverfügbar, er wird nur überstimmt); stattdessen erscheint ein Hinweis mit Verzweigungs-Symbol.
I13FOV Override-Feld (Native SfM)
WO
Inspector → Kameras & Aufnahme → FOV Override (immer sichtbar, bedienbar nur bei Camera Alignment = Native).
TECHNISCH
Numerisches Textfeld (Range 0-170°), Default 0 = automatische Bestimmung aus EXIF oder Heuristik. Die manuelle Eingabe ist nötig, wenn die Eingabe-Bilder aus einem Video extrahiert wurden, das keine Brennweiten-Metadaten enthält. Typische Werte: iPhone Wide ≈ 73°, DJI Mavic Wide-Crop ≈ 70°, Drohne mit Vollformatsensor ≈ 84°. Der Wert wird auf [0, 170] geclampt — Werte außerhalb werden direkt zurückgestaucht. Wirkt sich nur auf die native SfM-Pipeline aus (Q4/Q5); Apple Photogrammetry ignoriert diesen Wert komplett. Seit 2026-07-18: Unter anderen Backends wird das Feld nicht mehr ausgeblendet, sondern ausgegraut — zusammen mit „High-Quality" und „Native SfM Recipe" und einer Zeile mit Schloss-Symbol („These configure the Native aligner — choose Native under Camera Alignment to change them."). Das frühere Ausblenden hatte verschwiegen, dass es diese Regler überhaupt gibt. Das Gate hängt am gewählten Backend, nicht am tatsächlich benutzten — die Umleitung unsortierter Fotosets auf Native meldet stattdessen der Hinweis unter I12. Die Zeile „Native SfM Recipe" braucht zusätzlich ein unsortiertes Fotoset und trägt sonst ihre eigene Erklärzeile.
I15Densification-Picker
WO
Inspector → Trainingskonfiguration → Densification (segmentierter Picker, immer sichtbar).
TECHNISCH
Schaltet zwischen den beiden Densification-Strategien: Classic (Original-3DGS-Verfahren mit Clone/Split/Prune und Gradienten-Threshold) und MCMC (Stochastic Gradient Langevin Dynamics mit Relocation, NeurIPS 2024). Beim Wechsel von Classic auf MCMC setzt die App die MCMC-spezifischen Felder automatisch auf erprobte Default-Werte (Reg-Weights = 0, MCMC-Cap- Multiplier 3.0, Sample-/Noise-Schedule). Ohne diese automatische Initialisierung litten Sessions mit alten Presets unter dem 1.4.4-MCMC-Collapse-Bug (460K→5 Gaussians, Watchdog-Kill). Die Picker- Auswahl bestimmt zusätzlich, welche Inspector-Elemente sichtbar sind — bei MCMC tauchen I16/I17 auf. Detaillierte Feld-Wirkung in Kapitel 6, T11–T16 (Classic) und T61–T73 (MCMC).
I16MCMC Quality-Toggle
WO
Inspector → Training → MCMC Quality (immer sichtbar, bedienbar bei Densification = MCMC oder Hybrid).
TECHNISCH
Schaltet die Gradient-Accumulation auf 2 Schritte (aktiv) bzw. 1 Schritt (inaktiv). Akkumuliert die Gradienten aus zwei aufeinanderfolgenden Kamera-Views, bevor der Optimizer-Step ausgeführt wird. Das glättet den Optimierungspfad und verbessert das Endergebnis leicht, aber sichtbar. Der Preis: verdoppelte Trainingszeit. Bei sehr langen Trainings (200K Iterationen) führt das zu zusätzlichen 10+ Minuten Wartezeit — also nur dann lohnt, wenn die letzten paar Prozent Qualität wirklich gebraucht werden. Wirkt sich nur auf das Training aus, nicht auf das Export-Format oder die Viewport-Darstellung. Gilt auch für Hybrid, das dieselbe MCMC-Maschinerie benutzt. Seit 2026-07-18: Unter Classic verschwindet die Zeile nicht mehr, sondern wird zusammen mit I17 und „Max Gaussians" ausgegraut; darunter steht „Only used by the MCMC and Hybrid densifiers — switch Densification above to change these."
I17Auto-scale by scene-Toggle
WO
Inspector → Training → Auto-scale by scene (immer sichtbar, bedienbar bei Densification = MCMC oder Hybrid).
TECHNISCH
Wenn aktiv, skaliert die effektive Max-Gaussians- Obergrenze mit der SfM-Init-Point-Count × MCMC-Cap-Multiplier (Default 3.0). Beispiel: SfM liefert 250K Initpunkte, Basis-Cap = 150K, Multiplier 3.0 → effektive Obergrenze = max(150K, 750K) = 750K. Wenn deaktiviert, gilt strikt nur die Basis. Die Basis selbst steht in der Zeile Max Gaussians direkt darunter (seit 1.8, Default 150 000, Eingabe geclampt auf 10 000–30 000 000). Liegt die effektive Obergrenze über der Basis, blendet die App sie als Klartext ein („Effective cap for this scene: …") — samt RAM-Warnung, wenn sie zu hoch gerät. War für v1.4.5 eingeführt, weil große Outdoor-Aufnahmen mit über 1000 Frames und entsprechend hoher SfM-Punkt-Dichte mit der starren 150K-Cap-Default die Densification ausgehungert haben — überflüssige Punkte blieben, neue durften nicht entstehen. Default OFF in Custom-Presets, ON in MCMC-Built-ins. Wirkt sich nur zur Trainingszeit aus, nicht im Export. Seit 2026-07-18: Unter Classic wird die Zeile ausgegraut statt ausgeblendet (mit derselben Erklärzeile wie I16); Klartext-Anzeige und RAM-Warnung erscheinen dort bewusst nicht, weil Classic gar keine Obergrenze anwendet.
I18Max Iterations-Stepper
WO
Inspector → Trainingskonfiguration → GroupBox → Max Iterations.
TECHNISCH
Stepper mit Range 1 000–100 000, Schrittweite 1 000. Bestimmt die Gesamtzahl der Optimizer-Iterationen. Linear korreliert mit der Trainingszeit (Halbierung = ca. 50% Zeit). Bewährte Werte sind 20K (Classic Balanced), 40K (Classic Quality) und 200K (MCMC Full). Über 40K bringt Classic kaum noch Verbesserung — der Ertrag flacht ab. Beim Verändern wird, falls die Link-Funktion (I19) aktiv ist, Densify Until proportional mitgezogen (Default-Ratio: 0.5, d.h. Densify-Until = Max/2).
I19Link/Unlink-Button (Densify ↔ Iterations)
WO
Inspector → Trainingskonfiguration → GroupBox → kleiner Link-Button zwischen Max Iterations und Densify Until.
TECHNISCH
Toggle-Button, der das Verhältnis von Densify Until zu Max Iterations einfriert. Bei Aktiv (Link-Icon hervorgehoben) wird bei jeder Änderung von Max Iterations das Densify Until proportional nachgezogen. Beim Unlink (Link-Plus-Icon) bleiben die Werte unabhängig. Default ist linked, weil das die typische Korrelation widerspiegelt — wenn du das Training auf doppelte Iterationen ziehst, willst du meistens auch die Densification proportional länger laufen lassen. Das Verhältnis wird beim Setzen des Link-Buttons aus dem aktuellen Wert berechnet; ein typisches Verhältnis ist 0.5 (Densify-Until = halbe Iterations-Zahl).
I20Densify Until-Stepper
WO
Inspector → Trainingskonfiguration → GroupBox → Densify Until.
TECHNISCH
Stepper mit Range 500–50 000, Schrittweite 500. Bestimmt den Iterations-Index, ab dem keine neuen Gaussians mehr durch Clone/Split (Classic) oder Relocation (MCMC) hinzukommen. Nach Erreichen werden nur noch Position und Farbe verfeinert. Höhere Werte = mehr Gaussians = größere Datei, längere Pro-Iteration-Zeit (+30-60% GPU-Time pro Schritt). Typische Werte: 15K (für 30K Max-Iter), 20K (für 40K), 100K (für 200K MCMC). Bei aktivem Link (I19) automatisch mitskaliert. Wirkt sich anders bei Classic vs MCMC aus: Classic stoppt komplett das Wachstum, MCMC stoppt die Relocation-Logik, aber Sample-/Noise-Adaption läuft weiter.
I21SSIM Weight-Slider
WO
Inspector → Trainingskonfiguration → GroupBox → SSIM Weight.
TECHNISCH
Slider 0.0–1.0 in 0.05-Schritten, Anzeige als „0.20". Mischt L1-Loss (0.0) und SSIM-Loss (1.0). L1 strafft die Helligkeit pro Pixel, SSIM die strukturelle Ähnlichkeit (Kanten, lokale Statistiken). Default 0.2 ist der Wert aus dem Original-3DGS-Paper (Kerbl 2023) und ein robuster Kompromiss für nahezu jede Szene. Höhere Werte (0.5+) bevorzugen Detailerhalt, können aber lokale Helligkeitsfehler ignorieren. Niedrigere Werte (< 0.1) führen zu Detail-Verlust an scharfen Kanten. Die SSIM- Berechnung läuft im Shader mit einem 11×11-Gaussian-Window. Performance: Bei 0.0 (nur L1) ist das Training ca. 8-12% schneller, weil die SSIM-Berechnung im Shader übersprungen wird.
I22Render Scale-Slider
WO
Inspector → Trainingskonfiguration → GroupBox → Render Scale.
TECHNISCH
Slider 0.25–1.0 in 0.25-Schritten, Anzeige als „100%". Skaliert die Trainings-Rendering-Auflösung relativ zur Quellbild-Größe. Größter Hebel auf die Performance: 50% reduziert GPU-Zeit um ca. 75% (weil 4× weniger Pixel), 25% um ca. 94%. Der Gradient-Threshold wird automatisch mitskaliert. Unter dem Slider erscheint eine Live-Resolutions-Anzeige in MP (z.B. „2304×1296 (3.0 MP)"). Falls der aktuelle Wert vom empfohlenen abweicht, wird in oranger Schrift „— recommended: 50%" eingeblendet. Die Empfehlung zielt auf ~3 MP effektive Auflösung — der von Apple Silicon GPUs am effizientesten verarbeitbare Bereich. 4K-Quellbilder bekommen z.B. automatisch 25% empfohlen, FullHD-Bilder 100%. Eine Änderung triggert zusätzlich die Buffer-Reallokation.
Enhancements-Gruppen (in der Training-Sektion, I26–I29, I42–I44)

Diese Gruppen sammeln Features, die die Bildqualität verbessern, ohne den Kern-Trainings-Loop selbst zu verändern. Bis 2026-07-18 bildeten sie eine eigene Inspector-Sektion namens Enhancements; seit der Domänen-Neugruppierung sitzen sie am unteren Ende der Sektion Training. Der frühere Viewport-Scaling-Picker (Off/MetalFX/Lanczos) ist ersatzlos entfallen: er hat nie etwas bewirkt — die Blit-Entscheidung im Viewport ist rein geometrisch — und seine Beschriftung versprach zusätzlich ein Hochskalieren, während der reale Lanczos-Pass ein Antialiasing-Herunter-Rechnen eines übersampelten Bildes ist. Die Anzeige im Viewport heißt entsprechend jetzt „Sampling" statt „Scaling" (Kapitel 4); nirgends in der App wird mit MetalFX hochskaliert. Die Perceptual Loss (I29) ist trotz der Gruppen-Zugehörigkeit ein Trainings-Bestandteil — sie wird während des Trainings als zusätzlicher Loss-Term aktiviert; sie steht ganz oben, mit der Erklärzeile „Multi-scale blur feature matching for structural similarity". Darunter kommt die Outdoor-Gruppe mit vier Schaltern — Sky Masking, Person Masking, Floater Cleanup und Reconstruct Sky Dome (I42–I44) —, Trainings-Optionen gegen Himmels-Floater, die früher im Einstellungs-Fenster lagen und jetzt pro Projekt hier sitzen. Es folgt die eingeklappte Zeile „Advanced Densifier (Expert)", die ein Warndreieck trägt, weil dahinter Regler liegen, die ein Training auch zerlegen können. Den Schluss macht die Gruppe „Runs automatically at the end of training" mit der Post-Training Compactification (I26) und dem Schalter „Remove Needle/Disc Floaters".
I26Post-Training Compactification-Toggle
WO
Inspector → Training → Gruppe „Runs automatically at the end of training" → Post-Training Compactification.
TECHNISCH
Aktiviert einen Aufräum-Durchgang am Ende: Nach Abschluss der Trainings-Iterationen werden Gaussians mit Opacity unter 0.01 (1% Sichtbarkeit) gelöscht. Das schrumpft die Datei-Größe typischerweise etwa auf die Hälfte, ohne dass ein Qualitätsverlust sichtbar wird — weil diese Gaussians visuell ohnehin nicht beitragen. Die Compactification läuft als GPU-Compact-Pass und dauert je nach Gaussian-Count Sekundenbruchteile bis wenige Sekunden. Beeinflusst die Trainings-Performance nicht. Wenn dieser Toggle aus ist, werden auch invisible Gaussians exportiert — relevant nur, wenn du das Format für ein weiteres Training-Stage gebrauchen willst (Continue Training), sonst Verschwendung von Speicher.
I29Perceptual Loss-Slider
WO
Inspector → Training → Perceptual Loss.
TECHNISCH
Slider 0.0–0.2 in 0.01-Schritten, Anzeige bei 0.0 als „Off", sonst als „0.05" usw. Aktiviert einen zusätzlichen Loss-Term, der multi-skalierten Gaussian-Blur des Renderings mit dem Ground-Truth-Bild vergleicht (3 Blur-Skalen). Fängt strukturelle Unterschiede ein, die L1+SSIM allein nicht erkennen. Werte zwischen 0.05 und 0.1 verbessern feine Strukturen sichtbar und kosten dabei nur wenig Trainingszeit — rund 5% (zusätzlicher Forward-Pass durch die Blur-Kernel). Über 0.15 wird das Training instabil und die Qualität sinkt wieder, weil dieser Loss-Term die Optimierung dominiert. Wirkt während des Trainings, nicht im Post-Processing — trotz seiner Position bei den Enhancement-Zeilen am Ende der Training-Sektion ist das also keine reine Aufwertung im Nachgang.
I42Sky Masking
WO
Inspector → Training (Outdoor-Gruppe) → Toggle „Sky Masking". Wird pro Projekt gespeichert; Standard: aus.
TECHNISCH
Aktiviert pre-training Apple-Vision-basierte Sky-Pixel-Segmentation. Vor Trainings-Start wird für jede Eingabe-Kamera die Sky-Region per Apple-Vision-Foreground-Mask extrahiert (Sky = Background) und als Pro-Pixel-Maske der jeweiligen Kamera zugeordnet. Während des Trainings wird der Loss-Beitrag pro Pixel mit dem Komplement der Sky-Maske multipliziert — Sky-Pixel tragen 0 zum Gradient bei, sodass Gaussians, die in den Himmel projizieren, keine Optimierungs-Signale erhalten und damit nicht „dichter" oder „heller" werden. Reduziert Floater (dunkle Klümpchen im Himmel) bei Outdoor-/Drohnen-Szenen signifikant. Kostet ~3% L1-Regression bei klassischem 40K-Training. Nur sinnvoll bei Outdoor-Szenen mit klar erkennbarem Himmel; bei Innenraum-Szenen oder weißem Hintergrund identifiziert die Sky-Segmentierung falsche Bereiche und blockt valide Loss-Signale. Der Wert wird pro Projekt gespeichert (nicht mehr app-global) und folgt dem Preset bzw. der Szenendatei.
I43Floater Cleanup
WO
Inspector → Training (Outdoor-Gruppe) → Toggle „Floater Cleanup" (Untertitel „Remove Gaussians outside all camera views"). Wird pro Projekt gespeichert; Standard: aus.
TECHNISCH
Der Schalter steuert zwei Effekte mit unterschiedlichen Bedingungen; beide werden beim Start auf die lauf-lokale Config abgeleitet, nicht in die gespeicherte Konfiguration geschrieben (sonst blieben sie als Einweg-Rastung hängen). (1) Frustum-Union-Cull am Trainingsende — Gaussians außerhalb der Vereinigung aller Kamera-Frusta werden entfernt („nie beobachtet" = „nie eingeschränkt", und genau das sind die meisten Floater). Dieser Teil hat keine Strategie-Bedingung und läuft bei Classic, MCMC und Hybrid gleichermaßen — nach ihm ist der Schalter benannt. (2) Zwei zusätzliche Density-Control-Pässe mitten im Lauf — nur bei Classic und nur ab 30 000 Iterationen, gesetzt auf 55 % und 85 % der Lauflänge (bei 35–40K also etwa 20K und 30K). Beide Pässe suchen Gaussians mit sehr niedriger Opacity, winziger Screen-Space-Größe und ohne Loss-Beitrag und purgen sie. Effekt: ~5–15% weniger Gaussians am Ende, sichtbar weniger dunkle Klümpchen im Himmel bei Drohnen-/Outdoor-Szenen. Kostet ~1–3% L1-Regression bei Close-Up-Indoor-Szenen, daher nicht als Default aktiviert. Der Wert wird pro Projekt gespeichert und folgt Preset bzw. Szenendatei. Korrektur gegenüber früheren Auflagen: Der Toggle ist nicht mehr auf den Classic-Densifier beschränkt und wird unter MCMC/Hybrid auch nicht mehr ausgegraut — das hatte MCMC- und Hybrid-Nutzer ausgerechnet von dem Cull ausgesperrt, der bei ihnen wirkt. Bei kurzen Läufen (z.B. P2 Preview 5K) entfällt lediglich der mitten-im-Lauf-Teil.
I44Reconstruct Sky Dome
WO
Inspector → Training (Outdoor-Gruppe) → Toggle „Reconstruct Sky Dome". Wird pro Projekt gespeichert; Standard: aus.
TECHNISCH
Aktiviert die Sky-Dome-Projektion vor dem Training. Nach SfM und vor Trainings-Start wird für jede Eingabe-Kamera die in S7 gemeinsam genutzte Apple-Vision-Sky-Maske aus dem Bild extrahiert, die Sky-Pixel werden mit den Kamera-Intrinsics ent-projiziert auf eine virtuelle Kugel-Oberfläche (Standard-Radius 8× Szenen-Radius). Auf dieser Kugel werden ~5000 neue Gaussians initialisiert mit Farb-Mittelwerten aus den projizierten Sky-Pixeln, sehr großer Skalierung (1.0 in Szenen-Einheiten) und Anfangs-Opacity 0.95. Diese 5000 Gaussians sind kein Sky-Mask im klassischen Sinn — sie werden trainiert wie alle anderen, aber durch die hohe Anfangs-Opacity in einer dünnen Schale belassen. Ergebnis: bei 360°-Novel-Views in Outdoor-/Drohnen-Szenen erscheinen statt dunkler Confetti-Klümpchen tatsächliche Himmels-Farbe und Wolken-Strukturen. Der Wert wird über Neustarts gemerkt. Sinnvoll nur bei Outdoor-Szenen mit zumindest 360°-Kamera-Abdeckung; bei reinen Object-Captures ohne Himmel-Sicht hat es keinen Effekt. Status: experimentell, breitere A/B-Validierung über weitere Outdoor-Sets steht noch aus.
Metriken-Sektion (I30–I37)

Während ein Training läuft, zeigt die Metriken-Gruppe („Training Metrics", eine der beiden klappbaren Gruppen in der Sektion Fortschritt) acht Live-Werte aus dem Trainings-Loop. Vor Start eines Trainings ist sie leer („Start training to see live metrics"). Alle Werte werden alle ~30 Iterationen aktualisiert (Update-Frequenz der Live-Metriken). Die Sektion ist read-only — kein Element ist anklickbar oder veränderbar. Für tiefere Analyse die JSONL-Trainings-Logs unter ~/Documents/RadianceKit/Logs/ heranziehen.
I30Iteration
WO
Inspector → Fortschritt → Training Metrics → Iteration. Read-only.
TECHNISCH
Anzeige im Format „4523 / 40000" — aktuelle Iteration über totale geplante Iterationen. Zählt synchron mit dem Trainings-Loop, der die Werte alle ~30 Iter pushed. Die zweite Zahl entspricht dem Max-Iterations-Wert zum Start-Zeitpunkt; sie ändert sich nicht mehr, auch wenn der Anwender den Stepper danach verstellt — der laufende Lauf nutzt seine eigene Snapshot-Kopie. Wenn die App über das Training-Menü Iterationen draufschiebt (Continue Training +5K/+10K/+20K), erhöht sich der Nenner.
I31Loss
WO
Inspector → Fortschritt → Training Metrics → Loss. Read-only.
TECHNISCH
Float-Wert mit sechs Nachkommastellen (z.B. „0.024385"). Misst den kombinierten L1+SSIM-Loss (Mix kontrolliert über I21 SSIM Weight) plus optional Perceptual Loss (I29) und andere Regularizer. Skala ist nicht absolut, sondern szenenabhängig — verlangt für die meisten Vergleiche denselben Datensatz. Typische Endwerte bei guten Konfigurationen: - Classic Quality 40K iters: 0.022–0.025 (Horse, Truck, Garden) - MCMC Full 200K iters: 0.024–0.028 - Outdoor Drohne 30K: 0.030–0.060 (geometrie-bedingt schlechter) - Indoor Apartments: 0.018–0.025
Werte über 0.10 nach 5K Iterationen deuten auf SfM-Probleme (schlechte Kamera-Posen) hin — abbrechen und SfM neu rechnen.
I32Learning Rate
WO
Inspector → Fortschritt → Training Metrics → Learning Rate. Read-only.
TECHNISCH
Scientific-Notation-Anzeige (z.B. „1.60e-04"). Aktuelle Lernrate für die Position-Parameter (3DGS hat sechs unabhängige LRs für Position, SH-DC, SH-Rest, Opacity, Scale, Rotation — angezeigt wird hier die Position-LR als repräsentative Größe). Default-Anfangswert 1.6e-4, der über einen Exponential-Decay bis ~1.6e-6 am Trainingsende absinkt. Der Verfall ist über das LR-Schedule-Feld in der Trainings- Konfiguration (T-Feld in Kap. 6) anpassbar. Wenn die LR ungewöhnlich hoch bleibt (z.B. 1e-3 oder mehr nach 10K Iterationen), könnte das auf eine fehlerhaft geladene Konfiguration hinweisen.
I33SH Degree
WO
Inspector → Fortschritt → Training Metrics → SH Degree. Read-only.
TECHNISCH
Ganzzahl 0-3. Spherical-Harmonics-Grad für die Farb-Repräsentation. Beginnt bei 0 (nur die DC-Komponente, d.h. richtungs-unabhängige Farbe pro Gaussian — also nur eine RGB-Konstante) und steigt im Verlauf des Trainings progressiv auf 3 an. Der Standard-Schedule hebt den Grad bei 1000/2000/3000 Iterationen um je 1. SH-3 entspricht 48 Farb-Koeffizienten pro Gaussian (3 RGB-Channels × 16 SH-Basisfunktionen). Höherer SH-Grad = mehr richtungs-abhängige Reflexion (glänzende Oberflächen sehen unter verschiedenen Blickwinkeln korrekt unterschiedlich aus), aber auch mehr Speicher und langsameres Training.
I34Gaussians
WO
Inspector → Fortschritt → Training Metrics → Gaussians. Read-only.
TECHNISCH
Aktuelle Anzahl der Gaussians im Modell, formatiert mit Locale-Separator (z.B. „524.318"). Wachstum: - Classic: startet bei den SfM-Init-Punkten (typisch 50K-300K), wächst durch Clone/Split bis kurz vor Densify Until, dann statisch bis Trainingsende (modulo Pruning) - MCMC: Sample-Punkte werden hinzugefügt bis zum MCMC-Cap, dann nur noch Relocation
Healthy Endwerte: - Classic Quality: 400K-700K (Horse 524K, Garden 800K) - MCMC Full: exakt auf dem Cap (Default 150K, mit Auto-Scale Multiplier × SfM-Count je nach Szene 500K-1.5M)
Bei MCMC fällt die Zahl auf < 60% des Caps → Anomalie (Collapse-Indikator, deutet auf zu aggressive Regularizer hin).
I35GPU Memory
WO
Inspector → Fortschritt → Training Metrics → GPU Memory. Read-only.
TECHNISCH
Schätzung des Gaussian-Buffer-Speicherverbrauchs als Gaussian-Count × 616 Bytes (formatiert im Memory-Style). 616 Bytes ist die Größe eines voll ausgestatteten Gaussians (Position, Skalierung, Rotation, Opacity, SH-Koeffizienten Grad 3, Gradient- Akkumulator). Die Anzeige erfasst nicht den Renderer-Overhead (Tile-Buffer, Sort-Buffer, Backward-Buffer) — der reale GPU- Speicherbedarf liegt typisch 2-3× über diesem Wert. Bei 500K Gaussians: angezeigt ~290 MB, real ~700 MB. Bei 1.5M Gaussians: angezeigt ~880 MB, real ~2.5 GB. Auf M3 Max mit 64+ GB Unified Memory unkritisch, auf M3 Pro mit 18 GB schon ein Limit.
I36Speed
WO
Inspector → Fortschritt → Training Metrics → Speed. Read-only.
TECHNISCH
Iterations-pro-Sekunde mit einer Nachkommastelle („24.3 it/s"). Berechnet vom Trainer als gleitender Durchschnitt über die letzten ~100 Iterationen. Typische Werte: - Quick Preset (1K iters): 80-120 it/s (kurz, kein steady-state) - Classic 20K @ 1.0 Render Scale (Truck-Szene, 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 (langsamer wegen Relocation) - Bei 1M+ Gaussians und voller Auflösung: < 10 it/s
Sinkende Speed im Verlauf des Trainings ist normal — mehr Gaussians = mehr Compute pro Iteration. Plötzliche Einbrüche (z.B. von 30 → 5 it/s) deuten auf GPU-Thermal-Throttling oder konkurrierende Apps hin.
I37Elapsed
WO
Inspector → Fortschritt → Training Metrics → Elapsed. Read-only.
TECHNISCH
Bereits vergangene Zeit als „4:23" (m:ss) oder „1:23:45" (h:mm:ss). Format-Switch ab 1 Stunde. Misst nur die reine Trainings-Zeit, nicht die vorgelagerten Phasen (SfM-Berechnung, Bild- Import). Bei Pause/Resume läuft die Uhr weiter — ist also wall-clock, nicht CPU-Zeit.
Verlust-Diagramm-Sektion (I39–I41)

Die Verlust-Diagramm-Gruppe („Loss History", die zweite klappbare Gruppe in der Sektion Fortschritt) visualisiert den Trainings-Verlauf über die Zeit. Sie besteht aus zwei Charts: einem Loss-Curve-Chart (groß, oben, blau) und einem Gaussian-Count-Chart (kleiner, unten, orange). Beide werden live während des Trainings aufgebaut und persistieren bis zum nächsten Trainings-Start. Vor dem ersten Training ist der Bereich leer („Loss curve will appear during training"). Die Charts sind reine SwiftUI-Path-Drawings (kein Swift-Charts-Framework), damit sie auch bei 100K+ Punkten flüssig rendern.
I39Current Loss (Anzeige)
WO
Inspector → Fortschritt → Loss History → linker Label-Bereich „Current: 0.0075". Read-only.
TECHNISCH
Float-Wert des letzten Loss-Sample-Punkts, formatiert mit vier Nachkommastellen. Identisch mit I31 (Loss in der Metrics-Sektion), nur hier kompakter formatiert. Quelle ist die Loss- History — eine Liste, die pro ~30 Iterationen einen Eintrag bekommt. Nur endliche Werte werden in die Liste aufgenommen — NaN/Infinity (sehr selten, im Falle eines Gradient-Explosion-Bugs) werden gefiltert.
I40Min Loss (Anzeige)
WO
Inspector → Fortschritt → Loss History → rechter Label-Bereich „Min: 0.0051" (grün). Read-only.
TECHNISCH
Minimum aller jemals gesehenen Loss-Werte des aktuellen Trainings-Laufs. Wird live aus der Loss-History rekomputiert — keine separate Persistenz. Wird mit grüner Schrift dargestellt, weil „Min" = „Best so far". Die gestrichelte grüne Linie am unteren Chart-Rand markiert diese Y-Position visuell. Bei Continue-Training- Sessions startet die Mindest-Verfolgung neu — die alte History wird in der UI durch die neue ersetzt (nicht angehängt). Wenn das aktuelle Training schlechter als das vorhergehende läuft, kann die Min-Anzeige also größer sein als das vorherige Endergebnis.
I41Gaussian Count Chart
WO
Inspector → Fortschritt → Loss History → zweites Chart darunter (orange). Read-only.
TECHNISCH
Linien-Diagramm der Gaussian-Anzahl über die Trainings-Iterationen. Quelle: die Gaussian-Count-History (Liste von (Iter, Count)-Paaren, gefüllt vom Trainer alle ~30 Iter). Y-Skala dynamisch zwischen Minimum und Maximum der History. Bei Classic- Strategie sieht die Kurve typischerweise so aus: stetig steigend bis Densify Until, dann flach (mit kleinen Pruning-Schwankungen). Bei MCMC: steiler Anstieg bis Cap, dann horizontale Linie (Relocation hält die Zahl konstant). Ein Rückgang ganz am Ende ist normal — im Bild oben sinkt die Kurve von rund 16K auf 9.660, weil die Aufräum-Pässe nach der letzten Iteration greifen (I26). Alarmierend ist nur ein Einbruch mitten im Lauf: dann prunt die Densification zu aggressiv — Indiz für falsche Defaults oder ein bekannter MCMC-Collapse-Bug (v1.4.4-Hotfix-Thema).
Wie liest man die Loss-Kurve?
Das Loss-Chart ist das wichtigste Diagnose-Tool im Inspector — kein anderer Indikator zeigt so direkt, ob das Training nützlich vorangeht oder festhängt. Die typische gesunde Form ist ein schneller Abfall in den ersten 1000-3000 Iterationen (von ~0.15 auf ~0.05), gefolgt von einem langsamen, gleichmäßigen Abfall bis zum Trainingsende (auf 0.020-0.030). Logarithmisch wirkt die Kurve dabei wie eine glatte Diagonale.
Was bedeutet ein Plateau bei der Loss? Wenn die Kurve über mehrere Tausend Iterationen flach bleibt, gibt's zwei mögliche Lesarten: (a) Training ist „konvergiert" — der Loss kann nicht mehr signifikant sinken, weil das Modell so gut ist, wie es mit den gegebenen Daten und Settings sein kann. Das ist erwünscht; das ist „fertig". (b) Training „hängt" — der Loss kann eigentlich noch sinken, aber Optimierung stagniert (lokales Minimum, Lernrate zu klein, Densification aus). Unterscheiden: Wenn der Loss-Wert in einem typisch guten Bereich liegt (0.020-0.030 bei Indoor/Object, 0.040-0.060 bei Outdoor) und die Kurve seit 5K Iterationen flach ist, ist's konvergiert. Wenn der Wert deutlich höher ist als bei vergleichbaren Szenen (z.B. 0.08), hängt es.
Achtung Gaussian-Plateau ≠ Loss-Plateau. Ein Plateau in der Gaussian-Anzahl bedeutet nicht „Training ist fertig". Es bedeutet nur, dass die Densification aufgehört hat, neue Punkte hinzuzufügen — entweder weil erreicht ist (Classic) oder weil das MCMC-Cap voll ist. Das Training läuft danach weiter und verfeinert nur noch die bestehenden Punkte. Das eigentliche „fertig"-Signal liest du an der Loss-Kurve und an der Iteration-Anzeige (I30), nicht hier.
Faustregel zum Abbrechen: Wenn die Loss-Kurve nach 5000+ Iterationen über 0.08 liegt und kaum noch sinkt, ist mit hoher Wahrscheinlichkeit die SfM-Rekonstruktion schief. Training abbrechen, in Kapitel 9 nachschauen, ob das gewählte SfM-Backend zur Szene passt, ggf. auf COLMAP/Native umstellen, dann neu starten. Lieber 10 Minuten in besseres SfM investieren als 2 Stunden Training mit schlechter Kamera-Ausrichtung.
Wann nach Inspector greifen?
Schnell-Referenz: Welche Sektion + welche Controls für welchen typischen Use-Case?
| Common-Task | Sektion | Control-IDs |
|---|---|---|
| Farben des fertigen Splats entsättigen | Look | L1 (Saturation) |
| Nadel-/Konfetti-Splats runden | Look | L2 (Splat length) |
| Löchrige Wolke füllen / Splats vergrößern | Look | L3 (Splat size) |
| Ferne „Far-Konfetti" bei Orbits ausblenden | Look | L4 (Fade far region) |
| Look-Anpassungen verwerfen | Look | L5 (Reset finishing) |
| Vorgefertigtes Setup laden | Presets | I7 (Zeile anklicken) |
| Eigenes Setup speichern | Presets | I1 → I2 → I4 |
| Setup mit Kollegen teilen | Presets | I5 (Export) bzw. I6 (Import) |
| SfM-Backend wechseln (z.B. weil Apple-PG zu instabil) | Kameras & Aufnahme | I12 (siehe Kap. 9) |
| Video-Frames ohne EXIF-Brennweite verarbeiten | Kameras & Aufnahme | I13 (FOV Override) |
| COLMAP-Performance: GLOMAP statt Klassisch | Kameras & Aufnahme | I14 — nur in Entwickler-Builds, im App-Store-Build fehlt COLMAP als Backend |
| Von Classic auf MCMC umschalten | Trainingskonfiguration | I15 |
| Training länger laufen lassen | Trainingskonfiguration | I18 (Max Iter) + I20 (Densify Until) — gekoppelt via I19 |
| GPU-Zeit halbieren | Trainingskonfiguration | I22 (Render Scale auf 50%) |
| Trainings-Qualität +6% (MCMC) | Trainingskonfiguration | I16 (MCMC Quality) |
| Outdoor-Szene mit vielen SfM-Punkten | Trainingskonfiguration | I17 (Auto-scale by scene) |
| COLMAP-Pfad einrichten / wechseln | Kameras & Aufnahme | I23 / I24 / I25 — nur in Entwickler-Builds |
| Export-Dateien kleiner machen | Training | I26 (immer an lassen) |
| Letztes Quäntchen Detail bei feinen Strukturen | Training | I29 (Perceptual Loss 0.05-0.1) |
| Training überwachen | Fortschritt ▸ Training Metrics | I30 (Fortschritt), I36 (Tempo) — die Restzeit steht im Transport-Streifen unter dem Viewport |
| Qualität früh einschätzen | Fortschritt ▸ Training Metrics | I31 (Loss < 0.05 nach 5K = gut) |
| Verdacht auf SfM-Problem | Fortschritt (beide Gruppen) | I31 + I39 (Loss > 0.08 nach 5K → SfM neu) |
| Convergence vs Stuck unterscheiden | Fortschritt ▸ Loss History | I39 + I40 (Loss-Plateau lesen) |
| Densification-Problem erkennen | Fortschritt ▸ Loss History | I41 (Gaussian-Kurve fällt → Bug) |