Asynchronous TimeWarp: cos'è, come migliora la VR e quali sono le sue limitazioni

La VR ha comportato una serie di problematiche per le modalità di rendering delle immagini, specificamente in termini di adattamento rispetto ai movimenti della testa dell'utente. Oculus ha studiato in dettaglio il fenomeno.
di Rosario Grasso pubblicato il 22 Luglio 2016 nel canale Schede VideoOculus Rift
Motion Judder
ATW, dunque, genera nuovi frame limitandosi a distorcere l'immagine precedentemente renderizzata sulla base dei dati posizionali raccolti nel secondo thread, il che vuol dire che non tiene conto di eventuali movimenti degli oggetti, per esempio gestiti dal motore fisico, occorsi nel frattempo. In questi casi si crea uno sdoppiamento delle parti dell'immagine in movimento, sempre più evidente man mano che cresce la velocità di spostamento di questi oggetti. Ovvero, si ottiene nuovamente judder, in questo caso definito da Antonov motion judder.
Un altro grave problema che si presenta nel rendering delle immagini VR riguarda le riflessioni della luce e le illuminazioni speculari. Questo dipende dal fatto che il vettore dell'occhio cambia a seconda dei movimenti della testa. Pertanto, dopo il timewarp il rendering che era stato fatto su riflessioni e illuminazioni speculari non è più corretto rispetto alle nuove condizioni prospettiche, e questo può causare ancora una volta juddering, stavolta in riferimento agli effetti di luce. Non sono gli unici due elementi grafici legati al vettore dell'occhio a causare problemi di questo tipo, visto che il discorso si può applicare anche a parallax mapping, relief mapping e parallax occlusion mapping.
Alla luce di queste considerazioni, l'implementazione dell'ATW necessita di alcuni pre-requisiti, a partire dall'integrazione di tecnologie di prelazione sull'hardware della GPU come abbiamo visto nel caso di Pascal. Il sistema di prelazione tradizionale agisce in maniera molto conservativa, interrompendo il flusso di lavoro con grande margine rispetto al momento in cui la GPU deve "consegnare" al video il frame per il refresh successivo. Con un doppio sistema di prelazione per i pixel e per i thread come quello in dote di Pascal, invece, la GPU è in grado di "fermarsi" più tardi e in maniera più deterministica e di sfruttare il tempo di calcolo così guadagnato per renderizzare più oggetti nella schermata di gioco, come abbiamo visto nella recensione dell'ultima architettura NVIDIA. Inoltre, ed è il secondo requisito, il sistema operativo e i driver devono gestire bene la prelazione della GPU.
L'obiettivo degli sviluppatori, quindi, è quello di eseguire l'ATW il più a ridosso possibile del momento in cui viene visualizzato il frame sul visore, in modo da ridurre il più possibile la latenza. Secondo Antonov, questo anticipo dovrebbe aggirarsi orientativamente sui 2ms (ricordate che la GPU ha 11 ms di tempo nella generazione dei frame per poter mantenere il frame rate di 90fps), il che è un requisito ancora arduo da rispettare per la maggior parte delle GPU in circolazione. L'alternativa sarebbe poter disporre di quelle che Antonov definisce "custom vsync-triggered ATW interrupt routines", ovvero una sorta di G-Sync per la VR: il display in questo caso si aggiornebbe nello stesso momento in cui la GPU eroga il frame.
A questo punto dovrebbe essere chiaro che la prelazione è un sistema che interrompe il lavoro della GPU e che consente di lanciare il timewarp sulla base di ciò che la GPU ha di pronto. Alcuni driver permettono di gestire la prelazione sulla base del draw call eseguite dal sistema video. Secondo Antonov, questo non è il modo migliore, visto che certe draw call, come quelle associate a certi shader particolarmente complessi, richiedono anche 10ms, ovvero un lasso di tempo molto vicino all'intervallo di tempo a disposizione della GPU. Come abbiamo visto nel caso di Pascal, per gli sviluppatori una soluzione più efficace riguarda la commistione tra le prelazioni di tipo prettamente grafico e quelle di tipo General Purpose.
Il punto è incrementare la granularità secondo la quale il sistema di prelazione entra in funzione, in modo da interrompere il lavoro di rendering e applicare il timewarp nel miglior momento possibile sulla base delle esigenze di latenza e vsync. Antonov spiega che c'è un limite anche lato sistema operativo, visto che Windows 8, tramite il Windows Display Driver Model (WDDM) 1.2, gestiva questa granularità in maniera piuttosto ruvida. Con Windows 10 e le DirectX 12 il sistema riesce a intervenire secondo una granularità maggiore, grazie anche alle tecnologie di Asynchronous Computing.