Upscaling: Spaziale, Temporale e Neurale
Perché il bilineare è destinato a fallire, perché TAAU funziona, e perché la ricostruzione neurale ha vinto.
Prima di guardare DLSS nello specifico, dobbiamo capire che tipo di problema è l'upscaling e che tipo di soluzioni sono possibili. Ci sono tre generazioni di approccio, e gli upscaler moderni sono un ibrido di tutte e tre.
Upscaling spaziale: il vicolo cieco
L'upscaler più stupido possibile legge ogni pixel di output e chiede: "a quale pixel di input corrisponde, e come dovrei interpolare tra loro?"
Le risposte classiche sono:
- Nearest-neighbor: prendi il pixel di input più vicino. Pixelloso, a blocchi.
- Bilineare: media pesata dei 4 pixel di input più vicini. Liscio ma sfocato.
- Bicubico: media pesata di 16 pixel più vicini usando un kernel cubico. Più nitido del bilineare, artefatti di ringing sui bordi netti.
- Lanczos: bicubico con finestra sinc. Lo standard d'oro classico.
Tutti questi condividono una proprietà fatale: non inventano nuova informazione. Possono solo lisciare ciò che c'è già. Se fai upscaling di un frame 1080p in 4K con Lanczos, ottieni un'immagine 4K che ha esattamente 1080p di dettaglio. I bordi sembrano OK. Qualsiasi cosa sub-pixel geometria fine, fogliame distante, testo è persa per sempre.

FSR 1: solo spaziale e cosa ci insegna
FSR 1 di AMD (2021) è l'upscaler solo-spaziale più rifinito. Usa un kernel custom Lanczos-like edge-adaptive più un pass di sharpening (RCAS). Il risultato è impressionante per quello che è un algoritmo a singolo frame senza history ma non può recuperare dettaglio sub-pixel e non può fare anti-aliasing. FSR 1 è essenzialmente obsoleto adesso; AMD stessa l'ha sostituito con FSR 2 (temporale) e FSR 3 (temporale + frame generation).
La lezione: non puoi fare upscaling in modo convincente da un singolo frame. Devi portare informazione da qualche altra parte. Quel "qualche altra parte" è il tempo.
Upscaling temporale: dove inizia la magia
Ricordati dal capitolo TAA: se sposti la matrice di proiezione sub-pixel su molti frame, i campioni coprono densamente l'area del pixel nel tempo. Ora riusa la stessa idea, ma rendi la risoluzione di output più alta di quella di input:
Ogni frame, renderizza a 1080p con una camera con jitter. Ogni frame, accumula quel campione 1080p in un buffer di history 4K. Dopo 8–16 frame, ogni pixel 4K è stato colpito da almeno un campione low-res ben posizionato, e l'immagine 4K ha dentro dettaglio 4K vero.
Questo è il TAAU. Fatto bene, produce output che sembra indistinguibile dal 4K nativo in molte regioni, e visibilmente migliore nelle regioni dove l'anti-aliasing conta (fogliame, capelli, geometria distante).
offset di jitter
↓
Render @ 1080p ───► Posizioni dei campioni distribuite sulla griglia 4K
↓
Reprojection + accumulo nella history 4K
↓
Resolve → immagine 4K finale
I due modi di fallire del TAA diventano peggiori sotto TAAU, perché l'algoritmo sta prendendo molti meno campioni per pixel di output per frame:
- I buchi di disocclusion sono ora ~4× più visibili.
- Le scie di ghosting sono più lunghe perché ogni nuovo campione è una frazione minore del risultato.
- Le feature sottili (cavi, recinzioni, capelli) che si muovono possono sfarfallare perché non ci sono abbastanza campioni per pixel di output.
Il TSR (Temporal Super Resolution) di Unreal Engine, introdotto in UE5, è un TAAU state-of-the-art calibrato a mano. Funziona bene, ma ha spigoli grezzi, specialmente nel movimento veloce e sugli effetti particellari. Importante, non è AI è solo euristiche classiche molto attente.

Upscaling neurale: il terzo salto
Le euristiche calibrate a mano nel TAAU color clamping, depth rejection, history weighting basato sulla velocità sono limitate. Sono scritte da umani, con una deadline, cercando di bilanciare ghosting contro shimmer contro morbidezza. Una rete neurale può imparare una funzione molto migliore.
La forma della funzione:
- Input: colore low-res (con jitter), motion vectors, depth, output precedente (la history), e spesso segnali extra come motion vector del frame precedente, esposizione e una maschera di disocclusion per pixel.
- Output: un'immagine ad alta risoluzione.
- Rete: una piccola rete neurale convoluzionale, tipicamente un encoder-decoder tipo U-Net con qualche milione di parametri. Le versioni recenti (DLSS 3.5 / 4) sostituiscono la CNN con un vision transformer.
- Dati di training: milioni di coppie di (frame di gioco low-res + segnali, ground truth high-res renderizzata a 16× super-sampling).
La rete impara, implicitamente, tutte le cose che il TAAU calibrato a mano cercava di fare:
- Quando rifiutare la history (un classificatore di disocclusion appreso).
- Come recuperare dettaglio sub-pixel (un kernel di upsampling appreso che si adatta alla geometria locale).
- Come lisciare lo shimmer senza cancellare il dettaglio (un regolarizzatore spaziale appreso).
- Come gestire feature sottili che il TAAU calibrato a mano perde.
Inoltre raccoglie cose che nessun algoritmo scritto a mano riesce a fare facilmente: impara che tipi di strutture tendono a contenere i giochi (capelli, recinzioni, fogliame, pattern di mattoni, testo) e le ricostruisce più aggressivamente di quanto un filtro agnostico al contenuto oserebbe.

Perché "AI" conta davvero qui
È di moda essere scettici rispetto al marketing AI. In questo caso lo scetticismo è fuori posto. La ragione per cui DLSS funziona bene come funziona è che la rete neurale sta risolvendo un problema sapere quando le euristiche sbagliano in cui il codice scritto a mano è cattivo. Un pixel potrebbe essere su un cavo sottile, in un riflesso, dietro un vetro, nella regione di disocclusion dietro un oggetto in primo piano in movimento; ogni caso vuole un peso di history diverso. Una rete con abbastanza capacità impara tutti questi casi implicitamente dai dati.
Il rovescio è che tutti gli upscaler neurali sono sensibili a input su cui non sono stati addestrati. Effetti particellari, rifrazione screen-space, bloom post-processato, elementi UI sub-pixel qualsiasi cosa fuori dalla distribuzione di training può produrre artefatti sorprendenti.
Il costo della rete
Questa è la parte di cui non si parla. La rete neurale non è gratis:
- DLSS Super Resolution (CNN, 2020–2023) gira in circa 0,5–1,5 ms su una GPU RTX 30/40 di fascia alta.
- DLSS Super Resolution (Transformer, 2024+) gira in circa 1,0–2,5 ms.
- Gira quasi interamente sui Tensor Cores unità di moltiplicazione matriciale a funzione fissa dentro l'SM il che significa che non contende con i shader core che fanno il resto del lavoro del frame.
Quindi in teoria il costo è nascosto. In pratica, sulle GPU di fascia bassa con meno Tensor Cores o più vecchi, il costo della rete può mangiare una fetta significativa del budget del frame, ed è per questo che DLSS dà boost più piccoli su, diciamo, una RTX 4060 che su una 4090.

Con le fondamenta a posto pipeline, TAA, motion vector, ricostruzione neurale possiamo finalmente guardare DLSS nel dettaglio. È il prossimo capitolo.