Szenenverständnisbeobachter – MRTK2
Scene Understanding gibt eine semantische Darstellung von Szenenentitäten sowie deren geometrischen Formen auf HoloLens 2 zurück (HoloLens 1. Generation wird nicht unterstützt).
Einige erwartete Anwendungsfälle dieser Technologie sind:
- Platzieren von Objekten auf der nächsten Oberfläche einer bestimmten Art (z. B. Wand und Boden)
- Erstellen von Navigationsgittern für Spiele im Plattformstil
- Bereitstellen von physikmodulfreundlicher Geometrie als Quads
- Beschleunigen der Entwicklung durch Vermeiden der Notwendigkeit, ähnliche Algorithmen zu schreiben
Scene Understanding wird als experimentelles Feature in MRTK 2.6 eingeführt. Es ist in MRTK als räumlicher Beobachter namens WindowsSceneUnderstandingObserver
integriert. Scene Understanding funktioniert sowohl mit der Legacy-XR-Pipeline als auch mit der XR SDK-Pipeline (sowohl OpenXR (ab MRTK 2.7) als auch mit dem Windows XR-Plug-In. In beiden Fällen wird verwendet WindowsSceneUnderstandingObserver
.
Hinweis
Die Verwendung von Scene Understanding in Remoting wird nur in MRTK 2.7.3 und höher unterstützt. Nur Projekte, die OpenXR verwenden, werden unterstützt. Projekte, die die Legacy-XR-Pipeline oder das Windows XR-Plug-In verwenden, werden nicht unterstützt.
Übersicht über Beobachter
Wenn Sie dazu aufgefordert werden, gibt SpatialAwarenessSceneObject mit Attributen zurück, WindowsSceneUnderstandingObserver
die für die Anwendung nützlich sind, um ihre Umgebung zu verstehen. Die Beobachtungshäufigkeit, der zurückgegebene Objekttyp (z. B. Wand, Boden) und andere Beobachterverhalten sind abhängig von der Konfiguration des Beobachters über das Profil. Wenn für instance die Okklusionsmaske gewünscht ist, muss der Beobachter so konfiguriert werden, dass Quader generiert werden. Die beobachtete Szene kann als serialisierte Datei gespeichert werden, die später geladen werden kann, um die Szene im Editor-Wiedergabemodus neu zu erstellen.
Einrichten
Wichtig
Scene Understanding wird nur in HoloLens 2 und Unity 2019.4 und höher unterstützt.
- Stellen Sie sicher, dass die Plattform in den Buildeinstellungen auf UWP festgelegt ist.
- Rufen Sie das Scene Understanding-Paket über Mixed Reality Feature Tool ab.
Verwenden von Scene Understanding
Die schnellste Möglichkeit, mit Scene Understanding zu beginnen, besteht darin, die Beispielszene zu sehen.
Scene Understanding-Beispielszene
Verwenden Sie in Unity die Project Explorer, um die Szenendatei in Examples/Experimental/SceneUnderstanding/Scenes/SceneUnderstandingExample.unity
zu öffnen, und drücken Sie wiedergabe!
Wichtig
Gilt nur für MRTK 2.6.0. Wenn Sie das Mixed Reality Feature Tool verwenden oder anderweitig über UPM importieren, importieren Sie das Beispiel Demos – SpatialAwareness, bevor Sie das Beispiel Experimental – SceneUnderstanding aufgrund eines Abhängigkeitsproblems importieren. Weitere Informationen finden Sie in diesem GitHub-Problem .
Die Szene veranschaulicht Folgendes:
- Visualisierung beobachteter Szenenobjekte mit in der Anwendungsbenutzeroberfläche zum Konfigurieren des Beobachters
- Beispielskript
DemoSceneUnderstandingController
, das zeigt, wie Beobachtereinstellungen geändert und relevante Ereignisse überwacht werden - Speichern von Szenendaten auf dem Gerät für die Offlineentwicklung
- Laden zuvor gespeicherter Szenendaten (BYTES-Dateien) zur Unterstützung des Entwicklungsworkflows im Editor
Wichtig
Standardmäßig ist die ShouldLoadFromFile
Eigenschaft des Beobachters auf false festgelegt. Um die Visualisierung eines serialisierten Beispielraums anzuzeigen, lesen Sie unten den Abschnitt zum Konfigurieren des Beobachterdiensts , und legen Sie die Eigenschaft im Editor auf true fest.
Hinweis
Die Beispielszene basiert auf der Legacy-XR-Pipeline. Wenn Sie die XR SDK-Pipeline verwenden, sollten Sie die Profile entsprechend ändern. Das bereitgestellte Scene Understanding Spatial Awareness System-Profil (DemoSceneUnderstandingSystemProfile
) und die Profile "Scene Understanding Observer" (DefaultSceneUnderstandingObserverProfile
und DemoSceneUnderstandingObserverProfile
) funktionieren für beide Pipelines.
Hinweis
Die Beispielszene protokolliert eine There is no active AsyncCoroutineRunner when an action is posted.
Warnung unter bestimmten Umständen aufgrund der Initialisierungs-/Threadausführungsreihenfolge. Wenn Sie bestätigen können, dass die AsyncCoroutineRunner
Komponente an das GameObject "Demo Controller" angefügt ist und die Komponente/das GameObject in der Szene aktiviert/aktiv bleibt (der Standardfall), kann die Warnung problemlos ignoriert werden.
Wenn Sie jedoch eine neue Szene mit Scene Understanding erstellen, stellen Sie sicher, dass Sie im Stammverzeichnis ein leeres GameObject erstellen und das AsyncCoroutineRunner
Skript anfügen. Andernfalls funktioniert Scene Understanding möglicherweise nicht ordnungsgemäß.
Konfigurieren des Beobachterdiensts
Wählen Sie das Spielobjekt "MixedRealityToolkit" aus, und überprüfen Sie den Inspektor.
Mit diesen Optionen kann der konfiguriert WindowsSceneUnderstandingObserver
werden.
Beispielskript
Das Beispielskript DemoSceneUnderstandingController.cs veranschaulicht die wichtigsten Konzepte für die Arbeit mit dem Scene Understanding-Dienst.
- Abonnieren von Scene Understanding-Ereignissen
- Behandeln von Scene Understanding-Ereignissen
- Konfigurieren der zur
WindowsSceneUnderstandingObserver
Laufzeit
Die Umschaltflächen im Bereich in der Szene ändern das Verhalten des Szenenverständnisbeobachters, indem öffentliche Funktionen dieses Beispielskripts aufgerufen werden.
Durch aktivieren von Instanziieren von Präfabs wird das Erstellen von Objekten veranschaulicht, deren Größe sich an alle SpatialAwarenessSceneObject-Objekte anpassen, die ordnungsgemäß unter einem übergeordneten Objekt gesammelt werden.
Erstellte App-Notizen
Erstellen und Bereitstellen in HoloLens auf die Standardmethode. Nach der Ausführung sollte eine Reihe von Schaltflächen angezeigt werden, um mit den Features zu spielen.
Beachten Sie, dass es beim Durchführen von Abfragen an den Beobachter einige Probleme gibt. Eine Fehlkonfiguration einer Abrufanforderung führt dazu, dass Ihre Ereignisnutzlast nicht die erwarteten Daten enthält. Wenn beispielsweise keine Quads angefordert werden, sind keine Okklusionsmaskentexturen vorhanden. Wie weise, wird kein Weltgitter angezeigt, wenn der Beobachter nicht für die Anforderung von Gittern konfiguriert ist. Das DemoSceneUnderstandingController
Skript übernimmt einige dieser Abhängigkeiten, aber nicht alle.
Auf gespeicherte Szenendateien kann über das Geräteportal unter User Folders/LocalAppData/[APP_NAME]/LocalState/PREFIX_yyyyMMdd_hhmmss.bytes
zugegriffen werden. Diese Szenendateien können im Editor verwendet werden, indem sie im Beobachterprofil im Inspektor angegeben werden.