Stabilità degli ologrammi

Per ottenere ologrammi stabili, HoloLens ha una pipeline di stabilizzazione delle immagini predefinita. La pipeline di stabilizzazione funziona automaticamente in background, quindi non è necessario eseguire alcuna procedura aggiuntiva per abilitarla. Tuttavia, è consigliabile eseguire tecniche che migliorano la stabilità dell'ologramma ed evitano scenari che riducono la stabilità.

Terminologia della qualità degli ologrammi

La qualità degli ologrammi è il risultato di un buon ambiente e di un buon sviluppo di app. Le app in esecuzione a una costante di 60 fotogrammi al secondo in un ambiente in cui HoloLens può tenere traccia dell'ambiente circostante garantisce che l'ologramma e il sistema di coordinate corrispondente siano sincronizzati. Dal punto di vista di un utente, gli ologrammi che devono essere stazionari non verranno spostati rispetto all'ambiente.

La terminologia seguente consente di identificare i problemi relativi all'ambiente, alle frequenze di rendering incoerenti o basse o a qualsiasi altro elemento.

  • Accuratezza. Una volta che l'ologramma è bloccato al mondo e inserito nel mondo reale, dovrebbe rimanere dove è posizionato rispetto all'ambiente circostante e indipendentemente dal movimento dell'utente o da piccole e sparse modifiche all'ambiente. Se un ologramma viene visualizzato in un secondo momento in una posizione imprevista, si tratta di un problema di accuratezza . Questi scenari possono verificarsi se due stanze distinte sembrano identiche.
  • Jitter. Gli utenti osservano l'instabilità come scuotimento ad alta frequenza di un ologramma, che può verificarsi durante il rilevamento dell'ambiente degrada. Per gli utenti, la soluzione esegue l'ottimizzazione dei sensori.
  • Judder. Le frequenze di rendering ridotte comportano un movimento non uniforme e immagini doppie di ologrammi. Judder è particolarmente evidente negli ologrammi con movimento. Gli sviluppatori devono mantenere una costante di 60 FPS.
  • Deriva. Gli utenti vedono la deriva come un ologramma sembra allontanarsi da dove è stato originariamente posizionato. La deriva si verifica quando si posizionano gli ologrammi lontano dagli ancoraggi nello spazio, in particolare nelle parti non mappate dell'ambiente. La creazione di ologrammi vicini agli ancoraggi nello spazio riduce la probabilità di deriva.
  • Salto. Quando un ologramma "pop" o "salta" lontano dalla sua posizione occasionalmente. La jumpiness può verificarsi man mano che il rilevamento regola gli ologrammi in modo che corrispondano alla comprensione aggiornata dell'ambiente.
  • Nuotare. Quando viene visualizzato un ologramma corrispondente al movimento della testa dell'utente. Swim si verifica quando l'applicazione non ha implementato completamente la riprogettazione e se HoloLens non è calibrato per l'utente corrente. L'utente può rieseguire l'applicazione di calibrazione per risolvere il problema. Gli sviluppatori possono aggiornare il piano di stabilizzazione per migliorare ulteriormente la stabilità.
  • Separazione dei colori. Gli schermi in HoloLens sono display sequenziali di colore, che lampeggiano canali di colore rosso-verde-blu-verde a 60 Hz (i singoli campi di colore vengono visualizzati a 240 Hz). Ogni volta che un utente tiene traccia di un ologramma in movimento con gli occhi, i bordi iniziali e finali dell'ologramma si separano nei colori costitutivi, generando un effetto arcobaleno. Il grado di separazione dipende dalla velocità dell'ologramma. In alcuni casi più rari, spostarsi rapidamente mentre si guarda un ologramma stazionario può anche causare un effetto arcobaleno, che è chiamato separazione dei colori.

Frequenza dei fotogrammi

La frequenza dei fotogrammi è il primo pilastro della stabilità dell'ologramma. Affinché gli ologrammi vengano visualizzati stabili nel mondo, ogni immagine presentata all'utente deve avere gli ologrammi disegnati nel punto corretto. Gli schermi in HoloLens aggiornano 240 volte al secondo, visualizzando quattro campi di colore separati per ogni immagine di cui è stato appena eseguito il rendering, ottenendo un'esperienza utente di 60 FPS (fotogrammi al secondo). Per offrire la migliore esperienza possibile, gli sviluppatori di applicazioni devono mantenere 60 FPS, che si traduce in modo coerente nel fornire una nuova immagine al sistema operativo ogni 16 millisecondi.

60 FPS Per disegnare gli ologrammi in modo che siano seduti nel mondo reale, HoloLens deve eseguire il rendering delle immagini dalla posizione dell'utente. Poiché il rendering delle immagini richiede tempo, HoloLens stima la posizione in cui verrà visualizzata l'intestazione di un utente quando le immagini vengono visualizzate negli schermi. Tuttavia, questo algoritmo di stima è un'approssimazione. HoloLens include hardware che regola l'immagine sottoposta a rendering in modo da tenere conto della discrepanza tra la posizione della testa stimata e la posizione effettiva della testa. La regolazione rende l'immagine visualizzata dall'utente come se fosse sottoposto a rendering dalla posizione corretta e gli ologrammi risultano stabili. Gli aggiornamenti dell'immagine funzionano meglio con piccole modifiche e non può risolvere completamente determinati elementi nell'immagine di cui è stato eseguito il rendering, ad esempio motion-parallax.

Eseguendo il rendering a 60 FPS, si eseguono tre operazioni per rendere stabili gli ologrammi:

  1. Riduzione della latenza complessiva tra il rendering di un'immagine e l'immagine visualizzata dall'utente. In un motore con un gioco e un thread di rendering in esecuzione in lockstep, l'esecuzione a 30FPS può aggiungere 33,3 ms di latenza aggiuntiva. La riduzione della latenza riduce l'errore di stima e aumenta la stabilità dell'ologramma.
  2. In questo modo ogni immagine che raggiunge gli occhi dell'utente ha una quantità coerente di latenza. Se si esegue il rendering a 30 fps, lo schermo visualizza ancora le immagini a 60 FPS, ovvero la stessa immagine verrà visualizzata due volte in una riga. Il secondo frame avrà una latenza maggiore di 16,6 ms rispetto al primo fotogramma e dovrà correggere una quantità di errore più pronunciata. Questa incoerenza nell'entità dell'errore può causare un judder di 60 Hz indesiderato.
  3. Riduzione dell'effetto di tremolio, caratterizzato da immagini doppie o con movimento non uniforme. Un movimento dell'ologramma più veloce e velocità di rendering inferiori determinano un effetto di tremolio più pronunciato. Impegnarsi a mantenere sempre 60 FPS aiuterà a evitare il judder per un determinato ologramma mobile.

Coerenza della frequenza dei fotogrammi La coerenza della frequenza dei fotogrammi è importante quanto un frame elevato al secondo. I fotogrammi eliminati occasionalmente sono inevitabili per qualsiasi applicazione ricca di contenuto e HoloLens implementa alcuni algoritmi sofisticati per il ripristino da occasionali problemi. Tuttavia, un framerate costantemente fluttuante è molto più evidente per un utente rispetto all'esecuzione coerente a frequenze di fotogrammi inferiori. Ad esempio, un'applicazione che esegue il rendering uniforme per cinque fotogrammi (60 FPS per la durata di questi cinque fotogrammi) e quindi rilascia ogni altro fotogramma per i successivi 10 fotogrammi (30 FPS per la durata di questi 10 fotogrammi) apparirà più instabile di un'applicazione che esegue il rendering coerente a 30 FPS.

In una nota correlata, il sistema operativo limita le applicazioni a 30 FPS quando l'acquisizione di realtà mista è in esecuzione.

Analisi delle prestazioni Esistono diversi tipi di strumenti che possono essere usati per eseguire il benchmark della frequenza dei fotogrammi dell'applicazione, ad esempio:

  • GPUView
  • Debugger grafica di Visual Studio
  • Profiler integrati in motori 3D, ad esempio Unity

Distanze di rendering dell'ologramma

Il sistema visivo umano integra più segnali dipendenti dalla distanza quando corregge e si concentra su un oggetto.

  • Alloggio - Lo stato attivo di un singolo occhio.
  • Convergenza : due occhi che si spostano verso l'interno o verso l'esterno per centrare su un oggetto.
  • Visione binoculare - Disparità tra le immagini a sinistra e a destra che dipendono dalla distanza di un oggetto dal punto di correzione.
  • Ombreggiatura, dimensione angolare relativa e altri segnali monoculari (occhio singolo).

