HomeNotizieEcco il modder che ha hackerato la nuova tecnologia di upscaling di...

Ecco il modder che ha hackerato la nuova tecnologia di upscaling di AMD in Cyberpunk 2077

Tutti i giochi con DLSS potrebbero avere presto FSR 2.0?

All’inizio di questa settimana, si è diffusa la notizia di un modder che ha hackerato la tecnologia di upscaling temporale FSR 2.0 di AMD in Cyberpunk 2077, consentendo agli utenti di schede grafiche non RTX di giocare a frame-rate più elevati con una qualità visiva sostanzialmente migliore rispetto all’upscaling FSR 1.0. Si tratta di una novità assoluta per i possessori di GPU AMD e la mod funziona perfettamente anche su Steam Deck.

Abbiamo contattato il creatore della mod, il glorioso PotatoOfDoom1337, per scoprire esattamente come funziona e se significa che FSR 2.0 sarà presto disponibile in una tonnellata di giochi esistenti. Ecco l’intervista, leggermente modificata per chiarezza. Buon divertimento!

Il primer di Alex Battaglia sull’FSR 2.0 mostra la funzione in God of War, uno dei tre giochi FSR 2.0 rilasciati.

Qual è il tuo background nella programmazione e nel modding di giochi? Su NexusMods, sembra che tu crei mod solo da aprile dell’anno scorso?

PotatoOfDoom: Studio informatica, sono sempre stato interessato all’aspetto tecnico dei videogiochi e sono rimasto affascinato quando ho saputo di progetti come Reshade, Special K o DXVK. Considero la programmazione il mio hobby preferito e inoltre mi piace molto fare reverse engineering e smanettare con il codice. Ho creato la mia prima mod di Cyberpunk 2077 perché CDPR ha corretto un bug molto divertente nel gioco. Questo mi ha infastidito così tanto che ho scaricato gli strumenti di sviluppo e ho reimplementato il bug da solo. Il processo di creazione di questa mod mi ha appassionato, col tempo ho imparato di più sul gioco e ho iniziato a creare mod più complesse.

Cosa ti ha spinto a cercare di hackerare FSR 2.0 in Cyberpunk 2077?

PotatoOfDoom: Principalmente la mia vecchia GTX 1080, un po’ di invidia verso gli utenti RTX per via della loro esclusiva tecnologia DLSS e la curiosità di sapere come funzionano le soluzioni di upscaling temporaneo in generale. Inoltre, FSR 2.0 e DLSS sono stati descritti come molto simili, quindi volevo solo vedere se era possibile.

Come hai sviluppato la mod?

PotatoOfDoom: Inizialmente ho iniziato la mod qualche settimana fa in previsione del rilascio di FSR 2.0 open source. I primi passi sono stati quelli di far parlare il gioco con la mia .dll personalizzata e dire al gioco che supporta il DLSS e segnalare al gioco le risoluzioni DLSS disponibili implementando le interfacce richieste. Poi ho scritto un piccolo shader che visualizza semplicemente un’immagine rossa vuota. Il mio obiettivo era di usarlo come base per verificare che le parti DirectX del mio codice funzionassero correttamente. Poi ho aspettato il rilascio dell’open source. Dopo il rilascio del codice sorgente da parte di AMD, ho immediatamente sostituito il mio codice di prova con FSR 2.0. Mi aspettavo di lavorarci per diversi giorni, ma sono rimasto piacevolmente sorpreso dal fatto che l’integrazione ha richiesto solo poche ore. Ho usato debugger come x64dbg e software di reverse engineering come IDA e Ghidra per trovare le specifiche del comportamento del DLSS nel codice del gioco. Inoltre, per il debug dei buffer, RenderDoc è stato incredibilmente utile.

Ecco come appare la mod in azione in Cyberpunk 2077 e Dying Light 2, rispetto a DLSS, FSR 1.0 e 4K nativo.

Ci sono state sorprese in termini di cose più difficili o più facili da realizzare?

