Guida utente

Capitolo 4 — Finestre ausiliarie

Oltre alla finestra principale (viewport 3D più Inspector), RadianceKit gestisce altre sei finestre, che si aprono tutte tramite il menu Help. Il menu contiene otto voci, dall'alto verso il basso: User Guide (⌘?), Keyboard Shortcuts (⌘/), Open Training Logs… (⇧⌘L), Open Exports Folder…, Manage Storage…, Pareto Dashboard… (⇧⌘D), Holdout Analysis… (⇧⌘H), BayesOpt Console… (⇧⌘B). Le due voci "Open …" non aprono una finestra dell'app, ma il Finder; per questo motivo qui non vengono trattate ulteriormente. Tre delle finestre — Dashboard, Holdout, BayesOpt — sono strumenti di analisi autonomi: funzionano indipendentemente dalla finestra principale e leggono o scrivono file JSON su disco. Apri ciascuna di queste tre finestre tramite il menu Help e scegli tu stesso il file o la cartella da analizzare — tramite "Open Reports Folder…", "Open transforms.json…" oppure il pulsante "Start". Queste tre finestre sono le uniche a non essere tradotte: i loro pulsanti, cursori e intestazioni di colonna sono in inglese in ogni versione linguistica. Le diciture qui riportate le ritroverai quindi esattamente identiche sullo schermo.

Le tre finestre semplici (User Guide, Keyboard Shortcuts, Manage Storage) e le due voci di menu per le cartelle (Open Training Logs / Open Exports Folder) ricevono una breve voce per ogni elemento di controllo. Le tre finestre di analisi sono documentate in modo più dettagliato — ciascuna con un'introduzione che spiega cosa vedi nella finestra, quando dovresti aprirla e come interpretare l'immagine visualizzata.

Alla fine del capitolo si trova una sezione di rimando all'Inspector della finestra principale: cosa puoi ricavare in modo utile dal grafico della loss in tempo reale e dall'indicatore del numero di gaussiane durante un addestramento in corso.

Guida Utente (W1–W4)

Finestra Guida Utente con sidebar a sinistra e contenuto Markdown renderizzato a destra
Finestra Guida Utente con sidebar a sinistra e contenuto Markdown renderizzato a destra

Cos'è: Una finestra di aiuto integrata che renderizza il file guide_<sprache>.md fornito con l'app. La lingua viene dedotta dalle Impostazioni (Tab General → Language) o, se lì è impostato "System", dalle preferenze linguistiche di macOS. Il layout è classico: a sinistra la sidebar con tutte le intestazioni, a destra il testo continuo.

Quando ti serve un rapido promemoria su un singolo punto — quindi come sostituto di appunti veloci. Il riferimento dettagliato è questo manuale; la finestra di aiuto integrata è la versione breve per la consultazione rapida. Viene aggiornata a ogni release dell'app, ma i contenuti restano volutamente più superficiali.

W1NavigationSplitView (Sidebar + Dettaglio)

DOVE

Help → User Guide (⌘?).

TECNICO

Layout a due colonne con una sidebar stretta (larga almeno 180 pt) per l'albero dei contenuti e un'area di dettaglio scorrevole per il vero contenuto Markdown. La finestra ha una dimensione minima di 700 × 500 pt. Alla prima apertura la finestra carica il file guide_<lang>.md appropriato dal bundle dell'app (fallback guide_en.md), lo analizza in record a blocchi (intestazioni H1–H4, paragrafi, liste, tabelle, linee di separazione) ed estrae separatamente la struttura delle intestazioni per la sidebar. La formattazione inline (grassetto, corsivo, span di codice) viene renderizzata tramite il motore Markdown integrato. La lingua viene letta dalle impostazioni dell'app, con il caso speciale del cinese (zh-Hans) e del portoghese brasiliano (pt-BR), che vengono mantenuti come tag di locale completi, perché queste varianti si distinguono da zh e pt rispettivamente.

W2List (Sidebar delle intestazioni)

DOVE

Colonna sinistra nella finestra Guida Utente.

TECNICO

Elenco di tutte le intestazioni H2 e H3 del documento Markdown attuale. Le voci H2 appaiono senza rientro con peso di carattere medio, le voci H3 con 16 pt di rientro a sinistra e uno stile in primo piano ridotto. Tutti gli altri livelli — sia H1 che H4 e inferiori — non appaiono nella sidebar, perché altrimenti la renderebbero poco chiara. Gli ID degli ancoraggi vengono generati dal testo dell'intestazione tramite slugificazione (minuscolo + spazi trasformati in trattini + filtro su lettere/numeri/trattini — lo stesso algoritmo usato da GitHub per i suoi ancoraggi Markdown, cosicché anche URL esterni verso la documentazione potrebbero potenzialmente puntare allo stesso ancoraggio). L'elenco usa lo stile nativo di macOS.

W3Button (Salto da intestazione ad ancoraggio)

DOVE

Un pulsante per ogni riga della sidebar.

TECNICO

Ogni voce della sidebar è un pulsante che imposta l'ancoraggio attuale, ma visivamente sembra una voce di elenco. Una variabile osservatore attiva quindi il salto di scorrimento verso l'ancoraggio corrispondente con un'animazione fluida di 0,3 s. Dopo il salto, il valore dell'ancoraggio viene azzerato, in modo che il clic successivo sullo stesso ancoraggio si attivi di nuovo (altrimenti l'osservatore non si attiverebbe di nuovo, perché il valore non è cambiato).

W4ScrollView (Contenuto di dettaglio)

DOVE

Colonna destra.

TECNICO

Area di contenuto scorrevole, impilata verticalmente, con rendering lazy, perché guide più lunghe possono facilmente superare 200 blocchi Markdown — una variante non lazy istanzierebbe tutto contemporaneamente. Ogni blocco riceve un proprio ID, o l'ancoraggio dell'intestazione (che ogni intestazione riceve, indipendentemente dal livello) o un segnaposto di indice. La larghezza massima è 720 pt, il padding 32 orizzontale / 24 verticale, in modo che le righe lunghe mantengano un layout ben leggibile. Le tabelle vengono renderizzate cella per cella con stack orizzontali e linee di separazione; il codice inline tramite il motore Markdown integrato. I veri blocchi di codice sono attualmente trattati come paragrafi — una limitazione nota della finestra di aiuto.

Scorciatoie da Tastiera (W5–W6)

Keyboard Shortcuts Fenster — fünf Gruppen Navigation/Views/Capture/Editor/Training mit Hotkey-Spalte links und Beschreibung rechts
Finestra Scorciatoie da Tastiera — cinque gruppi Navigation/Views/Capture/Editor/Training con colonna hotkey a sinistra e descrizione a destra

Elenco di riferimento statico in cinque sezioni. Navigation: Mouse Drag (Orbit/Fly), Shift+Drag/Right-Drag (Pan), Scroll (Zoom), WASD (movimento Fly-Through), Q/E (Up/Down), F (Toggle Orbit/Fly), Double-click (Re-center), Cmd+Scroll (regolazione FoV). Views: R (Reset Camera), T (Auto-Rotation), P (Camera Playback), B (Background-Cycle), 0–9 (salta a Training-Cam 1=10%/5=50%/0=last), Left/Right Arrow (Prev/Next Cam). Capture: S (Screenshot to Desktop), V (video turntable), C (Copy Camera Info). Editor: Tab (modalità di modifica), Click/Drag (Paint-Select), Option+Click (deseleziona), X / Delete (elimina selezione), Cmd-Z (annulla ultima eliminazione), [ / ] (dimensione pennello più piccola/più grande), Esc (annulla selezione). Training: Option+Space (metti in pausa/riprendi training), Cmd+E (esporta scena). Non c'è altro qui — Start, Cancel e le estensioni si raggiungono tramite il menu Training (Capitolo 1).

Cos'è: Una semplice panoramica statica di tutte le scorciatoie da tastiera — Navigation, Views, Capture, Editor, Training. Il contenuto è integrato fisso e non viene ricaricato da un file.

Quando cerchi il modo più rapido per fare qualcosa nel viewport. WASD-Fly-Through, R per Camera-Reset, B per il Background-Cycling — sono tutte qui.

W5ScrollView (area contenuti)

DOVE

Help → Keyboard Shortcuts (⌘/).

TECNICO

Una semplice area di scorrimento con una lista verticale al suo interno. Padding di 20 pt tutt'intorno, nessun albero di navigazione laterale (la lista è abbastanza corta). I contenuti sono raggruppati in cinque sezioni (Navigation, Views, Capture, Editor, Training). Per ogni combinazione di tasti una riga con testo traducibile in entrambe le colonne. La colonna sinistra (codice tasto) è fissata a 180 pt di larghezza, così le descrizioni a destra restano allineate verticalmente. Nessuna interazione oltre lo scorrimento — cliccare su una riga non attiva nulla, le scorciatoie sono veri e propri modificatori di tastiera nel menu e nel viewport.

W6VStack (sezioni delle scorciatoie)

DOVE

All'interno della ScrollView.

TECNICO

Sezioni impilate allineate a sinistra con 16 pt di spaziatura. All'interno delle cinque sezioni rispettivamente heading + sequenza di righe. Gli heading usano uno stile secondario subheadline — deliberatamente non in formato Title, perché le sezioni non devono essere navigabili. Il contenuto è volutamente piatto (nessun disclosure, nessuna ricerca, nessun filtro), affinché il componente funzioni invariato su ogni versione di macOS e il file resti leggibile.

Gestisci Archiviazione (W7–W12)

Finestra Manage Storage — l'intestazione mostra „1,356 items · 55.1 GB total”, tabella con file di export PLY ordinati per data, ciascuno con icona + nome file + dimensione + data
Finestra Manage Storage — l'intestazione mostra „1,356 items · 55.1 GB total", tabella con file di export PLY ordinati per data, ciascuno con icona + nome file + dimensione + data

Vista a tabella di tutti i file gestiti da RadianceKit. L'intestazione conta 1.356 elementi, 55,1 GB di dimensione totale. Toolbar in alto: „Show in Finder" + „Refresh". Ogni riga: icona di export, nome file (es. training_20260718T194416Z.ply), data di export, dimensione (qui varia da 7,8 MB a 2,24 GB), icona lente (Reveal) e icona cestino (Move to Trash). L'ordinamento avviene prima per categoria e all'interno di una categoria per data, il più recente in alto. In questa schermata dominano gli export PLY, perché in questo archivio sono stati salvati soprattutto risultati di training.

Cos'è: Una panoramica dell'uso del disco per tutto ciò che RadianceKit salva in ~/Documents/RadianceKit/ — log, export, scene, capture-bundle (dal companion iOS), import (copie di staging delle immagini in ingresso). Per ogni voce una dimensione in byte e due pulsanti: „mostra nel Finder" e „sposta nel cestino". NON è una pulizia automatica — l'app non elimina nulla da sola; decidi tu voce per voce. Questa finestra è tradotta: in italiano si chiama „Gestisci Archiviazione", i due pulsanti dell'intestazione si chiamano „Mostra nel Finder" e „Aggiorna", i pulsanti di riga „Mostra nel Finder" e „Sposta nel cestino". I nomi inglesi nelle voci qui sotto sono le denominazioni della versione inglese.

Quando il disco si riempie. Soprattutto i log si accumulano (un JSONL per ogni tentativo di training, più il _qualityMetrics.json); naturalmente anche gli export (PLY sono dati grezzi al 100%, uno per export). Utile anche dopo un crash, quando la cartella di staging degli import ha ancora vecchie copie delle immagini di ingresso in giro.

W7Pulsante „Show in Finder"

DOVE

Intestazione in alto a destra nella finestra dello storage browser.

TECNICO

Apre la cartella dati di RadianceKit nel Finder — esattamente la directory il cui contenuto viene elencato in questa finestra. Così vedi direttamente la struttura delle cartelle (Logs, Exports, Scenes, Captures, Imports) e puoi spostare o copiare i file anche tu stesso tramite il Finder. L'azione apre una nuova finestra del Finder; la lista nella finestra non cambia di conseguenza — per questo c'è „Refresh" (W8).

W8Pulsante „Refresh"

DOVE

Intestazione, accanto al pulsante Finder.

TECNICO

Avvia una scansione in background eseguita su un task asincrono avviato dall'utente, in modo che la scansione di grandi alberi di directory non blocchi la UI. L'attraversamento vero e proprio passa in rassegna ogni sottocartella nota (Logs, Exports, Scenes, Captures, Imports) e genera una voce di archiviazione per ogni figlio diretto. Per ogni voce viene determinata la dimensione ricorsiva — preferibilmente il consumo effettivo su disco (incluso il sharing degli hardlink APFS) con fallback sulla dimensione logica del file.

W9List (voci di archiviazione)

DOVE

Contenuto principale sotto l'intestazione.

TECNICO

Elenco con per ogni riga questo layout: icona SF Symbol specifica per categoria (documento per Logs, freccia di upload per Exports, cubo per Scenes, iPhone per Capture-Bundle, vassoio per Imports), nome + sottotitolo (etichetta del tipo + data di modifica formattata), contatore byte a destra (allineato a destra, monospaced), pulsante Reveal (icona lente), pulsante Trash (cestino). Ordinamento: primario per tipo (prima Scenes, poi Exports, Logs, Captures, Imports, Other), secondario per data di modifica in ordine decrescente (più recente in alto). Se la scansione è ancora in corso, al posto della lista viene mostrato un progresso „Scanning…". Se non è stato trovato nulla, viene mostrato uno stato vuoto con icona vassoio.

W10Pulsante di riga „Reveal in Finder"

DOVE

Per ogni riga, icona lente a destra.

TECNICO

Apre il Finder e seleziona l'elemento specifico (file o cartella). Differenza rispetto a W7: W7 apre la directory principale; W10 evidenzia esattamente questa singola voce. Flusso di lavoro pratico: identifica una voce grande, clicca sulla lente, poi copiala per esempio su un volume esterno.

W11Pulsante di riga „Move to Trash"

DOVE

Per ogni riga, icona cestino a destra accanto alla lente.

TECNICO

Attiva la finestra di dialogo di conferma (W12). Solo dopo la conferma viene eseguita l'operazione standard di macOS „sposta nel cestino" (quindi reversibile, non un'eliminazione diretta). Dopo il trasferimento riuscito nel cestino, la voce viene rimossa dalla lista e il contatore totale dei byte viene aggiornato. In caso di errori viene mostrata una finestra di dialogo di errore modale.

W12ConfirmationDialog (conferma di eliminazione)

DOVE

Attivata da W11, presentata come sheet di macOS.

TECNICO

Finestra di dialogo di conferma standard con titolo dinamico „Delete <name>?" e una riga di messaggio che indica esplicitamente che la voce finisce nel cestino e da lì può essere ripristinata (finché il cestino non viene svuotato). Due pulsanti: „Move to Trash" come azione distruttiva (mostrata in rosso) e „Cancel" con associazione automatica al tasto Esc. La finestra di dialogo è non modale nel senso che blocca solo questa finestra, non l'intera app — questo è lo standard macOS per le eliminazioni reversibili.

Pareto Dashboard (W13–W22)

Pareto Dashboard — stato vuoto prima dell'importazione dei report
Pareto Dashboard — stato vuoto prima dell'importazione dei report

Stato vuoto (dopo la prima apertura) — Empty-State con call-to-action „Open Reports Folder…". I punti dati compaiono non appena vengono caricati i report di training, vedi lo screenshot successivo.

Pareto Dashboard con 384 report di benchmark caricati — Gaussians vs PSNR con Pareto-Front, Scene/Strategy/Mip-Filter
Pareto Dashboard con 384 report di benchmark caricati — Gaussians vs PSNR con Pareto-Front, Scene/Strategy/Mip-Filter

La toolbar in alto mostra a destra „384 reports of 384" (tutti i report nella cartella scelta sono stati analizzati correttamente); a sinistra del pulsante „Open Reports Folder…" compare il nome della cartella caricata, qui „Benchmarks". Assi: il selettore dell'asse X è impostato su Gaussians, quello dell'asse Y su PSNR (dB), accanto la casella attiva „Show Pareto Front". Legenda in alto a sinistra: blu = mcmc, verde = classic, arancione = hybrid, più la forma del simbolo per Mip-Splatting On/Off. La linea tratteggiata della Pareto-Front segue i valori PSNR migliori raggiunti e si stabilizza intorno a PSNR≈30 dB a partire da circa 300K Gaussians; la nuvola di punti si estende fino a oltre 1,5 milioni di Gaussians. Chip di filtro a destra: oltre 30 scene (tra cui bicycle, bonsai, family, flowers, garden, kitchen, stump, truck e le serie di test 360, drone e photo numerate progressivamente), 3 strategie (classic, hybrid, mcmc), 3 opzioni Mip-Splatting (All, On, Off) con „All" attivo. Al momento non è impostato alcun filtro Scene o Strategy, per questo il cluster di punti è così denso.

Cos'è: Uno strumento di confronto multi-run. In passato hai addestrato più scene o la stessa scena con preset diversi — da un'analisi di benchmark nasce, per ogni run di training, un file di report JSON che contiene tra l'altro PSNR finale, SSIM, LPIPS, numero di Gaussians e tempo di calcolo (wallclock). Non esiste nell'interfaccia un interruttore per questa analisi; il dashboard valuta ciò che è già presente come report nella cartella scelta. Legge un'intera cartella di questi report contemporaneamente e li rappresenta come scatter 2D con assi selezionabili. Viene inoltre disegnata la Pareto-Front (l'insieme dei punti non dominati) come linea tratteggiata.

Dopo aver creato almeno tre o quattro report di training. Con meno punti la linea di frontiera non è significativa. Caso d'uso tipico: hai provato a ricostruire una scena all'aperto e hai eseguito in sequenza P3 Balanced (Classic), P4 Quality (Classic), P8 Quality (MCMC) e P9 Drone / Aerial — ora vuoi sapere quale configurazione offre il miglior PSNR per secondo di tempo di training o quale richiede meno Gaussians per un dato PSNR.

