AMD e le tecnologie a servizio della realtà virtuale

AMD è una delle società che ha investito maggiormente sulla realtà virtuale: quali sono le sue tecnologie a servizio di questo ambizioso campo di ricerca?

AMD e le tecnologie a servizio della realtà virtuale
Articolo a cura di

Rispettare i criteri di qualità relativi al campo della realtà virtuale richiede un ampio sforzo, sia per assecondare le richieste in merito alla potenza bruta, sia per venire incontro alla necessità di software sempre più evoluti in grado di aiutare la creazione di contenuti virtuali. Uno degli aspetti chiave dell'esperienza con la realtà virtuale è per esempio quello di fornire all'utente finale una bassa latenza ed una frequenza d'aggiornamento adeguata, per meglio riprodurre le condizioni della vita reale. Concettualmente la VR non è un'idea così nuova, visto che il suo sviluppo prosegue da decenni, ma tecnologie arretrate e prezzi elevati non gli hanno permesso di emergere. La qualità grafica e le tecnologie a disposizione degli sviluppatori sono cresciute tantissimo e ad oggi possono offrire un ottimo supporto alla virtual reality, seppur con qualche compromesso ancora presente. Fra tutte le aziende coinvolte nel settore della VR non poteva di certo mancare AMD, che sta puntando forte anche sul machine learning e sul deep learning. Tornando alla VR però, abbiamo potuto osservare, pochi giorni fa, l'applicazione pratica delle tecnologie legate ad essa grazie all'esperienza VR Alien Covenant: In Utero. Scopriamo quindi quali sono le tecnologie progettate da AMD utilizzate per la sua realizzazione.

AMD LiquidVR

AMD LiquidVR è senza dubbio il tassello più importante della suite di tecnologie AMD per la realtà virtuale. Esso fa parte dell'iniziativa GPUOpen della società di Sunnyvale: questo vuol dire che il suo codice è presente su GitHub ed è quindi liberamente utilizzabile ed editabile da chiunque, senza limiti.
L'SDK per le Radeon è composto da quattro componenti principali, di cui il più importante è l'Asynchronous Compute Engine (ACE). Esso fu introdotto con la prima versione di Graphics Core Next (GCN) a fine 2011, e fornisce gli async shader che addizionano al mix più flessibilità alla coda dei comandi. Molte schede grafiche trattano le istruzioni di calcolo e grafiche separatamente, ma ACE consente agli sviluppatori di far coesistere le due tipologie di codice nella stessa coda.

Quando fu introdotto, ACE non ebbe molto seguito, perché era solo un metodo per rendere efficienti le Compute Unit delle Radeon, e solo oggi ACE è diventato effettivamente utile. Il design GCN impiega uno scheduler in order, cioè con una serie di passi ben definiti, ma gli async shader possono rendere il tutto più dinamico se necessario. Ciò va anche esplicitamente a vantaggio delle ultime librerie grafiche, DirectX 12 e Vulkan, che possono diventare più elastiche. Senza ACE gli scheduler sarebbero costretti a cambiare contesto ogni volta che si rende necessario effettuare un passaggio da un'istruzione di calcolo ad una grafica (o viceversa), generando decisamente più overhead. Per effettuare tale switching, ad esempio, c'è il bisogno di effettuare lo storage di tutta una serie di informazioni, effettuare il cambio e poi ripristinare lo stato originale. Queste sono tutte operazioni che con ACE si risparmiano, il che si traduce direttamente in maggiori cicli a disposizione per il chip grafico.

Asynchronous Timewarp e Latest Data Latch

