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ächstgelegenen Oberfläche einer bestimmten Art (z. B. Wand und Boden)
- Erstellen eines Navigationsgitters für Spiele im Plattformstil
- Bereitstellen von physikmodulfreundlicher Geometrie als Quader
- Beschleunigen der Entwicklung durch Vermeiden der Notwendigkeit, ähnliche Algorithmen zu schreiben
Scene Understanding wird als experimentelles Feature in MRTK 2.6 eingeführt. Es wird als räumlicher Beobachter namens WindowsSceneUnderstandingObserver
in das MRTK 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 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 gefragt wird, gibt SpatialAwarenessSceneObjectWindowsSceneUnderstandingObserver
mit Attributen zurück, 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 instance die Okklusionsmaske gewünscht wird, muss der Beobachter so konfiguriert werden, dass er Quader generiert. Die beobachtete Szene kann als serialisierte Datei gespeichert werden, die später geladen werden kann, um die Szene im Editor-Wiedergabemodus neu zu erstellen.
Setup
Wichtig
Scene Understanding wird nur unter 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 Featuretool ab.
Verwenden von Scene Understanding
Der schnellste Weg, um 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 FeatureTool 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 auf relevante Ereignisse lauschen - Speichern von Szenendaten auf einem 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 zu sehen, lesen Sie den Abschnitt zum Konfigurieren des Beobachterdiensts unten, 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 Scene Understanding Observer-Profile (DefaultSceneUnderstandingObserverProfile
und DemoSceneUnderstandingObserverProfile
) funktionieren für beide Pipelines.
Hinweis
Die Beispielszene protokolliert There is no active AsyncCoroutineRunner when an action is posted.
eine 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/GameObject in der Szene aktiviert/aktiv bleibt (Standardfall), kann die Warnung ignoriert werden.
Wenn Sie jedoch eine neue Szene mit Scene Understanding erstellen, stellen Sie sicher, dass Sie ein leeres GameObject im Stammverzeichnis erstellen und das Skript anfügen AsyncCoroutineRunner
, 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 bei der Arbeit mit dem Scene Understanding-Dienst.
- Abonnieren von Scene Understanding-Ereignissen
- Behandeln von Szenenverständnisereignissen
- Konfigurieren von zur
WindowsSceneUnderstandingObserver
Laufzeit
Die Umschaltflächen im Panel in der Szene ändern das Verhalten des Szenenverständnisbeobachters, indem öffentliche Funktionen dieses Beispielskripts aufgerufen werden.
Durch Aktivieren von Instanziieren von Prefabs wird das Erstellen von Objekten veranschaulicht, die so groß sind, dass sie an alle SpatialAwarenessSceneObject-Objekte angepasst werden, 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 beim Abfragen an den Beobachter einige Fehler aufgetreten sind. Eine Fehlkonfiguration einer Abrufanforderung führt dazu, dass Ihre Ereignisnutzlast nicht die erwarteten Daten enthält. Wenn beispielsweise keine Quads erforderlich sind, sind keine Okklusionsmaskentexturen vorhanden. Wie auch immer, 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.