Entrambi gli assi sono liberamente selezionabili (asse X: Gaussians, tempo di training, PSNR, SSIM, LPIPS, …; asse Y allo stesso modo). Il calcolo della Pareto-Front sa per ogni metrica se „più piccolo = meglio" (LPIPS, Gaussians, Training Time, BRISQUE) o „più grande = meglio" (PSNR, SSIM, FSIM, MS-SSIM) — la linea va quindi, a seconda della scelta degli assi, da in basso a sinistra verso in alto a destra oppure da in alto a sinistra verso in basso a destra, seguendo sempre la migliore combinazione raggiunta. Un punto è Pareto-ottimale quando NESSUN altro punto è almeno altrettanto buono in ENTRAMBE le dimensioni (cioè nessun altro lo domina). I punti Pareto-ottimali si trovano sulla linea, gli altri punti a destra/sopra di essa (a seconda dell'orientamento degli assi). I punti SULLA linea sono i veri candidati per il „miglior preset"; i punti LONTANI dalla linea sono tempo di training sprecato.

Puoi limitare la selezione a una scena specifica (ad esempio se vuoi confrontare solo run all'aperto), a una strategia specifica (classic, hybrid o mcmc), oppure a Mip-Splatting acceso/spento (Mip-Splatting è un'impostazione opzionale per utenti avanzati, per questo vale la pena confrontarlo direttamente).

Hai tre report per la scena „truck" in una cartella di report: Run A (P4 Quality (Classic), 524K Gs, 105 s, PSNR 23.4), Run B (P8 Quality (MCMC), 150K Gs, 693 s, PSNR 24.6), Run C (P5 Ultra Detail, 1.25M Gs, 312 s, PSNR 25.8). Imposta l'asse X su Training Time, l'asse Y su PSNR. Run B si trova in alto a destra, Run C ancora più in alto a destra, Run A in basso a sinistra. La Pareto-Front collega A e C — entrambi non dominati. Run B è „perso" (C è migliore sia in Time SIA in PSNR). Conclusione: per „truck" la strada MCMC non conviene; o veloce+discreto (A) o lungo+molto buono (C). Salva la configurazione di C come preset a sé (Inspector → I1 Save Preset).

Prossima azione: Salva la configurazione migliore come preset. In concreto: osserva i punti Pareto (l'hover mostra PSNR/SSIM/LPIPS/Gs/Time nel tooltip), decidi quale si adatta meglio al compromesso tempo-qualità che preferisci, apri il report corrispondente (il nome del file contiene il timestamp del run), copia la sua configurazione di training in un nuovo run oppure salvala come preset tramite l'Inspector dopo la prossima sessione di training.

W13Pulsante „Open Reports Folder…"

DOVE

Toolbar in alto a sinistra.

TECNICO

Apre una finestra di selezione cartella con la richiesta „Select a folder containing benchmark .json reports". Dopo la conferma parte un task in background che analizza sequenzialmente tutti i file .json nella cartella. I report non validi (JSON corrotto, schema errato) vengono raccolti e mostrati in basso nella sidebar come „N file failed to parse" — nessun crash. Se avviene un secondo click mentre un primo caricamento è ancora in corso, il task precedente viene annullato, così che due risultati non scrivano contemporaneamente nello stato.

La cartella scelta non viene memorizzata in modo permanente: dopo aver riaperto la finestra tramite Aiuto → Pareto Dashboard… (⇧⌘D) la selezioni di nuovo qui. Il nome della cartella caricata compare poi a destra del pulsante.

W14Selettore „X-Axis"

DOVE

Sopra il grafico, a sinistra.

TECNICO

Menu a selezione con tutti gli assi di metriche disponibili nel modulo dashboard (PSNR, SSIM, LPIPS, numero di Gaussians, tempo di training e così via). Il valore predefinito è il numero di Gaussians. Al cambio, il punto in hover viene azzerato, perché una posizione evidenziata nel vecchio sistema di coordinate degli assi non avrebbe più senso dopo il cambio di asse. Il selettore è limitato alla larghezza del contenuto, in modo da non estendersi su tutta la larghezza.

W15Selettore „Y-Axis"

DOVE

Sopra il grafico, accanto a X-Axis.

TECNICO

Identico a W14, solo che il valore predefinito è PSNR. La scelta degli assi viene salvata in modo indipendente, quindi l'utente può anche selezionare combinazioni prive di senso (X=PSNR, Y=PSNR — getterebbe tutti i punti su una diagonale). Queste combinazioni non vengono però bloccate; è una scelta consapevole, perché un confronto „SSIM vs PSNR" può essere interessante per vedere quanto le metriche si comportano in modo coerente tra loro.

W16Interruttore „Show Pareto Front"

DOVE

A destra dei selettori degli assi.

TECNICO

Una casella di spunta, attivata per impostazione predefinita. La Pareto-Front viene sovrapposta alla nuvola di punti come linea sul grafico — tratteggiata (motivo 4–4), grigia semitrasparente, spessore 1,5 pt. Attenzione: nella versione rilasciata la spunta non ha alcun effetto sul grafico — la linea di frontiera viene sempre disegnata, spuntata o no. La frontiera viene ricalcolata a ogni cambio di asse e dopo ogni modifica di filtro.

W17Chip di filtro „Scene"

DOVE

Sidebar destra nella finestra del dashboard.

TECNICO

Chip di filtro per ogni scena presente nei report caricati. Layout a flusso proprio, che ridistribuisce automaticamente i chip su più righe non appena la larghezza è esaurita. I chip attivi ricevono lo sfondo dell'accento, quelli inattivi uno sfondo standard neutro basato sul material. È possibile una selezione multipla (semantica di insieme); se nessun chip è selezionato, tutte le scene vengono considerate „ammesse" — cioè la logica dell'insieme è „selezione vuota = tutto", non „selezione vuota = niente".

W18Chip di filtro „Strategy"

DOVE

Sotto il filtro Scene nella sidebar.

TECNICO

Esattamente come W17, ma per le strategie di training — tipicamente i tre valori „classic", „hybrid" e „mcmc", ricavati dal campo strategy dei JSON dei report di benchmark. Utile se hai mescolato report di più strategie e vuoi vedere solo un tipo (ad esempio „mostra solo i run MCMC, perché ho già escluso Classic").

W19Chip di filtro „Mip-Splatting"

DOVE

Sotto il filtro Strategy nella sidebar.

TECNICO

Filtro a tre valori (invece di un insieme come W17/W18): „All" / „On" / „Off". Motivo: Mip-Splatting è un'estensione multi-scala che aiuta o meno a seconda della scena — per questo resta un'impostazione attivabile consapevolmente e non uno standard. Se fai confronti mip-on/off, spesso vuoi poter separare molto nettamente. Da qui il filtro ternario dedicato con gli stati „lascia passare tutto", „solo mip attivo", „solo mip disattivato". La sezione della sidebar compare non appena l'insieme caricato contiene report — quindi praticamente sempre; scompare solo se non è stato caricato nulla.

W20ChipButton (interruttore di filtro, all/on/off)

DOVE

Componente di supporto, usato in W17/W18/W19.

TECNICO

Wrapper di pulsante minimalista. Contenuto: testo dell'etichetta con corpo tipografico caption e padding 10 orizzontale / 5 verticale. Sfondo condizionale: se attivo → colore d'accento dell'app con testo bianco; altrimenti sfondo standard neutro basato sul material con il colore di testo normale (si adatta all'aspetto chiaro e scuro). La forma è una capsula (a forma di pillola). Stile plain-button, così che il material della capsula non venga sovrastato da un bordo di sistema.

W21Grafico (Pareto-Scatter)

DOVE

Area centrale del dashboard.

TECNICO

Diagramma Swift Charts con due layer: 1. un punto per report — posizione ricavata dalle metriche X e Y scelte, colore in base alla strategy, simbolo in base allo stato mip. Dimensione del simbolo normale 80, evidenziata 200 (se l'ID corrisponde al report attualmente in hover). 2. una linea per la Pareto-Front (vedi W16 — viene sempre disegnata). Inoltre il punto attualmente in hover mostra il nome della scena come piccola capsula sopra di sé.

Overlay del grafico: un rettangolo trasparente registra il movimento del mouse; per ogni frame viene determinata la posizione di punto più vicina euclideamente nel frame del plot e il report in hover viene aggiornato se la distanza è inferiore a 24 px (altrimenti viene azzerato). Così ottieni il tooltip senza cliccare — basta passarci sopra.

W22Tooltip (dettaglio hover)

DOVE

Sotto il grafico, mostrato al passaggio del mouse.

TECNICO

Stack orizzontale: nome della scena (headline), tag della strategy (caption), linea di separazione, poi le metriche PSNR/SSIM/LPIPS/Gs/Time ciascuna in un piccolo gruppo verticale (etichetta + valore in monospace). Se mip era attivo, compare inoltre un tag a capsula „Mip" nel colore d'accento. Sfondo con blur semitrasparente, rettangolo arrotondato con raggio di 8 pt. Viene mostrato solo quando il mouse è effettivamente sopra un punto. Scompare automaticamente quando esci dall'area.

Analisi Holdout (W23–W29)

Holdout Analysis — stato vuoto prima del caricamento di una transforms.json
Holdout Analysis — stato vuoto prima del caricamento di una transforms.json

Stato vuoto con Empty-State e call-to-action „Open transforms.json…". Accetta i formati NeRF-Studio e Instant-NGP. I marker delle telecamere compaiono non appena viene caricato un transforms.json — vedi la figura successiva.

Holdout-Globe con 86 telecamere, 5 fold, Angular-Strategy attiva
Holdout-Globe con 86 telecamere, 5 fold, Angular-Strategy attiva

L'header mostra il file caricato (transforms.json) e il conteggio telecamere („86 cameras"). Sidebar sinistra: selettore Strategy con due opzioni — Angular (longitudinal) attivo (ordina le telecamere per il loro angolo longitudinale attorno all'orbita e le distribuisce poi a rotazione sui fold) vs Linear (round-robin) (la stessa distribuzione a rotazione, ma secondo l'ordine delle immagini invece che secondo l'angolo di vista). Lo slider k-Folds è impostato su 5, il selettore Test-Fold su Fold 1. Il pulsante di esportazione crea un fold-assignment.json da riutilizzare in strumenti di valutazione esterni. Pannello centrale: proiezione 3D a globo di tutte le 86 telecamere, distribuite su tutta la sfera — punti verdi = Train, punti rossi = fold di test attuale (Fold 1 con 18 telecamere). Sidebar destra (Angular Correlation): per ogni fold il numero di telecamere + Mean Nearest Angle (Fold 1: 18 Cams / 8.5°, Fold 2: 17 / 6.1°, Fold 3: 17 / 6.2°, Fold 4: 17 / 6.7°, Fold 5: 17 / 6.4°) — un valore più piccolo significa che ogni telecamera di test ha una telecamera di training vicina, il test è quindi più facile.

