Quando si indossa un visore VR realtà mista, diventa il centro del mondo olografico. Il componente Fotocamera unity gestirà automaticamente il rendering stereoscopico e seguirà il movimento 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 immersive HoloLens e VR
Le impostazioni predefinite nel componente Fotocamera unity sono per le applicazioni 3D tradizionali, che richiedono uno sfondo simile a skybox perché non hanno un mondo reale.
Quando si esegue su un visore VR immersivo, si esegue il rendering di tutto ciò che l'utente vede, quindi è probabile che si voglia mantenere il skybox.
Tuttavia, quando si esegue su un visore VR olografico come HoloLens, il mondo reale dovrebbe apparire dietro tutto il rendering della fotocamera. Impostare lo sfondo della fotocamera su trasparente (in HoloLens, il rendering nero è trasparente) anziché una trama Skybox:
Selezionare la fotocamera principale nel pannello Gerarchia
Nel pannello Inspector (Controllo) individuare il componente Camera (Fotocamera) e modificare l'elenco a discesa Clear Flags (Cancella flag) da Skybox a Solid Color (Colore a tinta unita)
Selezionare la selezione colori di sfondo e modificare i valori RGBA in (0, 0, 0, 0)
Se si imposta questa impostazione dal codice, è possibile usare Unity Color.clear
MRTK gestirà automaticamente impostazioni specifiche della fotocamera, in base alla configurazione nel profilo del sistema della fotocamera.
Spazio dei nomi:Microsoft.MixedReality.Toolkit.CameraSystem Tipo: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 script per determinare in fase di esecuzione se il visore VR è immersive o olografico controllando displayOpaque nell'esecuzione attiva di XRDisplaySubsystem.
Spazio dei nomi:UnityEngine.XR.WSA Tipo:HolographicSettings
È possibile usare il codice script per determinare in fase di esecuzione se il visore VR è immersive o olografico controllando HolographicSettings.IsDisplayOpaque.
Impostazione della fotocamera
Qualunque sia il tipo di esperienza che stai sviluppando, la fotocamera principale è sempre il componente principale di rendering stereo collegato allo schermo montato sulla testa del dispositivo. Sarà più semplice disporre l'app se si immagina la posizione iniziale dell'utente come (X: 0, Y: 0, Z: 0). Poiché la fotocamera principale monitora lo 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 immersive. Dopo averlo ottenuto, passare alla sezione di configurazione a cui si applica.
Configurazione della fotocamera HoloLens
Per le app HoloLens, è necessario usare ancoraggi per tutti gli oggetti da bloccare nell'ambiente della scena. È consigliabile usare lo spazio non associato per ottimizzare la stabilità e creare ancoraggi in più stanze.
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 Target Scale su World:
MRTK deve gestire automaticamente la posizione dello spazio di riproduzione e della fotocamera, ma è consigliabile controllare due volte:
Nel pannello Hierarchy (Gerarchia) espandere MixedRealityPlayspace GameObject (GameObject) e individuare l'oggetto figlio Main Camera (Fotocamera principale)
Nel pannello Inspector (Controllo) individuare il componente Transform (Trasformazione) e impostare Position (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 funziona 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 Inspector (Controllo) individuare il componente Transform (Trasformazione) e impostare Position (X: 0, Y: 0, Z: 0)
Fotocamera nel riquadro Inspector (Controllo) in Unity
Aggiungere un trackedPoseDriver alla fotocamera principale
Selezionare Fotocamera principale nel pannello Gerarchia
Nel pannello Inspector (Controllo) individuare il componente Transform (Trasformazione) e impostare Position (X: 0, Y: 0, Z: 0)
Fotocamera nel riquadro Inspector (Controllo) in Unity
Passare alla sezione Altre impostazioni delle impostazioni di Windows Store Player
Scegliere Windows Realtà mista 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 alimenta tutti i movimenti e la traduzione.
Nota
Queste impostazioni devono essere applicate alla fotocamera in ogni scena dell'app.
Per impostazione predefinita, quando crei una nuova scena in Unity, conterrà un GameObject della fotocamera principale nella gerarchia che include il componente Fotocamera, ma potrebbe non avere le impostazioni applicate correttamente.
Configurazione della fotocamera VR
Windows Realtà mista supporta le app in un'ampia gamma di scalabilità di esperienze, dalle app di sola orientamento e con scalabilità verticale tramite app su scala locale. In HoloLens è possibile proseguire e creare app su scala mondiale che consentono agli utenti di superare i 5 metri, esplorando un intero piano di un edificio e oltre.
Il primo passaggio per la creazione di un'esperienza di realtà mista in Unity consiste nel determinare quale esperienza ridimensiona l'app avrà come destinazione:
Se si sta creando per HL2, è consigliabile creare un'esperienza a livello di occhio o provare a usare Scene Understanding per ragionare sul pavimento della scena.
Usare la classe MixedRealityPlayspace di MRTK per Unity e impostare La scala di destinazione su Room o Standing:
MRTK deve gestire automaticamente la posizione dello spazio di riproduzione e della fotocamera, ma è consigliabile controllare due volte:
Nel pannello Hierarchy (Gerarchia) espandere MixedRealityPlayspace GameObject (GameObject) e individuare l'oggetto figlio Main Camera (Fotocamera principale)
Nel pannello Inspector (Controllo) individuare il componente Transform (Trasformazione) e impostare Position (X: 0, Y: 0, Z: 0)
Passare alla sezione Altre impostazioni delle impostazioni di Windows Store Player
Scegliere Windows Realtà mista 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 alimenta tutti i movimenti e la traduzione.
Nota
Queste impostazioni devono essere applicate alla fotocamera in ogni scena dell'app.
Per impostazione predefinita, quando crei una nuova scena in Unity, conterrà un GameObject della fotocamera principale nella gerarchia che include il componente Fotocamera, ma non ha le impostazioni seguenti applicate correttamente.
Spazio dei nomi:UnityEngine.XR Tipo:XRDevice
Per un'esperienza su scala in piedi o su scala locale, è necessario posizionare il contenuto rispetto al pavimento. Si tratta del piano dell'utente usando la fase spaziale, che rappresenta l'origine a livello di piano definita dall'utente e il limite facoltativo della sala, configurato durante la prima esecuzione.
Per assicurarsi che Unity funzioni con il sistema di coordinate globale a livello di piano, è possibile impostare e testare che Unity usi 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 falso non è comune, può verificarsi se la fase è configurata in una stanza diversa e il dispositivo viene spostato nella stanza corrente senza che l'utente configuri 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 pavimento. 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.
Usare la classe MixedRealityPlayspace di MRTK per Unity e impostare Target Scale (Scala di destinazione) su Seated:Use the MixedRealityPlayspace class from MRTK for Unity and set the Target Scale to Seated:
MRTK deve gestire automaticamente la posizione dello spazio di riproduzione e della fotocamera, ma è consigliabile controllare due volte:
Nel pannello Hierarchy (Gerarchia) espandere MixedRealityPlayspace GameObject (GameObject) e individuare l'oggetto figlio Main Camera (Fotocamera principale)
Nel pannello Inspector (Controllo) individuare il componente Transform (Trasformazione) e impostare Position (X: 0, Y: 0, Z: 0)
Passare alla sezione Altre impostazioni delle impostazioni di Windows Store Player
Scegliere Windows Realtà mista 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 alimenta tutti i movimenti e la traduzione.
Nota
Queste impostazioni devono essere applicate alla fotocamera in ogni scena dell'app.
Per impostazione predefinita, quando crei una nuova scena in Unity, conterrà un GameObject della fotocamera principale nella gerarchia che include il componente Fotocamera, ma non ha le impostazioni seguenti applicate correttamente.
Spazio dei nomi:UnityEngine.XR Tipo:XRDevice
Per creare un'esperienza di orientamento odi sola posizione, è necessario impostare Unity sul tipo di spazio di rilevamento stazioni. Lo spazio di rilevamento stazioni imposta il sistema di coordinate del mondo di Unity per tenere traccia della cornice di riferimento stazionaria. Nella modalità di rilevamento stazioni, il contenuto posizionato nell'editor appena davanti alla posizione predefinita della fotocamera (forward è -Z) verrà visualizzato davanti all'utente all'avvio dell'app.
Per un'esperienza pura di sola orientamento, ad esempio un visualizzatore video a 360 gradi (in cui gli aggiornamenti della testa posizionale rovinano l'illusione), è quindi possibile impostare XR. InputTracking.disablePositionalTracking su true:
InputTracking.disablePositionalTracking = true;
Per un'esperienza di ridimensionamento seduto, per consentire all'utente in un secondo momento di aggiornare l'origine seduta, è possibile chiamare la XR. Metodo InputTracking.Recenter:
InputTracking.Recenter();
Se si sta creando un'esperienza su larga scala, è possibile chiamare l'origine globale di Unity più recente nella posizione head corrente dell'utente chiamando XR. Metodo InputTracking.Recenter.
Configurazione dello sfondo della fotocamera
Se si usa MRTK, lo sfondo della fotocamera viene configurato e gestito automaticamente. Per i progetti XR SDK o WSA legacy, è consigliabile impostare lo sfondo della fotocamera su nero solido in HoloLens e mantenere skybox per VR.
Uso di più fotocamere
Quando nella scena sono presenti più componenti della fotocamera, 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 tracciamento della testa. In XR SDK il rilevamento della testa viene guidato da uno script TrackedPoseDriver collegato alla fotocamera.
Condivisione di buffer di profondità
La condivisione del buffer di profondità dell'app in Windows per ogni fotogramma darà alla tua app uno dei due boost nella stabilità dell'ologramma, in base al tipo di visore VR per cui stai eseguendo il rendering:
I visori VR immersive possono occuparsi della riprogettazione posizionale quando viene fornito un buffer di profondità, regolando gli ologrammi per la predizione errata sia in posizione che nell'orientamento.
I visori VR HoloLens hanno alcuni metodi diversi. HoloLens 1 selezionerà automaticamente un punto di attivazione quando viene fornito un buffer di profondità, ottimizzando la stabilità dell'ologramma lungo il piano che interseca la maggior parte del contenuto. HoloLens 2 stabilizzerà 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à a Windows:
Passare a Modifica>impostazioni>progetto Gestione plug-in XR e assicurarsi che la voce di menu sia espansa.
Fare clic sulla voce di menu corrispondente al runtime XR scelto, ovvero Windows Realtà mista o OpenXR. Assicurarsi inoltre che sia selezionata la piattaforma di compilazione corretta, perché sono disponibili schede sia per Windows autonomo che per piattaforma UWP (Universal Windows Platform).
Per abilitare e configurare:
Per OpenXR, selezionare un formato di profondità o "Nessuno" nell'elenco a discesa Modalità invio profondità.
Per Windows Realtà mista, selezionare o deselezionare la casella di controllo Buffer profondità condiviso. Selezionare quindi un formato dall'elenco a discesa Depth Buffer Format (Formato buffer di profondità).
Nota
È in genere consigliabile usare buffer di profondità a 16 bit per migliorare le prestazioni. Tuttavia, se si usa il formato di profondità a 16 bit, gli effetti necessari del buffer degli stencil (ad esempio alcuni pannelli di scorrimento dell'interfaccia utente di Unity) non funzioneranno perché Unity non crea un buffer degli stencil in questa impostazione. Se si seleziona il formato di profondità a 24 bit, in genere verrà creato un buffer stencil a 8 bit, se applicabile nella piattaforma grafica dell'endpoint.
Per impostare se l'app Unity fornirà un buffer di profondità a Windows:
Passare a Modifica>impostazioni>progetto Player> piattaforma UWP (Universal Windows Platform) scheda>XR Settings (Impostazioni XR).
Espandere l'elemento windows Realtà mista SDK.
Selezionare o deselezionare la casella di controllo Abilita condivisione buffer profondità. Abilita condivisione buffer profondità è 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 mappare accuratamente i valori di profondità per pixel normalizzati nel buffer di profondità alle distanze in metri, usando i piani vicini e lontani impostati in Unity sulla fotocamera principale. Se il rendering passa i valori di profondità dell'handle in modi tipici, è consigliabile in genere essere corretto in questo caso, anche se il rendering traslucente passa la scrittura nel buffer di profondità durante la visualizzazione ai pixel di colore esistenti può confondere la riprogettazione. Se si sa che i passaggi di rendering lasceranno 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
È in genere consigliabile usare buffer di profondità a 16 bit per migliorare le prestazioni. Tuttavia, se si usa il formato di profondità a 16 bit, gli effetti necessari del buffer degli stencil (ad esempio alcuni pannelli di scorrimento dell'interfaccia utente di Unity) non funzioneranno perché Unity non crea un buffer degli stencil in questa impostazione. Se si seleziona il formato di profondità a 24 bit, in genere verrà creato 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ò risultare scomodo nella realtà mista. È possibile regolare i piani clip vicino e lontano sul componente Fotocamera.
Selezionare la fotocamera principale nel pannello Gerarchia
Nel pannello Inspector (Controllo) individuare il componente Fotocamera Clipping Planes (Piani di ritaglio fotocamera) e modificare la casella di testo Near (Vicino) da 0.3 a 0.85. Il rendering del contenuto ancora più vicino può causare disagio all'utente e deve essere evitato in base alle linee guida sulla distanza di rendering.
È consigliabile usare l'implementazione del teleportamento di MRTK.
Se si sceglie di non usare MRTK, Unity fornisce un'implementazione di teletrasportazione in XR Interaction Toolkit.
Se si sceglie di implementare il proprio, è bene tenere presente che non è possibile spostare direttamente la fotocamera. A causa del controllo della fotocamera per il tracciamento della testa, è necessario assegnare alla fotocamera un elemento padre nella gerarchia e spostare invece il GameObject. Questo è l'equivalente dello spazio di riproduzione di MRTK.
È consigliabile usare l'implementazione del teleportamento di MRTK.
Se si sceglie di implementare il proprio, è bene tenere presente che non è possibile spostare direttamente la fotocamera. A causa del controllo della fotocamera per il tracciamento della testa, è necessario assegnare alla fotocamera un elemento padre nella gerarchia e spostare invece il GameObject. Questo è l'equivalente dello spazio di riproduzione di MRTK.
Modalità di riprogettazione
Sia HoloLens che i visori VR immersive riprogetteranno ogni fotogramma di cui viene eseguito il rendering dell'app in modo da adattarsi a qualsiasi prepredizione errata della posizione della testa effettiva dell'utente quando vengono generati fotoni.
Per impostazione predefinita:
I visori VR immersive si occuperanno della riprogettazione posizionale se l'app fornisce un buffer di profondità per un determinato fotogramma. I visori VR immersive regolano anche gli ologrammi per la prespredizione errata sia nella posizione che nell'orientamento. Se non viene specificato un buffer di profondità, il sistema correggerà solo errori di orientamento.
I visori VR Holographic come HoloLens 2 si occuperanno della riprogettazione posizionale, indipendentemente dal fatto che l'app fornisca o meno il buffer di profondità. La riprogettazione posizionale è possibile senza buffer di profondità in HoloLens perché il rendering è spesso sparse con uno sfondo stabile fornito dal mondo reale.
Ad esempio, se si sta creando un'esperienza di sola orientamento con contenuto rigidamente bloccato dal corpo (ad esempio, contenuto video a 360 gradi), è possibile impostare in modo esplicito la modalità di riprogettazione su orientamento solo impostandola su ReprojectionMode.OrientationOnly.
Ad esempio, se si sta creando un'esperienza di sola orientamento con contenuto rigidamente bloccato dal corpo (ad esempio, contenuto video a 360 gradi), è possibile impostare in modo esplicito la modalità di riprogettazione solo sull'orientamento impostandolo su HolographicReprojectionMode.OrientationOnly.
Successivo checkpoint di sviluppo
Se si sta seguendo il percorso di sviluppo di Unity, si sta esplorando i blocchi predefiniti principali di MRTK. Da qui, è possibile passare al blocco predefinito successivo: