# DLSS

Il DLSS, acronimo di Deep Learning Super Sampling (super campionamento ad apprendimento profondo), è una tecnologia sviluppata da NVIDIA che prende un'immagine a bassa risoluzione per poi utilizzare l'IA (apprendimento profondo) per generare una serie di svariati campionamenti (super sampling) per poi selezionare i migliori da usare come riferimento per produrre un'immagine a risoluzione maggiore, tale soluzione può essere utilizzata con specifiche schede video Nvidia e solo con videogiochi che integrano questa funzione. L'uso del DLSS consente di limitare il sovraccarico della scheda video consentendo di generare un frame rate più elevato (in quanto sostanzialmente renderizza a risoluzioni inferiori).

## Storia
### Cronologia delle versioni e delle modalità di qualità dell'immagine

| Versione | Data di distribuzione | Note |
| 1.0 | febbraio 2019 | Si tratta di uno scaler (Nvidia Super Resolution), che utilizza un'intelligenza artificiale allenata con videogiochi specifici, tra cui Battlefield V e Metro Exodus, in modo da offrire immagini upscalate con già integrato l'effetto antialiasing |
| 2.0 (prima iterazione) | agosto 2019 | Si tratta di una forma di Temporal Anti-Aliasing Upsampling (TAAU), che non utilizza più l'intelligenza artificiale ed è stata specificatamente adattata per alcuni titoli, come Control |
| 2.0 (seconda iterazione) | marzo 2020 | Reintroduce l'intelligenza artificiale, ma allenata genericamente con il Neural Graphics Framework |
| 2.X | 2021 | aggiunge anche il nuovo DLAA (Deep Learning Anti-Aliasing), dove non vi è upscaling e l'immagine viene direttamente renderizzata alla risoluzione voluta |
| 3.0 | Settembre 2022 | Introdotto l'Optical Multy Frame Generation (utilizzato per il frame generation) che genera nuovi frame, interponendoli ai frame calcolati, questo permette di aumentare il numero dei fotogrammi, ma alcuni di questi saranno frutto dell'interpretazione delle immagini precedenti, non garantendo la fedeltà assoluta dei fotogrammi calcolati |
| 3.5 | Agosto 2023 | Viene sostituito lo strumento di gestione dell'illuminazione, passando dal "Denoiser" al "Ray Reconstruction", il quale permette anche di conservare e gestire in modo più proficui i relativi dati |
| 4.0 | Gennaio 2024 | Aggiunta la generazione multi-frame (multi-frame generation), un nuovo modello AI di trasformazione, migliorando la stabilità dei frame, riducendo drasticamente il ghosting, riducendo l'utilizzo della memoria e aumentando i dettagli dell'illuminazione. |
Il DLSS è disponibile ai programmatori del Unreal Engine dalla versione UE4.26
Il DLSS è disponibile ai programmatori del Unity dalla versione U 2021.2b
In data 12 ottobre 2021 il DLSS è supportato ufficialmente in 120 videogiochi.
| Impostazioni di qualità | Fattore di scala | Scala di rendering |
| DLAA | 1× | 100% |
| Ultra Quality $_{(nonutilizzato)}$ | 1,32× | 76% |
| Quality | 1,5× | 66,7% |
| Balanced | 1,72× | 58,0% |
| Performance | 2,00× | 50,0% |
| Ultra Performance $_{(dallaversione2,1;raccomandatosoloperrisoluzioni8K)}$ | 3,00× | 33,3% |
| Auto | La risoluzione renderizzata si regola dinamicamente in tempo reale per raggiungere gli obiettivi fps definiti dall'utente (ad esempio, 144 fps su un monitor a 144 Hz) | La risoluzione renderizzata si regola dinamicamente in tempo reale per raggiungere gli obiettivi fps definiti dall'utente (ad esempio, 144 fps su un monitor a 144 Hz) |

## Algoritmi
### DLSS 1.0

