TimeWarp, Spacewarp, Reprojection, Motion Smoothing, Asynchronous, Interleaved… Probabilmente vi è già capitato di sentire questi termini parlando di VR, o li avrete visti da qualche parte nel programma di impostazione del vostro visore, ma cosa sono? E qual è la differenza tra uno e l’altro?

Timewarp

L’idea base del Timewarp è presente da decenni nella ricerca sulla VR, ma l’implementazione specifica è stata aggiunta al software Oculus nell’aprile 2014 da John Carmack. Carmack ha proposto l’idea all’inizio del 2013, prima ancora che Oculus DK1 fosse stato spedito.

Il Timewarp di per sé non aiuta con il framerate, né era pensato per farlo. È stato sviluppato per abbassare la latenza percepita in VR, cioè il ritardo che intercorre da quando muoviamo fisicamente la testa a quando questo movimento viene riprodotto nel visore. La VR prima dell’Oculus DK1 aveva una latenza molto più alta rispetto ad oggi – principalmente a causa del software piuttosto che dell’hardware. Timewarp è una delle molteplici tecniche software utilizzate da Oculus per ottenere una latenza sufficientemente bassa da non essere percepibile.

Timewarp ricalcola un frame già renderizzato per tener conto del cambio di rotazione della testa, deforma cioè geometricamente l’immagine nella direzione in cui avete ruotato la testa durante il rendering del frame stesso. Essendo un processo molto più veloce che il ricalcolo in 3D di un nuovo frame, la latenza (ritardo) percepita è molto minore e il risultato molto più vicino a quello che vi aspettereste nella realtà.

Il concetto di Timewarp è usato oggi da tutte le principali piattaforme VR. Quindi, contrariamente a quanto si crede comunemente, anche quando si raggiunge il pieno framerate si vedono ancora fotogrammi riproiettati.

Timewarp asincrono (ATW)

Timewarp asincrono riprende lo stesso concetto di deformazione geometrica e lo utilizza per compensare i fotogrammi persi. Se il fotogramma corrente non termina il rendering nel tempo stabilito (11ms a 90Hz), ATW riproietta il fotogramma precedente modificandolo in base agli ultimi dati relativi alla posizione del visore.

Si chiama “asincrono” perché lavora in parallelo al rendering e non dopo che il problema sia già avvenuto. Il frame artificiale è già pronto prima che si sappia se il frame reale finirà il rendering in tempo oppure no.

 

 

ATW è stato rilasciato per la prima volta su Gear VR Innovator Edition alla fine del 2014. Tuttavia, non era disponibile su PC fino al lancio del Rift nel marzo 2016. La dipendenza di questa funzione da caratteristiche hardware aggiunte solo nelle GPU più recenti è stata una delle ragioni per cui il Rift non supporta le schede GeForce serie 7 o AMD precedenti alla serie R9.

Nell’ottobre 2016, Valve ha aggiunto una funzione simile in SteamVR, chiamata Riproiezione Asincrona. La funzione originariamente supportava solo le GPU NVIDIA, ma nell’aprile 2017 è stato aggiunto il supporto per le GPU AMD.

Riproiezione interlacciata

Prima dell’aggiunta della Riproiezione Asincrona a SteamVR, la piattaforma di Valve utilizzava la Riproiezione Interlacciata. Piuttosto che essere sempre attiva come ATW, la riproiezione interlacciata veniva automaticamente attivata e disattivata dal compositor (il modulo software che compone i vari strati di rendering prima di inviarli al visore)

Quando un’applicazione perdeva ripetutamente più fotogrammi nel corso di pochi secondi, l’applicazione veniva obbligata a funzionare a metà framerate (45 FPS) e il fotogramma intermedio veniva generato sinteticamente. Da qui il nome interlacciata, o interleaved. Nelle situazioni in cui ottenere un framerate elevato in modo costante è impossibile la riproiezione interlacciata offriva ancora qualche vantaggio rispetto a quella asincrona, ma con il rilascio di SteamVR Motion Smoothing, nel 2018, questo tipo di riproiezione è diventato obsoleto.

