Skip to main content

Battlefield 5: abbiamo testato il ray tracing, la nuova frontiera della grafica

Il futuro è luminoso… e brillante!

Battlefield 5 è arrivato su PC, accompagnato dal nostro primo assaggio della rivoluzione nel campo della grafica per videogiochi: il ray tracing in tempo reale delle nuove GPU della linea RTX di Nvidia. È un momento davvero importante sotto molti aspetti e un fenomenale traguardo tecnologico, non solo per il nuovo hardware che rende possibile tutto questo, ma anche per gli ingegneri di DICE che si sono impegnati con il ray tracing in tutta la sua gloria.

La rivoluzione visiva, però, va di pari passo con la realtà dell'implementazione (ricordiamoci che si tratta di una patch alpha che gira su hardware di prima generazione). Il ray tracing in tempo reale rimane ancora pesantemente esigente in termini di potenza computazionale e le performance sono tutt'altro che ideali ma si tratta, ad ogni modo, di una tecnologia emergente con una serie di ottimizzazioni in arrivo. Abbiamo parlato con DICE direttamente e conosciamo il tipo di strategie che lo sviluppatore sta adottando per raggiungere livelli di frame-rate più alti.

Alla fine di questo articolo di analisi, infatti, troverete la nostra intervista approfondita con il rendering engineer di DICE, Yasin Uludağ, che ha trascorso l'ultimo anno a lavorare, insieme al suo collega Johannes Deligiannis, all'implementazione del ray tracing in Battlefield 5. Prima di tutto, però, vale la pena dare un'occhiata all'analisi tecnica di Battlefield 5 su PC che trovate nel video embeddato qui sotto, principalmente per avere un assaggio del gioco nella sua incarnazione del day one e per avere un'idea di come il ray tracing scala nei quattro preset disponibili: basso, medio, alto e ultra. La raccomandazione di DICE, al momento, è di selezionare il settaggio basso del DXR per questioni legate alle performance generali e il risultato è comunque fantastico. Ma cosa accade alla qualità del ray tracing scorrendo tra i vari settaggi?

È nei settaggi medi che i più grandi compromessi nella qualità del ray tracing iniziano ad essere davvero evidenti. Il netto taglio dei materiali che ricevono i riflessi con il ray tracing li fa apparire più opachi: i metalli verniciati e le superfici in legno ricevono texture con cubemap invece che riflessi con ray tracing. Generalmente la qualità è comunque buona, anche se è un po' triste vedere le armi perdere i colori e i toni dell'ambiente circostante. Un altro passo indietro viene effettuato sotto il punto di vista della risoluzione dei riflessi stessi. Battlefield 5 produce quantità variabili di raggi luminosi basati su una divisione dello schermo in sezioni da 16x16 pixel. Se un'area necessita di meno raggi, esso riduce la dimensione di quella sezione ma, d'altra parte, se l'intero schermo è invaso da acqua riflettente, pone un limite proporzionale alla risoluzione.

Per il preset Ultra il limite è al 40% della risoluzione, ad alto è al 31.6%, a medio a 23.3% e a basso è al 15.5%. Perciò la nitidezza dei riflessi si riduce proporzionalmente al calo della qualità nei settaggi ma, tanto per sottolinearlo ancora una volta, anche le impostazioni basse vi offriranno un ottimo esempio di ray tracing, con le superfici più importanti come l'acqua, gli specchi e i metalli lucidi che reagiscono adeguatamente all'ambientazione circostante.

Ecco la nostra analisi video completa di Battlefield 5 su PC, incluse alcune caratteristiche visive fondamentali, l'RTX e il confronto con la versione console.Guarda su YouTube

Ci sono già moltissimi benchmark delle performance del DXR di Battlefield 5 su internet e alcuni risultati sono tutt'altro che esaltanti ma arriverà presto una patch correttiva che dovrebbe porre rimedio a molti dei problemi conosciuti e risolvere gran parte degli improvvisi cali di frame-rate registrati. Per esempio, allo stato attuale tutti livelli sono afflitti da un problema legato alle sezioni di schermo che rendono il ray tracing più esigente di quanto dovrebbe, a causa probabilmente del terreno distruttibile. Alcuni effetti di luce e qualche tipo di vegetazione possono influire negativamente sulle performance, producendo più raggi del previsto. È difficile quantificare precisamente quanto impatto abbiano i DXR sulle performance, perché il carico computazionale cambia in base al contenuto visualizzato: non c'è un costo fisso, in termini di prestazioni.