La convergenza e l'alloggio sono unici perché i loro segnali extra retinali correlati a come gli occhi cambiano per percepire gli oggetti a distanze diverse. Nella visualizzazione naturale, la convergenza e l'alloggio sono collegati. Quando gli occhi visualizzano qualcosa vicino (ad esempio, il naso), gli occhi incrociano e si accodano a un punto vicino. Quando gli occhi visualizzano qualcosa all'infinito, gli occhi diventano paralleli e l'occhio si accomoda all'infinito.

Gli utenti che indossano HoloLens potranno sempre contenere fino a 2,0 m per mantenere un'immagine chiara perché gli schermi HoloLens sono fissi a una distanza ottica di circa 2,0 m dall'utente. Gli sviluppatori di app controllano la posizione degli occhi degli utenti posizionando contenuto e ologrammi a varie profondità. Quando gli utenti ospitano e convergeno a distanze diverse, il collegamento naturale tra i due segnali viene rotto, che può portare a disagio visivo o fatica, soprattutto quando la grandezza del conflitto è grande.

Il disagio del conflitto vergence-alloggio può essere evitato o ridotto al minimo mantenendo il contenuto convergente il più vicino possibile a 2,0 m (cioè in una scena con un sacco di profondità le aree di interesse vicino alle 2,0 m, quando possibile). Quando il contenuto non può essere posizionato vicino alle 2,0 m, il disagio dal conflitto vergence-alloggio è il più grande quando lo sguardo dell'utente avanti e indietro tra distanze diverse. In altre parole, è molto più confortevole guardare un ologramma che rimane fisso a 50 cm di distanza rispetto a un ologramma distante 50 cm che si avvicina e si allontana gradualmente.

L'inserimento del contenuto a 2,0 m è vantaggioso anche perché i due schermi sono progettati per sovrapporsi completamente a questa distanza. Per le immagini posizionate da questo piano, mentre si spostano dal lato della cornice olografica, verranno visualizzate da un display mentre sono ancora visibili sull'altro. Questa rivalità binoculare può essere dirompente per la percezione della profondità dell'ologramma.

Distanza ottimale per il posizionamento degli ologrammi rispetto allo sguardo dell'utente

Distanza ottimale per il posizionamento degli ologrammi rispetto allo sguardo dell'utente

Clip Planes Per il massimo comfort, è consigliabile ritagliare la distanza di rendering a 85 cm con dissolvenza del contenuto a partire da 1 m. Nelle applicazioni in cui gli ologrammi e gli utenti sono entrambi fissi, gli ologrammi possono essere visualizzati comodamente come 50 cm. In questi casi, le applicazioni devono posizionare un piano di ritaglio non più vicino a 30 cm e dissolvenza deve iniziare almeno 10 cm di distanza dal piano clip. Ogni volta che il contenuto è più vicino a 85 cm, è importante assicurarsi che gli utenti non si spostino spesso più vicino o più lontano dagli ologrammi o che gli ologrammi non si avvicinano spesso all'utente o più lontano dall'utente, poiché queste situazioni sono molto probabilmente causano disagio dal conflitto vergence-alloggio. Il contenuto deve essere progettato per ridurre al minimo la necessità di interazione più vicina a 85 cm dall'utente, ma quando il rendering del contenuto deve essere più vicino a 85 cm, una buona regola per gli sviluppatori è progettare scenari in cui gli utenti e/o gli ologrammi non si spostano in profondità più del 25% del tempo.

Procedure consigliate Quando gli ologrammi non possono essere posizionati a 2 m e i conflitti tra convergenza e alloggio non possono essere evitati, la zona ottimale per il posizionamento dell'ologramma è compresa tra 1,25 m e 5 m. In ogni caso, i progettisti devono strutturare il contenuto per incoraggiare gli utenti a interagire con 1+ m di distanza (ad esempio, modificare le dimensioni del contenuto e i parametri di posizionamento predefiniti).

Riprogettazione

