Räumliche Abbildung

Die räumliche Zuordnung bietet eine detaillierte Darstellung von realen Oberflächen in der Umgebung rund um die HoloLens, sodass Entwickler eine überzeugende Mixed Reality-Erfahrung erstellen können. Durch das Zusammenführen der realen Welt mit der virtuellen Welt kann eine Anwendung Hologramme real erscheinen lassen. Anwendungen können auch natürlich mit den Erwartungen der Benutzer ausgerichtet werden, indem vertraute reale Verhaltensweisen und Interaktionen bereitgestellt werden.


Geräte unterstützen

Feature HoloLens (1. Generation) HoloLens 2 Immersive Headsets
Räumliche Abbildung ✔️ ✔️

Warum ist die räumliche Zuordnung wichtig?

Räumliche Zuordnung macht es möglich, Objekte auf realen Oberflächen zu platzieren. Dies hilft, Objekte in der Welt des Benutzers zu verankern und nutzen reale Tiefenhinweise. Das Okcludieren Ihrer Hologramme basierend auf anderen Hologrammen und realen Weltobjekten hilft dem Benutzer zu überzeugen, dass diese Hologramme tatsächlich in ihrem Raum sind. Hologramme im Raum schweben oder sich mit dem Benutzer bewegen, fühlt sich nicht so real. Wenn möglich, platzieren Sie Elemente für Komfort.

Visualisieren Sie Oberflächen beim Platzieren oder Verschieben von Hologrammen (verwenden Sie ein projektiertes Raster). Dies hilft Benutzern zu wissen, wo sie ihre Hologramme am besten platzieren können, und zeigt an, ob der Ort, an dem sie versuchen, das Hologramm zu platzieren, nicht zugeordnet ist. Sie können "Billboardelemente" für den Benutzer verwenden, wenn sie zu viel winkel haben.

Konzeptionelle Übersicht

Mesh surfaces covering a room
Ein Beispiel für ein räumliches Zuordnungsgitter mit einem Raum

Die beiden primären Objekttypen, die für die räumliche Zuordnung verwendet werden, sind die "Spatial Surface Observer" und die "Spatial Surface".

Die Anwendung stellt den Spatial Surface Observer mit einem oder mehreren gebundenen Volumes bereit, um die Bereiche des Raums zu definieren, in denen die Anwendung räumliche Zuordnungsdaten empfangen möchte. Für jede dieser Volumes stellt die räumliche Zuordnung die Anwendung mit einer Reihe von Räumlichen Oberflächen bereit.

Diese Volumes können auf der Grundlage der realen Welt stationär (in einer festen Position) oder sie können an die HoloLens angefügt werden (sie bewegen sich, aber nicht drehen, wobei die HoloLens, da sie durch die Umgebung bewegt wird). Jede räumliche Oberfläche beschreibt reale Oberflächen in einem kleinen Raumvolumen, dargestellt als Dreiecksgitter, das an ein weltgesperrtes räumliches Koordinatensystem angefügt ist.

Da die HoloLens neue Daten über die Umgebung sammelt, und wenn Änderungen an der Umgebung auftreten, werden räumliche Oberflächen angezeigt, verschwinden und ändern.

Demo zum Räumlichen Bewusstseinsdesign

Wenn Sie die Konzepte des räumlichen Bewusstseins in Aktion sehen möchten, lesen Sie unsere Design-Hologramme - Spatial Awareness Video Demo unten. Wenn Sie fertig sind, fahren Sie mit einem ausführlicheren Einblick in bestimmte Themen fort.

Dieses Video stammt aus der HoloLens 2-App "Entwerfen von Hologrammen". Sie können das vollständige Erlebnis hier herunterladen und genießen.

Räumliche Zuordnung vs. Szenenverständnis worldMesh

Für HoloLens 2 ist es möglich, eine statische Version der räumlichen Zuordnungsdaten mithilfe des Scene Understanding SDK (EnableWorldMesh-Einstellung) abzufragen. Nachfolgend finden Sie die Unterschiede zwischen zwei Möglichkeiten zum Zugreifen auf die räumlichen Zuordnungsdaten:

  • Räumliche Zuordnungs-API:
    • Eingeschränkter Bereich: Die für Anwendungen verfügbaren räumlichen Zuordnungsdaten in einer begrenzten Größe zwischengespeicherte "Blasen" um den Benutzer.
    • Bietet geringe Latenzupdates von geänderten Gitterbereichen über SurfacesChanged-Ereignisse.
    • Variable Detailebene, die von Dreiecken pro Kubikmeter-Parameter gesteuert wird.
  • Szenenverständnis SDK:
    • Unbegrenzter Bereich – bietet alle gescannten räumlichen Zuordnungsdaten innerhalb des Abfrageradius.
    • Stellt eine statische Momentaufnahme der räumlichen Zuordnungsdaten bereit. Das Abrufen der aktualisierten räumlichen Zuordnungsdaten erfordert die Ausführung einer neuen Abfrage für das gesamte Gitter.
    • Konsistente Detailebene, die von der Einstellung "RequestedMeshLevelOfDetail" gesteuert wird.

Was beeinflusst die räumliche Zuordnungsqualität?

Mehrere Faktoren, die hier beschrieben werden, können sich auf die Häufigkeit und Schwere dieser Fehler auswirken. Sie sollten Ihre Anwendung jedoch so entwerfen, dass der Benutzer ihre Ziele auch in Anwesenheit von Fehlern in den räumlichen Zuordnungsdaten erreichen kann.

Allgemeine Verwendungsszenarios

Illustrations of common Spatial Mapping usage scenarios: Placement, Occlusion, Physics and Navigation

Platzierung

Dank der räumlichen Zuordnung können Benutzer*innen in Anwendungen auf natürliche und vertraute Formen der Interaktion zurückgreifen. Was könnte natürlicher sein, als ein Telefon auf den Tisch zu legen?

Da die Platzierung von Hologrammen (oder generell jede Auswahl räumlicher Positionen) auf Oberflächen beschränkt wird, entsteht eine natürliche Zuordnung von 3D (Punkt im Raum) zu 2D (Punkt auf der Oberfläche). Dadurch müssen die Benutzer*innen der Anwendung weniger Informationen bereitstellen, und die Interaktionen der Benutzer*innen werden schneller, einfacher und präziser. Dies ist wahr, weil "Entfernung" nicht etwas ist, das wir zum physischen Kommunizieren an andere Personen oder an Computer verwendet werden. Wenn wir mit unserem Finger zeigen, geben wir eine Richtung, aber keine Entfernung an.

Ein wichtiger Hinweis hier ist, dass ein Anwendungsabstand von Richtung abgeleitet wird (z. B. durch Ausführen einer Raycastrichtung entlang der Blickrichtung des Benutzers, um die nächste räumliche Oberfläche zu finden), die Ergebnisse liefern muss, die der Benutzer zuverlässig vorhersagbar machen kann. Andernfalls verliert der Benutzer seine Kontrolle und kann schnell frustrierend werden. Eine Methode, die ihnen hilft, mehrere Raycasts anstelle von nur einer zu erledigen. Die aggregierten Ergebnisse sollten reibungsloser und vorhersehbarer sein, weniger anfällig für den Einfluss von vorübergehenden "Ausreißern"-Ergebnissen (wie dies durch Strahlen verursacht werden kann, die durch winzige Löcher übergeben oder kleine Geometrien treffen, die der Benutzer nicht kennen). Die Aggregation oder Verglättung kann auch im Laufe der Zeit ausgeführt werden; Sie können z. B. die maximale Geschwindigkeit einschränken, bei der ein Hologramm den Abstand vom Benutzer variieren kann. Einfach das Einschränken des Mindest- und Maximalabstandswerts kann auch helfen, damit das Hologramm, das verschoben wird, nicht plötzlich in den Abstand fliegen oder wieder ins Gesicht des Benutzers abstürzt.

Anwendungen können auch die Form und Richtung von Oberflächen verwenden, um die Platzierung von Hologrammen zu leiten. Ein holografischer Stuhl sollte nicht durch Wände durchdringen und sollte mit dem Boden spülen, auch wenn es leicht ungleich ist. Diese Art von Funktionalität würde wahrscheinlich auf die Verwendung von Physik-Kollisionen und nicht auf Raycasts basieren, aber ähnliche Bedenken gelten. Wenn das Hologramm viele kleine Polygone aufweist, die sich wie die Beine auf einem Stuhl befinden, kann es sinnvoll sein, die Physikdarstellung dieser Polygone auf etwas breiteres und glatter zu erweitern, sodass sie mehr über räumliche Oberflächen schieben können, ohne sich zu bewegen.

Die Benutzereingabe kann extrem vereinfacht werden, und räumliche Oberflächen können verwendet werden, um die automatische Hologrammplatzierung zu erledigen. Beispielsweise könnte die Anwendung einen holografischen Lichtschalter irgendwo an der Wand platzieren, um den Benutzer zu drücken. Der gleiche Vorbehalt zur Vorhersagbarkeit gilt hier doubly; wenn der Benutzer die Kontrolle über die Hologrammplatzierung erwartet, aber die Anwendung nicht immer Hologramme platziert, wo sie erwarten (wenn der Lichtschalter irgendwo angezeigt wird, dass der Benutzer nicht erreichen kann), dann ist dies eine frustrierende Erfahrung. Es kann tatsächlich schlimmer sein, die automatische Platzierung zu tun, die einige der Zeit erfordert, als nur, dass der Benutzer die Platzierung immer selbst erledigen muss; da eine erfolgreiche automatische Platzierung erwartet wird, fühlt sich die manuelle Korrektur wie eine Belastung an!

Beachten Sie auch, dass die Möglichkeit einer Anwendung, räumliche Oberflächen für die Platzierung zu verwenden, stark von der Scanerfahrung der Anwendung abhängig ist. Wenn eine Oberfläche nicht gescannt wurde, kann sie nicht für die Platzierung verwendet werden. Es ist bis zur Anwendung erforderlich, um den Benutzer klar zu machen, damit sie entweder neue Oberflächen scannen oder einen neuen Speicherort auswählen können.

Visuelles Feedback für den Benutzer ist während der Platzierung von entscheidender Bedeutung. Der Benutzer muss wissen, wo das Hologramm auf der nächsten Oberfläche mit Bodeneffekten basiert. Sie sollten verstehen, warum die Bewegung ihres Hologramms eingeschränkt wird (z. B. aufgrund von Kollisionen mit einer anderen nahe gelegenen Oberfläche). Wenn sie kein Hologramm an der aktuellen Stelle platzieren können, sollte das visuelle Feedback klar machen, warum nicht. Wenn der Benutzer beispielsweise versucht, eine holografische Couch auf halbem Weg in die Wand zu platzieren, sollte die Teile der Couch, die sich hinter der Wand befinden, in einer wütenden Farbe pulsieren. Oder umgekehrt, wenn die Anwendung keine räumliche Oberfläche an einem Ort finden kann, an dem der Benutzer eine reale Oberfläche sehen kann, sollte die Anwendung dies klar machen. Die offensichtliche Abwesenheit eines Grundeffekts in diesem Bereich kann diesen Zweck erreichen.

Okklusion

Eine der primären Verwendungen von räumlichen Zuordnungsoberflächen besteht darin, Hologramme einfach zu okcluden. Dieses einfache Verhalten hat einen großen Einfluss auf den wahrgenommenen Realismus von Hologrammen und hilft, ein viscerales Gefühl zu schaffen, das wirklich den gleichen physischen Raum wie der Benutzer bewohnt.

Occlusion bietet auch Informationen für den Benutzer; wenn ein Hologramm von einer realen Oberfläche verdeckt wird, stellt dies zusätzliche visuelles Feedback zur räumlichen Position dieses Hologramms in der Welt bereit. Umgekehrt kann Die Okklusion auch Informationen vom Benutzer nützlich ausblenden ; Das Verschließen von Hologrammen hinter Den Wänden kann visuelle Verwendung auf intuitive Weise reduzieren. Zum Ausblenden oder Anzeigen eines Hologramms muss der Benutzer lediglich seinen Kopf verschieben.

Occlusion kann auch verwendet werden, um Erwartungen für eine natürliche Benutzeroberfläche basierend auf vertrauten physischen Interaktionen zu primären Erwartungen zu verwenden; wenn ein Hologramm von einer Oberfläche verdeckt wird, liegt es daran, dass diese Oberfläche solide ist, sodass der Benutzer erwarten sollte, dass das Hologramm mit dieser Oberfläche kollidiert und nicht durch diese Oberfläche geht.

Manchmal ist die Okklusion von Hologrammen unerwünschte. Wenn ein Benutzer mit einem Hologramm interagieren muss, müssen sie es sehen – auch wenn es sich um eine reale Oberfläche handelt. In solchen Fällen ist es in der Regel sinnvoll, ein solches Hologramm anders zu rendern, wenn es verworren wird (z. B. durch Reduzieren der Helligkeit). Auf diese Weise kann der Benutzer das Hologramm visuell suchen, aber sie wissen, dass es hinter etwas liegt.

Physische Effekte

Die Verwendung der Physiksimulation ist eine andere Möglichkeit, mit der räumliche Zuordnung verwendet werden kann, um die Anwesenheit von Hologrammen im physischen Raum des Benutzers zu verstärken. Wenn mein holografischer Gummiball realistisch von meinem Schreibtisch abrollt, über den Boden springt und unter der Couch verschwindet, kann es schwer sein, zu glauben, dass es nicht dort ist.

Die Physiksimulation bietet auch die Möglichkeit, eine Anwendung zur Verwendung natürlicher und vertrauter physikalischer Interaktionen zu nutzen. Das Verschieben eines Stücks holografischer Möbel auf dem Boden ist wahrscheinlich einfacher für den Benutzer, wenn die Möbel so reagieren, als ob sie auf den Boden mit den entsprechenden Reibungen und Reibungen gleitet.

Um realistische physische Verhaltensweisen zu generieren, müssen Sie wahrscheinlich einige Gitterverarbeitungen ausführen, z. B. Füllungslöcher, gleitende Hallucinationen und glatte raue Oberflächen.

Sie müssen auch berücksichtigen, wie die Scanerfahrung Ihrer Anwendung seine Physiksimulation beeinflusst. Zunächst werden fehlende Oberflächen nicht mit etwas kollidieren; was geschieht, wenn der Gummiball nach unten im Korridor und am Ende der bekannten Welt abrollt? Zweitens müssen Sie entscheiden, ob Sie weiterhin auf Änderungen in der Umgebung im Laufe der Zeit reagieren werden. In einigen Fällen möchten Sie so schnell wie möglich reagieren; Sagen Sie, wenn der Benutzer Türen und Möbel als verschiebbare Barrikaden in Verteidigung gegen einen Tempest von eingehenden römischen Pfeilen verwendet. In anderen Fällen möchten Sie jedoch möglicherweise neue Updates ignorieren; Das Fahren Ihres holografischen Sportwagens auf der Rennbahn auf Ihrem Boden kann plötzlich nicht so spaß sein, wenn Ihr Hund sich in der Mitte der Strecke befindet.

Anwendungen können räumliche Zuordnungsdaten verwenden, um holografische Zeichen (oder Agenten) die Möglichkeit zu geben, auf dieselbe Weise wie eine echte Person zu navigieren. Dies kann dazu beitragen, die Anwesenheit von holografischen Zeichen zu verstärken, indem sie auf dieselbe Gruppe von natürlichen, vertrauten Verhaltensweisen wie denen des Benutzers und ihrer Freunde beschränkt werden.

Navigationsfunktionen können auch für Benutzer nützlich sein. Sobald eine Navigationskarte in einem bestimmten Bereich erstellt wurde, könnte es freigegeben werden, um holografische Wegbeschreibungen für neue Benutzer bereitzustellen, die nicht mit diesem Standort vertraut sind. Diese Karte könnte so konzipiert werden, dass der Fußgänger "Verkehr" reibungslos fließt, oder um Unfälle an gefährlichen Orten wie Baustellen zu vermeiden.

Die wichtigsten technischen Herausforderungen, die bei der Implementierung von Navigationsfunktionen beteiligt sind, sind eine zuverlässige Erkennung von begehbaren Oberflächen (Menschen gehen nicht auf Tabellen!) und die gnadenreiche Anpassung an Änderungen in der Umgebung (Menschen gehen nicht durch geschlossene Türen!). Das Gitter erfordert möglicherweise eine Verarbeitung , bevor es für die Pfadplanung und Navigation durch ein virtuelles Zeichen nutzbar ist. Das Glätten des Gitters und das Entfernen von Hallucinationen kann dazu beitragen, dass Zeichen hängen bleiben. Sie können auch das Gitter drastisch vereinfachen, um die Pfadplanung und Navigationsberechnung ihres Charakters zu beschleunigen. Diese Herausforderungen haben viel Aufmerksamkeit in der Entwicklung der Videospieltechnologie erhalten, und es gibt eine Vielzahl verfügbarer Forschungsliteratur zu diesen Themen.

Die integrierte NavMesh-Funktionalität in Unity kann nicht mit räumlichen Zuordnungsoberflächen verwendet werden. Dies liegt daran, dass räumliche Zuordnungsoberflächen erst bekannt sind, wenn die Anwendung gestartet wird, aber NavMesh-Datendateien müssen vor der Zeit aus Quellressourcen generiert werden. Beachten Sie auch, dass das räumliche Zuordnungssystem keine Informationen zu Oberflächen bereitstellt, die weit vom aktuellen Standort des Benutzers entfernt sind. Die Anwendung muss sich also die Oberflächen selbst merken, wenn sie eine Karte eines großen Bereichs erstellen möchten.

Visualisierung

In der meisten Zeit ist es für räumliche Oberflächen geeignet, unsichtbar zu sein; um visuelle Klammern zu minimieren und die reale Welt für sich selbst sprechen zu lassen. Manchmal ist es jedoch nützlich, räumliche Zuordnungsflächen direkt zu visualisieren, obwohl ihre realen Gegenstücke sichtbar sind.

Wenn der Benutzer z. B. versucht, ein Hologramm auf eine Oberfläche zu platzieren (ein holografisches Gehäuse auf der Wand platzieren, sagen wir), kann es nützlich sein, das Hologramm zu "bodenieren", indem er einen Schatten auf die Oberfläche abgibt. Dies ermöglicht dem Benutzer ein viel klareres Gefühl der genauen physischen Näherung zwischen dem Hologramm und der Oberfläche. Dies ist auch ein Beispiel für die allgemeinere Praxis der visuellen "Vorschau" einer Änderung, bevor sich der Benutzer darauf verpflichtet.

Durch die Visualisierung von Oberflächen kann die Anwendung mit dem Benutzer sein Verständnis der Umgebung teilen. Beispielsweise könnte ein holografisches Brettspiel die horizontalen Oberflächen visualisieren, die es als "Tabellen" identifiziert hat, sodass der Benutzer weiß, wo sie interagieren sollten.

Die Visualisierung von Oberflächen kann eine nützliche Möglichkeit sein, den Benutzer in der Nähe von Leerzeichen anzuzeigen, die aus der Ansicht ausgeblendet sind. Dadurch könnte der Benutzer zugriff auf ihre Küche (und alle enthaltenen Hologramme) von ihrem Wohnzimmer aus ermöglichen.

Die Oberflächengitter, die von der räumlichen Zuordnung bereitgestellt werden, sind möglicherweise nicht besonders "sauber". Es ist wichtig, sie entsprechend zu visualisieren. Herkömmliche Beleuchtungsberechnungen können Fehler in Oberflächen normaler Weise hervorheben, während "saubere" Texturen, die auf die Oberfläche projiziert wurden, helfen, ihm eine Idierdarstellung zu verleihen. Es ist auch möglich, die Gitterverarbeitung durchzuführen, um Gittereigenschaften zu verbessern, bevor die Oberflächen gerendert werden.

Hinweis

HoloLens 2 implementiert eine neue Szenenverständnis-Runtime, die Mixed Reality Entwicklern eine strukturierte, hohe Umgebungsdarstellung bietet, die die Implementierung von Platzierung, Okklusion, Physik und Navigation vereinfacht.

Verwenden des Surface-Beobachters

Der Ausgangspunkt für die räumliche Zuordnung ist der Oberflächenbeobachter. Der Programmablauf ist wie folgt:

  • Erstellen eines Surface-Beobachterobjekts
    • Stellen Sie einen oder mehrere räumliche Mengen bereit, um die Regionen des Interesses zu definieren, in denen die Anwendung räumliche Zuordnungsdaten erhalten möchte. Ein räumliches Volumen ist einfach eine Form, die einen Raumbereich definiert, z. B. eine Sphäre oder ein Feld.
    • Verwenden Sie ein räumliches Volumen mit einem weltgesperrten räumlichen Koordinatensystem, um eine feste Region der physischen Welt zu identifizieren.
    • Verwenden Sie ein räumliches Volumen, das jeden Frame mit einem textkörpergesperrten räumlichen Koordinatensystem aktualisiert hat, um einen Bereich des Raums zu identifizieren, der sich bewegt (aber nicht gedreht) mit dem Benutzer.
    • Diese räumlichen Volumes können später jederzeit geändert werden, da sich der Status der Anwendung oder der Benutzer ändert.
  • Verwenden der Abfrage oder Benachrichtigung zum Abrufen von Informationen zu räumlichen Oberflächen
    • Sie können den Oberflächenbeobachter jederzeit für den räumlichen Oberflächenstatus "abfragen". Stattdessen können Sie sich für das Ereignis "Geänderte Oberflächen" des Oberflächenbeobachter registrieren, das die Anwendung benachrichtigt, wenn sich räumliche Oberflächen geändert haben.
    • Für ein dynamisches räumliches Volumen, z. B. das Ansichts frustum oder ein textgesperrtes Volumen, müssen Anwendungen nach Änderungen jedes Frames abfragen, indem Sie den Bereich des Interesses festlegen und dann die aktuelle Gruppe von räumlichen Oberflächen erhalten.
    • Für ein statisches Volumen, z. B. ein weltgesperrte Würfel für einen einzelnen Raum, können Anwendungen für das Ereignis "Oberflächen geändert" registrieren, die benachrichtigt werden sollen, wenn sich die räumlichen Oberflächen innerhalb dieses Volumens geändert haben.
  • Änderungen an Prozessoberflächen
    • Iterieren Sie die bereitgestellte Gruppe von räumlichen Oberflächen.
    • Klassifizieren Sie räumliche Oberflächen wie hinzugefügt, geändert oder entfernt.
    • Für jede hinzugefügte oder geänderte räumliche Oberfläche übermitteln Sie bei Bedarf eine asynchrone Anforderung, um aktualisierte Gitter zu erhalten, die den aktuellen Zustand der Oberfläche auf der gewünschten Detailebene darstellen.
  • Verarbeiten Sie die asynchrone Gitteranforderung (weitere Details in den folgenden Abschnitten).

Mesh Zwischenspeichern

Räumliche Oberflächen werden durch dichte Dreiecksgitter dargestellt. Das Speichern, Rendern und Verarbeiten dieser Gitter kann erhebliche Berechnungs- und Speicherressourcen nutzen. So sollte jede Anwendung ein Gitterspeicherungsschema übernehmen, das ihren Anforderungen entspricht, um die Ressourcen zu minimieren, die für die Gitterverarbeitung und den Speicher verwendet werden. Dieses Schema sollte bestimmen, welche Gitter beibehalten werden sollen und welche verworfen werden sollen, und wann das Gitter für jede räumliche Oberfläche aktualisiert werden soll.

Viele der Überlegungen, die hier erläutert wurden, informieren direkt darüber, wie Ihre Anwendung die Zwischenspeicherung von Gittern angehen soll. Sie sollten berücksichtigen, wie der Benutzer durch die Umgebung wechselt, welche Oberflächen benötigt werden, wenn verschiedene Oberflächen beobachtet werden und wann Änderungen in der Umgebung erfasst werden sollen.

Bei der Interpretation des vom Oberflächenbeobachter bereitgestellten Ereignisses "Surfaces changed" ist die grundlegende Gitterspeicherlogik wie folgt:

  • Wenn die Anwendung eine räumliche Oberflächen-ID sieht, die sie noch nicht gesehen hat, sollte dies als neue räumliche Oberfläche behandelt werden.
  • Wenn die Anwendung eine räumliche Oberfläche mit einer bekannten ID sieht, aber mit einer neuen Aktualisierungszeit, sollte dies als aktualisierte räumliche Oberfläche behandelt werden.
  • Wenn die Anwendung keine räumliche Oberfläche mehr mit einer bekannten ID sieht, sollte dies als entfernte räumliche Oberfläche behandelt werden.

Es ist bis zu jeder Anwendung, um dann die folgenden Optionen zu treffen:

  • Für neue räumliche Oberflächen sollte Gitter angefordert werden?
    • Im Allgemeinen sollten Gitter sofort für neue räumliche Oberflächen angefordert werden, die dem Benutzer nützliche neue Informationen bereitstellen können.
    • Neue räumliche Oberflächen in der Nähe und vor dem Benutzer sollten jedoch Priorität erhalten und ihr Gitter zuerst angefordert werden.
    • Wenn das neue Gitter nicht benötigt wird, wenn z. B. die Anwendung dauerhaft oder vorübergehend sein Modell der Umgebung eingefroren hat, sollte sie nicht angefordert werden.
  • Für aktualisierte räumliche Oberflächen sollten Gitter angefordert werden?
    • Aktualisierte räumliche Oberflächen in der Nähe und vor dem Benutzer sollten Priorität erhalten und ihr Gitter sollte zuerst angefordert werden.
    • Es kann auch sinnvoll sein, neuen Oberflächen höhere Priorität zu geben als für aktualisierte Oberflächen, insbesondere während der Überprüfung.
    • Um die Verarbeitungskosten zu begrenzen, können Anwendungen die Rate drosseln, bei der sie Aktualisierungen an räumliche Oberflächen verarbeiten.
    • Es kann sein, dass Änderungen an einer räumlichen Oberfläche geringfügig sind, z. B. wenn die Grenzen der Oberfläche klein sind, in diesem Fall ist das Update möglicherweise nicht wichtig genug, um zu verarbeiten.
    • Updates für räumliche Oberflächen außerhalb des aktuellen Bereichs des Interesses des Benutzers können jedoch vollständig ignoriert werden, obwohl es in diesem Fall effizienter sein kann, die räumlichen Begrenzungsvolumen zu ändern, die von dem Oberflächenbeobachter verwendet werden.
  • Für entfernte räumliche Oberflächen sollte Gitter verworfen werden?
    • Im Allgemeinen sollte ein Gitter sofort für entfernte räumliche Oberflächen verworfen werden, sodass hologrammliche Okklusion korrekt bleibt.
    • Wenn die Anwendung jedoch den Grund hat, zu glauben, dass eine räumliche Oberfläche kurz wieder angezeigt wird (basierend auf dem Entwurf der Benutzeroberfläche), kann es effizienter sein, es zu verwerfen, als das Gitter zu verwerfen und es später erneut neu zu erstellen.
    • Wenn die Anwendung ein großes Modell der Umgebung des Benutzers erstellt, möchte sie möglicherweise keine Gitter verwerfen. Es muss jedoch weiterhin die Ressourcennutzung einschränken, möglicherweise durch das Schpooln von Gittern auf datenträgern, da räumliche Oberflächen verschwinden.
    • Einige relativ seltenen Ereignisse während der räumlichen Oberflächengenerierung können räumliche Oberflächen durch neue räumliche Oberflächen an einem ähnlichen Ort ersetzt werden, aber mit unterschiedlichen IDs. Anwendungen, die keine entfernte Oberfläche verwerfen möchten, sollten daher nicht mit mehreren überlappenden räumlichen Oberflächen enden, die denselben Ort abdecken.
  • Sollten Gitter für andere räumliche Oberflächen verworfen werden?
    • Selbst wenn eine räumliche Oberfläche vorhanden ist, wenn es nicht mehr für die Benutzererfahrung nützlich ist, sollte es verworfen werden. Wenn die Anwendung z. B. den Raum auf der anderen Seite eines Türwegs durch einen alternativen virtuellen Raum ersetzt, dann sind die räumlichen Oberflächen in diesem Raum nicht mehr wichtig.

Hier sehen Sie eine Beispiel-Zwischenspeicherungsstrategie für Gitter, indem Sie räumliche und zeitliche Hysterese verwenden:

  • Betrachten Sie eine Anwendung, die ein frustumförmiges räumliches Volumen von Interesse verwenden möchte, das dem Blick des Benutzers folgt, während sie sich umschauen und herumgehen.
  • Eine räumliche Oberfläche kann vorübergehend aus diesem Volumen verschwinden, weil der Benutzer sich von der Oberfläche entfernt sieht oder weiter entfernt ist... nur zurückschauen oder nähert sich einen Moment später wieder. In diesem Fall stellt das Verwerfen und Erneutes Erstellen des Gitters für diese Oberfläche viele redundante Verarbeitungen dar.
  • Um die Anzahl der verarbeiteten Änderungen zu verringern, verwendet die Anwendung zwei räumliche Oberflächenbeobachter, die in der anderen enthalten sind. Das größere Volumen ist spärlich und folgt dem Benutzer "lazily"; es wird nur verschoben, wenn erforderlich, um sicherzustellen, dass das Zentrum innerhalb von 2,0 Metern des Benutzers liegt.
  • Neue und aktualisierte räumliche Oberflächengitter werden immer aus dem kleineren inneren Oberflächenbeobachter verarbeitet, aber Gitter werden zwischengespeichert, bis sie aus dem größeren äußeren Beobachter verschwinden. Dies ermöglicht es der Anwendung, viele redundante Änderungen aufgrund der lokalen Benutzerbewegung zu vermeiden.
  • Da eine räumliche Oberfläche auch vorübergehend aufgrund des Nachverfolgungsverlusts verschwinden kann, verwerfen die Anwendung auch entfernte räumliche Oberflächen während des Nachverfolgungsverlusts.
  • Im Allgemeinen sollte eine Anwendung den Handel zwischen reduzierter Updateverarbeitung und erhöhter Speichernutzung bewerten, um ihre ideale Zwischenspeicherstrategie zu ermitteln.

Darstellung

Es gibt drei primäre Möglichkeiten, in denen räumliche Zuordnungsgitter für das Rendern verwendet werden:

  • Für Oberflächenvisualisierung
    • Es ist häufig nützlich, räumliche Oberflächen direkt zu visualisieren. Beispielsweise kann das Umwandeln von Schatten von Objekten auf räumliche Oberflächen hilfreiches visuelles Feedback für den Benutzer bieten, während sie Hologramme auf Oberflächen platzieren.
    • Eine Sache, die sie berücksichtigen soll, ist, dass räumliche Gitter anders als die Art von Gittern sind, die ein 3D-Künstler erstellen kann. Die Dreiecktopologie ist nicht so sauber wie die vom Menschen erstellte Topologie, und das Gitter leidet unter verschiedenen Fehlern.
    • Zum Erstellen einer ansprechenden visuellen Ästhetik möchten Sie möglicherweise eine Gitterverarbeitung durchführen, z. B. zum Füllen von Löchern oder glatten Oberflächennormalen. Möglicherweise möchten Sie auch einen Shader verwenden, um künstlerorientierte Texturen auf Ihrem Gitter zu projizieren, anstatt die Gittertopologie und -normalität direkt zu visualisieren.
  • Für Klammern von Hologrammen hinter realen Oberflächen
    • Räumliche Oberflächen können in einem tiefengeschützten Pass gerendert werden, was sich nur auf den Tiefenpuffer auswirkt und sich nicht auf Farbrenderingziele auswirkt.
    • Dadurch wird der Tiefenpuffer so vorbereitet, dass anschließend Hologramme hinter räumlichen Oberflächen verdeckt werden. Genaue Okklusion von Hologrammen verbessert das Gefühl, dass Hologramme wirklich innerhalb des physischen Raums des Benutzers vorhanden sind.
    • Aktualisieren Sie den Blend-Zustand so, dass das RenderTargetWriteMask für alle Farbrenderingziele auf Null festgelegt wird, um das nur tiefenrendering zu aktivieren.
  • Zum Ändern der Darstellung von Hologrammen, die von realen Oberflächen verdeckt sind
    • Normalerweise wird die gerenderte Geometrie ausgeblendet, wenn sie verdeckt ist. Dies wird erreicht, indem Sie die Tiefenfunktion in Ihrem Tiefenschablonenzustand auf "kleiner als oder gleich" festlegen, was bewirkt, dass Geometrie nur sichtbar ist, wenn sie näher an der Kamera ist als alle zuvor gerenderten Geometrien.
    • Es kann jedoch nützlich sein, bestimmte Geometrien sichtbar zu halten, auch wenn sie verdeckt sind, und ihre Darstellung zu ändern, wenn sie als Möglichkeit zum Bereitstellen von visuellem Feedback für den Benutzer verwendet wird. Dies ermöglicht der Anwendung beispielsweise, den Benutzer die Position eines Objekts anzuzeigen, während er klar macht, dass er sich hinter einer realen Oberfläche befindet.
    • Um dies zu erreichen, rendern Sie die Geometrie ein zweites Mal mit einem anderen Shader, der die gewünschte "occluded"-Darstellung erstellt. Bevor Sie die Geometrie zum zweiten Mal rendern, nehmen Sie zwei Änderungen am Tiefenschablonenzustand vor. Legen Sie zunächst die Tiefenfunktion auf "größer als oder gleich" fest, sodass die Geometrie nur angezeigt wird, wo es sich weiter von der Kamera befindet als alle zuvor gerenderten Geometrien. Legen Sie zweitens die DepthWriteMask auf Null fest, sodass der Tiefenpuffer nicht geändert wird (der Tiefenpuffer sollte weiterhin die Tiefe der Geometrie darstellen, die der Kamera am nächsten ist).

Die Leistung ist ein wichtiges Anliegen beim Rendern räumlicher Zuordnungsgitter. Nachfolgend finden Sie einige Renderingleistungstechniken, die für das Rendern räumlicher Zuordnungsgitter spezifisch sind:

  • Dreiecksdichte anpassen
    • Wenn Sie räumliche Oberflächengitter von Ihrem Oberflächenbeobachter anfordern, fordern Sie die niedrigste Dichte von Dreiecksgittern an, die für Ihre Anforderungen ausreichen.
    • Es kann sinnvoll sein, die Dreiecksdichte auf einer Oberfläche nach Oberflächenbasis zu variieren, je nach Entfernung der Oberfläche vom Benutzer und deren Relevanz für die Benutzererfahrung.
    • Die Reduzierung der Dreiecksanzahl verringert die Speicherauslastung und vertexverarbeitungskosten für die GPU, wirkt sich jedoch nicht auf die Kosten der Pixelverarbeitung aus.
  • Frustum-Kulling verwenden
    • Frustum-Kulling überspringt Zeichnungsobjekte, die nicht sichtbar werden können, weil sie außerhalb des aktuellen Anzeige frustums liegen. Dadurch werden cpu- und GPU-Verarbeitungskosten reduziert.
    • Da die Kulling auf einer Gitterbasis durchgeführt wird und räumliche Oberflächen groß sein können, kann das Brechen jedes räumlichen Oberflächengitters in kleinere Blöcke zu einer effizienteren Kulling führen (in denen weniger Offscreen-Dreiecke gerendert werden). Es gibt jedoch einen Handel; je mehr Gitter Sie haben, desto mehr Draw-Aufrufe müssen Sie vornehmen, was die CPU-Kosten erhöhen kann. In einem extremen Fall könnten die Frustum-Kulling-Berechnungen selbst sogar eine messbare CPU-Kosten haben.
  • Renderreihenfolge anpassen
    • Räumliche Oberflächen neigen dazu, groß zu sein, da sie die gesamte Umgebung des Benutzers darstellen, die sie umgeben. Die Pixelverarbeitungskosten für die GPU können hoch sein, insbesondere in Fällen, in denen mehr als eine Ebene sichtbarer Geometrie vorhanden ist (einschließlich räumlicher Oberflächen und anderer Hologramme). In diesem Fall wird die dem Benutzer nächstgelegene Ebene alle Ebenen weiter entfernt, sodass alle GPU-Zeitaufwand, die das Rendern dieser entfernteren Ebenen verbracht haben, verschwendet wird.
    • Um diese redundante Arbeit auf der GPU zu reduzieren, hilft es, undurchsichtige Oberflächen in front-to-Back-Reihenfolge zu rendern (näher zuerst, weiter entfernte). Durch "undurchsichtig" bedeuten wir Oberflächen, für die die DepthWriteMask in Ihrem Tiefenschablonenzustand auf eine festgelegt ist. Wenn die nächsten Oberflächen gerendert werden, werden sie den Tiefenpuffer primieren, sodass entfernte Oberflächen effizient vom Pixelprozessor auf der GPU übersprungen werden.

Mesh Verarbeitung

Eine Anwendung kann verschiedene Vorgänge auf räumlichen Oberflächengittern durchführen, um ihren Anforderungen gerecht zu werden. Die in jedem räumlichen Oberflächengitter bereitgestellten Index- und Vertexdaten verwenden das gleiche vertraute Layout wie die Vertex- und Indexpuffer , die zum Rendern von Dreiecksgittern in allen modernen Rendering-APIs verwendet werden. Eine wichtige Tatsache ist jedoch, dass räumliche Zuordnungsdreiecks eine frontzeigere Wicklungsreihenfolge aufweisen. Jedes Dreieck wird durch drei Vertexindizes im Indexpuffer des Gitters dargestellt, und diese Indizes identifizieren die Scheitelpunkte des Dreiecks in einer Uhrzeigerrichtung , wenn das Dreieck von der Vorderseite aus angezeigt wird. Die Vorderseite (oder außen) von räumlichen Oberflächengittern entspricht wie erwartet die Vorderseite (sichtbar) der realen Oberflächen.

Anwendungen sollten nur die Vereinfachung der Gitter tun, wenn die grobste Dreiecksdichte, die vom Oberflächenbeobachter bereitgestellt wird, noch unzureichend ist - diese Arbeit ist rechenintensiv und wird bereits von der Laufzeit durchgeführt, um die verschiedenen bereitgestellten Detailebenen zu generieren.

Da jeder Oberflächenbeobachter mehrere nicht verbundene räumliche Oberflächen bereitstellen kann, möchten einige Anwendungen diese räumlichen Oberflächengitter gegeneinander abschneiden, und sie dann mit dem Reißverschließen zusammen. Im Allgemeinen ist der Clippingschritt erforderlich, da sich die nahe gelegenen räumlichen Oberflächengitter oft leicht überlappen.

Raycasting und Kollision

Damit eine Physik-API (z. B. Havok) eine Anwendung mit Raycasting- und Kollisionsfunktionen für räumliche Oberflächen bereitstellt, muss die Anwendung räumliche Oberflächengitter für die Physik-API bereitstellen. Gitter, die für physik verwendet werden, weisen häufig die folgenden Eigenschaften auf:

  • Sie enthalten nur kleine Zahlen von Dreiecken. Physikalische Vorgänge sind rechenintensiver als Renderingvorgänge.
  • Sie sind "wasserdicht". Oberflächen, die fest sein sollen, sollten keine kleinen Löcher enthalten; auch Löcher, die zu klein zu sehen sind, können Probleme verursachen.
  • Sie werden in konvexe Hüllen umgewandelt. Konvex-Hüllen verfügen über wenige Polygone und sind frei von Löchern, und sie sind wesentlich effizienter, um sie zu verarbeiten als rohe Dreiecksgitter.

Beachten Sie beim Ausführen von Raycasts gegen räumliche Oberflächen, dass diese Oberflächen oft komplex sind, unaufgeräumte Formen voller unordentlich kleiner Details - genau wie Ihr Schreibtisch! Dies bedeutet, dass ein einzelner Raycast häufig nicht ausreichend ist, um Ihnen genügend Informationen über die Form der Oberfläche und die Form des leeren Raums in der Nähe zu geben. Es ist in der Regel ratsam, viele Raycasts innerhalb eines kleinen Bereichs zu erledigen und die aggregierten Ergebnisse zu verwenden, um ein zuverlässigeres Verständnis der Oberfläche zu abgeleitet. Wenn Sie beispielsweise den Mittelwert von 10 Raycasts verwenden, um die Platzierung von Hologrammen auf einer Oberfläche zu leiten, wird ein viel glatteres und weniger "jittery" Ergebnis, das nur einen einzigen Raycast verwendet.

Beachten Sie jedoch, dass jeder Raycast über eine hohe Berechnungskosten verfügen kann. Abhängig von Ihrem Nutzungsszenario sollten Sie die Berechnungskosten zusätzlicher Raycasts (alle Frame erledigt) gegen die Berechnungskosten der Gitterverarbeitung abstellen, um Löcher in räumlichen Oberflächen zu glätten und zu entfernen (wenn räumliche Gitter aktualisiert werden).

Die Umgebungsüberprüfung

Jede Anwendung, die räumliche Zuordnung verwendet, sollte eine "Scanerfahrung" bereitstellen; der Prozess, durch den die Anwendung den Benutzer zum Scannen von Oberflächen führt, die für die ordnungsgemäße Funktion der Anwendung erforderlich sind.

Example of scanning
Beispiel für das Scannen

Die Art dieser Scanerfahrung kann je nach den Anforderungen jeder Anwendung stark variieren, aber zwei Hauptprinzipien sollten ihr Design leiten.

Erstens ist die klare Kommunikation mit dem Benutzer das wichtigste Anliegen. Der Benutzer sollte immer wissen, ob die Anforderungen der Anwendung erfüllt werden. Wenn sie nicht erfüllt werden, sollte es dem Benutzer sofort klar sein, warum dies der Fall ist, und sie sollten schnell dazu geführt werden, die entsprechenden Maßnahmen zu ergreifen.

Zweitens sollten Anwendungen versuchen, eine Balance zwischen Effizienz und Zuverlässigkeit zu erzielen. Wenn dies zuverlässig möglich ist, sollten Anwendungen räumliche Zuordnungsdaten automatisch analysieren, um die Benutzerzeit zu sparen. Wenn es nicht möglich ist, dies zuverlässig zu tun, sollten Anwendungen stattdessen dem Benutzer ermöglichen, die Anwendung schnell mit den benötigten zusätzlichen Informationen bereitzustellen.

Um die richtige Scanerfahrung zu entwerfen, sollten Sie berücksichtigen, welche der folgenden Möglichkeiten für Ihre Anwendung gelten:

  • Keine Scanerfahrung

    • Eine Anwendung kann perfekt ohne geführte Scanerfahrung funktionieren; es wird über Oberflächen erfahren, die im Laufe der natürlichen Benutzerbewegung beobachtet werden.
    • Beispielsweise erfordert eine Anwendung, mit der der Benutzer auf Oberflächen mit holografischer Sprayfarbe zeichnen kann, nur die für den Benutzer sichtbaren Oberflächen wissen.
    • Die Umgebung kann bereits gescannt werden, wenn es sich um eine Umgebung handelt, in der der Benutzer bereits viele Zeit mit der HoloLens verbracht hat.
    • Beachten Sie jedoch, dass die kamera, die durch räumliche Zuordnung verwendet wird, nur 3,1 m vor dem Benutzer sehen kann, sodass die räumliche Zuordnung nicht mehr über entfernte Oberflächen weiß, es sei denn, der Benutzer hat sie aus einer näheren Entfernung in der Vergangenheit beobachtet.
    • Daher versteht der Benutzer, welche Oberflächen gescannt wurden, sollte die Anwendung diesem Effekt visuelles Feedback geben, z. B. das Umwandeln virtueller Schatten auf gescannte Oberflächen kann dem Benutzer helfen, Hologramme auf diesen Oberflächen zu platzieren.
    • Für diesen Fall sollte die umgebenden Volumen des räumlichen Oberflächenbeobachter jedes Frame auf ein body-gesperrtes räumliches Koordinatensystem aktualisiert werden, sodass sie dem Benutzer folgen.
  • Suchen eines geeigneten Standorts

    • Eine Anwendung kann für die Verwendung an einem Ort mit bestimmten Anforderungen entwickelt werden.
    • Die Anwendung kann beispielsweise einen leeren Bereich um den Benutzer erfordern, damit sie holografische kung-Fu sicher üben können.
    • Anwendungen sollten vor dem Benutzer bestimmte Anforderungen kommunizieren und sie mit klarem visuellem Feedback verstärken.
    • In diesem Beispiel sollte die Anwendung den Umfang des erforderlichen leeren Bereichs visualisieren und das Vorhandensein von unerwünschten Objekten in dieser Zone visuell hervorheben.
    • Für diesen Fall sollte die Begrenzungsvolumen des räumlichen Oberflächenbeobachter ein weltsperrendes räumliches Koordinatensystem an der ausgewählten Stelle verwenden.
  • Suchen einer geeigneten Konfiguration von Oberflächen

    • Eine Anwendung kann eine bestimmte Konfiguration von Oberflächen erfordern, z. B. zwei große, flache, entgegengesetzte Wände, um eine holografische Halle von Spiegeln zu erstellen.
    • In solchen Fällen muss die Anwendung die Oberflächen analysieren, die durch räumliche Zuordnung bereitgestellt werden, um geeignete Oberflächen zu erkennen und den Benutzer darauf zu lenken.
    • Der Benutzer sollte über eine Fallbackoption verfügen, wenn die Oberflächenanalyse der Anwendung nicht zuverlässig ist. Wenn die Anwendung beispielsweise eine Tür als flache Wand falsch identifiziert, benötigt der Benutzer eine einfache Möglichkeit, diesen Fehler zu beheben.
  • Teil der Umgebung scannen

    • Eine Anwendung möchte möglicherweise nur einen Teil der Umgebung erfassen, wie vom Benutzer geleitet.
    • Beispielsweise überprüft die Anwendung Einen Teil eines Raums, damit der Benutzer eine holografische Einstufungsanzeige für Möbel posten kann, die sie verkaufen möchten.
    • In diesem Fall sollte die Anwendung räumliche Zuordnungsdaten in den Regionen erfassen, die vom Benutzer während des Scans beobachtet werden.
  • Scannen des gesamten Raums

    • Eine Anwendung erfordert möglicherweise eine Überprüfung aller Oberflächen im aktuellen Raum, einschließlich derjenigen hinter dem Benutzer.
    • Beispielsweise kann ein Spiel den Benutzer in die Rolle von Gulliver setzen, unter der Belagerung von Hunderten von winzigen Lilliputern, die von allen Richtungen angehen.
    • In solchen Fällen muss die Anwendung bestimmen, wie viele der Oberflächen im aktuellen Raum bereits gescannt wurden, und den Blick des Benutzers auf erhebliche Lücken zu lenken.
    • Der Schlüssel zu diesem Prozess stellt visuelles Feedback bereit, das dem Benutzer klar macht, welche Oberflächen noch nicht gescannt wurden. Die Anwendung könnte beispielsweise abstandsbasierten Nebel verwenden, um Bereiche zu hervorheben, die nicht von räumlichen Zuordnungsflächen abgedeckt sind.
  • Erstellen einer anfänglichen Momentaufnahme der Umgebung

    • Eine Anwendung kann alle Änderungen in der Umgebung ignorieren, nachdem Sie eine anfängliche Momentaufnahme erstellt haben.
    • Dies kann geeignet sein, um Unterbrechungen von vom Benutzer erstellten Daten zu vermeiden, die eng mit dem anfänglichen Zustand der Umgebung gekoppelt sind.
    • In diesem Fall sollte die Anwendung eine Kopie der räumlichen Zuordnungsdaten in seinem anfänglichen Zustand vornehmen, sobald der Scan abgeschlossen ist.
    • Anwendungen sollten weiterhin Updates für räumliche Zuordnungsdaten erhalten, wenn Hologramme weiterhin ordnungsgemäß von der Umgebung verdeckt werden.
    • Weitere Aktualisierungen von räumlichen Zuordnungsdaten ermöglichen auch die Visualisierung aller Änderungen, die aufgetreten sind, um den Benutzer die Unterschiede zwischen früheren und aktuellen Zustanden der Umgebung zu klären.
  • Erstellen von vom Benutzer initiierten Momentaufnahmen der Umgebung

    • Eine Anwendung kann nur auf Umweltänderungen reagieren, wenn der Benutzer angewiesen wird.
    • Beispielsweise könnte der Benutzer mehrere 3D-"Statuen" eines Freundes erstellen, indem er ihre Posen in verschiedenen Momenten erfasst.
  • Zulassen, dass der Benutzer die Umgebung ändern kann

    • Eine Anwendung kann in Echtzeit auf änderungen in der Umgebung des Benutzers reagieren.
    • Beispielsweise könnte der Benutzer, der einen Vorhang zeichnet, eine "Szenenänderung" für ein holografisches Spiel auslösen, das auf der anderen Seite stattfindet.
  • Leiten Sie den Benutzer, um Fehler in den räumlichen Zuordnungsdaten zu vermeiden.

    • Eine Anwendung möchte dem Benutzer möglicherweise Anleitungen bereitstellen, während er seine Umgebung überprüft.
    • Dies kann dem Benutzer helfen, bestimmte Arten von Fehlern in den räumlichen Zuordnungsdaten zu vermeiden, z. B. indem man sich von sonnenhellen Fenstern oder Spiegeln entfernt bleibt.

Ein zusätzliches Detail, das sich bewusst sein soll, ist, dass der Bereich der räumlichen Zuordnungsdaten nicht unbegrenzt ist. Während die räumliche Zuordnung eine permanente Datenbank mit großen Räumen erstellt, macht sie diese Daten nur für Anwendungen in einer "Blasen" von begrenzter Größe um den Benutzer verfügbar. Wenn Sie am Anfang eines langen Korridors beginnen und weit genug weg vom Anfang gehen, werden schließlich die räumlichen Oberflächen am Anfang verschwinden. Sie können dies verringern, indem Sie diese Oberflächen in Ihrer Anwendung zwischenspeichern, nachdem sie aus den verfügbaren räumlichen Zuordnungsdaten verschwunden sind.

Mesh Verarbeitung

Es kann helfen, allgemeine Arten von Fehlern in Oberflächen zu erkennen und die räumlichen Zuordnungsdaten entsprechend zu filtern, zu entfernen oder zu ändern.

Denken Sie daran, dass räumliche Zuordnungsdaten so treu wie möglich an reale Oberflächen sein sollen, sodass alle Verarbeitungen Risiken anwenden, die Ihre Oberflächen weiter von der "Wahrheit" verschieben.

Nachfolgend finden Sie einige Beispiele für verschiedene Arten von Gitterverarbeitungen, die Sie möglicherweise nützlich finden:

  • Lochfüllung

    • Wenn ein kleines Objekt aus einem dunklen Material nicht gescannt wird, wird es ein Loch in der umgebenden Oberfläche verlassen.
    • Löcher wirken sich auf die Okklusion aus: Hologramme können durch ein Loch in einer angeblich undurchsichtigen realen Oberfläche gesehen werden.
    • Löcher wirken sich auf Raycasts aus: Wenn Sie Raycasts verwenden, um Benutzern dabei zu helfen, mit Oberflächen zu interagieren, kann es unerwünschter sein, dass diese Strahlen durch Löcher übergeben werden. Eine Entschärfung besteht darin, ein Bündel mehrerer Raycasts zu verwenden, die einen geeigneten Bereich abdecken. Dadurch können Sie "Ausreißer"-Ergebnisse filtern, sodass auch wenn ein Raycast über ein kleines Loch geht, das Aggregatergebnis weiterhin gültig ist. Dieser Ansatz kommt jedoch zu einer Berechnungskosten.
    • Löcher wirken sich auf Physikalische Kollisionen aus: Ein objekt, das von der Physiksimulation gesteuert wird, kann durch ein Loch im Boden fallen und verloren gehen.
    • Es ist möglich, solche Löcher im Oberflächengitter algorithmusisch zu füllen. Sie müssen jedoch Ihren Algorithmus optimieren, damit "echte Löcher" wie Fenster und Türwege nicht ausgefüllt werden. Es kann schwierig sein, "echte Löcher" von "imaginären Löchern" zu unterscheiden, sodass Sie mit unterschiedlichen Heuristiken wie "Größe" und "Begrenzungsform" experimentieren müssen.
  • Hallucinationsabnahme

    • Spiegelungen, helle Lichter und bewegte Objekte können kleine "Hallucinationen" in mittlerer Luft schweben lassen.
    • Hallucinationen wirken sich auf die Okklusion aus: Hallucinationen können sichtbar werden, als dunkle Formen vor und okcludieren anderer Hologramme.
    • Hallucinationen wirken sich auf Raycasts aus: Wenn Sie Raycasts verwenden, um Benutzern bei der Interaktion mit Oberflächen zu helfen, könnten diese Strahlen anstelle der Oberfläche dahinter eine Hallucination treffen. Wie bei Löchern besteht eine Abschärfung darin, viele Raycasts anstelle eines einzelnen Raycasts zu verwenden, aber dies wird erneut zu einer Berechnungskosten kommen.
    • Hallucinationen wirken sich auf Physikkollisionen aus: Ein objekt, das von der Physik-Simulation gesteuert wird, kann gegen eine Hallucination hängen bleiben und kann nicht durch einen scheinbar klaren Bereich des Raums verschoben werden.
    • Es ist möglich, solche Hallucinationen aus dem Oberflächengitter zu filtern. Wie bei Löchern müssen Sie Ihren Algorithmus jedoch optimieren, damit echte kleine Objekte wie Lampenstand und Türpunkte nicht entfernt werden.
  • Glättung

    • Die räumliche Zuordnung kann Oberflächen zurückgeben, die im Vergleich zu ihren realen Gegenstücken grob oder "laut" erscheinen.
    • Die Glattheit wirkt sich auf Physikalische Kollisionen aus: Wenn der Boden grob ist, kann ein physischer simulierter Golfball nicht reibungslos in einer geraden Linie rollen.
    • Die Glattheit wirkt sich auf das Rendern aus: Wenn eine Oberfläche direkt dargestellt wird, können grobe Oberflächen normal sein Aussehen beeinflussen und ein "sauberes" Aussehen stören. Es ist möglich, dies zu verringern, indem sie geeignete Beleuchtung und Texturen im Shader verwenden, die zum Rendern der Oberfläche verwendet werden.
    • Es ist möglich, Die Rauheit in einem Oberflächengitter zu glätten. Dies kann jedoch die Oberfläche weiter weg von der entsprechenden realen Oberfläche verschieben. Die Erhaltung einer engen Übereinstimmung ist wichtig, um genaue Hologramm-Okklusion zu erzeugen und Benutzern die Möglichkeit zu ermöglichen, präzise und vorhersehbare Interaktionen mit holografischen Oberflächen zu erzielen.
    • Wenn nur eine kosmetische Änderung erforderlich ist, kann es ausreichend sein, um Vertex normal zu vertex normal, ohne Vertexpositionen zu ändern.
  • Flugzeugsuche

    • Es gibt viele Formen der Analyse, die eine Anwendung möglicherweise auf den Oberflächen durchführen möchte, die von der räumlichen Zuordnung bereitgestellt werden.
    • Ein einfaches Beispiel ist "Flugzeugsuche"; Identifizieren gebundener, meist planarer Bereiche von Oberflächen.
    • Planarbereiche können als holografische Arbeitsoberflächen verwendet werden, Regionen, in denen holografische Inhalte automatisch von der Anwendung platziert werden können.
    • Planarbereiche können die Benutzeroberfläche einschränken, um Benutzer zu leiten, mit den Oberflächen zu interagieren, die ihren Anforderungen am besten entsprechen.
    • Planarregionen können wie in der realen Welt verwendet werden, um holografische Gegenstücke zu funktionalen Objekten wie LCD-Bildschirmen, Tabellen oder Whiteboards zu verwenden.
    • Planar-Regionen können Spielbereiche definieren, die die Basis von Videospielebenen bilden.
    • Planar-Regionen können virtuelle Agenten unterstützen, um in der realen Welt zu navigieren, indem sie die Bereiche des Bodens identifizieren, auf denen reale Menschen wahrscheinlich unterwegs sind.

Prototyping und Debuggen

Nützliche Tools

  • Der HoloLens-Emulator kann verwendet werden, um Anwendungen mit räumlicher Zuordnung ohne Zugriff auf eine physische HoloLens zu entwickeln. Es ermöglicht Ihnen, eine Livesitzung in einer HoloLens in einer realistischen Umgebung zu simulieren, wobei alle Daten, die Ihre Anwendung normalerweise verwendet würde, einschließlich HoloLens Bewegung, räumlichen Koordinatensystemen und räumlichen Zuordnungsgittern. Dies kann verwendet werden, um zuverlässige, wiederholte Eingaben bereitzustellen, die für das Debuggen von Problemen und die Auswertung von Änderungen an Ihrem Code nützlich sein können.
  • Um ein Szenario zu reproduzieren, erfassen Sie räumliche Zuordnungsdaten über das Netzwerk aus einem Live-HoloLens, und speichern Sie sie dann auf dem Datenträger und verwenden Sie sie in späteren Debugsitzungen.
  • Die Windows Geräteportal-3D-Ansicht bietet eine Möglichkeit, alle derzeit verfügbaren räumlichen Oberflächen über das räumliche Zuordnungssystem anzuzeigen. Dies stellt eine Grundlage für den Vergleich der räumlichen Oberflächen in Ihrer Anwendung dar; Sie können z. B. einfach feststellen, ob keine räumlichen Oberflächen fehlen oder an der falschen Stelle angezeigt werden.

Allgemeine Prototyping-Anleitungen

  • Da Fehler in den räumlichen Zuordnungsdaten sich stark auf die Benutzeroberfläche Ihres Benutzers auswirken können, empfehlen wir, Ihre Anwendung in einer Vielzahl von Umgebungen zu testen.
  • Lassen Sie sich nicht an derselben Stelle testen, z. B. am Schreibtisch. Stellen Sie sicher, dass Sie auf verschiedenen Oberflächen verschiedener Positionen, Formen, Größen und Materialien testen.
  • Auch wenn synthetische oder aufgezeichnete Daten für das Debuggen nützlich sein können, sind sie nicht zu abhängig von den gleichen wenigen Testfällen. Dies kann die Suche nach wichtigen Problemen verzögern, die mehr verschiedene Tests früher erfasst hätten.
  • Es empfiehlt sich, Tests mit echten (und idealerweise nicht gecoachten) Benutzern durchzuführen, da sie möglicherweise nicht die HoloLens oder Ihre Anwendung genau so verwenden, wie Sie tun. Tatsächlich kann es überrascht sein, wie unterschiedliches Verhalten, Wissen und Annahmen menschenverschieden sein können!

Problembehandlung

  • Damit die Oberflächengitter ordnungsgemäß ausgerichtet werden können, muss jedes GameObject aktiv sein, bevor er an surfaceObserver gesendet wird, um sein Gitter zu erstellen. Andernfalls werden die Gitter in Ihrem Raum angezeigt, aber an seltsamen Winkeln gedreht.
  • Das GameObject, das das Skript ausführt, das mit dem SurfaceObserver kommuniziert, muss auf den Ursprung festgelegt werden. Andernfalls haben alle GameObjects, die Sie erstellen und an den SurfaceObserver senden, um ihre Gitter zu erstellen, einen Offset gleich dem Offset des übergeordneten Spielobjekts. Dies kann dazu führen, dass Ihre Gitter mehrere Meter entfernt werden, wodurch es schwierig ist, das zu debuggen, was passiert.

Weitere Informationen