Guida utente

Capitolo 2 — Inspector (Expert View)

Modalità Expert vuota — a sinistra il Project Navigator con Images/Cameras/Log, intestazione „Images (0)” e area di rilascio „Drop images here / or tap + to import”, al centro un Viewport vuoto, a destra l'Inspector con sei sezioni chiuse (Presets, Cameras & Capture, Training, Progress, Look, Export), ciascuna con titolo e sottoriga grigia della fase; in basso la barra di stato „Idle” con pulsante di avvio verde e pulsante di stop rosso
Modalità Expert vuota — a sinistra il Project Navigator con Images/Cameras/Log, intestazione „Images (0)" e area di rilascio „Drop images here / or tap + to import", al centro un Viewport vuoto, a destra l'Inspector con sei sezioni chiuse (Presets, Cameras & Capture, Training, Progress, Look, Export), ciascuna con titolo e sottoriga grigia della fase; in basso la barra di stato „Idle" con pulsante di avvio verde e pulsante di stop rosso

Inspector vuoto prima dell'importazione: La colonna di sinistra mostra le voci Images, Cameras e Log, sotto l'intestazione „Images (0)" e l'area di rilascio „Drop images here / or tap + to import". Il Viewport al centro è vuoto. A destra si trova l'Inspector con sei sezioni chiuse: Presets, Cameras & Capture, Training, Progress, Look ed Export. Sotto ogni titolo una riga grigia indica cosa fa la sezione e quando agisce — „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) e „Leveling the floor turns the view at once; the chosen orientation and format apply when saving" (Export). In fondo scorre la barra di stato con lo stato „Idle" e il pulsante di avvio verde e quello di stop rosso; in alto a destra si trova l'interruttore Simple/Expert, qui impostato su Expert.

Inspector con 35 immagini importate — intestazione „Images (35)”, nomi file IMG_0953.JPG in ordine crescente, Viewport ancora vuoto, stato „Idle”
Inspector con 35 immagini importate — intestazione „Images (35)", nomi file IMG_0953.JPG in ordine crescente, Viewport ancora vuoto, stato „Idle"

Inspector dopo l'importazione: L'intestazione dell'elenco immagini mostra „Images (35)", sotto sono elencati gli scatti importati con nomi file crescenti a partire da IMG_0953.JPG. Le immagini di questa serie di test hanno una risoluzione di 4032×3024 pixel; la logica di Auto-Render-Scale legge questa risoluzione e propone una Render Scale adeguata. Il Viewport è ancora vuoto, la barra di stato è su „Idle". Il pulsante di avvio verde in basso a sinistra è ora attivo e avvia il training con il preset attivo.

Inspector mid-training — barra del titolo „RadianceKit — Training 23%”, nel Viewport l'anteprima live di un'anatra di stoffa su una pelle di montone, progresso 4,700/20,000 con ETA 1m9s, barra delle metriche Loss 0.0109 / LR 2.0e-04 / SH 1 / Gaussians 16.0K, nell'Inspector il gruppo CLASSIC espanso con „Balanced 20K iters” evidenziato in verde
Inspector mid-training — barra del titolo „RadianceKit — Training 23%", nel Viewport l'anteprima live di un'anatra di stoffa su una pelle di montone, progresso 4,700/20,000 con ETA 1m9s, barra delle metriche Loss 0.0109 / LR 2.0e-04 / SH 1 / Gaussians 16.0K, nell'Inspector il gruppo CLASSIC espanso con „Balanced 20K iters" evidenziato in verde

Inspector durante il training: La barra del titolo mostra il progresso globale, qui „RadianceKit — Training 23%". Il Viewport renderizza in tempo reale la ricostruzione in corso — un'anatra di stoffa su una pelle di montone, già chiaramente riconoscibile (l'intervallo di aggiornamento dell'anteprima live si trova in Settings → General → Training → Live Preview). Sotto il Viewport scorrono il progresso („4,700/20,000", „ETA 1m9s") e la barra delle metriche con Loss 0.0109, LR 2.0e-04, SH 1 e Gaussians 16.0K; in basso a sinistra si trovano i pulsanti Pausa e Stop. Nell'Inspector il gruppo CLASSIC è espanso, „Balanced 20K iters" porta il segno di spunta verde. Un badge „Modified" appare solo quando un parametro si discosta dal preset — qui non se ne vede nessuno. La sidebar „Log" raccoglie gli eventi delle fasi SfM e training.

Inspector dopo il completamento del training — barra del titolo „RadianceKit — Training Complete — 8,708 Gaussians”, a sinistra „Complete” con 8,708 Gaussians, Images 25 e Cameras 35, barra di stato „Completed” a 20,000/20,000, barra delle metriche Loss 0.0075 / LR 0.0e+00 / SH 3 / Gaussians 9.7K, nel Viewport la ricostruzione finale dell'anatra a tutto formato
Inspector dopo il completamento del training — barra del titolo „RadianceKit — Training Complete — 8,708 Gaussians", a sinistra „Complete" con 8,708 Gaussians, Images 25 e Cameras 35, barra di stato „Completed" a 20,000/20,000, barra delle metriche Loss 0.0075 / LR 0.0e+00 / SH 3 / Gaussians 9.7K, nel Viewport la ricostruzione finale dell'anatra a tutto formato

Inspector dopo il training: La barra del titolo indica il risultato: „Training Complete — 8,708 Gaussians". Nella colonna di sinistra compare „Complete" con lo stesso numero, oltre a Images 25 e Cameras 35 — 25 immagini perché il dialogo Frame-Quality ha scartato dieci scatti mossi su 35. La barra di stato segnala „Completed" a 20,000/20,000, la barra delle metriche Loss 0.0075, LR 0.0e+00, SH 3 e Gaussians 9.7K. Il Viewport mostra la nuvola di punti finale a tutto formato — navigazione orbitale con trascinamento attiva (ruota attorno al centro della scena).

Il fatto che qui compaiano due numeri di Gaussians diversi è intenzionale: la barra delle metriche e Training Metrics indicano lo stato alla fine del training (qui 9.660, arrotondato a 9.7K), la barra del titolo e la scena indicano lo stato dopo i cicli automatici di pulizia (8.708). Nel mezzo si collocano la Post-Training Compactification e la rimozione degli splat a forma di ago e di disco. Il numero più piccolo è quello che compare nel Viewport e che viene salvato all'esportazione. I gruppi Training Metrics e Loss History sono ora riempiti con i valori finali, la sezione Export è attiva.