Su una RTX 2080Ti, i livelli basati principalmente sulla sabbia o sulla neve possono eseguire il ray tracing a settaggi bassi a 60fps con una risoluzione di 1620p mentre altre mappe più ricche di riflessi, come Rotterdam ad esempio, necessitano di un conteggio di pixel del 1296p per rimanere bloccate a 60 frame al secondo. Abbiamo utilizzato lo scaler interno della risoluzione su uno schermo 4K per applicare le modifiche necessarie.

Ovviamente i miglioramenti alla qualità delle immagini saranno, ancora una volta, variabili in base al contenuto visualizzato. In mappe composte da polvere o rocce, i settaggi bassi e medi vedranno il ray tracing fare la differenza solo su superfici di metallo, di vetro o, occasionalmente, sulle pozzanghere al lato della strada. Solo con i preset più alti il ray tracing darà il meglio di sé, lavorando alla grande anche su materiali più opachi. Mappe come Rotterdam possono cambiare radicalmente ma, lo ripetiamo, è tutto dipendente dalle varie scene. Uno dei nostri tocchi di classe preferiti, comunque, è il riflesso del viso del nostro personaggio sul vetro del cannocchiale montato sulla nostra arma. Qualcosa che solo il ray tracing può offrire.

DXR Ultra
DXR Alto
DXR Medio
DXR Basso
DXR Off/Ultra
La qualità dei preset DXR cambia la risoluzione e l'impatto del ray tracing ma riesce comunque a farvi visualizzare dei riflessi che non avreste visto utilizzando le Screen Space Reflections ad Ultra.
DXR Ultra
DXR Alto
DXR Medio
DXR Basso
Le modifiche del DXR possono impattare sulla visualizzazione di alcuni materiali, come potete notare dall'infisso di metallo in questo screenshot.
DXR Ultra
DXR Alto
DXR Medio
DXR Basso
La distanza di applicazione del DXR è identica tra tutti i preset mentre la risoluzione massima dei riflessi cala da Ultra a Basso.
Xbox One X
DXR Off/Ultra
DXR Ultra
Xbox One X non usa le Screen Space Reflection, perciò anche il confronto con le versione PC non-RTX può essere azzardato. Notate, infatti, quanti riflessi inesatti vengono corretti con l'SSR e quanti vengono migliorati ancora di più con l'RTX.
Xbox One X
DXR Ultra
Il ray tracing scurisce adeguatamente i riflessi, il che ha un grosso impatto nel confronto con Xbox One X.
DXR Ultra
DXR Basso
In scene con materiali più opachi, il settaggio della qualità del DXR ha un lieve impatto sull'immagine ma molto pesante sulle performance.
Xbox One X
DXR Off/Ultra
DXR Ultra
L'occlusione dei riflessi dell'SSR li rende più realistici di quelli visibili su Xbox One. Il DXR a ultra rifinisce ulteriormente la situazione.
DXR Basso
DXR Off/Ultra
Le performance del DXR è ampiamente variabile, in base ai settaggi o alla scena visualizzata. In questo screenshot, il DXR impostato su Basso offre un frame-rate a 35fps in 4K in una scena che normalmente girerebbe a 75fps.
DXR Ultra
DXR Alto
DXR Medio
DXR Basso
I livelli di qualità più alti del DXR diminuiscono i compromessi, aggiungendo riflessi con ray tracing anche sulle superfici più opache.

Allo stato attuale, gli sviluppatori di DICE responsabili dell'implementazione del DXR lo vedono ancora come un work-in-progress. Ulteriori ottimizzazioni sono già in programma con patch imminenti e future che il titolo riceverà come parte del supporto previsto per i prossimi mesi. Anche gli aggiornamenti dei driver di Nvidia avranno l'obiettivo di migliorare i livelli di frame-rate e anche di aggiungere l'abilità di eseguire shader con ray tracing in parallelo. Aspettatevi di vedere più opzioni disponibili nei settaggi del DXR, forse con un focus sulle distanze e sull'LOD. I miglioramenti per la qualità e per le performance in sviluppo includono un sistema di rendering ibrido che usa le Screen-Space Reflection tradizionali dove l'effetto è più accurato, usando il ray tracing solo nei momenti in cui questa tecnica fallisce (ricordate, l'SSR può produrre solo riflessi di elementi renderizzati sullo schermo mentre il ray tracing rifletto qualsiasi elemento accuratamente, nei limiti previsti dallo sviluppatore). Questa nuova tecnica potrebbe incrementare notevolmente le prestazioni risolvendo, nello stesso tempo, alcuni problemi di pop-in che i riflessi RT esibiscono al giorno d'oggi.

