Realtà mista OpenXR le funzionalità supportate in UnityMixed Reality OpenXR supported features in Unity

Il pacchetto di plug-in OpenXR per la realtà mista è un'estensione del plug-in OpenXR di Unity e supporta una suite di funzionalità per gli auricolari per la realtà mista HoloLens 2 e Windows.The Mixed Reality OpenXR Plugin package is an extension of Unity's OpenXR Plugin and supports a suite of features for HoloLens 2 and Windows Mixed Reality headsets. Prima di continuare, assicurarsi di avere installato unity 2020,2 o versione successiva, la versione del plug-in OpenXR 0.1.2 o versione successiva e che il progetto Unity sia configurato per OpenXR.Before continuing, make sure that you've installed Unity 2020.2 or later, OpenXR Plugin version 0.1.2 or later, and your Unity project is configured for OpenXR.

Attività supportateWhat's supported

Attualmente sono supportate le funzionalità seguenti:The following features are currently supported:

  • Supporta le applicazioni UWP per HoloLens 2 e l'ottimizzazione per il modello di applicazione HoloLens 2.Supports UWP applications for HoloLens 2, and optimize for HoloLens 2 application model.
  • Supporta le applicazioni Win32 VR per l'auricolare di realtà mista Windows con i profili controller più recenti e la comunicazione remota delle app olograficheSupports Win32 VR applications for Windows Mixed Reality headset with latest controller profiles and holographic app remoting.
  • Rilevamento della scalabilità globale tramite ancoraggi e spazio non vincolato.World scale tracking using Anchors and Unbounded space.
  • API di archiviazione di ancoraggio per salvare in modo permanente gli ancoraggi nell'archivio locale HoloLens 2.Anchor storage API to persist anchors to HoloLens 2 local storage.
  • Motion controller e Hand Interactions, incluso il nuovo controller HP Reverb G2.Motion controller and hand interactions, including the new HP Reverb G2 controller.
  • Tracciatura manuale articolata con 26 giunzioni e input RADIUS Uniti.Articulated hand tracking using 26 joints and joint radius inputs.
  • Interazione con gli occhi su HoloLens 2.Eye gaze interaction on HoloLens 2.
  • Individuazione della fotocamera Photo/video (PV) in HoloLens 2.Locating photo/video (PV) camera on HoloLens 2.
  • Acquisizione di realtà mista tramite il rendering di 3 occhi attraverso la fotocamera FV.Mixed Reality Capture using 3rd eye rendering through PV camera.
  • Supporta "Play" in HoloLens 2 con l'app di comunicazione remota olografica, consentendo agli sviluppatori di eseguire il debug degli script senza compilare e distribuire nel dispositivo.Supports "Play" to HoloLens 2 with the Holographic Remoting app, allowing developers to debug scripts without building and deploying to the device.
  • Compatibile con MRTK Unity 2.5.3 e versioni successive tramite il supporto del provider OpenXR MRTK.Compatible with MRTK Unity 2.5.3 and newer through MRTK OpenXR provider support.
  • Compatibile con Unity ARFoundation 4,0 o versione successivaCompatible with Unity ARFoundation 4.0 or later

Comunicazione remota olografica in modalità di riproduzione dell'editor UnityHolographic Remoting in Unity Editor play mode

