Capitolo 2 — Inspector (Expert View)

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 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 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 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)

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)

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)

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)

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à comune | Sezione | ID controlli |
|---|---|---|
| Desaturare i colori dello splat finito | Look | L1 (Saturation) |
| Arrotondare splat ad ago/coriandolo | Look | L2 (Splat length) |
| Riempire una nuvola bucherellata / ingrandire gli splat | Look | L3 (Splat size) |
| Nascondere i "coriandoli lontani" negli orbit | Look | L4 (Fade far region) |
| Annullare le modifiche di look | Look | L5 (Reset finishing) |
| Caricare un setup preconfezionato | Presets | I7 (clic sulla riga) |
| Salvare un proprio setup | Presets | I1 → I2 → I4 |
| Condividere il setup con i colleghi | Presets | I5 (Export) oppure I6 (Import) |
| Cambiare il backend SfM (ad es. perché Apple PG è troppo instabile) | Camere & acquisizione | I12 (vedi cap. 9) |
| Elaborare frame video senza lunghezza focale EXIF | Camere & acquisizione | I13 (FOV Override) |
| Prestazioni COLMAP: GLOMAP invece di Classico | Camere & acquisizione | I14 — solo nelle build sviluppatore, nella build App Store manca COLMAP come backend |
| Passare da Classic a MCMC | Configurazione training | I15 |
| Far girare il training più a lungo | Configurazione training | I18 (Max Iter) + I20 (Densify Until) — collegati tramite I19 |
| Dimezzare il tempo GPU | Configurazione training | I22 (Render Scale al 50%) |
| Qualità training +6% (MCMC) | Configurazione training | I16 (MCMC Quality) |
| Scena esterna con molti punti SfM | Configurazione training | I17 (Auto-scale by scene) |
| Impostare / cambiare il percorso COLMAP | Camere & acquisizione | I23 / I24 / I25 — solo nelle build sviluppatore |
| Rimpicciolire i file di export | Training | I26 (lasciare sempre attivo) |
| Ultimo pizzico di dettaglio su strutture fini | Training | I29 (Perceptual Loss 0.05-0.1) |
| Monitorare il training | Avanzamento ▸ Training Metrics | I30 (Avanzamento), I36 (Tempo) — il tempo restante compare nella barra di trasporto sotto il Viewport |
| Valutare presto la qualità | Avanzamento ▸ Training Metrics | I31 (Loss < 0.05 dopo 5K = buono) |
| Sospetto problema SfM | Avanzamento (entrambi i gruppi) | I31 + I39 (Loss > 0.08 dopo 5K → rifare SfM) |
| Distinguere convergenza da stallo | Avanzamento ▸ Loss History | I39 + I40 (leggere il plateau della loss) |
| Riconoscere un problema di densificazione | Avanzamento ▸ Loss History | I41 (la curva Gaussian scende → bug) |