PotatoOfDoom: I buffer di ingresso DLSS e FSR sono gli stessi. In pratica ho copiato l’integrazione FSR dall’esempio AMD, ho impostato i valori FoV/Depth, ho lanciato il gioco e ho ottenuto subito un’immagine abbastanza decente. La cosa peggiore è stata una stranezza di Cyberpunk per cui il gioco non ripristinava una struttura speciale di DirectX (ComputeRootSignature) dopo l’esecuzione di DLSS. Questo non è così importante per il DLSS di Nvidia, poiché utilizza CUDA, ma sfortunatamente FSR utilizza i normali shader di calcolo DirectX, che rompono il gioco. Quindi ho dovuto trovare un modo per ripristinare questa struttura dopo l’esecuzione di FSR.

Per quanto riguarda l’implementazione di FSR 2.0 CP2077, cosa funziona bene al momento e cosa deve essere corretto?

PotatoOfDoom: Il ghosting e le texture animate sono i problemi maggiori al momento. Sia il DLSS che l’FSR usano maschere separate per dare all’algoritmo indicazioni se riutilizzare il vecchio materiale temporale o scartarlo, ma non sembrano essere compatibili e devo creare uno shader che traduca le maschere DLSS in maschere FSR.

Maschere DLSS e FSR… sono simili a una maschera di Photoshop?

PotatoOfDoom: Sì, in pratica sono così. Puoi immaginarle come un’immagine in scala di grigi con valori che vanno da 0,0 a 1,0 e l’upscaler temporale riproietta i vecchi fotogrammi in base a questi valori. La documentazione FSR ne parla in modo più dettagliato.

Ecco un esempio visivo. Ho lanciato una granata di fuoco sulla strada e, come si può vedere, non c’è nulla nei vettori di movimento o nel buffer di profondità. Questo perché né la texture 2D del fuoco né le particelle delle scintille hanno una rappresentazione 3D nel gioco. Per garantire che le piccole scintille non causino tracce antiestetiche, vengono mascherate nella maschera InputBiasColorMask in modo che l’algoritmo di riproiezione ignori questi pixel e non riproietti nulla in quella posizione.

FSR 2.0 e DLSS hanno requisiti simili in termini di input richiesti?

PotatoOfDoom: Sì, altrimenti questa mod non sarebbe possibile. Entrambe le integrazioni hanno bisogno di colori, vettori di movimento e un buffer di profondità come input. Inoltre, usano le maschere che ho menzionato prima. Sono molto importanti per le cose che non hanno vettori di movimento, come le particelle o le texture animate come il fumo e le schermate del computer nel gioco e le maschere applicate in modo errato sono la ragione principale della comparsa del ghosting in un gioco. Inoltre, FSR deve conoscere il FOV e i piani vicini e lontani del depth buffer. DLSS non ha bisogno di queste informazioni aggiuntive (immagino che le calcoli tramite l’algoritmo ML integrato).

Con quello che sapete ora, quanto sarebbe facile sviluppare una soluzione simile per altri giochi DLSS?

PotatoOfDoom: Sì, penso di sì. Non ho ancora finito con questo gioco, ma se gli altri giochi sono simili non dovrebbe volerci più di qualche giorno per ogni gioco. Ho già fatto alcuni test iniziali con Death Stranding e i primi risultati sembrano molto buoni.

Ad esempio, è possibile aggiungere FSR 2.0 a Control, un gioco che notoriamente gira malissimo sulle GPU AMD, anche con RT disattivato?

PotatoOfDoom: Sì, credo di sì. Il controllo è stato aggiornato a DLSS 2.0, il che significa che l’interfaccia DLSS con cui il gioco comunica è la stessa o comunque molto simile a quella di Cyberpunk. Questa è la parte più importante.

Dato l’enorme interesse del pubblico per il mod, quali sono i vostri piani per il futuro? Sareste aperti ad altri sviluppatori che si unissero al progetto per migliorare i risultati, o per implementare mod simili per altri giochi?