La creazione di un progetto Unity UWP nel progetto di Visual Studio e quindi la creazione del pacchetto e la distribuzione in un dispositivo HoloLens 2 possono richiedere del tempo.Building a UWP Unity project in Visual Studio project and then packaging and deploying it to a HoloLens 2 device can take some time. Una soluzione consiste nell'abilitare la comunicazione remota dell'editor olografica, che consente di eseguire il debug dello script C# usando la modalità "Play" direttamente in un dispositivo HoloLens 2 sulla rete.One solution is to enable the Holographic Editor Remoting, which lets you debug your C# script using “Play” mode directly to a HoloLens 2 device over your network. Questo scenario consente di evitare il sovraccarico dovuto alla creazione e alla distribuzione di un pacchetto UWP nel dispositivo remoto.This scenario avoids the overhead of building and deploying a UWP package to remote device.

  1. Per prima cosa, è necessario installare l'app del lettore di comunicazione remota olografica dallo Store nel HoloLens 2First, you need to install the Holographic Remoting Player app from Store on your HoloLens 2

  2. Eseguire l'app del lettore di comunicazione remota olografica in HoloLens 2 per visualizzare il numero di versione e l'indirizzo IP per la connessioneRun the Holographic Remoting Player app on HoloLens 2 and you'll see the version number and IP address to connect to

    • Per usare il plug-in OpenXR, è necessario usare la versione 2.4 o successiva.You'll need v2.4 or later to work with the OpenXR plugin

    Screenshot del lettore di comunicazione remota olografico in esecuzione in HoloLens

  3. Aprire la finestra di dialogo modifica-> impostazioni progetto, passare alla Gestione plug-in XR e selezionare la casella set di funzionalità di realtà mista di Windows :Open Edit -> Project Settings, navigate to XR plug-in Management, and check the Windows Mixed Reality feature set box:

    Screenshot del pannello Impostazioni progetto aperto nell'editor di Unity con la gestione dei plug-in di XR evidenziata

  4. Espandere la sezione funzionalità in OpenXR e selezionare Mostra tuttoExpand the Features section under OpenXR and select Show All

  5. Controllare la casella di controllo Remote editor olografico e immettere l'indirizzo IP ottenuto dall'app di comunicazione remota olografica:Check the Holographic Editor Remoting checkbox and input the IP address you get from the Holographic Remoting app:

    Screenshot del pannello Impostazioni progetto aperto nell'editor di Unity con le funzionalità evidenziate

A questo punto è possibile fare clic sul pulsante "Riproduci" per riprodurre l'app Unity nell'app per la comunicazione remota olografica nella HoloLens.Now you can click the “Play” button to play your Unity app into the Holographic Remoting app on your HoloLens. È anche possibile aggiungere Visual Studio a Unity per eseguire il debug degli script C# in modalità Play.You can also attach Visual Studio to Unity to debug C# scripts in the play mode.

Nota

A partire dalla versione 0.1.0, il runtime di comunicazione remota olografica non supporta ancoraggi e le funzionalità di ARAnchorManager non funzioneranno tramite la comunicazione remota.As of version 0.1.0, the Holographic Remoting runtime doesn’t support Anchors, and ARAnchorManager functionalities will not work through remoting. Questa funzionalità è disponibile nelle versioni future.This feature is coming in future releases.

Ancoraggi e persistenza di ancoraggioAnchors and Anchor Persistence

Il plug-in di OpenXR realtà mista fornisce la funzionalità di ancoraggio di base tramite un'implementazione di ARFoundation ARAnchorManager di Unity.The Mixed Reality OpenXR Plugin supplies basic anchor functionality through an implementation of Unity’s ARFoundation ARAnchorManager. Per apprendere le nozioni di base su ARAnchor in ARFoundation, vedere il Manuale di ARFoundation per AR Anchor Manager.To learn the basics on ARAnchor s in ARFoundation, visit the ARFoundation Manual for AR Anchor Manager. A partire dalla versione 0.1.0, questo plug-in supporta tutte le funzionalità di ARAnchorManager, ad eccezione della creazione di ancoraggi collegati a un piano, che sarà disponibile in una versione futura.As of version 0.1.0, this plugin supports all ARAnchorManager functionality except creating anchors attached to a plane, which is coming in a future release.

Persistenza di ancoraggio e XRAnchorStoreAnchor Persistence and the XRAnchorStore

Un'API aggiuntiva denominata XRAnchorStore consente di salvare in modo permanente gli ancoraggi tra le sessioni.An additional API called the XRAnchorStore enables anchors to be persisted between sessions. XRAnchorStore è una rappresentazione degli ancoraggi salvati nel dispositivo.The XRAnchorStore is a representation of the saved anchors on your device. Gli ancoraggi possono essere salvati in permanenza da ARAnchors nella scena Unity, caricati dall'archiviazione in nuovi ARAnchors o eliminati dall'archivio.Anchors can be persisted from ARAnchors in the Unity scene, loaded from storage into new ARAnchors, or deleted from storage.

Nota

Questi ancoraggi devono essere salvati e caricati nello stesso dispositivo.These anchors are to be saved and loaded on the same device. L'archiviazione di ancoraggio tra dispositivi verrà supportata tramite ancoraggi spaziali di Azure in una versione futura.Cross-device anchor storage will be supported through Azure Spatial Anchors in a future release.