La prima iterazione del DLSS è un upscaler di immagini prevalentemente spaziale con due stadi, entrambi basati su reti neurali con codifica automatica convoluzionale. Il primo passo è una rete di miglioramento dell'immagine che utilizza il fotogramma corrente e i vettori di movimento per eseguire il miglioramento dei bordi e l'anti-aliasing spaziale. La seconda fase è un upscaling dell'immagine che utilizza il singolo frame raw a bassa risoluzione per eseguire l'upscaling dell'immagine alla risoluzione di output desiderata. L'utilizzo di un solo fotogramma per l'upscaling significa che la rete neurale stessa deve generare una grande quantità di nuove informazioni per produrre l'output ad alta risoluzione, questo può provocare lievi alterazioni come foglie che differiscono nello stile dal contenuto sorgente.
Le reti neurali vengono addestrate in base al gioco generando un "frame perfetto" utilizzando il supercampionamento tradizionale a 64 campioni per pixel, nonché i vettori di movimento per ciascun frame. I dati raccolti devono essere il più completi possibile, includendo il maggior numero possibile di livelli, ore del giorno, impostazioni grafiche, risoluzioni ecc. Questi dati vengono anche aumentati utilizzando aumenti comuni come rotazioni, cambi di colore e rumore casuale per aiutare a generalizzare i dati del test. L'addestramento viene eseguito sul supercomputer Saturn V di Nvidia

### DLSS 2.0

DLSS 2.0 è un'implementazione di temporal anti-aliasing upsampling (TAAU), che utilizza ampiamente i dati dei frame precedenti attraverso il jittering sub-pixel per risolvere i dettagli fini e ridurre l'aliasing. I dati raccolti da DLSS 2.0 includono: input grezzo a bassa risoluzione, vettori di movimento, buffer di profondità e informazioni su esposizione/luminosità. Può anche essere utilizzato come un'implementazione TAA in cui l'immagine viene renderizzata con una risoluzione piena, anziché essere sovracampionata da DLSS, Nvidia lo contrassegna come DLAA (Deep Learning Anti-Aliasing)
TAA(U) è utilizzato in molti videogiochi e motori di gioco moderni, tuttavia tutte le implementazioni precedenti hanno utilizzato una qualche forma di euristica scritta manualmente per prevenire artefatti temporali come ghosting e sfarfallio. Per tale motivo viene applicata una soluzione che previene un subcampionamento errato, che aiuta a identificare e correggere molti artefatti temporali, ma la rimozione deliberata di piccoli dettagli in questo modo è analoga all'applicazione di un filtro di sfocatura, e quindi l'immagine finale può apparire sfocata quando si utilizza questo metodo. Poiché gli artefatti temporali si verificano nella maggior parte degli stili e degli ambienti artistici sostanzialmente allo stesso modo, la rete neurale che alimenta DLSS 2.0 non ha bisogno di essere riaddestrata quando viene utilizzata in giochi diversi. Nonostante ciò, Nvidia fornisce spesso nuove revisioni minori di DLSS 2.0 con nuovi titoli, quindi questo potrebbe suggerire che potrebbero essere eseguite alcune ottimizzazioni minori dell'addestramento quando i giochi vengono commercializzati, sebbene Nvidia non fornisca log delle modifiche per queste revisioni minori per confermarlo.
I principali progressi rispetto a DLSS 1.0 includono: Conservazione dei dettagli significativamente migliorata, una rete neurale generalizzata che non necessita di essere riaddestrata per partita e ~2 volte meno overhead (~1-2 ms vs ~2-4 ms).
Va inoltre notato che forme di TAAU come DLSS 2.0 non sono upscaler nello stesso senso di tecniche come ESRGAN o DLSS 1.0, che tentano di creare nuove informazioni da una fonte a bassa risoluzione; invece TAAU lavora per recuperare i dati dai frame precedenti, piuttosto che creare nuovi dati. In pratica, ciò significa che le texture a bassa risoluzione nei giochi appariranno ancora a bassa risoluzione quando si utilizzano le attuali tecniche TAAU. Questo è il motivo per cui Nvidia consiglia agli sviluppatori di giochi di utilizzare texture a risoluzione più elevata rispetto a quanto farebbero normalmente per una data risoluzione di rendering, applicando un bias mip-map quando DLSS 2.0 è abilitato.
Offre agli utenti 4 modalità di qualità dell’immagine (Quality, Balanced, Performance, Ultra Performance) che controllano la risoluzione di rendering, cercando sempre di incrementare più FPS.

### DLSS 3.0

Utilizza una nuova tecnica di Nvidia chiamata Optical Multy Frame Generation che genera nuovi frame e non pixel, compatibile con i core Tensor di quarta generazione, presenti in tutte le schede grafiche della serie RTX 4000. La novità è il frame generator, che deve superare la sfida di ottenere un'immagine coerente, senza artefatti o distorsioni, compito aggravato dall'interfacce di gioco ed i cambiamenti di scena, questo viene fatto sfruttando il nuovo processo Optical Flow che riconoscere i cambiamenti dell'immagine tra i frame con la ricerca dei pixel, il quale associato ai vettori di movimento (introdotti dal DLSS 2.0), permette di emulare il movimento degli elementi in gioco e generare frame artificiali. Queste difficoltà sono parzialmente superabili, ma sono intrinsecamente insuperabili, in quanto pur ottimizzando non è possibile superare le limitazioni fisiologiche del generatore di fotogrammi. Altro problema intrinseco del frame generator è il ritardo nelle immagini visualizzate, in quanto i fotogrammi generati vengono interposti tra il fotogramma calcolato attuale ed il fotogramma calcolato precedente, questo fa sì che l'immagine a monitor sia in ritardo di un fotogramma calcolato. Questi fattore limitano l'uso del frame generator solo quando è possibile avere una frequenza base dei fotogrammi calcolati relativamente alta, come possono essere i 45 FPS o più (in questo caso il frame generator permette un aumento quasi doppio dei fotogrammi senza impattare significativamente sulla qualità), in quanto con frequenze minori, aumentano in modo più marcato tutti i difetti di questa soluzione.. In una condizione di carico equilibrato tra CPU e GPU l'aumento dei fotogrammi in linea di massima è quasi il doppio, in quanto comunque sia la tecnica richiede del carico computazionale alla scheda grafica, il che riduce i frame calcolati, mentre nel caso la prestazione sia limitata dalla CPU, l'aumento è pressoché di 2 volte (se combinata con le tecniche precedenti del DLSS si può avere prestazioni ancora maggiori), mentre nel caso la prestazione è limitata dalla GPU, la tecnica potrebbe anche impattare negativamente.
Grafico di bilanciamento delle prestazioni DLSS :
| Qualità immagine | Qualità immagine | Qualità immagine | ◆ | FPS | FPS | FPS |
| Prevale la qualità dell immagine | Ultra Quality | Quality | Balanced | Performance | Ultra Performance | Prevale il Frame rate al secondo |
Nota bene: La modalità Ultra Quality attualmente risulta inedita per gli utenti.

### DLSS 3.5

Revisione del sistema precedente, che permette l'applicazione di questa soluzione (ad eccezione del "Frame Generator") anche a schede video più vecchie, a partire dalle RTX2000, viene sostituito il "Denoiser" con il "Ray Reconstruction", il quale permette anche di conservare e gestire in modo più proficui i relativi dati, permettendo di fatto una migliore qualità visiva, senza alterare le prestazioni sui fotogrammi rispetto alle generazioni precedenti del DLSS.

### DLSS 4.0

L'upscaling ora utilizza un nuovo modello basato su un trasformatore di visione (ViT), migliorando la qualità dell'immagine e riducendo il ghosting, oltre che conferire una maggiore stabilità dell'immagine in movimento rispetto al precedente modello di rete neurale convoluzionale (CNN). Questa nuova versione di DLSS se abbinata alle serie GeForce 50 consente di generare e interpolare un numero maggiore di fotogrammi (Multi Frame Generation) per ogni singolo frame renderizzato in modo tradizionale, mentre con la serie GeForce 40 rimane il limite del rapporto 1:1 (frame interpolato per ogni frame renderizzato in modo tradizionale).

## Architettura

Il Deep Learning Super Sampling è disponibile solo sulle schede video della serie GeForce 20, GeForce 30 e successive, basate rispettivamente su architetture Turing e Ampere, poiché necessita di hardware specifico, ovvero gli acceleratori IA chiamati Tensor core, ad esempio la GeForce RTX 2060 ne ha 240 invece la GeForce RTX 3080 Ti possiede 320 Tensor cores. Per le generazioni di GPU precedenti come la serie GTX 1600 gli sviluppatori e utenti posso optare su NIS acronimo di Nvidia Image Scaler basato sullo spatial upscaler.