ASW / Motion Smoothing

Timewarp (nella versione corrente) e Riproiezione Interlacciata tengono conto solo della rotazione del visore nello spazio. Non tengono conto del movimento della testa all’interno della scena, né del movimento degli oggetti della scena stessa.

Nel dicembre 2016 Oculus ha rilasciato Asynchronous Spacewarp (ASW) per affrontare questo problema. ASW è essenzialmente un algoritmo di estrapolazione che utilizza le differenze tra i fotogrammi precedenti per stimare l’aspetto del fotogramma successivo.

Nonostante il nome, ASW non è sempre attivo. Come la vecchia Riproiezione Interlacciata di SteamVR, ASW viene automaticamente abilitato quando un’applicazione perde ripetutamente più fotogrammi in pochi secondi. Di nuovo obbliga l’applicazione a funzionare a metà framerate (45 FPS) e genera sinteticamente il fotogramma intermedio. Per questo motivo, ASW non sostituisce ATW. ATW è sempre attivo, ASW interviene quando necessario.

 

 

Poiché ASW ha solo le informazioni di colore del fotogramma, piatte, senza conoscere nulla riguardo la profondità degli oggetti, si formano spesso artefatti (imperfezioni) evidenti nell’immagine.

Nel novembre 2018, Valve ha aggiunto una funzione simile a SteamVR, chiamata Motion Smoothing. Al momento funziona solo su GPU NVIDIA, mentre il supporto alle schede AMD è stato annunciato e dovrebbe arrivare a breve.

ASW 2.0

Asynchronous Spacewarp 2.0 è un prossimo aggiornamento previsto di ASW che dovrebbe migliorare notevolmente la tecnica aggiungendo i dati di profondità (depth buffer). Oculus ha mostrato il seguente scenario come esempio degli artefatti visivi che l’aggiornamento 2.0 eliminerà:

A differenza di tutte le altre tecniche viste finora, ASW 2.0 non funzionerà automaticamente in qualsiasi applicazione. Lo sviluppatore deve inviare il buffer di profondità insieme ad ogni fotogramma perché tutto funzioni.

Per fortuna sia Unity che Unreal Engine, che insieme stanno alla base della stragrande maggioranza delle applicazioni VR, ora inviano di default i dati di profondità, ma i giochi devono essere realizzati con versioni recenti di questi motori grafici, cosa non sempre possibile in giochi la cui scrittura è iniziata molto tempo fa.

Timewarp posizionale (PTW)

PTW è un prossimo aggiornamento di Asynchronous Timewarp (ATW) che utilizzerà sempre lo stesso buffer di profondità di ASW 2.0. Come ATW, il PTW sarà sempre in funzione, così non appena un fotogramma viene scartato un fotogramma sintetico sarà già pronto in tempo.

Facebook sostiene che PTW renderà la transizione di ASW molto più fluida, ma proprio come ASW 2.0, PTW funzionerà solo per le applicazioni che invieranno correttamente il loro buffer di profondità.

Sintesi e confronto

In parole povere, ecco cosa fa ogni metodo:

  • Timewarp: abbassa la latenza percepita
  • Timewarp/Reproiezione asincrona (ATW): compensa rotazionalmente i fotogrammi persi.
  • Asynchronous Spacewarp (ASW) / Motion Smoothing: quando il framerate è basso, l’applicazione scende a 45FPS e sintetizza un fotogramma ogni due estrapolando il movimento dei fotogrammi precedenti.

Ed ecco i vari metodi a confronto:

I metodi ‘Auto Toggled’ non sono sempre attivi. Quando il compositor si accorge che il framerate è rimasto basso per più di qualche secondo una di queste modalità si attiva automaticamente, disattivandosi quando la GPU ritorna ad essere poco impegnata.