public class Microsoft.MixedReality.ARSubsystems.XRAnchorStore
{
    // A list of all persisted anchors, which can be loaded.
    public IReadOnlyList<string> PersistedAnchorNames { get; }

    // Clear all persisted anchors
    public void Clear();

    // Load a single persisted anchor by name. The ARAnchorManager will create this new anchor and report it in
    // the ARAnchorManager.anchorsChanged event. The TrackableId returned here is the same TrackableId the
    // ARAnchor will have when it is instantiated.
    public TrackableId LoadAnchor(string name);

    // Attempts to persist an existing ARAnchor with the given TrackableId to the local store. Returns true if
    // the storage is successful, false otherwise.
    public bool TryPersistAnchor(string name, TrackableId trackableId);

    // Removes a single persisted anchor from the anchor store. This will not affect any ARAnchors in the Unity
    // scene, only the anchors in storage.
    public void UnpersistAnchor(string name);
}

Per caricare XRAnchorStore, il plug-in fornisce un metodo di estensione in XRAnchorSubsystem, il sottosistema di un ARAnchorManager:To load the XRAnchorStore, the plugin provides an extension method on the XRAnchorSubsystem, the subsystem of an ARAnchorManager:

public static Task<XRAnchorStore> LoadAnchorStoreAsync(this XRAnchorSubsystem anchorSubsystem)

Per usare questo metodo di estensione, accedervi dal sottosistema di ARAnchorManager come indicato di seguito:To use this extension method, access it from an ARAnchorManager's subsystem as follows:

ARAnchorManager arAnchorManager = GetComponent<ARAnchorManager>();
XRAnchorStore anchorStore = await arAnchorManager.subsystem.LoadAnchorStoreAsync();

Per un esempio completo di come salvare in modo permanente/non permanente gli ancoraggi, vedere gli script di ancoraggio-> di esempio GameObject e AnchorsSample.cs nella scena di esempio di plug-in realtà mista OpenXR:To see a full example of persisting / unpersisting anchors, check out the Anchors -> Anchors Sample GameObject and AnchorsSample.cs script in the Mixed Reality OpenXR Plugin Sample Scene:

Screenshot del pannello gerarchia aperto nell'editor di Unity con l'esempio Anchors evidenziato

Screenshot del pannello Inspector aperto nell'editor di Unity con lo script di esempio Anchors evidenziato

Interazioni tra controller di movimento e manoMotion controller and hand interactions

Per apprendere le nozioni di base sulle interazioni tra realtà mista in Unity, vedere il Manuale di Unity per Unity XR input.To learn the basics about mixed reality interactions in Unity, visit the Unity Manual for Unity XR Input. Questa documentazione di Unity riguarda i mapping da input specifici del controller a InputFeatureUsage più generalizzabili, il modo in cui possono essere identificati e categorizzati gli input XR disponibili, come leggere i dati da questi input e altro ancora.This Unity documentation covers the mappings from controller-specific inputs to more generalizable InputFeatureUsage s, how available XR inputs can be identified and categorized, how to read data from these inputs, and more.

Il plug-in OpenXR per la realtà mista fornisce profili di interazione di input aggiuntivi, mappati a InputFeatureUsage standard, come descritto di seguito:The Mixed Reality OpenXR Plugin provides additional input interaction profiles, mapped to standard InputFeatureUsage s as detailed below:

InputFeatureUsageInputFeatureUsage Controller HP Reverb G2 (OpenXR)HP Reverb G2 Controller (OpenXR) Mano HoloLens (OpenXR)HoloLens Hand (OpenXR)
primary2DAxisprimary2DAxis JoystickJoystick
primary2DAxisClickprimary2DAxisClick Joystick-fare clicJoystick - Click
triggertrigger TriggerTrigger
ridimensionamentogrip RidimensionamentoGrip Toccare o fare pressioneAir tap or squeeze
primaryButtonprimaryButton [X/A]-premere[X/A] - Press Simulazione del toccoAir tap
secondaryButtonsecondaryButton [S/B]-premere[Y/B] - Press
gripButtongripButton Pressione del pulsanteGrip - Press
triggerButtontriggerButton Trigger-premereTrigger - Press
menuButtonmenuButton MenuMenu

