Quando si indossa un visore di realtà mista, diventa il centro del mondo olografico. Il componente Unity Camera gestirà automaticamente il rendering stereoscopico e seguirà lo spostamento e la rotazione della testa. Tuttavia, per ottimizzare completamente la qualità visiva e la stabilità dell'ologramma, è necessario impostare le impostazioni della fotocamera descritte di seguito.
visori vr e HoloLens vr
Le impostazioni predefinite del componente Fotocamera unity sono per le applicazioni 3D tradizionali, che necessitano di uno sfondo simile a skybox perché non hanno un mondo reale.
Quando si esegue su un visore visore immersivo, si esegue il rendering di tutto ciò che l'utente vede e quindi probabilmente si vuole mantenere la skybox.
Tuttavia, quando si esegue su un visore olografico come HoloLens, il mondo reale dovrebbe apparire dietro tutto il rendering della fotocamera. Impostare lo sfondo della fotocamera per essere trasparente (in HoloLens, il rendering nero è trasparente) anziché una trama skybox:
Selezionare la fotocamera principale nel pannello Gerarchia
Nel pannello Controllo individuare il componente Fotocamera e modificare l'elenco a discesa Cancella flag da Skybox a Colore a tinta unita
Selezionare la selezione colori sfondo e modificare i valori RGBA su (0, 0, 0, 0, 0)
Se si imposta questa impostazione dal codice, è possibile usare Unity Color.clear
Spazio dei nomi:Microsoft.MixedReality.Toolkit. CameraSystem Type:MixedRealityCameraSystem
Per controllare l'opacità della fotocamera, il sistema MixedRealityCamera ha una IsOpaque proprietà.
CoreServices.CameraSystem.IsOpaque;
Spazio dei nomi:UnityEngine.XR Tipo:XRDisplaySubsystem
È possibile usare il codice dello script per determinare in fase di esecuzione se il visore è immersivo o olografico controllando displayOpaque nell'esecuzione attiva di XRDisplaySubsystem.
Spazio dei nomi:UnityEngine.XR.WSA Tipo:HolographicSettings
Qualsiasi tipo di esperienza che stai sviluppando, la fotocamera principale è sempre il componente di rendering stereo primario collegato al display montato sulla testa del dispositivo. Sarà più semplice creare l'app se si immagina la posizione iniziale dell'utente come (X: 0, Y: 0, Z: 0, Z: 0). Poiché la fotocamera principale tiene traccia dello spostamento della testa dell'utente, la posizione iniziale dell'utente può essere impostata impostando la posizione iniziale della fotocamera principale.
La scelta centrale che devi fare è se stai sviluppando per HoloLens o visori vr immersivi. Una volta ottenuto questo, passare a qualsiasi sezione di installazione si applica.
HoloLens configurazione della fotocamera
Per HoloLens app, è necessario usare ancoraggi per tutti gli oggetti che si desidera bloccare nell'ambiente della scena. È consigliabile usare spazio non associato per ottimizzare la stabilità e creare ancoraggi in più camere.
Seguire questa esercitazione dettagliata per aggiungere e configurare automaticamente Realtà mista Toolkit nel progetto Unity. È anche possibile usare direttamente la classe MixedRealityPlayspace da MRTK per Unity e impostare la scala di destinazione su World:
MRTK deve gestire automaticamente la posizione dello spazio di riproduzione e della fotocamera, ma è consigliabile fare doppio controllo:
Nel pannello Gerarchia espandere MixedRealityPlayspace GameObject e trovare l'oggetto figlio della fotocamera principale
Nel pannello Controllo individuare il componente Trasforma e modificare la posizionesu (X: 0, Y: 0, Z: 0)
xrInputSubsystem.TrySetTrackingOriginMode(TrackingOriginModeFlags.Device);
xrInputSubsystem.TrySetTrackingOriginMode(TrackingOriginModeFlags.Unbounded); // Recommendation for OpenXR
È possibile usare ARSession per le applicazioni HoloLens, che funzionano meglio con ancoraggi e ARKit/ARCore.
Importante
La sessione AR e le funzionalità correlate richiedono l'installazione di AR Foundation.
È anche possibile applicare manualmente le modifiche della fotocamera senza usare ARSession:
Selezionare Fotocamera principale nel pannello Gerarchia
Nel pannello Controllo individuare il componente Trasforma e modificare la posizionesu (X: 0, Y: 0, Z: 0)
Fotocamera nel riquadro Controllo in Unity
Aggiungere un trackedPoseDriver alla fotocamera principale
Selezionare Fotocamera principale nel pannello Gerarchia
Nel pannello Controllo individuare il componente Trasforma e modificare la posizionesu (X: 0, Y: 0, Z: 0)
Fotocamera nel riquadro Controllo in Unity
Passare alla sezione Altre Impostazioni del lettore Windows Store Impostazioni
Scegliere Windows Mixed Reality come dispositivo, che può essere elencato come Windows Holographic nelle versioni precedenti di Unity
Selezionare Realtà virtuale supportata
Poiché l'oggetto Main Camera viene contrassegnato automaticamente come fotocamera, Unity attiva tutti i movimenti e la traduzione.
Nota
Queste impostazioni devono essere applicate alla fotocamera in ogni scena dell'app.
Per impostazione predefinita, quando si crea una nuova scena in Unity, conterrà un oggetto Main Camera GameObject nella gerarchia che include il componente Fotocamera, ma potrebbe non avere le impostazioni applicate correttamente.
Configurazione della fotocamera VR
Windows Mixed Reality supporta le app in un'ampia gamma di scalabilità di esperienze, dall'orientamento alle app a livello di orientamento e a livello di sede fino alle app su larga scala. In HoloLens è possibile andare avanti e creare app su scala mondiale che consentono agli utenti di camminare oltre 5 metri, esplorando un intero piano di un edificio e oltre.
Il primo passaggio nella creazione di un'esperienza di realtà mista in Unity consiste nel determinare quale esperienza ridimensiona l'app sarà di destinazione:
Se si sta creando per HL2, è consigliabile creare un'esperienza a livello di occhio o prendere in considerazione l'uso di Scene Understanding per motivi sul pavimento della scena.
Passare alla sezione Altre Impostazioni del lettore Windows Store Impostazioni
Scegliere Windows Mixed Reality come dispositivo, che può essere elencato come Windows Holographic nelle versioni precedenti di Unity
Selezionare Realtà virtuale supportata
Poiché l'oggetto Main Camera viene contrassegnato automaticamente come fotocamera, Unity attiva tutti i movimenti e la traduzione.
Nota
Queste impostazioni devono essere applicate alla fotocamera in ogni scena dell'app.
Per impostazione predefinita, quando si crea una nuova scena in Unity, conterrà un Oggetto GameObject della fotocamera principale nella gerarchia che include il componente Fotocamera, ma non ha le impostazioni riportate di seguito correttamente applicate.
Spazio dei nomi:UnityEngine.XR Tipo:XRDevice
Per un'esperienza su scala in piedi o su scala sala, sarà necessario posizionare il contenuto rispetto al piano. Si tratta del piano dell'utente usando la fase spaziale, che rappresenta l'origine a livello di piano definito dall'utente e il limite facoltativo della stanza, configurato durante la prima esecuzione.
Per assicurarsi che Unity funzioni con il suo sistema di coordinate mondiale a livello di piano, è possibile impostare e testare che Unity usa il tipo di spazio di rilevamento RoomScale:
if (XRDevice.SetTrackingSpaceType(TrackingSpaceType.RoomScale))
{
// RoomScale mode was set successfully. App can now assume that y=0 in Unity world coordinate represents the floor.
}
else
{
// RoomScale mode was not set successfully. App cannot make assumptions about where the floor plane is.
}
Se SetTrackingSpaceType restituisce true, Unity ha cambiato correttamente il sistema di coordinate del mondo per tenere traccia del frame di fase di riferimento.
Se SetTrackingSpaceType restituisce false, Unity non è riuscito a passare al frame di fase di riferimento, probabilmente perché l'utente non ha configurato un piano nel proprio ambiente. Anche se un valore restituito false non è comune, può verificarsi se la fase viene configurata in una stanza diversa e il dispositivo viene spostato nella stanza corrente senza che l'utente configura una nuova fase.
Dopo che l'app imposta correttamente il tipo di spazio di rilevamento RoomScale, il contenuto posizionato sul piano y=0 verrà visualizzato sul piano. L'origine a 0, 0, 0 sarà il luogo specifico sul pavimento in cui l'utente si trovava durante la configurazione della stanza, con -Z che rappresenta la direzione in avanti che si trovavano durante l'installazione.
Passare alla sezione Altre Impostazioni del lettore Windows Store Impostazioni
Scegliere Windows Mixed Reality come dispositivo, che può essere elencato come Windows Holographic nelle versioni precedenti di Unity
Selezionare Realtà virtuale supportata
Poiché l'oggetto Main Camera viene contrassegnato automaticamente come fotocamera, Unity attiva tutti i movimenti e la traduzione.
Nota
Queste impostazioni devono essere applicate alla fotocamera in ogni scena dell'app.
Per impostazione predefinita, quando si crea una nuova scena in Unity, conterrà un Oggetto GameObject della fotocamera principale nella gerarchia che include il componente Fotocamera, ma non ha le impostazioni riportate di seguito correttamente applicate.
Spazio dei nomi:UnityEngine.XR Tipo:XRDevice
Per creare un'esperienza di sola orientamento o di scalabilità seduta, è necessario impostare Unity sul tipo di spazio di rilevamento stazioni. Lo spazio di rilevamento stazioni imposta il sistema di coordinate mondiale di Unity per tenere traccia del frame stazioni di riferimento. Nella modalità di rilevamento stazioni, il contenuto inserito nell'editor appena davanti alla posizione predefinita della fotocamera (avanti è -Z) verrà visualizzato davanti all'utente quando l'app viene avviata.
Per un'esperienza di sola orientamento pura, ad esempio un visualizzatore video a 360 gradi (dove gli aggiornamenti della testa posizionale rovinano l'illusione), è quindi possibile impostare XR. InputTracking.disablePositionalTracking su true:
InputTracking.disablePositionalTracking = true;
Per un'esperienza su scala seduta, per consentire all'utente di aggiornare più tardi l'origine seduta, è possibile chiamare XR. Metodo InputTracking.Recenter :
Se si usa MRTK, lo sfondo della fotocamera viene configurato e gestito automaticamente. Per i progetti XR SDK o Legacy WSA, è consigliabile impostare lo sfondo della fotocamera su nero solido su HoloLens e mantenere lo skybox per VR.
Uso di più fotocamere
Quando sono presenti più componenti della fotocamera nella scena, Unity sa quale fotocamera usare per il rendering stereoscopico in base al quale GameObject ha il tag MainCamera. In XR legacy usa anche questo tag per sincronizzare il rilevamento head. In XR SDK il rilevamento head viene guidato da uno script TrackedPoseDriver collegato alla fotocamera.
Condivisione dei buffer di profondità
La condivisione del buffer di profondità dell'app per Windows ogni frame darà all'app uno dei due incrementi nella stabilità dell'ologramma, in base al tipo di visore visore per cui si esegue il rendering:
I visori vr immersivi possono prendersi cura della riprogettazione posizionale quando viene fornito un buffer di profondità, modificando gli ologrammi per la prespredizione in entrambe le posizioni e l'orientamento.
HoloLens visori visori hanno alcuni metodi diversi. HoloLens 1 seleziona automaticamente un punto di stato attivo quando viene fornito un buffer di profondità, ottimizzando la stabilità dell'ologramma lungo il piano che interseca la maggior parte del contenuto. HoloLens 2 stabilirà il contenuto usando Depth LSR (vedere Osservazioni).
La finestra di dialogo di configurazione di MRTK tenterà di impostare le impostazioni del buffer di profondità per XR SDK e WSA legacy, ma è consigliabile controllare tali schede e verificare le impostazioni in Unity.
Per impostare se l'app Unity fornirà un buffer di profondità per Windows:
Passare a Modifica>Project Impostazioni>Gestione plug-inXR e assicurarsi che la voce di menu sia espansa.
Fare clic sulla voce di menu corrispondente al runtime XR scelto, Windows Mixed Reality o OpenXR. Assicurarsi inoltre che sia selezionata la piattaforma di compilazione corretta, come schede per Windows autonomo e piattaforma UWP (Universal Windows Platform) disponibili.
Per abilitare e configurare:
Per OpenXR selezionare un formato di profondità o "Nessuno" nell'elenco a discesa Modalità invio profondità.
Per Windows Mixed Reality, selezionare o deselezionare la casella di controllo Buffer profondità condivisa. Selezionare quindi un formato dall'elenco a discesa Formato buffer profondità .
Nota
È generalmente consigliabile usare buffer di profondità a 16 bit per migliorare le prestazioni. Tuttavia, se si usa un formato di profondità a 16 bit, gli effetti necessari del buffer stencil (ad esempio alcuni pannelli di scorrimento dell'interfaccia utente di Unity) non funzioneranno perché Unity non crea un buffer stencil in questa impostazione. Se si seleziona un formato di profondità a 24 bit , in genere si creerà un buffer stencil a 8 bit , se applicabile nella piattaforma grafica dell'endpoint.
Per impostare se l'app Unity fornirà un buffer di profondità per Windows:
Passare a Modifica> Project Impostazioni Player>piattaforma UWP (Universal Windows Platform)>tabXR> Impostazioni.
Espandere l'elemento Windows Mixed Reality SDK.
Selezionare o deselezionare la casella di controllo Abilita condivisione buffer profondità . Abilitare La condivisione del buffer di profondità viene selezionata per impostazione predefinita nei nuovi progetti, ma potrebbe essere stata deselezionata per impostazione predefinita nei progetti meno recenti.
Un buffer di profondità può migliorare la qualità visiva, purché Windows possa eseguire il mapping accurato dei valori di profondità per pixel nel buffer di profondità a distanze in metri, usando i piani vicini e lontani impostati in Unity sulla fotocamera principale. Se il rendering passa i valori di profondità in genere, è consigliabile in genere essere utile qui, anche se il rendering traslucente passa la scrittura al buffer di profondità mentre mostra attraverso i pixel di colore esistenti può confondere la riprogettazione. Se si sa che il rendering passa lascerà molti dei pixel di profondità finali con valori di profondità imprecisi, è probabile che si ottenga una migliore qualità visiva deselezionando "Abilita condivisione buffer profondità".
Nota
È generalmente consigliabile usare buffer di profondità a 16 bit per migliorare le prestazioni. Tuttavia, se si usa un formato di profondità a 16 bit, gli effetti necessari del buffer stencil (ad esempio alcuni pannelli di scorrimento dell'interfaccia utente di Unity) non funzioneranno perché Unity non crea un buffer stencil in questa impostazione. Se si seleziona un formato di profondità a 24 bit , in genere si creerà un buffer stencil a 8 bit , se applicabile nella piattaforma grafica dell'endpoint.
Uso dei piani di ritaglio
Il rendering del contenuto troppo vicino all'utente può essere scomodo in realtà mista. È possibile regolare i piani di clip vicino e lontano nel componente Fotocamera.
Selezionare la fotocamera principale nel pannello Gerarchia
Nel pannello Controllo trovare il componente FotocameraRitaglio piani e modificare la casella di testo Near da 0.3 a 0.85. Il rendering del contenuto è ancora più vicino può causare disagio dell'utente e deve essere evitato per le linee guida sulla distanza di rendering.
MRTK offre un sistema di teleporting in box che funziona automaticamente tra mani e controller articolati.
È consigliabile usare l'implementazione della teleportazione di MRTK.
Se si sceglie di non usare MRTK, Unity fornisce un'implementazione di teleportazione nella Toolkit di interazione XR.
Se si sceglie di implementare il proprio, è consigliabile tenere presente che non è possibile spostare direttamente la fotocamera. A causa del controllo di Unity della fotocamera per il rilevamento head, sarà necessario assegnare alla fotocamera un padre nella gerarchia e spostare invece gameObject. Si tratta dell'equivalente dello spazio Playspace di MRTK.
È consigliabile usare l'implementazione della teleportazione di MRTK.
Se si sceglie di implementare il proprio, è consigliabile tenere presente che non è possibile spostare direttamente la fotocamera. A causa del controllo di Unity della fotocamera per il rilevamento head, sarà necessario assegnare alla fotocamera un padre nella gerarchia e spostare invece gameObject. Si tratta dell'equivalente dello spazio Playspace di MRTK.
Modalità di riprogettazione
Entrambi i visori visori HoloLens e immersivi riprogetteranno ogni fotogramma che l'app esegue il rendering per modificare qualsiasi prepredizione della posizione head effettiva dell'utente quando vengono generati fotoni.
Per impostazione predefinita:
I visori vr immersivi si occuperanno della riprogettazione posizionale se l'app fornisce un buffer di profondità per un determinato frame. Gli visori immersivi regolano anche gli ologrammi per la prespredizione sia nella posizione che nell'orientamento. Se non viene fornito un buffer di profondità, il sistema correggerà solo le errori di orientamento.
Gli visori olografici come HoloLens 2 si occuparanno della riprogettazione posizionale se l'app fornisce il buffer di profondità o meno. La riprogettazione posizionale è possibile senza buffer di profondità su HoloLens poiché il rendering è spesso sparse con uno sfondo stabile fornito dal mondo reale.
Se si sta seguendo il percorso di sviluppo di Unity, si è in corso l'esplorazione dei blocchi predefiniti di MRTK. Da qui è possibile passare al blocco predefinito successivo: