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 WindowsSceneUnderstandingObserverintegriert. 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.

  1. Stellen Sie sicher, dass die Plattform in den Buildeinstellungen auf UWP festgelegt ist.
  2. 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.

Szenen, die den Standort in der Hierarchie verstehen

MRTK-Position im Inspektor

Mit diesen Optionen kann der konfiguriert WindowsSceneUnderstandingObserverwerden.

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.

Democontrolleroptionen

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.byteszugegriffen werden. Diese Szenendateien können im Editor verwendet werden, indem sie im Beobachterprofil im Inspektor angegeben werden.

Speicherort der Bytedatei des Geräteportals

Serialisierte Szenenbytes im Beobachter

Weitere Informationen