Pose AIM e gripAim and Grip Poses

È possibile accedere a due set di pose tramite interazioni di input OpenXR:You have access to two sets of poses through OpenXR input interactions:

  • Il grip si pone per il rendering degli oggetti a manoThe grip poses for rendering objects in the hand
  • L'obiettivo si pone per puntare al mondo.The aim poses for pointing into the world.

Altre informazioni su questa progettazione e sulle differenze tra le due pose sono reperibili nella specifica OpenXR-sottopercorsi di input.More information on this design and the differences between the two poses can be found in the OpenXR Specification - Input Subpaths.

Le pose fornite da InputFeatureUsages DevicePosition, DeviceRotation, DeviceVelocity e DeviceAngularVelocity rappresentano tutti la postura del grip OpenXR.Poses supplied by the InputFeatureUsages DevicePosition, DeviceRotation, DeviceVelocity, and DeviceAngularVelocity all represent the OpenXR grip pose. InputFeatureUsages correlate alle pose del grip sono definite in CommonUsagesdi Unity.InputFeatureUsages related to grip poses are defined in Unity’s CommonUsages.

Le pose fornite da InputFeatureUsages PointerPosition, PointerRotation, PointerVelocity e PointerAngularVelocity rappresentano tutti il OpenXR AIM pose.Poses supplied by the InputFeatureUsages PointerPosition, PointerRotation, PointerVelocity, and PointerAngularVelocity all represent the OpenXR aim pose. Questi InputFeatureUsages non sono definiti in alcun file C# incluso, quindi è necessario definire il proprio InputFeatureUsages come indicato di seguito:These InputFeatureUsages aren't defined in any included C# files, so you'll need to define your own InputFeatureUsages as follows:

public static readonly InputFeatureUsage<Vector3> PointerPosition = new InputFeatureUsage<Vector3>("PointerPosition");

HapticsHaptics

Per informazioni sull'uso di haptics nel sistema di input XR di Unity, è possibile trovare la documentazione nel Manuale di Unity per Unity XR input-haptics.For information on using haptics in Unity’s XR Input system, documentation can be found at the Unity Manual for Unity XR Input - Haptics.

Presto disponibileWhat's coming soon

I problemi e le funzionalità mancanti seguenti sono noti con la versione del plug-in OpenXR della realtà mista 0.1.0.The following issues and missing features are known with Mixed Reality OpenXR plugin version 0.1.0. Stiamo lavorando a questi e verranno rilasciate correzioni e nuove funzionalità nelle prossime versioni.We're working on these and will release fixes and new features in upcoming releases.

  • ARPlaneSubsystem non è ancora supportato.ARPlaneSubsystem is not supported yet. Le API ARPlaneManager, ARRaycastManager e related, ad esempio ARAnchorManager. AttachAnchor , non sono supportate in HoloLens 2.ARPlaneManager, ARRaycastManager, and related API like ARAnchorManager.AttachAnchor are also not supported on HoloLens 2.
  • L' ancoraggio non è ancora supportato dalla comunicazione remota olografica, ma sarà disponibile a breve in futuro.Anchor isn't supported by Holographic Remoting yet, but it's coming in the near future.
  • Il rilevamento della mesh manuale , i codici QR e XRMeshSubsystem non sono ancora supportati.Hand Mesh tracking, QR Codes, and XRMeshSubsystem aren't supported yet.
  • Il supporto di ancoraggi spaziali di Azure è disponibile in una versione futura.Azure Spatial Anchors support is coming in a future release.
  • Arm64 è l'unica piattaforma supportata per le app HoloLens 2.ARM64 is the only supported platform for HoloLens 2 apps. La piattaforma ARM sarà disponibile in una versione futura.The ARM platform is coming in a future release.

Risoluzione dei problemiTroubleshooting

Quando si sospende e si riprende un'app Unity in HoloLens 2, l'app non può essere ripresa correttamente, il che comporta 4 puntini di rotazione nella visualizzazione HoloLens.When you suspend and resume a Unity app on HoloLens 2, the app can't correctly resume, which leads to 4 spinning dots in the HoloLens view.

  • Impostare la modalità di invio di profondità su None nelle impostazioni del progetto OpenXR come soluzione alternativaSet Depth submission Mode to None in the OpenXR project settings as a workaround