L'Inspector è la barra laterale destra in Expert Mode (⌘2). Raccoglie tutti i parametri rilevanti per il training in sei sezioni richiudibili, raggruppate dal 18-07-2026 per dominio. L'ordine predefinito dall'alto verso il basso è: Presets, Cameras & Capture, Training, Progress, Look ed Export. Sotto ogni titolo si trova una seconda riga che indica la fase — quando la sezione agisce e quanto è reversibile (ad es. „Before training · decides how camera positions are solved · applies to the next run" per Cameras & Capture, „After training · applies immediately · reversible any time" per Look, „Display only" per Progress). Due sezioni precedenti sono confluite altrove: Metrics e grafico della loss sono ora due gruppi separati e richiudibili („Training Metrics" e „Loss History") all'interno di Progress, mentre la precedente sezione Enhancements è interamente confluita in Training. La sezione „Look" (regolazioni immagine post-training) è la rinominazione reale, nell'UI, della precedente sezione „Finishing" — il suo nome interno resta „Finishing" per motivi di compatibilità, mentre il titolo mostrato è „Look" (stesso schema per Training, che internamente si chiama „Training Configuration"). Ogni sezione può essere chiusa cliccando sull'intestazione, e l'ordine può essere riorganizzato con drag-and-drop. Al primo avvio le sezioni sono chiuse — nell'immagine sopra tutte e sei sono chiuse; lo stato dell'app salva successivamente le preferenze di apertura/chiusura e di ordinamento tra un avvio e l'altro. Una disposizione precedente già salvata viene migrata una sola volta, al primo avvio, verso il nuovo raggruppamento; Viewport ▸ Reset Inspector Layout ripristina lo stato di fabbrica.

Una serie di controlli dell'Inspector compare in forma quasi identica anche nelle impostazioni (Capitolo 3) — tipicamente il backend SfM, lo Sky-Masking e altri valori predefiniti simili. La separazione è intenzionale: le impostazioni forniscono il modello globale dell'app per i progetti di nuova creazione, l'Inspector sovrascrive questi valori per il progetto attualmente aperto. Chi conosce la logica d'uso di una delle due parti può usare l'altra a occhi chiusi.

La colonna di sinistra in Expert Mode — il Project Navigator — non fa parte dell'Inspector, ma ne è il vicino diretto. Lì le immagini importate possono essere selezionate con un clic, visualizzate con la barra spaziatrice in Quick Look ed eliminate tramite il pulsante meno o il tasto Canc (con Cmd-Z per annullare). L'Inspector segue la selezione attuale nella sidebar con informazioni di dettaglio contestuali, ma le sette sezioni principali restano sempre disponibili.

Sezione Look (L1–L5)

La sezione Look (internamente ancora chiamata „Finishing") è, dalla riorganizzazione dei domini, la quinta sezione dell'Inspector — tra Progresso ed Esportazione — e riunisce in un unico posto le regolazioni dell'immagine post-training. Tutti i cursori operano in modo non distruttivo: ogni slider riapplica il calcolo del look a uno snapshot pristine invariato (colore DC originale, opacità, scala) — la regolazione è quindi idempotente, non cumulativa. Il risultato appare dal vivo nel Viewport (WYSIWYG, esattamente come nell'esportazione successiva) e viene incorporato in ogni esportazione. La sezione è disponibile solo dopo il completamento di un ciclo di training (prima appare „Available after a training run completes."); i suoi valori vengono reimpostati a ogni nuovo training. Finché è in corso un'esportazione, tutti i cursori sono bloccati — appare un avviso di blocco „Locked while exporting — the file uses the current settings." e la GroupBox è disabilitata.

L1Slider Saturation

DOVE

Inspector → sezione Look → GroupBox → Saturation.

TECNICO

Slider 0.5–1.2, visualizzazione a due decimali (es. „1.00"). Scala la crominanza SH-DC di ogni splat rispetto al valore di luminanza: 1.0 = invariato, < 1.0 = desaturato (colore tirato verso il grigio), > 1.0 = più intenso. Matematicamente il colore DC viene ricalcolato a partire dallo snapshot pristine, così spostamenti ripetuti non si sommano. È stato validato su materiale girato con droni DJI (viadotto di Pensford), che tende a risultare sovrasaturato — il default per i droni è 0.82. Agisce solo sulla base colore (grado SH 0), i coefficienti SH più alti restano intatti.

L2Slider Splat length

DOVE

Inspector → sezione Look → GroupBox → Splat length.

TECNICO

Slider 0.3–1.0, visualizzazione a due decimali. Tira i tre assi di scala di ogni Gaussiana nello spazio logaritmico verso il loro valore medio (più basso il valore, più forte l'effetto): 1.0 = invariato, valori più piccoli rendono più rotondi gli splat a „ago" allungati, 0 sarebbero sfere pure. Interviene sugli splat a forma di ago, eccessivamente allungati, senza modificarne la dimensione complessiva, riducendo così i tipici artefatti a „coriandoli". Applicato a partire dallo snapshot pristine (scala logaritmica originale), quindi idempotente. Commuta con Splat size (L3), perché entrambi operano nello spazio logaritmico.

L3Slider Splat size

DOVE

Inspector → sezione Look → GroupBox → Splat size.

TECNICO

Slider 0.5–2.0, visualizzazione a due decimali. Scala ogni Gaussiana in modo uniforme su tutti e tre gli assi: 1.0 = invariato, < 1.0 = più piccolo/denso/nitido, > 1.0 = più grande/„soffice" (riempie gli spazi tra gli splat). Poiché le scale si trovano nello spazio logaritmico, la moltiplicazione diventa qui uno spostamento additivo — questo commuta con Splat length (L2), perché un offset costante lascia intatta la deviazione dalla media. Calcolato a partire dallo snapshot pristine, quindi idempotente. Nuovo in questa versione.

L4Fade far region (con sotto-cursori)

DOVE

Inspector → sezione Look → GroupBox → interruttore „Fade far region" più i sotto-cursori „Fade start ×radius" e „Fade floor".

TECNICO

Interruttore che attiva una dissolvenza radiale dell'opacità in base alla distanza dal baricentro delle camere — i „coriandoli lontani" osservati debolmente sullo sfondo vengono nascosti. Solo per riprese orbit: l'interruttore è disattivato (in grigio) se la scena non si presta (voli lineari, camere troppo poche o degeneri); in tal caso, al posto dei sotto-cursori appare l'avviso „Far-fade applies only to orbit captures (not this scene)." L'idoneità viene determinata tramite la copertura azimutale delle posizioni delle camere (un orbit gira attorno al baricentro riempiendo molti settori della bussola, un volo lineare solo ~2). Due sotto-cursori controllano la geometria: Fade start ×radius (1.0–3.0) imposta il raggio interno come multiplo del raggio dell'orbit, entro il quale vale l'opacità piena; Fade floor (0.0–1.0) è il fattore di opacità ben oltre il raggio di dissolvenza. Importante: la dissolvenza salta la zona dello sky-dome (le Gaussiane congelate della cupola), in modo che la cupola di sfondo intenzionale non venga oscurata insieme al resto.

L5Pulsante Reset finishing

DOVE

Inspector → sezione Look → GroupBox → „Reset finishing" (in basso, piccolo pulsante).

TECNICO

Reimposta tutte le impostazioni Look ai valori predefiniti (Saturation 1.0, Fade disattivato, Splat length 1.0, Splat size 1.0) e avvia immediatamente un nuovo finishing, così che il Viewport torni allo stato addestrato invariato. Poiché l'intero stack Look calcola in modo idempotente a partire dallo snapshot pristine, „tornare al default" corrisponde esattamente all'output di training originale — nessuna perdita di qualità dovuta a spostamenti ripetuti avanti e indietro. Come tutti i cursori della sezione, è bloccato durante un'esportazione in corso.

Sezione Preset (I1–I11)

La sezione Preset è il modo più rapido per applicare una configurazione testata. I preset integrati (Capture Class, Classic, MCMC, Hybrid) offrono punti di partenza collaudati e riproducibili; i tuoi preset personalizzati possono essere salvati, esportati, importati e condivisi. La lista è raggruppata per categorie (Capture Class, Classic, MCMC, Hybrid, Custom) e più di una categoria può essere espansa contemporaneamente. Tramite il meccanismo del menu contestuale (clic destro su una riga) sono raggiungibili l'esportazione, la duplicazione e — per i preset personalizzati — l'eliminazione.

I1Pulsante Save…

DOVE

Inspector → sezione Preset → pulsante Save… (barra azioni in basso).

TECNICO

Apre un popover con campo di testo e pulsanti Save/Cancel. Lo stato attuale delle impostazioni di training viene salvato come nuovo preset personalizzato (codificato in JSON, salvato a livello dell'intera app). L'operazione di salvataggio copia tutti gli 81 parametri di training più la strategia di Densification corrente. Il preset finisce automaticamente nella categoria Custom, indipendentemente da quale preset integrato derivi. Nomi vuoti o composti solo da spazi vengono scartati. Nomi già esistenti non vengono rifiutati — ogni preset ha un proprio ID interno, i nomi duplicati sono tecnicamente consentiti, ma nella pratica creano confusione.

I2Campo di testo Preset Name

DOVE

Popover Save → campo di testo "Preset Name".

TECNICO

Semplice campo di testo con bordo arrotondato, forma larga. Il valore viene assunto come nome del preset al clic sul pulsante Save. Nessun limite di lunghezza nell'interfaccia, ma il nome salvato deve essere codificabile in JSON e visualizzabile nelle liste dell'interfaccia — emoji e caratteri accentati funzionano. Il contenuto viene automaticamente azzerato all'apertura del popover. Il pulsante Save rimane disabilitato finché il campo, dopo il trim, è vuoto. Non c'è auto-suggest né precompilazione con il nome del preset attualmente attivo.

I3Pulsante Cancel (dialogo Save)

DOVE

Popover Save → pulsante Cancel (a sinistra).

TECNICO

Chiude il popover senza salvare. Scarta il contenuto del campo di testo — alla prossima apertura verrà di nuovo azzerato dalla logica del pulsante Save… (I1). Stile pulsante standard, nessun dialogo di conferma, nessuna scorciatoia da tastiera. La TrainingConfig attuale rimane invariata, poiché il percorso di salvataggio non è stato affatto eseguito.

I4Pulsante Save (dialogo Save)

DOVE

Popover Save → pulsante Save (a destra, stile prominente).

TECNICO

Attiva la persistenza vera e propria. Convalida nuovamente che il nome non sia vuoto (controllo difensivo) e poi scrive la TrainingConfig attuale come JSON nella memoria dell'app. Chiude quindi il popover. Evidenziato in blu, disattivato finché il campo di testo è vuoto. Se il salvataggio fallisce (ad es. perché la memoria dell'app è piena — molto improbabile), al momento non c'è un dialogo di errore visibile; il preset semplicemente non comparirebbe al successivo avvio dell'app.

I5Pulsante Export…

DOVE

Inspector → sezione Preset → barra azioni → pulsante Export….

TECNICO

Esporta il preset attualmente selezionato come file .radiancepreset (internamente JSON). Disattivato se nessun preset è selezionato. Al clic l'app apre un dialogo di salvataggio con nome file predefinito (nome del preset + estensione .radiancepreset). Il formato salvato contiene l'intera TrainingConfig più i metadati (nome, categoria, ID, flag built-in). Il doppio clic nel Finder apre l'app — ma non avvia automaticamente l'importazione; l'utente deve usare il pulsante Import… (I6).

I6Pulsante Import…

DOVE

Inspector → sezione Preset → barra azioni → pulsante Import….

TECNICO

Apre un dialogo file che ammette solo file .radiancepreset (selezione multipla disattivata). Alla selezione, il file JSON viene caricato, validato e inserito nella categoria Custom — con un nuovo ID interno, in modo che non si creino collisioni con i built-in. L'importazione imposta automaticamente la categoria su Custom, anche se il preset esportato era originariamente ad es. un built-in. I file danneggiati o incompatibili con una versione più vecchia dello schema vengono rifiutati silenziosamente, senza dialogo di errore (il log della console fornisce comunque informazioni).

I7Riga preset (attivazione con clic)

DOVE

Inspector → sezione Preset → ogni riga preset in ogni categoria.

TECNICO

Il clic su una riga preset sostituisce tutti i campi della TrainingConfig con i valori del preset, memorizza l'ID del preset attivo e azzera lo stato Modified. Il segno di spunta attivo davanti alla riga compare solo se il preset è selezionato E non modificato. Non appena viene modificato un valore nella TrainingConfig (slider, stepper, toggle nelle altre sezioni dell'Inspector), compare un badge arancione "Modified" dietro al nome. I preset integrati non possono essere sovrascritti — in caso di modifica occorre creare una copia propria tramite il pulsante Save (I1).

I8Menu contestuale "Export…"

DOVE

Clic destro su ogni riga preset → prima voce "Export…".

TECNICO

Funzionalità identica a I5 (pulsante Export…), ma più comoda da raggiungere — senza che il preset debba essere prima selezionato. Esporta direttamente il preset cliccato nella riga. Funziona allo stesso modo per tutte le categorie di preset (built-in o Custom), senza limitazioni. L'esportazione contiene il flag built-in e la categoria originale, ma alla reimportazione la categoria viene mappata su Custom come descritto in I6.

I9Menu contestuale "Duplicate"

DOVE

Clic destro su ogni riga preset → seconda voce "Duplicate".

TECNICO

Clona il preset nella categoria Custom. Genera un nuovo ID interno, aggiunge " Copy" al nome e salva la copia. Funziona anche per i preset built-in — il clone risulta quindi modificabile. L'originale rimane intatto. La TrainingConfig viene copiata valore per valore (roundtrip JSON), così non esistono legami di riferimento tra originale e copia.

I10Menu contestuale "Delete"

DOVE

Clic destro sulle righe dei propri preset → ultima voce "Delete" (rossa, distruttiva).

TECNICO

Visibile solo per i preset Custom. I built-in non possono essere eliminati. La voce è contrassegnata come distruttiva, compare in rosso nel menu contestuale ed è separata da un divisore, in modo da non cliccarla per errore. Non c'è nessun dialogo di conferma — un clic elimina immediatamente il preset. Il preset eliminato non è recuperabile (Cmd-Z qui non funziona — l'undo nella build attuale esiste solo per la lista immagini, non per le operazioni sui preset). Se il preset eliminato era attivo, la TrainingConfig attuale rimane invariata, viene solo azzerata la selezione del preset attivo.

I11Intestazione categoria (Espandi/Comprimi)

DOVE

Inspector → sezione Preset → ogni intestazione di categoria (Capture Class, Classic, MCMC, Hybrid, Custom).

TECNICO

Stato di espansione per categoria con default diverso: il gruppo curato Capture Class parte espanso, Classic, MCMC, Hybrid e Custom partono compressi. Lo stato non viene salvato in modo persistente — al riavvio dell'app tutte le categorie tornano allo stato predefinito. La freccia chevron ruota in modo animato. Il numero a destra nell'intestazione mostra il numero di preset in quella categoria. L'area cliccabile copre l'intera zona dell'intestazione.

Sezione Configurazione Training (I12–I22)

Ritaglio della sezione Training — Densification come selettore a tre vie Classic | MCMC | Hybrid con Classic attivo, sotto le righe disattivate MCMC Quality (off), Auto-scale by scene (on) e Max Gaussians 150,000 con l'indicazione del lucchetto; separati sotto Depth-Priority Scatter (off), Full-Resolution Training (off), Max Iterations 5,000 e Densify Until 3,500 con l'icona blu della catena, cursore SSIM Weight a 0.20 e Render Scale al 50%
Ritaglio della sezione Training — Densification come selettore a tre vie Classic | MCMC | Hybrid con Classic attivo, sotto le righe disattivate MCMC Quality (off), Auto-scale by scene (on) e Max Gaussians 150,000 con l'indicazione del lucchetto; separati sotto Depth-Priority Scatter (off), Full-Resolution Training (off), Max Iterations 5,000 e Densify Until 3,500 con l'icona blu della catena, cursore SSIM Weight a 0.20 e Render Scale al 50%

Qui si trovano le leve centrali per il run di training: come lavora la Densification, quante iterazioni, quanto grande la ponderazione SSIM — e in fondo gli enhancement che un tempo erano indipendenti (Perceptual Loss, gruppo Outdoor, Advanced Densifier, pass Post-Training). In cima si trova la Densification come selettore a tre vie Classic | MCMC | Hybrid. Il backend SfM non è più qui, ma nella sezione dedicata Kameras & Aufnahme (I12, I13). Le tre righe MCMC ("MCMC Quality", "Auto-scale by scene" e "Max Gaussians") non scompaiono più in modalità Classic, ma restano visibili e vengono disattivate; sotto compare una riga con icona a lucchetto che indica cosa modificare ("Only used by the MCMC and Hybrid densifiers — switch Densification above to change these."). Un blocco separato sotto riassume le righe valide per ogni densifier: Depth-Priority Scatter, Full-Resolution Training, la coppia collegata Max Iterations / Densify Until e i cursori SSIM Weight e Render Scale.

I12Selettore Camera Alignment

DOVE

Inspector → Kameras & Aufnahme → Camera Alignment (menu a comparsa sotto il selettore Projection).

TECNICO

Menu a comparsa, non un selettore segmentato — le etichette farebbero saltare la stretta colonna dell'Inspector. Quali voci compaiono dipende dalla build: la versione sandboxed dell'App Store offre Apple Photogrammetry e Native, le build dev/DMG offrono anche COLMAP. Motivo: COLMAP è un programma esterno a riga di comando, e le app sandboxed non possono avviare binari esterni (regola App Review 2.5.2) — per questo la voce del backend, con selettore Mapper e percorso del binario, manca completamente nella build Store, invece di essere disattivata in modo permanente: una riga che non potrà mai accendersi non è un'indicazione, è rumore. Da non confondere: l'importazione ed esportazione di un workspace COLMAP è puro parsing di file Swift, non richiede un'installazione di COLMAP e funziona in ogni build (Capitolo 1, M5). L'aggiunta "(Beta)" alla voce Native è stata rimossa — Native non è più in beta dalla v1.5.2. La selezione determina il backend SfM del prossimo run e allo stesso tempo controlla quali righe sottostanti sono utilizzabili (I13, High-Quality, Native SfM Recipe). Nota a piè di pagina nell'UI: con un set di foto non ordinato la pipeline esegue sempre l'allineamento con Native, indipendentemente da cosa mostra il selettore — questa ricetta esiste solo lì. Il selettore non viene bloccato di proposito (il valore non è indisponibile, viene solo sovrascritto); al suo posto compare un avviso con un'icona di diramazione.

I13Campo FOV Override (Native SfM)

DOVE

Inspector → Kameras & Aufnahme → FOV Override (sempre visibile, utilizzabile solo con Camera Alignment = Native).

TECNICO

Campo di testo numerico (intervallo 0-170°), default 0 = determinazione automatica da EXIF o euristica. L'inserimento manuale è necessario quando le immagini di input sono state estratte da un video privo di metadati di lunghezza focale. Valori tipici: iPhone Wide ≈ 73°, DJI Mavic Wide-Crop ≈ 70°, drone con sensore full-frame ≈ 84°. Il valore viene ristretto a [0, 170] — i valori fuori range vengono immediatamente riportati nell'intervallo. Influisce solo sulla pipeline SfM nativa (Q4/Q5); Apple Photogrammetry ignora questo valore completamente. Dal 2026-07-18: con altri backend il campo non viene più nascosto, ma disattivato — insieme a "High-Quality" e "Native SfM Recipe" e a una riga con icona a lucchetto ("These configure the Native aligner — choose Native under Camera Alignment to change them."). Il precedente nascondimento taceva sul fatto che questi controlli esistessero affatto. Il gate dipende dal backend selezionato, non da quello effettivamente utilizzato — il reindirizzamento dei set di foto non ordinati verso Native viene invece segnalato dall'avviso in I12. La riga "Native SfM Recipe" richiede inoltre un set di foto non ordinato e ha altrimenti una propria riga esplicativa.

I15Selettore Densification

DOVE

Inspector → Configurazione Training → Densification (selettore segmentato, sempre visibile).

TECNICO

Passa tra le due strategie di Densification: Classic (procedura 3DGS originale con Clone/Split/Prune e soglia del gradiente) e MCMC (Stochastic Gradient Langevin Dynamics con Relocation, NeurIPS 2024). Passando da Classic a MCMC l'app imposta automaticamente i campi specifici MCMC su valori predefiniti collaudati (Reg-Weights = 0, moltiplicatore MCMC-Cap 3.0, schedule Sample/Noise). Senza questa inizializzazione automatica, le sessioni con vecchi preset soffrivano il bug MCMC-Collapse della 1.4.4 (460K→5 Gaussians, kill del watchdog). La selezione nel picker determina inoltre quali elementi dell'Inspector sono visibili — con MCMC compaiono I16/I17. L'effetto dettagliato dei campi è nel Capitolo 6, T11–T16 (Classic) e T61–T73 (MCMC).

I16Interruttore MCMC Quality

DOVE

Inspector → Training → MCMC Quality (sempre visibile, utilizzabile con Densification = MCMC o Hybrid).

TECNICO

Passa l'accumulo del gradiente a 2 passi (attivo) oppure 1 passo (inattivo). Accumula i gradienti da due view di camera consecutive prima che venga eseguito lo step dell'optimizer. Questo smussa il percorso di ottimizzazione e migliora leggermente ma visibilmente il risultato finale. Il prezzo: tempo di training raddoppiato. Con training molto lunghi (200K iterazioni) questo porta a 10+ minuti di attesa aggiuntiva — quindi conviene solo quando gli ultimi punti percentuali di qualità sono davvero necessari. Influisce solo sul training, non sul formato di esportazione o sulla resa nel Viewport. Vale anche per Hybrid, che usa lo stesso meccanismo MCMC. Dal 2026-07-18: con Classic la riga non scompare più, ma viene disattivata insieme a I17 e "Max Gaussians"; sotto compare "Only used by the MCMC and Hybrid densifiers — switch Densification above to change these."

I17Interruttore Auto-scale by scene

DOVE

Inspector → Training → Auto-scale by scene (sempre visibile, utilizzabile con Densification = MCMC o Hybrid).

TECNICO

Se attivo, scala il limite massimo effettivo di Max Gaussians con il numero di punti iniziali SfM × moltiplicatore MCMC-Cap (default 3.0). Esempio: SfM fornisce 250K punti iniziali, cap base = 150K, moltiplicatore 3.0 → limite effettivo = max(150K, 750K) = 750K. Se disattivato, vale strettamente solo la base. La base stessa si trova nella riga Max Gaussians subito sotto (dalla 1.8, default 150 000, input ristretto a 10 000–30 000 000). Se il limite effettivo supera la base, l'app lo mostra in chiaro ("Effective cap for this scene: …") — con un avviso RAM se diventa troppo alto. Introdotto per la v1.4.5, perché grandi riprese outdoor con oltre 1000 frame e conseguente alta densità di punti SfM affamavano la Densification con il cap rigido di default a 150K — i punti superflui restavano, i nuovi non potevano nascere. Default OFF nei preset personalizzati, ON nei built-in MCMC. Ha effetto solo in fase di training, non nell'esportazione. Dal 2026-07-18: con Classic la riga viene disattivata invece di essere nascosta (con la stessa riga esplicativa di I16); la visualizzazione in chiaro e l'avviso RAM lì non compaiono intenzionalmente, perché Classic non applica alcun limite massimo.

I18Stepper Max Iterations

DOVE

Inspector → Configurazione Training → GroupBox → Max Iterations.

TECNICO

Stepper con intervallo 1 000–100 000, incremento 1 000. Determina il numero totale di iterazioni dell'optimizer. Correlato linearmente con il tempo di training (dimezzare = circa 50% del tempo). Valori collaudati sono 20K (Classic Balanced), 40K (Classic Quality) e 200K (MCMC Full). Oltre 40K Classic porta a malapena ulteriori miglioramenti — il guadagno si appiattisce. Modificando il valore, se la funzione di collegamento (I19) è attiva, Densify Until viene trascinato proporzionalmente (rapporto default: 0.5, cioè Densify-Until = Max/2).

I19Pulsante Link/Unlink (Densify ↔ Iterations)

DOVE

Inspector → Configurazione Training → GroupBox → piccolo pulsante Link tra Max Iterations e Densify Until.

TECNICO

Pulsante toggle che congela il rapporto tra Densify Until e Max Iterations. Se attivo (icona a catena evidenziata), a ogni modifica di Max Iterations, Densify Until viene aggiornato proporzionalmente. Con Unlink (icona catena con più), i valori restano indipendenti. Il default è collegato, perché riflette la correlazione tipica — se allunghi il training a iterazioni doppie, di solito vuoi anche far durare la Densification proporzionalmente più a lungo. Il rapporto viene calcolato dal valore attuale al momento dell'attivazione del pulsante Link; un rapporto tipico è 0.5 (Densify-Until = metà del numero di iterazioni).

I20Stepper Densify Until

DOVE

Inspector → Configurazione Training → GroupBox → Densify Until.

TECNICO

Stepper con intervallo 500–50 000, incremento 500. Determina l'indice di iterazione a partire dal quale non vengono più aggiunti nuovi Gaussians tramite Clone/Split (Classic) o Relocation (MCMC). Una volta raggiunto, vengono affinate solo posizione e colore. Valori più alti = più Gaussians = file più grande, tempo per iterazione più lungo (+30-60% tempo GPU per step). Valori tipici: 15K (per 30K Max-Iter), 20K (per 40K), 100K (per 200K MCMC). Con Link attivo (I19) viene scalato automaticamente. Ha effetto diverso in Classic vs MCMC: Classic ferma completamente la crescita, MCMC ferma la logica di Relocation, ma l'adattamento Sample/Noise continua.

I21Cursore SSIM Weight

DOVE

Inspector → Configurazione Training → GroupBox → SSIM Weight.

TECNICO

Cursore 0.0–1.0 in incrementi di 0.05, visualizzato come "0.20". Mescola L1-Loss (0.0) e SSIM-Loss (1.0). L1 corregge la luminosità per pixel, SSIM la somiglianza strutturale (bordi, statistiche locali). Il default 0.2 è il valore del paper originale 3DGS (Kerbl 2023) ed è un compromesso robusto per quasi ogni scena. Valori più alti (0.5+) privilegiano la conservazione dei dettagli, ma possono ignorare errori locali di luminosità. Valori più bassi (< 0.1) portano a perdita di dettaglio sui bordi netti. Il calcolo SSIM avviene nello shader con una finestra gaussiana 11×11. Prestazioni: a 0.0 (solo L1) il training è circa 8-12% più veloce, perché il calcolo SSIM nello shader viene saltato.

I22Cursore Render Scale

DOVE

Inspector → Configurazione Training → GroupBox → Render Scale.

TECNICO

Cursore 0.25–1.0 in incrementi di 0.25, visualizzato come "100%". Scala la risoluzione di rendering del training relativamente alla dimensione dell'immagine sorgente. La leva più grande sulle prestazioni: 50% riduce il tempo GPU di circa il 75% (perché 4× meno pixel), 25% di circa il 94%. La soglia del gradiente viene scalata automaticamente. Sotto il cursore compare un'indicazione live della risoluzione in MP (ad es. "2304×1296 (3.0 MP)"). Se il valore attuale si discosta da quello raccomandato, compare in testo arancione "— recommended: 50%". La raccomandazione punta a circa 3 MP di risoluzione effettiva — l'intervallo elaborato in modo più efficiente dalle GPU Apple Silicon. Le immagini sorgente 4K ottengono ad es. automaticamente il 25% raccomandato, le immagini FullHD il 100%. Una modifica innesca inoltre la riallocazione del buffer.

Gruppo Enhancements (nella sezione Training, I26–I29, I42–I44)

Ritaglio delle righe Enhancements, oggi alla fine della sezione Training — in alto il cursore Perceptual Loss tutto a sinistra su „Off”, sotto il gruppo Outdoor con i quattro interruttori disattivati Sky Masking, Person Masking, Floater Cleanup e Reconstruct Sky Dome, poi la riga richiudibile „Advanced Densifier (Expert)” con triangolo di avviso, infine il gruppo „Runs automatically at the end of training” con Post-Training Compactification (attivo) e Remove Needle/Disc Floaters. Ogni riga ha una propria riga esplicativa
Ritaglio delle righe Enhancements, oggi alla fine della sezione Training — in alto il cursore Perceptual Loss tutto a sinistra su „Off", sotto il gruppo Outdoor con i quattro interruttori disattivati Sky Masking, Person Masking, Floater Cleanup e Reconstruct Sky Dome, poi la riga richiudibile „Advanced Densifier (Expert)" con triangolo di avviso, infine il gruppo „Runs automatically at the end of training" con Post-Training Compactification (attivo) e Remove Needle/Disc Floaters. Ogni riga ha una propria riga esplicativa

Questi gruppi raccolgono funzionalità che migliorano la qualità dell'immagine senza modificare il loop di training principale. Fino al 18-07-2026 formavano una propria sezione dell'Inspector chiamata Enhancements; dopo il raggruppamento per domini si trovano ora in fondo alla sezione Training. Il precedente selettore Viewport-Scaling (Off/MetalFX/Lanczos) è scomparso senza sostituzione: non ha mai avuto alcun effetto — la decisione di blit nel Viewport è puramente geometrica — e la sua etichetta prometteva anche un upscaling, mentre il vero passaggio Lanczos è un downscaling con antialiasing di un'immagine sovracampionata. La visualizzazione nel Viewport si chiama quindi ora „Sampling" invece di „Scaling" (Capitolo 4); da nessuna parte nell'app viene fatto upscaling con MetalFX. La Perceptual Loss (I29), nonostante appartenga a questo gruppo, è a tutti gli effetti un componente del training — viene attivata durante il training come termine di loss aggiuntivo; si trova in cima, con la riga esplicativa „Multi-scale blur feature matching for structural similarity". Sotto trovi il gruppo Outdoor con quattro interruttori — Sky Masking, Person Masking, Floater Cleanup e Reconstruct Sky Dome (I42–I44) —, opzioni di training contro i floater del cielo, che prima si trovavano nella finestra delle impostazioni e ora risiedono qui per singolo progetto. Segue la riga richiudibile „Advanced Densifier (Expert)", che porta un triangolo di avviso perché dietro si trovano cursori che possono anche far fallire un training. A chiudere c'è il gruppo „Runs automatically at the end of training" con la Post-Training Compactification (I26) e l'interruttore „Remove Needle/Disc Floaters".

I26Interruttore Post-Training Compactification

DOVE

Inspector → Training → gruppo „Runs automatically at the end of training" → Post-Training Compactification.

TECNICO

Attiva un passaggio di pulizia finale: al termine delle iterazioni di training vengono eliminati i Gaussiani con opacity inferiore a 0.01 (1% di visibilità). Questo riduce tipicamente le dimensioni del file a circa la metà, senza che si noti alcuna perdita di qualità — perché questi Gaussiani non contribuiscono comunque visivamente. La compattazione viene eseguita come passaggio GPU compact e dura, a seconda del numero di Gaussiani, da frazioni di secondo a pochi secondi. Non influisce sulle prestazioni del training. Se questo interruttore è disattivato, vengono esportati anche i Gaussiani invisibili — rilevante solo se vuoi usare il formato per un'ulteriore fase di training (Continue Training), altrimenti è uno spreco di memoria.

I29Cursore Perceptual Loss

DOVE

Inspector → Training → Perceptual Loss.

TECNICO

Cursore 0.0–0.2 con incrementi di 0.01, visualizzato a 0.0 come „Off", altrimenti come „0.05" ecc. Attiva un termine di loss aggiuntivo che confronta un blur gaussiano multi-scala del rendering con l'immagine di riferimento (ground truth) (3 scale di blur). Cattura differenze strutturali che L1+SSIM da soli non riconoscono. Valori tra 0.05 e 0.1 migliorano visibilmente le strutture fini e costano solo poco tempo di training — circa il 5% (passaggio forward aggiuntivo attraverso i kernel di blur). Oltre 0.15 il training diventa instabile e la qualità torna a peggiorare, perché questo termine di loss domina l'ottimizzazione. Agisce durante il training, non nel post-processing — nonostante la sua posizione tra le righe Enhancement alla fine della sezione Training, non si tratta quindi di un puro miglioramento a posteriori.

I42Sky Masking

DOVE

Inspector → Training (gruppo Outdoor) → interruttore „Sky Masking". Viene salvato per singolo progetto; predefinito: disattivato.

TECNICO

Attiva la segmentazione pre-training dei pixel del cielo basata su Apple Vision. Prima dell'inizio del training, per ogni telecamera di input viene estratta la regione del cielo tramite la foreground mask di Apple Vision (cielo = background) e assegnata come maschera per-pixel alla rispettiva telecamera. Durante il training, il contributo di loss per pixel viene moltiplicato per il complemento della maschera del cielo — i pixel del cielo contribuiscono con 0 al gradiente, così i Gaussiani che si proiettano nel cielo non ricevono segnali di ottimizzazione e quindi non diventano „più densi" o „più luminosi". Riduce significativamente i floater (grumi scuri nel cielo) nelle scene outdoor/da drone. Costa circa il 3% di regressione L1 in un training classico a 40K. Utile solo in scene outdoor con un cielo chiaramente riconoscibile; in scene di interni o con sfondo bianco la segmentazione del cielo identifica aree errate e blocca segnali di loss validi. Il valore viene salvato per singolo progetto (non più a livello globale dell'app) e segue il preset o il file di scena.