HoloLens ha una tecnica sofisticata di stabilizzazione olografica assistita da hardware nota come reprojection. La riprogettazione tiene conto del movimento e del cambiamento del punto di vista (CameraPose) quando la scena si anima e l'utente sposta la testa. Le applicazioni devono eseguire azioni specifiche per usare al meglio la riprogettazione.

Esistono quattro tipi principali di riprogettazione

  • Riprogettazione profondità: Produce i risultati migliori con il minor sforzo richiesto dall'applicazione. Tutte le parti della scena sottoposta a rendering vengono stabilizzate in modo indipendente in base alla distanza dall'utente. Alcuni artefatti di rendering possono essere visibili in presenza di modifiche nitide in profondità. Questa opzione è disponibile solo in HoloLens 2 e visori VR immersive.
  • Riprogettazione planare: Consente il controllo preciso dell'applicazione sulla stabilizzazione. Un piano viene impostato dall'applicazione e tutto su tale piano sarà la parte più stabile della scena. L'ulteriore ologramma è lontano dal piano, meno stabile sarà. Questa opzione è disponibile in tutte le piattaforme MR di Windows.
  • Riprogettazione planare automatica: Il sistema imposta un piano di stabilizzazione usando le informazioni nel buffer di profondità. Questa opzione è disponibile in HoloLens generazione 1 e HoloLens 2.
  • Nessuno: Se l'applicazione non esegue alcuna operazione, Planar Reprojection viene usato con il piano di stabilizzazione fissato a 2 metri nella direzione dello sguardo fisso della testa dell'utente, in genere producendo risultati secondari.

Le applicazioni devono eseguire azioni specifiche per abilitare i diversi tipi di riprogettazione

  • Riprogettazione profondità: L'applicazione invia il buffer di profondità al sistema per ogni frame di cui è stato eseguito il rendering. In Unity, Depth Reprojection viene eseguito con l'opzione Shared Depth Buffer nel riquadro impostazioni Windows Mixed Reality in Gestione plug-in XR. Le app DirectX chiamano CommitDirect3D11DepthBuffer. L'applicazione non deve chiamare SetFocusPoint.
  • Riprogettazione planare: In ogni frame, le applicazioni indicano al sistema la posizione di un piano da stabilizzare. Le applicazioni Unity chiamano SetFocusPointForFrame e devono avere shared depth buffer disabilitato. Le app DirectX chiamano SetFocusPoint e non devono chiamare CommitDirect3D11DepthBuffer.
  • Riprogettazione planare automatica: Per abilitare, l'applicazione deve inviare il buffer di profondità al sistema come per depth reprojection. Le app che usano Realtà mista Toolkit (MRTK) possono configurare il provider di impostazioni della fotocamera per l'uso di AutoPlanar Reprojection. Le app native devono impostare DepthReprojectionMode in HolographicCameraRenderingParameters su AutoPlanar ogni fotogramma. Per HoloLens di prima generazione, l'applicazione non deve chiamare SetFocusPoint.

Scelta della tecnica di riprogettazione

Tipo di stabilizzazione Visori VR immersive HoloLens generazione 1 HoloLens 2
Riprogettazione profondità Consigliato N/D Consigliato

Le applicazioni Unity devono usare Unity 2018.4.12+, Unity 2019.3+ o Unity 2020.3+. In caso contrario, usare la riesezione pianore automatica.
Riprogettazione planare automatica N/D Impostazione predefinita consigliata Consigliato se depth Reprojection non dà i risultati migliori

Le applicazioni Unity sono consigliate per usare Unity 2018.4.12+, Unity 2019.3+ o Unity 2020.3+. Le versioni precedenti di Unity funzioneranno con risultati di riprogettazione leggermente ridotte.
Riprogettazione planare Non consigliato Consigliato se planare automatico non dà i risultati migliori Usare se nessuna delle opzioni di profondità restituisce i risultati desiderati

Verifica dell'impostazione corretta della profondità