Cos'è: Un visualizzatore 3D per la disposizione delle tue telecamere con logica di cross-validation. Carichi un transforms.json (il formato standard di Nerfstudio / Instant-NGP per le pose delle telecamere), l'app legge tutte le telecamere, proietta le loro direzioni di vista su una sfera unitaria e le mostra come piccoli marker sferici su un globo virtuale. Poi suddivide le telecamere in k fold (secondo la strategia scelta: angular o linear), marca in verde la parte di training e in rosso la parte di test (holdout), e calcola per ogni fold un punteggio di Angular-Correlation, che ti dice quanto il fold di test è distante dal fold di training nello spazio degli angoli di vista.

Quando vuoi fare una valutazione holdout — cioè: quanto bene generalizza il tuo modello su angoli di vista non visti? Lo standard nel training è „every-8th view come Holdout" (convenzione Mip-NeRF360), ma questa è una suddivisione molto lineare. Se ad esempio le tue immagini sono raggruppate temporalmente (prima un lato dell'oggetto, poi l'altro), allora „every-8th" non è rappresentativo — una posizione casuale nella sequenza finisce nel test, ma tutti i suoi vicini sono nel training, il che è troppo facile. Con „angular" si stratifica invece sullo spazio degli angoli di vista: ogni fold contiene telecamere da tutte le zone dell'orbita, così il test verifica davvero le lacune di generalizzazione.