I43Floater Cleanup

DOVE

Inspector → Training (gruppo Outdoor) → interruttore „Floater Cleanup" (sottotitolo „Remove Gaussians outside all camera views"). Viene salvato per singolo progetto; predefinito: disattivato.

TECNICO

L'interruttore controlla due effetti con condizioni diverse; entrambi vengono derivati all'avvio nella configurazione locale della sessione, non scritti nella configurazione salvata (altrimenti resterebbero bloccati come impostazione a uso singolo). (1) Frustum-Union-Cull alla fine del training — i Gaussiani al di fuori dell'unione di tutti i frusta delle telecamere vengono rimossi („mai osservato" = „mai vincolato", ed è esattamente questo che riguarda la maggior parte dei floater). Questa parte non ha nessuna condizione di strategia e funziona allo stesso modo con Classic, MCMC e Hybrid — da questa parte prende il nome l'interruttore. (2) Due passaggi aggiuntivi di density control a metà run — solo con Classic e solo a partire da 30 000 iterazioni, impostati al 55% e all'85% della lunghezza del run (per 35–40K quindi circa a 20K e 30K). Entrambi i passaggi cercano Gaussiani con opacity molto bassa, dimensione screen-space minuscola e nessun contributo al loss, ed li eliminano. Effetto: circa il 5–15% in meno di Gaussiani alla fine, visibilmente meno grumi scuri nel cielo nelle scene drone/outdoor. Costa circa l'1–3% di regressione L1 nelle scene indoor ravvicinate, per cui non è attivo per impostazione predefinita. Il valore viene salvato per singolo progetto e segue il preset o il file di scena. Correzione rispetto alle edizioni precedenti: l'interruttore non è più limitato al densificatore Classic e con MCMC/Hybrid non viene più disattivato in grigio — questo escludeva proprio gli utenti MCMC e Hybrid dal cull che invece funziona per loro. Nei run brevi (ad es. P2 Preview 5K) viene semplicemente omessa la parte a metà run.