Uno degli aspetti che maggiormente beneficia degli async shader è l'Asynchronous Time Warp (ATW). Questa è una tecnica nata per abbassare la latenza di rendering dei frame e ridurre l'effetto nausea e in generale il motion sickness. Se c'è troppa latenza un'istantanea potrebbe essere ripetuta, ed ATW fa in modo di "spostare" l'ultimo frame sulla scena in maniera tale che non venga percepito questo effetto. In sostanza, se un determinato frame non è pronto, allora vengono trasferiti spazialmente i frame già calcolati, così che l'utente possa sempre percepire un'esperienza fluida e una latenza bassa. Gli sviluppatori affermano che il warping sia una caratteristica che tutti i visori e gli SDK dovrebbero implementare. ATW è un processo grafico che può essere, grazie ad ACE, schedulato insieme a tutti gli altri task, poco importa di che tipologia essi siano.
Latest Data Latch è invece una tecnologia parecchio legata ad ATW, e serve per ridurre la cosiddetta latenza motion-to-photon. In altri termini, essa diminuisce il tempo che intercorre tra il movimento della testa dell'utente e la visualizzazione sul display. Il rendering su un HMD avviene con una collaborazione fra CPU e GPU, la quale deve aspettare alcuni dati dalla prima. Latest Data Latch lascia che la scheda grafica non abbia più bisogno del processore, almeno per gran parte del lavoro.

AMD Direct-To-Display e Affinity Multi-GPU

Direct-To-Display è invece una feature molto semplice, presente anch'essa nella suite LiquidVR: evita che il sistema operativo possa interrompere l'esperienza ponendo in foreground le notifiche, come ad esempio quelle relative agli aggiornamenti. Infine abbiamo Affinity Multi-GPU, che ha l'obiettivo di migliorare le performance dei sistemi CrossFire. Uno dei maggiori problemi della VR su sistemi a più schede grafiche è che l'AFR (Alternate Frame Rendering) è una tecnica vecchia e che risulta del tutto inadeguata per questa applicazione, poiché introduce tanta latenza. Affinity Multi-GPU abbatte questa problematica assegnando una scheda grafica ad ogni occhio, sfruttando l'SFR (Split Frame Rendering) anziché l'AFR. Le prestazioni ne beneficiano sicuramente, anche se non è chiaro quale sarà il fattore di scaling oppure quali saranno le prestazioni con tre o quattro schede video.

L'Asynchronous Reprojection

L'Asynchronous Reprojection è l'ultima tecnologia a supporto della realtà virtuale di cui parliamo oggi. Essa si potrà sfruttare attraverso un visore HTC Vive unito a una scheda grafica AMD Radeon. Asynchronous Reprojection è un nome totalmente nuovo nel campo, ma il nucleo su cui si fonda questa caratteristica non è poi così innovativo. Essa può infatti essere considerata come analoga all'Asynchronous Timewarp, feature presente in esclusiva su Oculus Rift e che è stata annunciata circa un anno fa.
Il concetto chiave dell'Asynchronous Reprojection è quello di effettuare una riproduzione dell'ambiente facendo combaciare le informazioni di un frame vecchio e di un frame attuale, al fine di generare un frame futuro (in tempo reale). In sostanza, viene effettuata una specie di stima confrontando due frame successivi nel tempo, col primario scopo di abbassare la latenza. Se un determinato frame non riesce ad essere calcolato in tempo dalla scheda grafica allora al suo posto viene utilizzato il frame stimato grazie all'Asynchronous Reprojection, così che i vincoli di latenza possano essere soddisfatti anche a monte di una potenza computazionale lato GPU non ideale.

Agli albori delle prime applicazioni virtuali, tale tecnica era già utilizzata per prevenire proprio il motion sickness, seppur in una variante meno articolata: anziché infatti mostrare a schermo il frame stimato tramite un'operazione fra quello corrente e quello immediatamente precedente, sul display veniva proiettato semplicemente questo secondo frame; il risultato era una scena esplicitamente non coerente che non riduceva quasi per nulla i problemi.
Utilizzare quindi l'Asynchronous Reprojection richiede una scheda grafica più potente della norma, ed affidarsi ad una GPU di qualità e d'obbligo. Effettuare infatti una specifica operazione, frame per frame e in tempo reale, è computazionalmente molto oneroso, ma il vantaggio però è quello di mostrare a schermo una scena molto più consistente. La capacità di calcolo necessaria aumenta con l'innalzarsi della risoluzione, il cui numero di pixel più elevato fa ovviamente lievitare il numero di operazioni da compiere, stessa cosa incrementando il refresh rate. Con una frequenza d'aggiornamento di 60 Hz non possono essere mostrati a video più di 60 frames per secondo (almeno senza tearing). Se il refresh rate aumenta però ad esempio a 90 Hz, allora in un dato secondo verranno mostrati molti più frame, con la
ovvia conseguenza di un carico maggiore sulla GPU.