Angular vs Linear: - Angular (standard): ordina tutte le telecamere secondo il loro angolo longitudinale (coordinata φ attorno all'asse Y) e le assegna poi a rotazione ai k fold — la prima telecamera dell'anello finisce nel Fold 1, la seconda nel Fold 2, e dopo k telecamere il giro ricomincia da capo. Vantaggio: ogni fold contiene telecamere da tutte le direzioni dell'orbita, distribuite uniformemente sull'anello. Adatto a riprese orbitali classiche, perché la suddivisione non dipende più dall'ordine di ripresa. - Linear (Round-Robin): la stessa distribuzione a rotazione, ma sulla posizione dell'immagine invece che sull'angolo (indice fold = image_index modulo k). È la semplice suddivisione „every-k-th". Funziona quando l'ordine delle immagini NON ha un bias spaziale (ad es. riprese da drone ordinate a caso). Funziona male quando le immagini si raggruppano temporalmente — in tal caso i frame vicini finiscono in fold diversi e il test diventa troppo facile.

Nel globo 3D vedi subito: punti verdi (training) e punti rossi (test). Se i punti rossi si raggruppano tutti in un angolo, l'holdout è scarso (non è un buon test di generalizzazione). Se sono distribuiti uniformemente tra i punti verdi, è buono. Il punteggio di Angular-Correlation per fold (sidebar destra, in gradi) ti dice inoltre: valore più piccolo = il test è vicino al training (ogni telecamera di test ha una telecamera di training vicina, test facile); valore più grande = il test è lontano dal training (generalizzazione più difficile).

Hai ripreso la tua scena Truck con 251 immagini, esporti tramite la voce di menu M33 (Export SfM transforms.json) un file nerfstudio. Apri la finestra Holdout (⇧⌘H), carica il JSON tramite „Open transforms.json…", osserva il globo. k=5 (default) ti dà 5 fold. Clicca su „Fold 3" — guarda se i marker rossi sono ragionevolmente uniformi. Se sì: „Export fold-assignment.json". Il file esportato è pensato per strumenti di valutazione esterni (Nerfstudio, Instant-NGP); RadianceKit stesso non lo rilegge e continua ad allenarsi rispetto al proprio standard di holdout interno „every-8th". La finestra serve quindi a valutare se il tuo set di telecamere consente affatto un test equo.

W23Pulsante „Open transforms.json…"

DOVE

Toolbar in alto a sinistra.

TECNICO

Apre una finestra di selezione file limitata ai file JSON. Dopo la conferma, il modulo Holdout carica il file. Il loader analizza sia il formato nerfstudio (intrinsics della telecamera più elenco di frame con percorso immagine e matrice di trasformazione) sia il formato instant-ngp (stessa struttura). Per ogni frame viene estratta la direzione di vista dalla matrice di trasformazione (asse z della base locale della telecamera) e salvata. Se il parsing fallisce, compare un messaggio nella sidebar sinistra — ma solo se lì era già caricata una scena; al primissimo tentativo la finestra resta nello stato vuoto senza messaggio visibile.

Il file caricato non viene ricordato in modo permanente: dopo aver riaperto la finestra tramite Aiuto → Holdout Analysis… (⇧⌘H) devi selezionarlo di nuovo qui. Il suo nome compare poi a destra del pulsante.

W24Selettore „Strategy" (angular/linear)

DOVE

Sidebar sinistra, in alto.

TECNICO

Selettore radio con due opzioni: Angular e Linear. Il cambio di strategia innesca automaticamente un ricalcolo dei fold. Le direzioni di vista sono un elenco di vettori unitari 3D sulla sfera; la strategia Angular li ordina secondo il loro angolo longitudinale φ e li assegna poi a rotazione ai fold, la strategia Linear esegue la stessa assegnazione a rotazione secondo l'indice del frame e ignora completamente la geometria. Entrambe le strategie producono quindi fold della stessa dimensione; differiscono solo per il criterio di ordinamento precedente.

W25Slider „k Folds"

DOVE

Sidebar sinistra, al centro.

TECNICO

Slider da 3 a 10, incremento 1. A ogni modifica viene rilanciato automaticamente il calcolo dei fold, così l'elenco dei fold, gli indici training/test e il punteggio per fold vengono ricalcolati immediatamente. Il valore scelto viene mostrato come testo con cifre monospaziate a destra dell'etichetta.

Regola pratica: k=5 è lo standard (ti dà il 20% di test per fold, il che è comune per la cross-validation). k=10 se hai molti dati e hai bisogno di più fold per una significatività statistica. k=3 se hai pochi dati.

W26Selettore „Test Fold"

DOVE

Sidebar sinistra, sotto lo slider k.

TECNICO

Selettore a menu. Elenca esattamente tanti elementi quanti sono i fold impostati, etichettati da „Fold 1" a „Fold N". Se l'indice scelto in precedenza è ≥ k (ad es. perché hai ridotto k da 10 a 5), viene automaticamente riportato a 0. Il fold di test scelto viene mostrato in rosso nel globo, tutti gli altri in verde.

W27Pulsante „Export fold-assignment.json"

DOVE

Sidebar sinistra, in basso.

TECNICO

Apre una finestra di salvataggio con nome file predefinito fold-assignment.json. Dopo la conferma, il modulo Holdout codifica la suddivisione attuale in uno schema JSON (assegnazione fold per frame più un blocco di meta-dati sulla strategia). Il file è pensato per strumenti di valutazione esterni — RadianceKit non lo rilegge. Il pulsante è disattivato finché non è caricato alcun file di telecamere. Il successo viene segnalato come „Saved to (filename)", un errore di scrittura come „Export failed: …" — entrambi compaiono nello stesso punto sotto il pulsante ed entrambi in testo verde, il colore quindi non distingue i casi.

W28SCNView (3D Camera Globe)

DOVE

Pannello centrale nella finestra Holdout.

TECNICO

Vista a globo SceneKit. La scena è composta da: una sfera wireframe (raggio 1.0, 36 segmenti, grigio scuro), tre segmenti di assi colorati (rosso/verde/blu per X/Y/Z, ciascuno lungo 1.2), e per ogni telecamera una piccola sfera marker (raggio 0.03) nella posizione corrispondente alla direzione di vista sulla sfera unitaria (leggermente all'esterno, in modo che non sparisca DENTRO la sfera wireframe). I marker NON vengono ricostruiti a ogni cambio di fold — la ricostruzione è necessaria solo quando cambia l'elenco dei frame (cioè viene caricato un nuovo JSON). Al contrario, a ogni aggiornamento viene eseguito un aggiornamento in-place dei colori dei materiali: rosso per gli indici di test, verde per il training, grigio chiaro se nessuno dei due. Così i tick dello slider restano performanti anche con N > 1000 telecamere.

Il controllo della telecamera è attivo — puoi ruotare il globo con il mouse, ingrandirlo, spostarlo. L'illuminazione fa sì che i marker non appaiano piatti. Lo sfondo è grigio scuro.

W29FoldCard (Tap to Select Fold)

DOVE

Sidebar destra, sezione „Angular Correlation".

TECNICO

Una vista a scheda per ogni fold — rettangolo arrotondato con raggio 6 pt, padding 10, layout verticale con due righe (sopra „Fold N" + numero di telecamere, sotto „Mean nearest angle:" + valore in gradi). Colore di sfondo condizionale: fold attivo = colore d'accento semitrasparente, inattivi = materiale standard neutro. Toccare seleziona il fold, e il globo si ricolora in tempo reale.

Il punteggio „Mean nearest angle" è l'angolo minimo medio per ogni telecamera di test rispetto alla telecamera di training più vicina (calcolato internamente in radianti, mostrato in gradi nell'interfaccia).

BayesOpt Console (W30–W39)

Console BayesOpt — stato vuoto prima dell'avvio del trial
Console BayesOpt — stato vuoto prima dell'avvio del trial

Stato vuoto con Search-Space-Picker (RadianceKit defaults (6-dim)), slider del Trial-Budget (default 40), Random-Seed (42) e tre pannelli vuoti per Convergence-Chart, Trial Log ed elenco dei parametri dello Search-Space. Convergence-Chart e tabella dei trial si riempiono non appena viene avviato un run — vedi l'immagine successiva.

Console BayesOpt dopo 40 trial — il Convergence-Chart sale ripidamente fino al trial 13, Best Value 0.9943, Trial Log con tag init/bo/restart
Console BayesOpt dopo 40 trial — il Convergence-Chart sale ripidamente fino al trial 13, Best Value 0.9943, Trial Log con tag init/bo/restart

Stato in alto a destra "Finished — best 0.9943 after 40 trials", accanto il pulsante "Save Best Config"; in alto a sinistra il pulsante "Start". Sidebar sinistra: Search-Space- Picker su RadianceKit defaults (6-dim), Trial-Budget 40, Random Seed 42. L'elenco dei parametri mostra i sei iperparametri da regolare con i loro intervalli di valori: mipSmoothing3DScale [0.05, 0.5], mipFilter2DVariance [0.1, 0.6], densifyGradThreshold [5e-07, 5e-06], ssimWeight [0.05, 0.5], mcmcNoiseScale [1e-05, 0.0001], mcmcRelocationInterval [50, 200]. Al centro: Convergence-Chart "Convergence (best value so far)" (X = indice trial 0–40, Y = valore obiettivo 0–1) — punti blu = Initial-Samples, punti verdi = BayesOpt-Acquisition, punti arancioni = Restart-Trial (#22 con 0.5303 e #31 con 0.4885). La linea blu del miglior valore sale ripidamente fino al trial ~5, poi solo un miglioramento marginale fino al trial ~13, da lì un plateau piatto vicino a 1.0. Sidebar destra: Trial-Log, qui scrollato fino ai trial #8–#36, con punteggio + tag (init/bo/restart). Il pulsante Save-Best-Config in alto a destra scrive bayesopt-best.json.

Cos'è: Una console di ottimizzazione bayesiana per la ricerca di iperparametri. Bayes-Opt è una procedura automatica che cerca di trovare il punto ottimale di una funzione sconosciuta con il minor numero possibile di esperimenti — tipicamente: "quale combinazione di limite superiore dei Gaussian, peso SSIM e soglia di densify offre il miglior PSNR per la mia classe di scena?" Invece di una griglia di 6^4 = 1296 trial, Bayes-Opt prova circa 40–100 trial informati e si avvicina così all'ottimo.

Importante: La versione attualmente distribuita nell'app non esegue l'ottimizzazione contro run di training reali (ci vorrebbero giorni), ma contro un obiettivo dimostrativo sintetico — un paesaggio multi-modale con carattere hill-climbing più un leggero rumore. Questo è intenzionale: la finestra deve mostrarti il comportamento dell'ottimizzatore (andamento della convergenza, punti campionati, best-so-far) e farti capire le definizioni dello Search-Space. Per i run BayesOpt reali guidati dal training (come quelli eseguiti durante lo sviluppo dei preset inclusi) viene utilizzato un percorso di valutazione separato al di fuori dell'app; questa finestra è la variante live da osservare.

Tre casi d'uso: 1. Vuoi capire come lavora BayesOpt — allora avvia un run demo e osserva il Convergence-Chart. 2. Stai pianificando una nuova classe di scena (ad esempio "acquari" o "mobili antichi") per cui i quindici preset integrati non si adattano perfettamente. Definisci mentalmente uno spazio di ricerca, verificalo qui con "Bowl demo (1-dim)" o "densify-until + ssim-weight + grad-thresh", poi esporta la Best-Config come JSON e usala come punto di partenza per un run di training reale. 3. Vuoi ispezionare gli spazi di ricerca standard inclusi (Mip-Subset, RadianceKit Defaults) — sono elencati nel pannello dei parametri della sidebar sinistra.

- Convergence-Chart (colonna centrale): Y = miglior valore della funzione obiettivo raggiunto finora. X = indice del trial. All'inizio sale ripidamente (BayesOpt prova gli Initial-Samples in modo casuale, alcuni dei quali sono fortunati), poi diventa progressivamente piatto perché la regione vicina all'ottimo è stata esaurita. Se la linea rimane piatta per 20+ trial, puoi fermare il run — ulteriori trial non portano più nulla. I singoli punti nel chart sono i valori individuali dei trial (quindi non "best so far"), colorati in base alla fase: blu = initial sample, verde = bayesopt acquisition, arancione = restart. - Tabella dei trial (colonna destra): #1, #2, #3, … ciascuno con valore e tag di fase. Il miglior trial finora è contrassegnato con una stella gialla. Dalla tabella puoi identificare il trial migliore e osservarne successivamente i valori dei parametri in fase di esportazione. - Ispettore dello Search-Space (sidebar sinistra): mostra per il preset selezionato tutti i nomi dei parametri e i loro intervalli di ricerca [lo, hi]. Se ti trovi sul preset "RadianceKit defaults (6-dim)", vedi ad esempio "densifyGradThreshold [5e-7, 5e-6]" — quindi log-uniforme tra questi due valori.

Seleziona il preset "RadianceKit defaults (6-dim)", Trial-Budget 40, Seed 42. Clic su "Start". Osserva: i primi 8 trial sono blu (initial samples, Latin-Hypercube), i successivi verdi (acquisiti da BayesOpt). Il Convergence-Chart sale ripidamente fino al trial ~13, dopodiché si appiattisce. Intorno al trial ~30–40 il miglior valore si stabilizza. Clic su "Save Best Config" — viene salvato un bayesopt-best.json con il nome del preset, l'indice del trial, il valore e i valori dei parametri decodificati. Questo JSON puoi poi importarlo manualmente nella definizione del tuo preset.

W30Pulsante "Start"

DOVE

Barra degli strumenti a sinistra, negli stati Idle/Finished.

TECNICO

Azzera l'elenco dei trial, passa allo stato Running, genera un nuovo Run-ID (per il rilevamento di run obsoleti in caso di clic multipli su Start) e crea un nuovo Pause-Gate. Poi avvia un task in background che esegue l'ottimizzatore come stream asincrono. Il numero di Initial-Samples cresce con il budget, ma al massimo fino a 8 — quindi tipicamente 8 campioni Latin-Hypercube a partire da un budget di 28, meno con un budget più piccolo. Gli aggiornamenti dei trial vengono ricevuti in modo incrementale e aggiunti all'elenco. Protezione dai run obsoleti: se nel frattempo un secondo clic su Start imposta un nuovo Run-ID, gli aggiornamenti del run precedente vengono scartati.

Stile Primary-Action per l'aspetto prominente del pulsante.

W31Pulsante "Pause"

DOVE

Barra degli strumenti a sinistra, nello stato Running.

TECNICO

Attiva il Pause-Gate e passa allo stato Paused. L'effetto concreto: il runner attende in un loop di polling di 50 ms prima di valutare la funzione obiettivo successiva. Ciò significa che un trial attualmente in corso viene portato a termine (essendo sintetico dura solo microsecondi), ma nessun ulteriore trial viene avviato. Non appena viene eseguito Resume, si riprende da dove ci si era fermati.

W32Pulsante "Stop"

DOVE

Barra degli strumenti a sinistra, negli stati Running e Paused.

TECNICO

Interrompe il task del runner, azzera il riferimento, rilascia il Pause-Gate (se era ancora in pausa) e passa allo stato Finished (se esistono trial) o Idle (se non ce ne sono). I trial già calcolati rimangono visibili nell'elenco — Stop non li elimina. Il ruolo distruttivo del pulsante lo mostra in rosso, perché interrompe il run.

W33Pulsante "Resume"

DOVE

Barra degli strumenti a sinistra, nello stato Paused.

TECNICO

Rilascia il Pause-Gate e torna allo stato Running. Il task del runner è già in esecuzione (è in attesa nel loop di polling); non appena il loop rileva che la pausa è stata revocata, prosegue e avvia il trial successivo.

W34Pulsante "Save Best Config"

DOVE

Barra degli strumenti a destra, sempre visibile (ma disattivato finché non è disponibile ancora un run migliore).

TECNICO

Apre una finestra di dialogo per il salvataggio con nome file predefinito bayesopt-best.json, limitata a JSON. Dopo la conferma viene costruito un dizionario payload: nome del preset, indice del trial, valore (punteggio obiettivo), parametri (dizionario dei nomi dei parametri decodificati → valori). La decodifica proietta le coordinate normalizzate dello spazio di ricerca in [0,1]^d nuovamente nell'intervallo di valori originale (con scale log-uniformi/lineari/a numeri interi a seconda del caso). L'output JSON è pretty-printed e con chiavi ordinate. In caso di errore di scrittura viene (nell'attuale versione demo) ignorato silenziosamente — nessuna UI di errore, perché è un percorso demo.

Il pulsante rimane grigio finché non è stato eseguito alcun trial.

W35Selettore preset "Search Space"

DOVE

Sidebar sinistra, in alto.

TECNICO

Menu a selezione con quattro opzioni preset: - "RadianceKit defaults (6-dim)" — lo spazio di ricerca standard completo con tutti e sei gli iperparametri standard. - "Mip subset (2-dim)" — solo mipSmoothing3DScale [0.05, 0.5] log-uniforme e mipFilter2DVariance [0.1, 0.6] lineare. Utile se vuoi regolare il Mip-Splatting per una classe di scena. - "densify-until + ssim-weight + grad-thresh" — tre parametri rilevanti per il densify (densifyGradThreshold log-uniforme, ssimWeight lineare, densifyUntilIter intero). - "Bowl demo (1-dim)" — spazio di ricerca didattico a parametro singolo per demo su "come funziona BayesOpt".

Mentre un run è attivo, lo spazio di ricerca non può essere cambiato (confonderebbe l'ottimizzatore).

W36Slider "Trial Budget"

DOVE

Sidebar sinistra, sotto il Search-Space-Picker.

TECNICO

Slider da 10 a 200, incremento di 5. Default 40. Ciò significa: BayesOpt può eseguire al massimo N trial. Di questi, i primi sono campioni iniziali (Latin-Hypercube), il resto sono veri trial BayesOpt. Regole pratiche empiriche: uno spazio di ricerca con d dimensioni richiede circa dieci-venti volte d in trial per un buon ottimo. Con i default a 6 dimensioni quindi 60–120, con il Mip-Subset a 2 dimensioni 20–40, con la Bowl-Demo a 1 dimensione 10–20.

Durante il run lo slider è disattivato.

W37Slider "Random Seed"

DOVE

Sidebar sinistra, sotto lo slider del budget.

TECNICO

Slider da 1 a 100, incremento di 1. Default 42. Il seed viene passato sia ai campioni iniziali Latin-Hypercube sia alla componente di rumore dell'obiettivo demo. Riproducibilità: stesso seed + stesso spazio di ricerca + stesso budget produce una sequenza di trial esattamente identica. Utile per "tutti i tuoi colleghi ottengono lo stesso run quando ricreano la demo?". Disattivato durante il run.

W38Chart (Convergence)

DOVE

Colonna centrale della finestra.

TECNICO

Diagramma Swift-Charts con due livelli: 1. una linea per "best-value-so-far" per ogni trial — una curva monotonicamente crescente o costante nel colore d'accento. 2. un punto per ogni trial con il valore obiettivo individuale, colorato in base alla fase. Dimensione simbolo 40. Tre etichette di fase: "init" (blu), "bo" (verde), "restart" (arancione).

Una piccola legenda mostra i colori delle fasi in alto a sinistra. Se l'elenco dei trial è vuoto (prima del primo avvio), viene invece mostrata una schermata vuota con icona del grafico e l'indicazione "Press Start to begin a BayesOpt run."

W39Tabella (Trial Log)

DOVE

Colonna destra della finestra.

TECNICO

Area di scorrimento con righe dei trial impilate in modo lazy. Per ogni riga uno stack orizzontale: numero del trial (3 cifre in monospaced, a sinistra), valore (monospaced, allineato a destra, largo 70 pt), tag di fase (capsula, riempita al 25% di opacità — grigio per "init", blu per "bo", arancione per "restart"; sono deliberatamente colori diversi da quelli dei punti nel chart accanto), opzionalmente una stella gialla se questo trial è attualmente il migliore. Un meccanismo di auto-scroll salta automaticamente alla fine non appena arriva un nuovo trial — così puoi seguire l'andamento live in fondo allo schermo senza dover scorrere manualmente.

Finestra principale: andamento della loss e conteggio dei Gaussiani (I39–I41, rimando incrociato)

Tre delle visualizzazioni dell'Inspector nella finestra principale meritano una spiegazione a sé, perché sono costantemente visibili durante un training in corso e perché esistono importanti regole pratiche su quando l'andamento appare sano. Le visualizzazioni si trovano nell'Inspector, nella sezione Progresso, nel gruppo espandibile Andamento della Loss (vedi Capitolo 2 — Inspector), e completano l'analisi Holdout della finestra Aux vista sopra.

Quando la curva di Loss è sana? Una curva di Loss sana mostra tre fasi: (1) Warmup — nelle prime 200–500 iterazioni la loss scende ripidamente da un valore alto (tipicamente 0.15–0.25 per L1+SSIM combinati, a seconda della scena) a circa la metà. Se la loss in questa fase NON scende, di solito l'input è sbagliato (immagini danneggiate, pose SfM scadenti, numero di Gaussiani iniziali troppo basso). (2) Densification — tra ~500 e densifyUntilIteration (classicamente 15K, con MCMC fino a 20K o 25K) la loss continua a scendere, spesso con piccoli salti verso il basso quando le operazioni di densificazione inseriscono nuovi Gaussiani e l'optimizer li sfrutta. Il conteggio dei Gaussiani cresce in questa fase. (3) Refinement — successivamente la loss entra in una coda sempre più piatta. Valori finali tipici come orientamento: una scena oggetto ben illuminata (ad esempio Tanks-&-Temples Truck con preset P4 Quality) si assesta su L1 ≈ 0.023, mentre scene esterne ampie come quelle di Mip-NeRF 360 restano naturalmente più alte (0.04–0.07).

Cosa significa un plateau? Un plateau (la curva di Loss procede orizzontale per diverse migliaia di iterazioni) ha due interpretazioni: (a) il modello è convergiuto, ulteriore training non porta più nulla — questo è il caso positivo. (b) il modello è bloccato (stuck: minimo locale, informazione di gradiente scadente, un cap al limite del buffer) — il caso negativo. Entrambi appaiono identici nel grafico. Per distinguerli: osserva il conteggio dei Gaussiani. Se anch'esso è piatto E vicino al cap MCMC (ad es. 150K su 150K con il preset P8 Quality (MCMC)), sei al limite — o aumenti il cap oppure accetti il plateau. Se il conteggio dei Gaussiani sta ancora crescendo ma la loss non scende, allora è stuck.

Quando interrompere e quando continuare il training? Regola pratica: se per 10K iterazioni non c'è miglioramento della Loss minima → interrompi, ulteriori iterazioni sono sprecate. Prima di quel punto: tramite il menu Training → Continue Training → „+5,000 iterations" puoi ancora aggiungere un prolungamento, se noti un miglioramento al limite (non esiste una scorciatoia da tastiera per questo). Attenzione: con MCMC il plateau è spesso reale — il cap è il limite naturale.

Il plateau del conteggio dei Gaussiani NON è un segnale di "finito". Significa solo che MCMC ha raggiunto il cap oppure che la Classic Densification ha esaurito il suo margine. La vera domanda se sia "finito" trova risposta solo in PSNR/SSIM/LPIPS su un test-set indipendente — i valori relativi si trovano nei report di benchmark che analizzi nel Pareto Dashboard (W13–W22). La finestra Holdout (W23–W29) non fornisce queste metriche; valuta solo se il tuo set di telecamere consente affatto una suddivisione equa in punti di vista di training e di test.

PSNR/Holdout è la verità, la Loss è solo un proxy. La loss è una metrica relativa: scende mentre il tuo modello si adatta alle view di training. Una loss bassa però non significa automaticamente un buon modello — se il modello ha imparato a memoria le immagini di training (overfitting), la loss sarebbe piccola, ma la PSNR su view mai viste (Holdout) sarebbe scarsa. Perciò: per la valutazione finale della qualità guarda sempre alle metriche Holdout, non solo alla loss finale.

Regola pratica

- User Guide e Keyboard Shortcuts sono aiuto statico — rapidi per domande puntuali, per gli approfondimenti usa il presente manuale. - Apri Manage Storage non appena il disco scende sotto il 10% di spazio libero. I log e lo staging degli Imports sono i soliti colpevoli. - Pareto Dashboard ha senso solo dopo almeno tre o quattro report di training. Asse X = costo (Time / Gs), asse Y = qualità (PSNR / SSIM). Il fronte di Pareto mostra le combinazioni efficienti. - Usa Holdout Analysis prima di pubblicare benchmark PSNR insieme ad altri — ti assicura che il tuo set di test sia davvero rappresentativo. La suddivisione in fold esportata è pensata per strumenti esterni; RadianceKit continua ad addestrare contro „every-8th". - BayesOpt Console è principalmente uno strumento di apprendimento e ispezione per le definizioni dello spazio di ricerca — calcola contro una funzione dimostrativa, non contro run di training reali. - Il plateau della loss e il plateau del numero di gaussiane vanno interpretati separatamente. Il limite massimo non è un segnale di „completato". La qualità reale si misura solo con il PSNR di holdout. - 10K iterazioni senza miglioramento della loss minima → interrompi il training.