I44Reconstruct Sky Dome

DOVE

Inspector → Training (gruppo Outdoor) → interruttore „Reconstruct Sky Dome". Viene salvato per singolo progetto; predefinito: disattivato.

TECNICO

Attiva la proiezione della sky dome prima del training. Dopo la SfM e prima dell'inizio del training, per ogni telecamera di input viene estratta dall'immagine la maschera del cielo di Apple Vision condivisa in S7, i pixel del cielo vengono de-proiettati usando gli intrinsics della telecamera su una superficie sferica virtuale (raggio predefinito 8× il raggio della scena). Su questa sfera vengono inizializzati circa 5000 nuovi Gaussiani con valori medi di colore ricavati dai pixel del cielo proiettati, scala molto grande (1.0 in unità di scena) e opacity iniziale 0.95. Questi 5000 Gaussiani non sono una sky mask in senso classico — vengono addestrati come tutti gli altri, ma restano confinati in un guscio sottile grazie all'elevata opacity iniziale. Risultato: nelle novel view a 360° in scene outdoor/da drone appaiono colori del cielo e strutture di nuvole reali invece di grumi scuri simili a coriandoli. Il valore viene ricordato tra i riavvii. Utile solo in scene outdoor con almeno una copertura telecamere a 360°; nelle riprese di soli oggetti senza vista del cielo non ha alcun effetto. Stato: sperimentale, manca ancora una validazione A/B più ampia su ulteriori set outdoor.