PotatoOfDoom: Non mi aspettavo davvero tutto questo interesse per la mia mod, e se lo avessi saputo mi sarei preparato un po’ di più quando ho premuto il pulsante di pubblicazione giovedì scorso. Voglio finire prima Cyberpunk (se i veri sviluppatori non sono più veloci di me XD) e poi passare ad altri giochi DLSS. E sì, naturalmente mi piacerebbe che altri sviluppatori si unissero a me e mi aiutassero a far uscire questo progetto dalla fase di proof-of-concept più velocemente e a trasformarlo in qualcosa che la gente possa usare. Ho sentito che c’è già qualcuno che vuole fare il porting del mio mod su Red Dead Redemption 2.

The mod's official image is a Photoshop masterpiece - wow, so graphics.
Wow, che grafica. L’immagine ufficiale della mod è un capolavoro.

Sarà possibile creare un sostituto del DLSS che funzioni su una vasta gamma di giochi (“dlss2fsr”, come suggerito da un utente di Github) o si tratta piuttosto di una serie di mod, ognuna adatta a un determinato gioco?

PotatoOfDoom: Solo con alcuni compromessi. Sarebbe possibile creare una sorta di mod che ottenga i valori di FoV e Depth da un semplice file ini. Questa mod potrebbe funzionare per quasi tutti i giochi DLSS, ma la qualità dell’immagine potrebbe non essere così buona come potrebbe essere. Voglio dire che persino Nvidia ottimizza DLSS per alcuni giochi. Ad esempio, le prime versioni di DLSS presentavano un terribile ghosting in Cyberpunk, mentre gli aggiornamenti successivi di DLSS hanno migliorato la situazione. Non posso parlare di altri giochi, ma ad esempio Cyberpunk invia involontariamente il buffer dell’ID dell’oggetto a DLSS (che è un buffer che assegna un singolo valore di colore a ogni oggetto nella scena). DLSS non ha bisogno di questo buffer e non può fare nulla con queste informazioni, ma questo mi permette di migliorare enormemente l’anti-ghosting (soprattutto durante la guida). Inoltre, il bug ComputeRootSignature di cui ho parlato prima è esclusivo di Cyberpunk e rende questa versione del mod FSR incompatibile con qualsiasi altro gioco. Ogni singolo gioco ha delle peculiarità o addirittura dei bug che rendono importante l’ottimizzazione di ogni gioco per ottenere la migliore esperienza. Ovviamente non posso fare una cosa del genere per ogni singolo gioco, ma credo che se esistesse una sorta di framework DLSS2FSR, dovrebbe essere possibile per altri sviluppatori con un po’ di esperienza di programmazione integrare e ottimizzare facilmente FSR per altri giochi DLSS.

C’è qualcos’altro che vorresti condividere sul processo di realizzazione della mod, o che vorresti che la gente conoscesse?

PotatoOfDoom: Penso che le mie risposte sopra dovrebbero coprire tutto ciò che riguarda la mod per ora. Questa mod ha solo pochi giorni di vita ed è già così ben accolta. Sono sicuro che vedremo una tonnellata di sviluppi eccitanti nelle prossime settimane. Restate sintonizzati per saperne di più.

Roba davvero eccitante! Da quando è stata rilasciata questa intervista, un altro collaboratore di nome mnxn ha adattato con successo la mod per Dying Light 2, e mi aspetto di vedere molti altri giochi supportati nelle prossime settimane se tutto va bene. Grazie a PotatoOfDoom per il tempo dedicato alla creazione della mod e per averci parlato!

Se siete interessati a provare personalmente la mod, potete trovarla su NexusMods. L’installazione è piuttosto semplice: sostituite alcuni file nella directory CP2077 e modificate il registro di sistema. È inoltre possibile seguire lo sviluppo della mod sul repository GitHub di PotatoOfDoom.

Read More

RELATED ARTICLES

Commenta!

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.