È anche interessante confrontare le varie versioni di Battlefield 5 e, più nello specifico, l'esperienza ad ultra su PC, quella con DXR e quella che pensiamo essere la migliore edizione possibile per console, su Xbox One X. Senza dubbio il titolo offre un grosso boost su PC, rispetto alle edizioni console. Basandoci sulla nostra prova dettagliata dei vari aspetti del gioco, infatti, la release per Xbox fornisce un'esperienza equivalente ai settaggi medi su PC. Non ci sono Screen-Space Reflection su X perciò, sotto questo aspetto, il PC include un vantaggio qualitativo ancor prima che il DXR sia inserito nell'equazione. È un ottimo prodotto anche su console, comunque, e i settaggi medi sono un buon punto di partenza se giocate su un PC più modesto.

L'arrivo del ray tracing in tempo reale, in definitiva, è un grosso passo avanti per il PC gaming, comparabile sotto molti punti di vista ad altre rivoluzioni viste nel passato, come l'arrivo di Crysis nel 2008 o il debutto dell'originale Quake di id Software nel 1996. Proprio in questi confronti, le implicazioni in termini di performance del ray tracing trovano alcuni parallelismi. Il punto è che qualsiasi genuino balzo in avanti nel campo della fedeltà visiva ha comportato dei compromessi nel frame-rate. Gli immensi requisiti di sistema che Quake richiedeva all'epoca rendevano necessario un upgrade della CPU per raggiungere un'esperienza quantomeno giocabile ed anche Crysis aveva problemi nel girare a 30fps a 1024x768 o a 1280x1024 anche sulle GPU più potenti presenti sul mercato allora. Rimane da vedere fino a che punto DICE possa migliorare le performance, ovviamente, ma il minimo di 1296p sulla RTX 2080Ti per un'azione a 60fps è un chiaro passo avanti rispetto a quanto avevamo visto alla Gamescom (e lo sviluppatore è ottimista sull'arrivo di ulteriori boost, alcuni dei quali sono già pronti per essere distribuiti con il prossimo update). Le prestazioni, quindi, sono ancora abbastanza incerte ma l'impatto del ray tracing è tangibile: stiamo assistendo all'inizio di qualcosa di davvero speciale.

Tom Morgan del Digital Foundry presenta i suoi pensieri iniziali sulle versioni Xbox One e Xbox One X di Battlefield 5.Guarda su YouTube

Il ray tracing DXR di Battlefield 5: l'intervista a DICE

Questa è per gli utenti hardcore! Con l'arrivo del DXR e il nostro primo assaggio di un gioco con ray tracing accelerato in tempo reale tramite hardware, ci stiamo muovendo in un territorio sconosciuto, discutendo di tecnologie e tecniche mai viste prima in un videogioco. Si è parlato parecchio di questa patch per il ray tracing DXR, ancora prima che Battlefield 5 fosse lanciato e volevamo parlare con gli sviluppatore per capire le sfide che hanno dovuto affrontare nell'implementazione del ray tracing e per avere un'idea del lavoro che sta avvenendo dietro le quinte per migliorare le performance generali. Prima di tutto dobbiamo iniziare a capire quali modifiche vengono apportate effettivamente dai quattro preset della qualità del DXR e quali compromessi è stato necessario raggiungere.

Qual è la reale differenza tra settaggi bassi, medi, alti e ultra per il DXR?

Yasin Uludağ:Per adesso le differenze sono le seguenti:

  • Basso: 0.9 di cut-off e 15% della risoluzione dello schermo come massima quantità di raggi.
  • Med: 0.9 di cut-off e 23.3% della risoluzione dello schermo come massima quantità di raggi.
  • High: 0.5 di cut-off e 31.6% della risoluzione dello schermo come massima quantità di raggi.
  • Ultra: 0.5 di cut-off e 40% della risoluzione dello schermo come massima quantità di raggi.

[Note: Il cut-off controlla le superfici i cui materiali sono assegnati ali riflessi con ray tracing nel mondo di gioco. I materiali possono essere ruvidi (legno, rocce) o lisci (metallo, vetro). In base a quanto essi siano lisci e luminosi, viene permesso loro di ricevere riflessi con ray tracing. Il punto in cui il riflesso su una superficie passa da cube map tradizionale a riflesso ray tracing viene indicato dalla soglia scelta dallo sviluppatore. Un valore di 0.5 copre superfici che sono anche moderatamente luminose a determinati angoli. La “percentuale di risoluzione dello schermo come massima quantità di raggi” descrive la percentuale massima della risoluzione scelta a cui possono essere assegnati raggi di luce con ray tracing con un ratio di 1:1 (un raggio per ogni pixel). La quantità di possibili raggi prodotti e l'apparente chiarezza dei riflessi è direttamente proporzionale ai settaggi scelti, salendo da “Basso” a “Ultra”.]

Diciamo “numero massimo di raggi” perché cercheremo di distribuire i raggi da questo quantitativo fisso su quei pixel dello schermo che sono prescelti per essere riflettenti (in base alle loro proprietà riflettenti) ma non possiamo mai andare oltre un raggio per pixel nella nostra implementazione. Quindi, se solo una piccola percentuale dello schermo è riflettente, applicheremo un raggio a tutti quei pixel.

Distribuiamo i raggi dove crediamo siano maggiormente necessari ed eliminiamo gli altri. Non andremo mai oltre il massimo quantitativo di raggi se il vostro intero schermo è pieno di acqua, ad esempio, che è un materiale riflettente ma, invece, ridurremo la risoluzione in aree 16x16 per adattare questa nuova tecnica. Per fare ciò è necessario integrare un buffer a schermo intero utilizzando una memoria on-chip veloce e istruzioni atomiche per le ultime parti rimanenti, dato che offre una bassa contesa a livello hardware ed è super veloce.

Tuttavia, ci sono discussioni interne per cambiare ciò che fanno le singole impostazioni; potremmo fare di più, come giocare con i LOD e le distanze di applicazione, nonché forse alcune impostazioni per il nuovo tracciante di raggi ibridi che arriverà in futuro. Stiamo riflettendo attentamente su queste impostazioni e stiamo cercando di avere anche una migliore qualità.

In precedenza ci hai parlato delle ottimizzazioni che avete apportato dopo la Gamescom. Quali di esse sono state incluse nella build attuale del gioco?

Yasin Uludağ:La build di lancio utilizza una tecnica di riordinamento dei raggi basata su quelli che chiamiamo “super-tile” (larghe zone 2D dello schermo). Ognuno di questi super-tile riordina i raggi al suo interno basandosi sulla loro direzione. Questo aiuta sia la cache delle texture e le istruzioni per la cache perché raggi simili colpiscono spesso triangoli simili ed eseguono gli stessi shader. In aggiunta a questo, è anche ottimo per l'hardware che gestisce l'interazione dei raggi con i triangoli (l'RT core), perché i raggi compiono dei percorsi coerenti mentre trovano le intersezioni più vicine con i BVH.

Un'altra ottimizzazione interessante che abbiamo menzionato alla Gamescom è il modo in cui gestiamo le performance dell'illuminazione. Esistono modi per utilizzare le strutture di accelerazione incorporate nel DXR, rendendo possibile effettuare richieste tramite shader di ray-gen ma abbiamo preferito implementare il tutto tramite calcolo per motivi di tempo e per migliorare le prestazioni. Abbiamo collegato una lista di luci e cubemap alla GPU in una struttura di accelerazione simile ad una griglia: c'è una griglia per le luci non ombreggiate, le luci che proiettano ombre, le cubemap ecc… Queste sono le cubemap applicate all'interno dei riflessi. La griglia è anche allineata alla telecamera in modo da catturare rapidamente le luci più vicine. Senza questa tecnica, l'illuminazione era troppo lenta perché doveva 'superare' tutte le luci per assicurarsi l'assenza di fenomeni di popping.

Usiamo tecnologia Nvidia in quasi tutti gli shader computazionali che gestiscono il ray tracing. Senza questo tipo di tecnologia, i nostri shader sarebbero molto più lenti. Un'altra ottimizzazione parzialmente modificabile dagli utenti con i settaggi della qualità di cui abbiamo parlato. Chiamiamo questa ottimizzazione “variable rate ray tracing”. Come abbiamo detto, il tracciamento dei raggi viene deciso sulla base di zone 16x16 dello schermo e di quanti raggi dovremmo avere in quella regione. Questo significa che potremmo avere 256 raggi o solo 4. Il fattore decisivo è la riflettanza del BRDF, quanto siano diffuse, quanto siano speculari, se la superficie è in ombra o alla luce del sole ecc... Fondamentalmente stiamo cercando di gestire intelligentemente i punti in cui inserire i raggi con shading calcolato e il loro numero. Al momento stiamo lavorando al miglioramento ulteriore di questo aspetto. Questo non dovrebbe esser confuso con lo shading a tasso variabile annunciato da Nvidia.

La nostra occhiata iniziale alla tecnologia RTX di Battlefield 5, basata sulla nostra prova di una versione preliminare del codice alla Gamescom.Guarda su YouTube

Quali sono le ottimizzazioni pianificate per il futuro?

Yasin Uludağ:Una delle ottimizzazioni incorporate nei BVH è il nostro uso del calcolo "sovrapposto": più shader di elaborazione eseguiti in parallelo. Non è la stessa cosa del calcolo asincrono o del calcolo simultaneo, significa solo che puoi eseguire più shader di calcolo in parallelo. Tuttavia, vi è una barriera implicita rappresentata dal driver che impedisce a questi shader di funzionare in parallelo quando registriamo i nostri elenchi di comandi per la costruzione dei BVH. Questo problema verrà risolto in futuro e possiamo aspettarci un netto miglioramento in termini di prestazioni, dal momento che rimuove i punti di sincronizzazione e i tempi di attesa della GPU.

Abbiamo anche in programma di eseguire la costruzione dei BVH usando il calcolo simultaneo durante la fase di generazione del G-Buffer, permettendo al ray tracing di iniziare molto prima del fotogramma e il passaggio del G-Buffer. Le registrazioni di Nsight mostrano che questo può essere un grande vantaggio. Questo sarà fatto in futuro.

Un'altra ottimizzazione a cui stiamo lavorando e che per poco non è stata inclusa al lmip map sull'intero buffer di profondità utilizzando un filtro MIN. Ciò significa che ogni livello prende la profondità più vicina nelle regioni 2x2 e continua fino alla mip map più bassa. Poiché utilizza un cosiddetto filtro min, sai che puoi saltare un'intera regione sullo schermo mentre lo attraversi.

Così, il ray binning accelera enormemente l'attraversatore di raggi ibridi perché i raggi vengono recuperati dagli stessi pixel lungo la stessa mip map con conseguente utilizzo della cache super efficiente. Se il raggio rimane bloccato dietro gli oggetti come vediamo nelle classiche Screen-Space Reflection, questo sistema promuove quindi il raggio per trasformarsi in una raggio tracciato o raggio spaziale e continuare dal punto di errore. Anche qui otteniamo risultati di qualità, in quanto le decalcomanie e i fili dell'erba saranno ora riflessi.

Abbiamo ottimizzato anche il denoiser che, quindi, funziona più velocemente e stiamo lavorando anche su ottimizzazioni per i nostri passaggi di calcolo e i filtri che vengono eseguiti durante l'implementazione del ray tracing.

Vogliamo presentare il nostro lavoro e la nostra tecnologia alla GDC… ci vediamo lì!

Quali sono i correnti colli di bottiglia nell'implementazione del ray tracing?

Yasin Uludağ:Abbiamo avuto alcuni bug nella build di lancio che non ci hanno permesso di utilizzare l'hardware efficientemente come, ad esempio, le box di delimitazione che si espandono in modo folle a causa di alcune funzionalità implementate nel rasterizzatore che non hanno funzionato bene con il ray tracing. L'abbiamo notato solo quando era troppo tardi. Fondamentalmente, ogni volta che un oggetto ha una funzione per accendere e spegnere determinate parti, alle parti disattivate viene applicata una skin dal nostro sistema di skin shader per il ray tracing esattamente come il vertex shader farebbe per il rasterizzatore.

Seguendo le specifiche API, se invece di comprimerle a (0, 0, 0), le riduciamo in (NaN, NaN, NaN) il triangolo verrà omesso perché è "non un numero". Questo è quello che abbiamo fatto. Questo problema è stato risolto, sarà presto disponibile e possiamo aspettarci che ogni livello di gioco e mappa vedano miglioramenti significativi, anche a livello di prestazioni.

Un altro problema che stiamo riscontrando attualmente nella build di lancio è con geometrie testate in alpha, come la vegetazione. Se si disattiva improvvisamente ogni singolo oggetto testato in alfa, il ray tracing è incredibilmente veloce quando si tratta solo di superfici opache. Anche la traccia dei raggi opachi è molto più veloce dato che stiamo raggruppando i raggi poiché i raggi divergenti possono comunque essere molto pesanti. Stiamo cercando ottimizzazioni per qualsiasi shader per accelerare questo processo. Abbiamo anche un bug che ha generato raggi dalle foglie di vegetazione, alberi e simili. Ciò si è aggravato con il suddetto problema di allungamento del bounding box, in cui i raggi stavano cercando di scappare mentre controllavamo le auto intersezioni dell'albero e delle foglie. Ciò ha causato un grande calo delle prestazioni. Questo problema è stato risolto e abbiamo migliorato significativamente le performance generali.

Stiamo anche cercando di ridurre i livelli di LOD per la geometria testata come alberi e vegetazione e stiamo anche cercando di ridurre l'utilizzo della memoria da parte degli shader alfa come l'attribuzione dei vertex (usando il nostro assemblatore di input di calcolo). Tutto sommato, è troppo presto per dire dove stiamo strozzando la GPU nel suo complesso. Per prima cosa, dobbiamo correggere tutti i nostri bug e i problemi noti (come il problema di alpha testing e di bounding box tra gli altri). Una volta che avremo messo tutto al suo posto con le nostre ottimizzazioni, allora potremo esaminare i colli di bottiglia sulla GPU stessa e iniziare a parlarne.

Come pensate di risolvere i problemi di performance?

Yasin Uludağ:Inizialmente siamo stati influenzati negativamente dai test di QA e dai test delle prestazioni distribuiti a causa del ritardo nell'aggiornamento RS5 di Windows. Tuttavia abbiamo ricevuto un compilatore personalizzato da Nvidia per lo shader che ci consente di iniettare un "contatore" nello shader che tiene traccia dei cicli spesi all'interno di una chiamata TraceRay per pixel. Questo ci consente di restringere il punto da cui provengono i cali di prestazioni. Possiamo passare alla modalità a raggi primari invece dei raggi di riflessione per vedere quali oggetti sono "luminosi". Mappiamo i contatori ad alto ciclo e contatori a ciclo basso, poi cerchiamo di aggiustare quelle geometrie.

Avere queste metriche come impostazione predefinita nelle D3D12 sarebbe un grande vantaggio, poiché attualmente non lo sono. Ci piacerebbe anche vedere altre metriche esposte su quanto sia "buono" un REFIT BVH.

Durante la nostra prova, guardando al tipo di complessità coinvolta, la grafica ecc… non abbiamo potuto fare a meno di pensare ad altre rivoluzioni come Crysis, Quake o l'introduzione del pixel shader. Essi hanno avuto bisogno di molto tempo per arrivare ai giusti livelli di performance. Per il DXR/RTX servirà un percorso simile?

Yasin Uludağ: Sì! La gente può aspettarsi che miglioreremo il ray tracing nel futuro perché sia noi di DICE che Nvidia stiamo lavorando a una serie di ottimizzazioni sia dal punto di vista dell'engine che dei driver e abbiamo ancora tanto da fare. Abbiamo degli specialisti di Nvidia e DICE che stanno lavorando su questi problemi proprio mentre parliamo. Da adesso in poi, tutto andrà sempre meglio grazie anche a tutte le registrazioni che abbiamo potuto effettuare da quando il gioco è uscito. Quando la gente leggerà questo articolo, probabilmente molti dei miglioramenti che abbiamo menzionato saranno già stati completati. Visto che avete nominato Quake e Crysis: lavorare sul ray tracing ed essere i primi ad uscire con questo tipo di implementazione è stato un privilegio. Ci sentiamo davvero fortunati ad essere parte di questa transizione dell'industria e faremo tutto ciò che è in nostro potere per offrire la migliore esperienza possibile. Potete stare tranquilli, siamo davvero appassionati di questa nuova tecnologia!