Sezione Metriche (I30–I37)

Crop del gruppo „Training Metrics” dopo l'addestramento completato — otto righe: Iteration 20000 / 20000, Loss 0.007471, Learning Rate 0.00e+00, SH Degree 3, Gaussians 9,660, GPU Memory 5.7 MB, Speed 223.7 it/s, Elapsed 1:29
Crop del gruppo „Training Metrics" dopo l'addestramento completato — otto righe: Iteration 20000 / 20000, Loss 0.007471, Learning Rate 0.00e+00, SH Degree 3, Gaussians 9,660, GPU Memory 5.7 MB, Speed 223.7 it/s, Elapsed 1:29

Mentre un training è in corso, il gruppo Metriche („Training Metrics", uno dei due gruppi comprimibili nella sezione Avanzamento) mostra otto valori live provenienti dal loop di addestramento. Prima dell'avvio di un training è vuoto („Start training to see live metrics"). Tutti i valori vengono aggiornati ogni ~30 iterazioni (frequenza di aggiornamento delle metriche live). La sezione è di sola lettura — nessun elemento è cliccabile o modificabile. Per un'analisi più approfondita, consulta i log di training JSONL in ~/Documents/RadianceKit/Logs/.

I30Iteration

DOVE

Inspector → Avanzamento → Training Metrics → Iteration. Sola lettura.