Quando un metodo di riprogettazione usa il buffer di profondità, è importante verificare che il contenuto del buffer di profondità rappresenti la scena sottoposta a rendering dell'applicazione. Un certo numero di fattori può causare problemi. Se è presente una seconda fotocamera usata per eseguire il rendering delle sovrimpressioni dell'interfaccia utente, ad esempio, è probabile che sovrascriva tutte le informazioni di profondità dalla visualizzazione effettiva. Gli oggetti trasparenti spesso non impostano la profondità. Per impostazione predefinita, il rendering del testo non imposterà la profondità. Nel rendering saranno visibili glitch quando la profondità non corrisponde agli ologrammi sottoposti a rendering.

HoloLens 2 dispone di un visualizzatore per mostrare dove si trova la profondità e non è impostata, che può essere abilitata da Device Portal. Nella scheda Visualizzazione> stabilitàologramma selezionare la casella di controllo Visualizza visualizzazione profondità nel visore VR. Le aree con profondità impostate correttamente saranno blu. Gli elementi sottoposti a rendering che non hanno un set di profondità sono contrassegnati in rosso e devono essere corretti.

Nota

La visualizzazione della profondità non verrà visualizzata in Realtà mista Capture. È visibile solo tramite il dispositivo.

Alcuni strumenti di visualizzazione GPU consentiranno la visualizzazione del buffer di profondità. Gli sviluppatori di applicazioni possono usare questi strumenti per assicurarsi che la profondità sia impostata correttamente. Consultare la documentazione per gli strumenti dell'applicazione.

Uso della riprogettazione planare

Nota

Per i visori VR immersive desktop, l'impostazione di un piano di stabilizzazione è in genere controproducente, poiché offre una qualità visiva inferiore rispetto alla fornitura del buffer di profondità dell'app al sistema per abilitare la riprogettazione basata sulla profondità per pixel. A meno che non sia in esecuzione in holoLens, in genere è consigliabile evitare di impostare il piano di stabilizzazione.

Piano di stabilizzazione per gli oggetti 3D

Il dispositivo tenterà automaticamente di scegliere questo piano, ma l'applicazione deve essere utile selezionando il punto attivo nella scena. Le app Unity in esecuzione in holoLens devono scegliere il punto di attivazione migliore in base alla scena e passarlo a SetFocusPoint(). Un esempio di impostazione del punto attivo in DirectX è incluso nel modello predefinito di cubo rotante.

Unity invierà il buffer di profondità a Windows per abilitare la riprogettazione per pixel quando si esegue l'app in un visore VR immersive connesso a un PC desktop, che offre una qualità dell'immagine ancora migliore senza il lavoro esplicito dell'app. Devi fornire un punto di attivazione solo quando l'app è in esecuzione in holoLens o la riprogettazione per pixel verrà sottoposta a override.

// SetFocusPoint informs the system about a specific point in your scene to
// prioritize for image stabilization. The focus point is set independently
// for each holographic camera.
// You should set the focus point near the content that the user is looking at.
// In this example, we put the focus point at the center of the sample hologram,
// since that is the only hologram available for the user to focus on.
// You can also set the relative velocity and facing of that content; the sample
// hologram is at a fixed point so we only need to indicate its position.
renderingParameters.SetFocusPoint(
    currentCoordinateSystem,
    spinningCubeRenderer.Position
    );

Il posizionamento del punto attivo dipende in gran parte da ciò che l'ologramma sta esaminando. L'app ha il vettore di sguardo fisso per riferimento e la finestra di progettazione dell'app sa quale contenuto vuole che l'utente osservi.

La singola cosa più importante che uno sviluppatore può fare per stabilizzare gli ologrammi è quello di eseguire il rendering a 60 FPS. Scendendo al di sotto di 60 FPS si ridurrà notevolmente la stabilità dell'ologramma, indipendentemente dall'ottimizzazione del piano di stabilizzazione.

Procedure consigliate Non esiste un modo universale per configurare il piano di stabilizzazione ed è specifico dell'app. La raccomandazione principale è sperimentare e vedere cosa funziona meglio per lo scenario in uso. Tuttavia, cercare di allineare il piano di stabilizzazione con il maggior contenuto possibile perché tutto il contenuto su questo piano è perfettamente stabilizzato.

Ad esempio:

  • Se si dispone solo di contenuto planare (app di lettura, app di riproduzione video), allineare il piano di stabilizzazione con il piano con il contenuto.
  • Se ci sono tre piccole sfere bloccate dal mondo, rendere il piano di stabilizzazione "tagliato" anche se i centri di tutte le sfere che sono attualmente nella visualizzazione dell'utente.
  • Se la scena ha contenuto a profondità sostanzialmente diverse, favorire ulteriori oggetti.
  • Assicurarsi di regolare il punto di stabilizzazione ogni fotogramma per coincidere con l'ologramma che l'utente sta esaminando

Elementi da evitare Il piano di stabilizzazione è un ottimo strumento per ottenere ologrammi stabili, ma se usato in modo improprio può causare gravi instabilità dell'immagine.

  • Non "sparare e dimenticare". È possibile terminare con il piano di stabilizzazione dietro l'utente o collegato a un oggetto che non è più nella visualizzazione dell'utente. Assicurarsi che la normale del piano di stabilizzazione sia impostata in avanti opposta (ad esempio, -camera.forward)
  • Non cambiare rapidamente il piano di stabilizzazione avanti e indietro tra estremi
  • Non lasciare il piano di stabilizzazione impostato su una distanza/orientamento fisso
  • Non lasciare che il piano di stabilizzazione taglia l'utente
  • Non impostare il punto di attivazione quando si esegue su un PC desktop anziché su HoloLens e si basano invece sulla riprogettazione basata sulla profondità per pixel.

Separazione dei colori

A causa della natura della visualizzazione di HoloLens, un artefatto denominato "separazione dei colori" può talvolta essere percepito. Si manifesta come immagine che separa i singoli colori di base: rosso, verde e blu. L'artefatto può essere particolarmente visibile quando vengono visualizzati oggetti bianchi, poiché hanno grandi quantità di rosso, verde e blu. È più pronunciato quando un utente tiene traccia visivamente di un ologramma che si sposta attraverso il fotogramma olografico ad alta velocità. Un altro modo in cui l'artefatto può manifestarsi è la distorsione/deformazione degli oggetti. Se un oggetto ha un contrasto elevato e/o colori puri, ad esempio rosso, verde, blu, separazione dei colori verrà percepito come distorsione di parti diverse dell'oggetto.

Esempio della separazione dei colori di un cursore arrotondamento bianco bloccato dalla testa potrebbe essere simile a quello che un utente ruota la testa sul lato:

Esempio della separazione dei colori di un cursore bianco bloccato dalla testa potrebbe essere simile a quello che un utente ruota la testa sul lato.

Anche se è difficile evitare completamente la separazione dei colori, ci sono diverse tecniche disponibili per attenuarlo.

La separazione dei colori può essere visualizzata su:

  • Oggetti che si spostano rapidamente, inclusi oggetti bloccati a testa, ad esempio il cursore.
  • Oggetti che sono sostanzialmente lontani dal piano di stabilizzazione.

Per attenuare gli effetti della separazione dei colori:

  • Rendere l'oggetto ritardato lo sguardo dell'utente. Dovrebbe apparire come se abbia qualche inertia ed è collegato allo sguardo "sulle sorgenti". Questo approccio rallenta il cursore (riducendo la distanza di separazione) e lo inserisce dietro il punto di sguardo probabile dell'utente. Finché si rileva rapidamente quando l'utente smette di spostarsi lo sguardo si sente naturale.
  • Se si vuole spostare un ologramma, provare a mantenere la velocità di movimento al di sotto di 5 gradi/secondo se si prevede che l'utente lo segui con gli occhi.
  • Usare la luce anziché la geometria per il cursore . Una fonte di illuminazione virtuale collegata allo sguardo sarà percepita come puntatore interattivo, ma non causerà la separazione dei colori.
  • Regolare il piano di stabilizzazione in modo che corrisponda agli ologrammi a cui l'utente sta guardando.
  • Rendere l'oggetto rosso, verde o blu.
  • Passare a una versione sfocata del contenuto. Ad esempio, un cursore bianco arrotondato può essere modificato in una linea leggermente sfocata orientata alla direzione del movimento.

Come prima, il rendering a 60 FPS e l'impostazione del piano di stabilizzazione sono le tecniche più importanti per la stabilità dell'ologramma. Se si riscontra una separazione dei colori evidente, assicurarsi prima di tutto che la frequenza dei fotogrammi soddisfi le aspettative.

Vedi anche