TECNICO

Visualizzazione nel formato „4523 / 40000" — iterazione attuale rispetto al totale di iterazioni pianificate. Conta in sincrono con il loop di addestramento, che invia i valori ogni ~30 iter. Il secondo numero corrisponde al valore Max Iterations al momento dell'avvio; non cambia più, anche se l'utente modifica lo stepper in seguito — l'esecuzione in corso utilizza una propria copia snapshot. Se l'app aggiunge iterazioni tramite il menu Training (Continue Training +5K/+10K/+20K), il denominatore aumenta.

I31Loss

DOVE

Inspector → Avanzamento → Training Metrics → Loss. Sola lettura.

TECNICO

Valore float con sei decimali (ad es. „0.024385"). Misura la loss combinata L1+SSIM (mix controllato tramite I21 SSIM Weight) più opzionalmente la Perceptual Loss (I29) e altri regolarizzatori. La scala non è assoluta, ma dipende dalla scena — richiede lo stesso dataset per la maggior parte dei confronti. Valori finali tipici con configurazioni buone: - Classic Quality 40K iters: 0.022–0.025 (Horse, Truck, Garden) - MCMC Full 200K iters: 0.024–0.028 - Drone esterni 30K: 0.030–0.060 (peggiore per motivi geometrici) - Interni Apartments: 0.018–0.025

Valori superiori a 0.10 dopo 5K iterazioni indicano problemi con SfM (pose della camera scadenti) — interrompere e ricalcolare SfM.

I32Learning Rate

DOVE

Inspector → Avanzamento → Training Metrics → Learning Rate. Sola lettura.

TECNICO

Visualizzazione in notazione scientifica (ad es. „1.60e-04"). Learning rate attuale per i parametri di posizione (3DGS ha sei learning rate indipendenti per posizione, SH-DC, SH-Rest, opacità, scala, rotazione — qui viene mostrata la LR della posizione come grandezza rappresentativa). Valore iniziale predefinito 1.6e-4, che decade tramite un decadimento esponenziale fino a ~1.6e-6 alla fine del training. Il decadimento è regolabile tramite il campo LR Schedule nella configurazione di training (campo T nel cap. 6). Se la LR resta insolitamente alta (ad es. 1e-3 o più dopo 10K iterazioni), potrebbe indicare una configurazione caricata in modo errato.

I33SH Degree

DOVE

Inspector → Avanzamento → Training Metrics → SH Degree. Sola lettura.

TECNICO

Numero intero 0-3. Grado delle Spherical Harmonics per la rappresentazione del colore. Inizia a 0 (solo la componente DC, ossia colore indipendente dalla direzione per ogni Gaussian — quindi solo una costante RGB) e sale progressivamente a 3 nel corso del training. Lo schedule predefinito aumenta il grado di 1 alle iterazioni 1000/2000/3000. SH-3 corrisponde a 48 coefficienti di colore per Gaussian (3 canali RGB × 16 funzioni base SH). Grado SH più alto = più riflessione dipendente dalla direzione (le superfici lucide appaiono correttamente diverse a seconda dell'angolo di vista), ma anche più memoria e training più lento.

I34Gaussians

DOVE

Inspector → Avanzamento → Training Metrics → Gaussians. Sola lettura.

TECNICO

Numero attuale di Gaussians nel modello, formattato con separatore locale (ad es. „524.318"). Crescita: - Classic: parte dai punti di inizializzazione SfM (tipicamente 50K-300K), cresce tramite Clone/Split fino a poco prima di Densify Until, poi statico fino alla fine del training (modulo pruning) - MCMC: i punti campionati vengono aggiunti fino al cap MCMC, poi solo relocazione

Valori finali sani: - Classic Quality: 400K-700K (Horse 524K, Garden 800K) - MCMC Full: esattamente sul cap (default 150K, con moltiplicatore Auto-Scale × conteggio SfM a seconda della scena 500K-1.5M)

Con MCMC, se il numero scende sotto il 60% del cap → anomalia (indicatore di collasso, indica regolarizzatori troppo aggressivi).

I35GPU Memory

DOVE

Inspector → Avanzamento → Training Metrics → GPU Memory. Sola lettura.

TECNICO

Stima del consumo di memoria del buffer dei Gaussian come numero di Gaussian × 616 byte (formattato in stile memoria). 616 byte è la dimensione di un Gaussian completamente equipaggiato (posizione, scala, rotazione, opacità, coefficienti SH grado 3, accumulatore di gradiente). La visualizzazione non include l'overhead del renderer (tile buffer, sort buffer, backward buffer) — il reale fabbisogno di memoria GPU è tipicamente 2-3× superiore a questo valore. Con 500K Gaussians: mostrato ~290 MB, reale ~700 MB. Con 1.5M Gaussians: mostrato ~880 MB, reale ~2.5 GB. Su M3 Max con 64+ GB di memoria unificata non è critico, su M3 Pro con 18 GB è già un limite.

I36Speed

DOVE

Inspector → Avanzamento → Training Metrics → Speed. Sola lettura.

TECNICO

Iterazioni al secondo con un decimale („24.3 it/s"). Calcolato dal trainer come media mobile sulle ultime ~100 iterazioni. Valori tipici: - Preset Quick (1K iters): 80-120 it/s (breve, nessuno stato stazionario) - Classic 20K @ 1.0 Render Scale (scena Truck, 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 (più lento a causa della relocazione) - Con 1M+ Gaussians e risoluzione piena: < 10 it/s

Una velocità in calo nel corso del training è normale — più Gaussians = più calcolo per iterazione. Cali improvvisi (ad es. da 30 → 5 it/s) indicano thermal throttling della GPU o app concorrenti.

I37Elapsed

DOVE

Inspector → Avanzamento → Training Metrics → Elapsed. Sola lettura.

TECNICO

Tempo già trascorso come „4:23" (m:ss) o „1:23:45" (h:mm:ss). Cambio di formato dopo 1 ora. Misura solo il puro tempo di training, non le fasi precedenti (calcolo SfM, importazione immagini). Con pausa/ripresa l'orologio continua a scorrere — è quindi wall-clock, non tempo CPU.

Sezione grafico della perdita (I39–I41)

Crop del gruppo „Loss History” dopo l'addestramento completato — Current: 0.0075, a destra in verde Min: 0.0051, curva blu che scende ripidamente da circa 0.14 e poi decresce in modo frastagliato fino a 20K, asse a sinistra 0.14 / 0.071 / 0.0051; sotto il grafico arancione „Gaussian Count” con asse da 16K a 9K e valore finale 9.660
Crop del gruppo „Loss History" dopo l'addestramento completato — Current: 0.0075, a destra in verde Min: 0.0051, curva blu che scende ripidamente da circa 0.14 e poi decresce in modo frastagliato fino a 20K, asse a sinistra 0.14 / 0.071 / 0.0051; sotto il grafico arancione „Gaussian Count" con asse da 16K a 9K e valore finale 9.660

Il gruppo del grafico della perdita ("Loss History", il secondo gruppo espandibile nella sezione Progresso) visualizza l'andamento dell'addestramento nel tempo. È composto da due grafici: un grafico della curva di perdita (grande, in alto, blu) e un grafico del conteggio dei Gaussian (più piccolo, in basso, arancione). Entrambi vengono costruiti dal vivo durante l'addestramento e persistono fino al successivo avvio dell'addestramento. Prima del primo addestramento l'area è vuota ("Loss curve will appear during training"). I grafici sono puri disegni SwiftUI-Path (nessun framework Swift Charts), in modo da renderizzare in modo fluido anche con oltre 100K punti.

I39Current Loss (indicatore)

DOVE

Inspector → Progresso → Loss History → area etichetta a sinistra „Current: 0.0075". Sola lettura.

TECNICO

Valore float dell'ultimo punto campione della perdita, formattato con quattro cifre decimali. Identico a I31 (Loss nella sezione Metrics), solo formattato qui in modo più compatto. La fonte è la Loss History — un elenco che riceve una voce ogni ~30 iterazioni. Solo i valori finiti vengono inclusi nell'elenco — NaN/Infinity (molto rari, nel caso di un bug di esplosione del gradiente) vengono filtrati.

I40Min Loss (indicatore)

DOVE

Inspector → Progresso → Loss History → area etichetta a destra „Min: 0.0051" (verde). Sola lettura.

TECNICO

Il valore minimo tra tutti i valori di perdita mai visti in questa sessione di addestramento corrente. Viene ricalcolato dal vivo a partire dalla Loss History — nessuna persistenza separata. Viene mostrato in verde perché „Min" = „il migliore finora". La linea verde tratteggiata sul bordo inferiore del grafico ne marca visivamente questa posizione Y. Nelle sessioni di Continue Training, il tracciamento del minimo ricomincia da capo — la History precedente viene sostituita nell'interfaccia dalla nuova (non aggiunta). Se l'addestramento attuale procede peggio di quello precedente, l'indicatore Min può quindi essere più alto del risultato finale precedente.

I41Grafico Gaussian Count

DOVE

Inspector → Progresso → Loss History → secondo grafico sottostante (arancione). Sola lettura.

TECNICO

Grafico a linee del numero di Gaussian in funzione delle iterazioni di addestramento. Fonte: la Gaussian Count History (elenco di coppie (Iter, Count), popolato dal trainer ogni ~30 iter). Scala Y dinamica tra il minimo e il massimo della History. Con la strategia Classic, la curva ha tipicamente questo aspetto: crescita costante fino a Densify Until, poi piatta (con piccole oscillazioni di pruning). Con MCMC: salita ripida fino al Cap, poi linea orizzontale (la Relocation mantiene il numero costante). Un calo proprio alla fine è normale — nell'immagine sopra la curva scende da circa 16K a 9.660, perché i passaggi di pulizia dopo l'ultima iterazione intervengono (I26). Allarmante è solo un crollo nel mezzo del run: in quel caso la Densification pota in modo troppo aggressivo — indizio di impostazioni predefinite sbagliate o di un noto bug di collasso MCMC (tema dell'hotfix v1.4.4).

Come si legge la curva di perdita?

Il grafico della perdita è lo strumento diagnostico più importante nell'Inspector — nessun altro indicatore mostra in modo così diretto se l'addestramento sta procedendo in modo utile o se si è bloccato. La forma tipica e sana è un calo rapido nelle prime 1000-3000 iterazioni (da ~0.15 a ~0.05), seguito da un calo lento e costante fino alla fine dell'addestramento (fino a 0.020-0.030). Su scala logaritmica la curva appare come una diagonale liscia.

Cosa significa un plateau nella perdita? Se la curva rimane piatta per diverse migliaia di iterazioni, ci sono due possibili interpretazioni: (a) l'addestramento è „convergente" — la perdita non può più scendere in modo significativo, perché il modello è già buono quanto può esserlo con i dati e le impostazioni date. Questo è desiderabile; significa „finito". (b) L'addestramento „si è bloccato" — la perdita potrebbe in realtà scendere ancora, ma l'ottimizzazione ristagna (minimo locale, learning rate troppo basso, Densification disattivata). Per distinguere: se il valore della perdita si trova in un intervallo tipicamente buono (0.020-0.030 per Indoor/Object, 0.040-0.060 per Outdoor) e la curva è piatta da 5K iterazioni, è convergente. Se il valore è nettamente più alto rispetto a scene comparabili (ad es. 0.08), si è bloccato.

Attenzione: plateau del Gaussian ≠ plateau della perdita. Un plateau nel numero di Gaussian non significa "l'addestramento è finito". Significa solo che la Densification ha smesso di aggiungere nuovi punti — o perché è stato raggiunto (Classic) o perché il Cap MCMC è pieno. L'addestramento prosegue comunque dopo, affinando solo i punti esistenti. Il vero segnale di "finito" lo leggi dalla curva della perdita e dall'indicatore delle iterazioni (I30), non qui.

Regola pratica per interrompere: se la curva di perdita, dopo 5000+ iterazioni, si trova sopra 0.08 e scende a malapena, è molto probabile che la ricostruzione SfM sia sbagliata. Interrompi l'addestramento, controlla nel capitolo 9 se il backend SfM scelto è adatto alla scena, eventualmente passa a COLMAP/Native, quindi riavvia. Meglio investire 10 minuti in un SfM migliore che 2 ore di addestramento con un allineamento della camera scadente.

Quando ricorrere all'Inspector?

Riferimento rapido: quale sezione + quali controlli per quale caso d'uso tipico?

Attività comuneSezioneID controlli
Desaturare i colori dello splat finitoLookL1 (Saturation)
Arrotondare splat ad ago/coriandoloLookL2 (Splat length)
Riempire una nuvola bucherellata / ingrandire gli splatLookL3 (Splat size)
Nascondere i "coriandoli lontani" negli orbitLookL4 (Fade far region)
Annullare le modifiche di lookLookL5 (Reset finishing)
Caricare un setup preconfezionatoPresetsI7 (clic sulla riga)
Salvare un proprio setupPresetsI1 → I2 → I4
Condividere il setup con i colleghiPresetsI5 (Export) oppure I6 (Import)
Cambiare il backend SfM (ad es. perché Apple PG è troppo instabile)Camere & acquisizioneI12 (vedi cap. 9)
Elaborare frame video senza lunghezza focale EXIFCamere & acquisizioneI13 (FOV Override)
Prestazioni COLMAP: GLOMAP invece di ClassicoCamere & acquisizioneI14 — solo nelle build sviluppatore, nella build App Store manca COLMAP come backend
Passare da Classic a MCMCConfigurazione trainingI15
Far girare il training più a lungoConfigurazione trainingI18 (Max Iter) + I20 (Densify Until) — collegati tramite I19
Dimezzare il tempo GPUConfigurazione trainingI22 (Render Scale al 50%)
Qualità training +6% (MCMC)Configurazione trainingI16 (MCMC Quality)
Scena esterna con molti punti SfMConfigurazione trainingI17 (Auto-scale by scene)
Impostare / cambiare il percorso COLMAPCamere & acquisizioneI23 / I24 / I25 — solo nelle build sviluppatore
Rimpicciolire i file di exportTrainingI26 (lasciare sempre attivo)
Ultimo pizzico di dettaglio su strutture finiTrainingI29 (Perceptual Loss 0.05-0.1)
Monitorare il trainingAvanzamento ▸ Training MetricsI30 (Avanzamento), I36 (Tempo) — il tempo restante compare nella barra di trasporto sotto il Viewport
Valutare presto la qualitàAvanzamento ▸ Training MetricsI31 (Loss < 0.05 dopo 5K = buono)
Sospetto problema SfMAvanzamento (entrambi i gruppi)I31 + I39 (Loss > 0.08 dopo 5K → rifare SfM)
Distinguere convergenza da stalloAvanzamento ▸ Loss HistoryI39 + I40 (leggere il plateau della loss)
Riconoscere un problema di densificazioneAvanzamento ▸ Loss HistoryI41 (la curva Gaussian scende → bug)