Räumliche Abbildung

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 nutzt die tiefen Hinweise aus der realen Welt. Wenn Sie Ihre Hologramme auf der Grundlage anderer Hologramme und realer Objekte einblenden, kann der Benutzer davon überzeugen, dass sich diese Hologramme tatsächlich in ihrem Raum befinden. Hologramme im Raum gleitend oder sich mit dem Benutzer bewegen, werden sich nicht als real anfühlen. Platzieren Sie nach Möglichkeit Elemente für den Komfort.

Visualisieren von Oberflächen beim Platzieren oder Verschieben von Hologrammen (verwenden Sie ein projiziertes Raster). Dies hilft Benutzern zu erkennen, wo sie ihre Hologramme am besten platzieren können, und zeigt an, ob die Stelle, an der sie versuchen, das Hologramm zu platzieren, nicht zugeordnet ist. Sie können dem Benutzer "Elemente" anzeigen, wenn diese am Ende zu weit von einem Winkel sind.

Konzeptionelle Übersicht

Gitternetzoberflächen, die einen Raum abdecken
Ein Beispiel für ein Gitternetz für die räumliche Abbildung, das einen Raum umfasst

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

Die Anwendung stellt dem Raumoberflächenbeobachter ein oder mehrere Begrenzungsvolumes zur Verfügung, um die Bereiche des Raumes zu definieren, in denen die Anwendung räumliche Zuordnungsdaten empfangen möchte. Für jedes dieser Volumes stellt die räumliche Zuordnung der Anwendung einen Satz räumlicher Oberflächen zur Verfügung.

Diese Volumes können stationär sein (an einem festen Ort, der auf der realen Welt basiert) oder an den HoloLens angefügt sein (sie bewegen sich mit der HoloLens, während sie sich durch die Umgebung bewegen, aber nicht rotieren). Jede räumliche Oberfläche beschreibt reale Oberflächen in einem kleinen Raumvolumen, dargestellt als Dreiecksgitternetz, das an ein weltgesperrte räumliches Koordinatensystem angefügt ist.

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

Demo zu Entwurfskonzepten für räumliche Wahrnehmung

Wenn Sie räumliche Wahrnehmungsentwurfskonzepte in Aktion sehen möchten, sehen Sie sich unsere Videodemo Designing Hologramme – Spatial Awareness weiter unten an. Wenn Sie fertig sind, fahren Sie mit einem ausführlicheren Einblick in bestimmte Themen fort.

Dieses Video wurde aus der App "Entwerfen Hologramme" HoloLens 2 aufgenommen. Laden Sie hier herunter, und profitieren Sie von der vollständigen Erfahrung.

Räumliche Zuordnung im Vergleich zu Scene Understanding WorldMesh

Für HoloLens 2 ist es möglich, eine statische Version der räumlichen Zuordnungsdaten mithilfe des Scene Understanding SDK (EnableWorldMesh-Einstellung) abfragt. Dies sind die Unterschiede zwischen zwei Möglichkeiten für den Zugriff auf die räumlichen Zuordnungsdaten:

  • SPATIAL MAPPING-API:
    • Begrenzter Bereich: Die räumlichen Zuordnungsdaten, die Anwendungen in einer zwischengespeicherten Blase mit begrenzter Größe um den Benutzer zur Verfügung stehen.
    • Bietet Updates für geänderte Gitternetzregionen mit geringer Latenz über SurfacesChanged-Ereignisse.
    • Variable Detailebene, die durch den Parameter Dreiecke pro kubischer Verbrauchsmessung gesteuert wird.
  • Scene understanding SDK:
    • Unbegrenzter Bereich: Stellt alle gescannten räumlichen Zuordnungsdaten innerhalb des Abfrageradius zur Verfügung.
    • Stellt eine statische Momentaufnahme der räumlichen Zuordnungsdaten zur Zum Abrufen der aktualisierten räumlichen Zuordnungsdaten muss eine neue Abfrage für das gesamte Gitternetz ausgeführt werden.
    • Konsistente Detailebene, die von der RequestedMeshLevelOfDetail-Einstellung gesteuert wird.

Was wirkt sich auf die Qualität der räumlichen Zuordnung aus?

Mehrere Faktoren, die hier ausführlich sind,können sich auf die Häufigkeit und den Schweregrad dieser Fehler auswirken. Sie sollten Ihre Anwendung jedoch so entwerfen, dass der Benutzer seine Ziele auch bei Fehlern in den räumlichen Zuordnungsdaten erreichen kann.

Allgemeine Verwendungsszenarios

Abbildungen gängiger Verwendungsszenarien für die räumliche Zuordnung: Platzierung, Okklusion, Physik und Navigation

Platzierung

Die räumliche Zuordnung bietet Anwendungen die Möglichkeit, dem Benutzer natürliche und vertraute Interaktionsformen zu präsentieren. Was könnte natürlicher sein, als das Telefon auf dem Arbeitsplatz zu platzieren?

Das Einschränken der Platzierung von Hologrammen (oder im Allgemeinen eine auswahl an räumlichen Positionen) auf Oberflächen bietet eine natürliche Zuordnung von 3D (Punkt im Raum) zu 2D (Punkt auf der Oberfläche). Dadurch wird die Menge an Informationen reduziert, die der Benutzer für die Anwendung bereitstellen muss, und die Interaktionen des Benutzers werden schneller, einfacher und präziser. Dies ist der Fall, da es sich bei "entfernungsentfernung" nicht um etwas handelt, das wir gewohnt sind, mit anderen Personen oder Computern physisch zu kommunizieren. Wenn wir mit dem Finger zeigen, geben wir eine Richtung an, aber keinen Abstand.

Ein wichtiger Nachteil hierbei ist, dass, wenn eine Anwendung die Entfernung von der Richtung herleitung (z. B. durch Einen Raycast entlang der Blickrichtung des Benutzers, um die nächstgelegene räumliche Oberfläche zu finden), dies Ergebnisse liefern muss, die der Benutzer zuverlässig vorhersagen kann. Andernfalls verliert der Benutzer seine Kontrolle, was schnell frustrierend werden kann. Eine Methode, die dabei hilft, ist das Verwenden mehrerer Raycasts anstelle von nur einem. Die Aggregatergebnisse sollten reibungsloser und besser vorhersagbar sein und weniger anfällig für den Einfluss von vorübergehenden Ausreißerergebnissen sein (wie dies durch Lichtstrahl verursacht werden kann, der durch kleine Lücken oder kleine Teile der Geometrie geht, die dem Benutzer nicht bekannt sind). Die Aggregation oder Glättung kann auch im Laufe der Zeit durchgeführt werden. Beispielsweise können Sie die maximale Geschwindigkeit begrenzen, mit der ein Hologramm in der Entfernung zum Benutzer variieren kann. Es kann auch helfen, einfach den minimalen und maximalen Abstandswert zu beschränken, damit das hologramm, das bewegt wird, nicht plötzlich in die Entfernung stürzt oder wieder in das Gesicht des Benutzers stürzt.

Anwendungen können auch die Form und Richtung von Oberflächen verwenden, um die Hologrammplatzierung zu leiten. Ein holografischer Sessel sollte nicht durch Dieben schweben und mit dem Boden leeren, auch wenn er etwas ungleichmäßig ist. Diese Art von Funktionalität würde wahrscheinlich von der Verwendung von physikalischen Kollisionen anstelle von Raycasts abhängig sein, es gelten jedoch ähnliche Bedenken. Wenn das platzierte Hologramm über viele kleine Polygone verfügt, die sich wie die Brille auf einem Sessel herausdrücken, kann es sinnvoll sein, die physikalische Darstellung dieser Polygone auf einen breiteren und reibungsloseren Bereich zu erweitern, damit sie besser über räumliche Oberflächen gleiten können, ohne zu versnieren.

Im Extremfall können Benutzereingaben vollständig vereinfacht werden, und räumliche Oberflächen können für eine vollständig automatische Hologrammplatzierung verwendet werden. Beispielsweise könnte die Anwendung einen holografischen Lichtschalter an einer anderen Stelle an der Wand platzieren, damit der Benutzer drücken kann. Der gleiche Nachteil bei der Vorhersagbarkeit gilt hier doppelt. Wenn der Benutzer die Kontrolle über die Hologrammplatzierung erwartet, die Anwendung hologramme jedoch nicht immer dort platzieren kann, wo sie es erwarten (wenn der Lichtschalter an einer Stelle angezeigt wird, die der Benutzer nicht erreichen kann), ist dies eine frustrierende Erfahrung. Es kann eigentlich schlechter sein, eine automatische Platzierung vorzunehmen, die die Benutzerkorrektur einen Teil der Zeit erfordert, als nur zu erfordern, dass der Benutzer die Platzierung immer selbst vornehmen muss. da eine erfolgreiche automatische Platzierung erwartet wird,wirkt die manuelle Korrektur wie eine Belastung!

Beachten Sie auch, dass die Fähigkeit einer Anwendung, räumliche Oberflächen für die Platzierung zu verwenden, stark von der Scanoberfläche der Anwendung abhängt. Wenn eine Oberfläche nicht gescannt wurde, kann sie nicht für die Platzierung verwendet werden. Die Anwendung muss dies dem Benutzer klar machen, damit er entweder neue Oberflächen scannen oder einen neuen Speicherort auswählen kann.

Visuelles Feedback an den Benutzer ist während der Platzierung von entscheidender Bedeutung. Der Benutzer muss wissen, wo das Hologramm auf der nächstgelegenen Oberfläche mit Erdungseffekten 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 ein Hologramm nicht an der aktuellen Position platzieren können, sollte visuelles Feedback deutlich machen, warum nicht. Wenn der Benutzer z. B. versucht, eine holografische Couch, die halbwegs in der Wand hängen bleibt, zu platzieren, sollten die Teile der Couch, die sich hinter der Wand befinden, in einer Färbungsfarbe pulsieren. Wenn die Anwendung hingegen keine räumliche Oberfläche an einem Ort findet, an dem der Benutzer eine reale Oberfläche sehen kann, sollte die Anwendung dies deutlich machen. Das offensichtliche Fehlen eines Erdungseffekts in diesem Bereich kann diesen Zweck erreichen.

Okklusion

Einer der hauptverschlüsselten Verwendungsmöglichkeiten von Oberflächen für die räumliche Zuordnung besteht einfach in der Verdecken von Hologrammen. Dieses einfache Verhalten hat einen großen Einfluss auf die wahrgenommene Realität von Hologrammen und hilft dabei, ein viscerales Gefühl zu schaffen, das tatsächlich den gleichen physischen Raum wie der Benutzer versiert.

Occlusion stellt dem Benutzer auch Informationen zur Verfügung. Wenn ein Hologramm von einer realen Oberfläche umschließend zu sein scheint, bietet dies zusätzliches visuelles Feedback zur räumlichen Position dieses Hologramms in der Welt. Im Gegensatz dazu kann okclusion informationen auch nützlich vor dem Benutzer verbergen. Das Einblenden von Hologrammen hinter Wänden kann die visuelle Übersichtlichkeit auf intuitive Weise reduzieren. Um ein Hologramm auszublenden oder auszublenden, muss der Benutzer lediglich seinen Kopf bewegen.

Okklusion kann auch verwendet werden, um Erwartungen an eine natürliche Benutzeroberfläche basierend auf vertrauten physischen Interaktionen zu erfüllen. Wenn ein Hologramm von einer Oberfläche umschließt wird, liegt dies daran, dass diese Oberfläche fest ist. Daher sollte der Benutzer davon ausgehen, dass das Hologramm mit dieser Oberfläche kollidiert und nicht durch sie übergeben wird.

Manchmal ist die Okklusion von Hologrammen unerwünscht. Wenn ein Benutzer mit einem Hologramm interagieren muss, muss er es sehen , auch wenn es sich hinter einer realen Oberfläche befindet. In solchen Fällen ist es in der Regel sinnvoll, ein solches Hologramm anders zu rendern, wenn es verblendet ist (z. B. durch Verringern der Helligkeit). Auf diese Weise kann der Benutzer das Hologramm visuell finden, aber er weiß immer noch, dass es sich hinter etwas befindet.

Physische Effekte

Die Verwendung der physikalischen Simulation ist eine weitere Möglichkeit, mit der die räumliche Zuordnung verwendet werden kann, um das Vorhandensein von Hologrammen im physischen Raum des Benutzers zu verstärken. Wenn meine Hologrammkugel realistisch vom Tisch rollt, über den Boden springt und unter der Couch verschwindet, kann es für mich schwierig sein zu glauben, dass sie nicht dort ist.

Die Physikalische Simulation bietet einer Anwendung auch die Möglichkeit, natürliche und vertraute physikalische Interaktionen zu verwenden. Das Verschieben eines Hologramms auf dem Boden ist für den Benutzer wahrscheinlich einfacher, wenn die Trägheit und Diebe so reagieren, als würde sie mit der entsprechenden Trägheit und Spannung über den Boden gleiten.

Um realistisches physisches Verhalten zu generieren, müssen Sie wahrscheinlich einige Gitternetzverarbeitungen wie das Auffüllen von Lücken, das Entfernen von gleitenden Halluzinationen und das Glätten von rauen Oberflächen unternehmen.

Sie müssen auch berücksichtigen, wie sich die Scanerfahrung Ihrer Anwendung auf die physikalische Simulation ausdringt. Erstens: Fehlende Oberflächen können nicht mit anderen Oberflächen kollidieren. was passiert, wenn die Würfel vom Würfel und vom Ende der bekannten Welt abrollt? Zweitens müssen Sie entscheiden, ob Sie im Laufe der Zeit weiterhin auf Änderungen in der Umgebung reagieren. In einigen Fällen sollten Sie so schnell wie möglich reagieren. z. B. wenn der Benutzer Türen und Türen als verschiebbare Schieberkaden verwendet, um sich vor einer Verlockung eingehender pfeilförmiger Pfeile zu härten. In anderen Fällen sollten Sie jedoch neue Updates ignorieren. Wenn Ihr Hund sich in der Mitte der Spur befindet, kann es plötzlich nicht so viel Spaß machen, wenn Sie Ihren holografischen Sportwagen auf der Laufstrecke umfahren.

Anwendungen können räumliche Zuordnungsdaten verwenden, um holografischen Zeichen (oder Agents) die Möglichkeit zu geben, auf die gleiche Weise durch die reale Welt zu navigieren wie eine echte Person. Dies kann dazu beitragen, das Vorhandensein von holografischen Zeichen zu verstärken, indem sie auf die gleichen natürlichen, vertrauten Verhaltensweisen wie die des Benutzers und seiner Freunde beschränkt werden.

Navigationsfunktionen können auch für Benutzer nützlich sein. Sobald eine Navigationskarte in einem bestimmten Bereich erstellt wurde, kann sie freigegeben werden, um holografische Wegbeschreibungen für neue Benutzer zur Verfügung zu stellen, die mit diesem Standort nicht vertraut sind. Diese Karte könnte dazu beitragen, den reibungslosen Fluss des "Verkehrs" zu verhindern oder Umwegen an gefährlichen Orten wie Baustellen zu vermeiden.

Die wichtigsten technischen Herausforderungen bei der Implementierung von Navigationsfunktionen sind die zuverlässige Erkennung von begehbaren Oberflächen (Menschen gehen nicht auf Tabellen!) und eine ordnungsgemäß anpassung an Änderungen in der Umgebung (Menschen gehen nicht durch geschlossene Türen!). Das Gitternetz muss möglicherweise verarbeitet werden, bevor es für die Pfadplanung und Navigation durch ein virtuelles Zeichen verwendet werden kann. Das Glätten des Gitters und das Entfernen von Halluzinationen kann dazu beitragen, dass Zeichen nicht mehr hängen bleiben. Möglicherweise möchten Sie auch das Gitternetz drastisch vereinfachen, um die Pfadplanungs- und Navigationsberechnungen Ihres Zeichens zu beschleunigen. Diese Herausforderungen haben bei der Entwicklung von Videospieltechnologien große Aufmerksamkeit erhalten, und es gibt eine Vielzahl verfügbarer Forschungsdokumentationen zu diesen Themen.

Die integrierte NavMesh-Funktionalität in Unity kann nicht mit Räumliche Kartenoberflächen verwendet werden. Dies liegt daran, dass oberflächen der räumlichen Zuordnung erst bekannt sind, wenn die Anwendung gestartet wird, aber NavMesh-Datendateien müssen im Voraus aus Quellressourcen generiert werden. Beachten Sie auch, dass das Raumzuordnungssystem keine Informationen zu Oberflächen enthält, die weit von der aktuellen Position des Benutzers entfernt sind. Die Anwendung muss sich also daran erinnern, sich selbst zu zeigen, wenn sie eine Karte eines großen Bereichs erstellen soll.

Visualisierung

In den meisten Jahren ist es für räumliche Oberflächen geeignet, unsichtbar zu sein. , um die visuelle Übersichtlichkeit zu minimieren und die reale Welt für sich selbst sprechen zu lassen. Manchmal ist es jedoch hilfreich, Oberflächen der räumlichen Abbildung direkt zu visualisieren, obwohl ihre realen Entsprechungen sichtbar sind.

Wenn der Benutzer beispielsweise versucht, ein Hologramm auf einer Oberfläche zu platzieren (z. B. ein holografisches Schränk an der Wand zu platzieren), kann es hilfreich sein, das Hologramm zu "erdigen", indem er einen Schatten auf die Oberfläche wirft. Dies gibt dem Benutzer einen viel deutlicheren Sinn für die genaue physische Nähe zwischen hologramm und Oberfläche. Dies ist auch ein Beispiel für die allgemeinere Vorgehensweise, eine Änderung visuell zu "in der Vorschau anzuzeigen", bevor der Benutzer ein Commit für diese änderungsbegeht.

Durch visualisieren von Oberflächen kann die Anwendung dem Benutzer sein Verständnis der Umgebung teilen. Beispielsweise könnte ein holografisches Boardspiel die horizontalen Oberflächen visualisieren, die es als "Tabellen" identifiziert hat, damit der Benutzer weiß, wo er interagieren soll.

Das Visualisieren von Oberflächen kann eine nützliche Möglichkeit sein, um den Benutzer in der Nähe von Räumen zu zeigen, die nicht angezeigt werden. Dies könnte eine Möglichkeit bieten, dem Benutzer Zugriff auf seine Zimmer (und alle darin enthaltenen Hologramme) aus seinem Zimmer zu geben.

Die von der räumlichen Zuordnung bereitgestellten Oberflächengitternetze sind möglicherweise nicht besonders "sauber". Es ist wichtig, sie entsprechend zu visualisieren. Herkömmliche Beleuchtungsberechnungen können Fehler in oberflächennormlen Oberflächen auf visuell ablenkende Weise hervorheben, während "saubere" Texturen, die auf die Oberfläche projiziert werden, dazu beitragen können, ihr ein saubereres Aussehen zu verleihen. Es ist auch möglich, die Gitternetzverarbeitung zur Verbesserung der Gitternetzeigenschaften vor dem Rendern der Oberflächen zu verwenden.

Hinweis

HoloLens 2 implementiert eine neue Scene Understanding Runtime,die Mixed Reality-Entwicklern eine strukturierte, grundlegende Umgebungsdarstellung bietet, die die Implementierung von Platzierung, Okklusion, Physik und Navigation vereinfacht.

Verwenden des Surface Observer

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

  • Erstellen eines Oberflächenbeobachterobjekts
    • Stellen Sie ein oder mehrere räumliche Volumes zur Verfügung, um die für die Anwendung interessanten Bereiche zu definieren, in denen die Anwendung räumliche Zuordnungsdaten empfangen möchte. Ein räumliches Volume ist einfach eine Form, die einen Raumbereich definiert, z. B. eine Kugel oder ein Feld.
    • Verwenden Sie ein räumliches Volume mit einem weltweit gesperrten räumlichen Koordinatensystem, um eine feste Region der physischen Welt zu identifizieren.
    • Verwenden Sie ein räumliches Volume, das jeden Frame mit einem textgesperrten räumlichen Koordinatensystem aktualisiert, um einen Raumbereich zu identifizieren, der sich mit dem Benutzer bewegt (aber nicht dreht).
    • Diese räumlichen Volumes können später jederzeit geändert werden, wenn sich der Status der Anwendung oder des Benutzers ändert.
  • Abrufen von Informationen zu räumlichen Oberflächen mithilfe von Abruf- oder Benachrichtigungsinformationen
    • Sie können den Oberflächenbeobachter jederzeit nach dem Status der räumlichen Oberfläche fragen. Stattdessen können Sie sich für das Oberflächenänderungsereignis des Oberflächenbeobachter registrieren, das die Anwendung benachrichtigt, wenn sich räumliche Oberflächen geändert haben.
    • Für ein dynamisches räumliches Volume, z. B. das Frustum der Ansicht oder ein durch Den Körper gesperrtes Volume, müssen Anwendungen änderungen an jedem Frame abrufen, indem sie den für Sie bestimmten Bereich festlegen und dann die aktuelle Gruppe räumlicher Oberflächen abrufen.
    • Bei einem statischen Volume, z. B. einem weltweit gesperrten Würfel, der einen einzelnen Raum umfasst, können Anwendungen für das Ereignis "Oberflächenänderung" registriert werden, um benachrichtigt zu werden, wenn sich räumliche Oberflächen innerhalb dieses Volumes möglicherweise geändert haben.
  • Änderungen an Prozessoberflächen
    • Iterieren Sie den bereitgestellten Satz räumlicher Oberflächen.
    • Klassifizieren von räumlichen Oberflächen als hinzugefügt, geändert oder entfernt.
    • Übermitteln Sie für jede hinzugefügte oder geänderte räumliche Oberfläche gegebenenfalls eine asynchrone Anforderung zum Empfangen eines aktualisierten Gitters, das den aktuellen Zustand der Oberfläche auf der gewünschten Detailebene darstellt.
  • Verarbeiten Sie die asynchrone Meshanforderung (weitere Details finden Sie in den folgenden Abschnitten).

Gitternetzzwischenspeicherung

Räumliche Oberflächen werden durch dichte Dreiecksgitter dargestellt. Das Speichern, Rendern und Verarbeiten dieser Gittermodelle kann erhebliche Rechen- und Speicherressourcen verbrauchen. Daher sollte jede Anwendung ein Gitternetz-Cachingschema übernehmen, das ihren Anforderungen entspricht, um die Ressourcen zu minimieren, die für die Meshverarbeitung und -speicherung verwendet werden. Dieses Schema sollte bestimmen, welche Gitternetze behalten und welche verworfen werden sollen und wann das Gitternetz für jede räumliche Oberfläche aktualisiert werden soll.

Viele der dort erläuterten Überlegungen informieren direkt darüber, wie Ihre Anwendung sich dem Zwischenspeichern von Netzen nähern sollte. Sie sollten berücksichtigen, wie sich der Benutzer durch die Umgebung bewegt, welche Oberflächen benötigt werden, wann verschiedene Oberflächen beobachtet werden und wann Änderungen in der Umgebung erfasst werden sollen.

Beim Interpretieren des vom Oberflächenbeobachter bereitgestellten Ereignisses "Oberflächen geändert" lautet die grundlegende Logik für das Zwischenspeichern von Gittern wie folgt:

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

Jede Anwendung muss dann die folgenden Optionen treffen:

  • Sollte für neue räumliche Oberflächen ein Gitternetz angefordert werden?
    • Im Allgemeinen sollte mesh sofort für neue räumliche Oberflächen angefordert werden, die dem Benutzer nützliche neue Informationen liefern können.
    • Neue räumliche Oberflächen in der Nähe und vor dem Benutzer sollten jedoch Priorität erhalten, und ihr Gitternetz sollte zuerst angefordert werden.
    • Wenn das neue Gittermodell nicht benötigt wird, z. B. wenn die Anwendung ihr Modell der Umgebung dauerhaft oder vorübergehend "eingefroren" hat, sollte es nicht angefordert werden.
  • Sollte für aktualisierte räumliche Oberflächen ein Gitternetz angefordert werden?
    • Aktualisierte räumliche Oberflächen in der Nähe und vor dem Benutzer sollten Priorität erhalten, und ihr Gitternetz sollte zuerst angefordert werden.
    • Es kann auch sinnvoll sein, neuen Oberflächen eine höhere Priorität zu geben als aktualisierten Oberflächen, insbesondere während der Überprüfung.
    • Um die Verarbeitungskosten zu begrenzen, möchten Anwendungen möglicherweise die Rate drosseln, mit der sie Updates an räumlichen Oberflächen verarbeiten.
    • Es kann möglicherweise abgeleitet werden, 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 für die Verarbeitung.
    • Updates an räumlichen Oberflächen außerhalb des aktuellen für den Benutzer von Interesse sind, können vollständig ignoriert werden, obwohl es in diesem Fall effizienter sein kann, die vom Oberflächenbeobachter verwendeten räumlichen Begrenzungsvolumes zu ändern.
  • Sollte bei entfernten räumlichen Oberflächen das Netz verworfen werden?
    • Im Allgemeinen sollte das Gitternetz sofort für entfernte räumliche Oberflächen verworfen werden, damit die Hologrammverdecken korrekt bleiben.
    • Wenn die Anwendung jedoch Grund zu der Meinung hat, dass eine räumliche Oberfläche in Kürze wieder angezeigt wird (basierend auf dem Design der Benutzererfahrung), kann es effizienter sein, sie zu behalten, als ihr Gitternetz zu verwerfen und später erneut zu erstellen.
    • Wenn die Anwendung ein umfangreiches Modell der Umgebung des Benutzers entwickelt, möchte sie möglicherweise keine Gittermodelle verwerfen. Sie muss jedoch weiterhin die Ressourcennutzung einschränken, möglicherweise durch Spoolen von Gitternetzen auf den Datenträger, wenn räumliche Oberflächen nicht mehr vorhanden sind.
    • Einige relativ seltene Ereignisse während der Generierung der räumlichen Oberfläche können dazu führen, dass räumliche Oberflächen durch neue räumliche Oberflächen an einer ähnlichen Position, aber mit unterschiedlichen IDs ersetzt werden. Daher sollten Anwendungen, die sich dafür entscheiden, eine entfernte Oberfläche nicht zu verwerfen, darauf achten, dass am Ende nicht mehrere Gitternetze mit stark überlappenden räumlichen Oberflächen denselben Standort abdecken.
  • Sollte das Netz für andere räumliche Oberflächen verworfen werden?
    • Auch wenn eine räumliche Oberfläche vorhanden ist, sollte sie verworfen werden, wenn sie für die Benutzererfahrung nicht mehr nützlich ist. Wenn die Anwendung beispielsweise den Raum auf der anderen Seite einer Tür durch einen alternativen virtuellen Raum "ersetzt", sind die räumlichen Oberflächen in diesem Raum nicht mehr wichtig.

Im Folgenden finden Sie ein Beispiel für eine Strategie für das Zwischenspeichern von Gittern mit räumlichen und temporalen Klammern:

  • Stellen Sie sich eine Anwendung vor, die ein frustumförmiges räumliches Volumen verwenden möchte, das dem Anvitieren des Benutzers folgt, während er sich umschaut und durch die Umgebung geht.
  • Eine räumliche Oberfläche verschwindet möglicherweise vorübergehend von diesem Volume, einfach weil der Benutzer von der Oberfläche wegsieht oder weiter davon entfernt ist... nur, um einen Moment später zurück- oder näher zu kommen. In diesem Fall stellt das Verwerfen und erneute Erstellen des Gitters für diese Oberfläche viele redundante Verarbeitungen dar.
  • Um die Anzahl der verarbeiteten Änderungen zu reduzieren, verwendet die Anwendung zwei Raumoberflächenbeobachter, die in der anderen enthalten sind. Das größere Volume ist pherisch und folgt dem Benutzer "lazily". Er wird nur bei Bedarf bewegt, um sicherzustellen, dass sich sein Mittelpunkt innerhalb von 2,0 Metern vom Benutzer entfernt befindet.
  • Neue und aktualisierte Gitternetze für räumliche Oberflächen werden immer vom kleineren Inneren Oberflächenbeobachter verarbeitet, aber Gitternetze werden zwischengespeichert, bis sie aus dem größeren Äußeren Oberflächenbeobachter verschwinden. Dadurch kann die Anwendung viele redundante Änderungen aufgrund von lokalen Benutzerbewegungen vermeiden.
  • Da eine räumliche Oberfläche auch vorübergehend aufgrund von Nachverfolgungsverlusten verschwindet, wird das Verwerfen entfernter räumlicher Oberflächen während des Nachverfolgungsverlusts ebenfalls zurückgenommen.
  • Im Allgemeinen sollte eine Anwendung den Kompromiss zwischen reduzierter Updateverarbeitung und erhöhter Speicherauslastung auswerten, um die ideale Strategie für die Zwischenspeicherung zu ermitteln.

Darstellung

Es gibt drei Primäre Möglichkeiten, wie Gitternetze für räumliche Zuordnungen tendenziell zum Rendern verwendet werden:

  • Für die Oberflächenvisualisierung
    • Häufig ist es hilfreich, räumliche Oberflächen direkt zu visualisieren. Beispielsweise kann das Umwandeln von "Schatten" aus Objekten auf räumliche Oberflächen dem Benutzer hilfreiches visuelles Feedback geben, während er Hologramme auf Oberflächen platziert.
    • Beachten Sie, dass räumliche Gitternetze sich von der Art der Gitternetze unterscheiden, die ein 3D-Interpret erstellen könnte. Die Dreieckstopologie ist nicht so "sauber" wie die von Menschen erstellte Topologie, und das Gitternetz weist verschiedene Fehlerauf.
    • Um ein ansprechendes visuelles Aussehen zu schaffen, können Sie eine Gitternetzverarbeitungdurchführen, z. B. um Löcher oder reibungslose Oberflächennormalisierungen zu füllen. Sie können auch einen Shader verwenden, um von Einem Interpret entworfene Texturen in Ihr Gitternetz zu pro projektieren, anstatt die Meshtopologie und -normalitäten direkt zu visualisieren.
  • Zum Verdecken von Hologrammen hinter realen Oberflächen
    • Räumliche Oberflächen können in einem reinen Tiefendurchlauf gerendert werden. Dies wirkt sich nur auf den Tiefenpuffer und nicht auf Farbrenderziele aus.
    • Dadurch wird der Tiefenpuffer so grundiert, dass nachfolgend gerenderte Hologramme hinter räumlichen Oberflächen verdeckt werden. Eine genaue Verdeckung von Hologrammen verbessert das Gefühl, dass Hologramme tatsächlich im physischen Raum des Benutzers vorhanden sind.
    • Aktualisieren Sie den Blendzustand, um renderTargetWriteMask für alle Farbrenderziele auf null festzulegen, um das rein tiefenbezogene Rendering zu aktivieren.
  • Zum Ändern der Darstellung von Hologrammen, die von realen Oberflächen verdeckt werden
    • Normalerweise gerenderte Geometrie wird ausgeblendet, wenn sie verdeckt wird. Dies wird erreicht, indem die Tiefenfunktion in Ihrem Tiefenschablonenzustand auf "kleiner als oder gleich" festgelegt wird, wodurch die Geometrie nur dort sichtbar wird, wo sie sich näher an der Kamera befindet als alle zuvor gerenderten Geometrien.
    • Es kann jedoch hilfreich sein, eine bestimmte Geometrie sichtbar zu halten, auch wenn sie verdeckunglich ist, und die Darstellung zu ändern, wenn sie als Möglichkeit zum Bereitstellen visuellen Feedbacks für den Benutzer verwendet wird. Dies ermöglicht der Anwendung beispielsweise, dem Benutzer den Speicherort eines Objekts anzuzeigen und gleichzeitig deutlich zu machen, dass 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 Verdeckungsdarstellung erstellt. Nehmen Sie vor dem zweiten Rendern der Geometrie zwei Änderungen am Tiefenschablonenzustandvor. Legen Sie zunächst die Tiefenfunktion auf "größer als oder gleich" fest, sodass die Geometrie nur sichtbar ist, wenn sie sich weiter von der Kamera entfernt als alle zuvor gerenderten Geometrien befindet. Legen Sie als Zweites die DepthWriteMask auf 0 (null) fest, damit der Tiefenpuffer nicht geändert wird (der Tiefenpuffer sollte weiterhin die Tiefe der Geometrie darstellen, die der Kamera am nächsten liegt).

Die Leistung ist ein wichtiges Problem beim Rendern von Gitternetzen für räumliche Zuordnungen. Im Folgenden finden Sie einige Renderingleistungstechniken, die speziell für das Rendern von Gitternetzen für räumliche Zuordnungen gelten:

  • Anpassen der Dreiecksdichte
    • Fordern Sie beim Anfordern von Gittergittern für räumliche Oberflächen von Ihrem Oberflächenbeozeuger die niedrigste Dichte von Dreiecksgitternetzen an, die für Ihre Anforderungen ausreicht.
    • Es kann sinnvoll sein, die Dreiecksdichte auf einer Oberfläche nach Oberfläche zu variieren, abhängig von der Entfernung der Oberfläche zum Benutzer und seiner Relevanz für die Benutzererfahrung.
    • Die Reduzierung der Dreiecksanzahl reduziert die Speicherauslastung und die Scheitelpunktverarbeitungskosten auf der GPU, wirkt sich jedoch nicht auf die Pixelverarbeitungskosten aus.
  • Verwenden von Frustum-Culling
    • Frustum-Culling überspringt Zeichnungsobjekte, die nicht sichtbar sind, da sie sich außerhalb des aktuellen Anzeige-Frustums befinden. Dies reduziert die CPU- und GPU-Verarbeitungskosten.
    • Da das Culling pro Gitternetz durchgeführt wird und räumliche Oberflächen groß sein können, kann das Aufbrechen jedes Raumoberflächengitters in kleinere Blöcke zu einem effizienteren Culling führen (da weniger Offscreendreiecke gerendert werden). Es gibt jedoch einen Kompromiss. Je mehr Gitternetze Sie haben, desto mehr Zeichnen-Aufrufe müssen Sie vornehmen, wodurch sich die CPU-Kosten erhöhen können. Im Extremfall könnten die Frustum-Culling-Berechnungen selbst sogar messbare CPU-Kosten haben.
  • Anpassen der Renderingreihenfolge
    • Räumliche Oberflächen sind tendenziell groß, da sie die gesamte Umgebung des Benutzers darstellen, die sie umgibt. 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 verdecken die dem Benutzer nächstgelegene Ebene alle weiter entfernten Ebenen, sodass jede GPU-Zeit, die für das Rendern dieser weiter entfernten Ebenen aufgewendet wird, verschwendet wird.
    • Um diese redundante Arbeit auf der GPU zu reduzieren, hilft es, nicht transparente Oberflächen in front-to-back-Reihenfolge zu rendern (zuerst näher, entferntere zuletzt). Mit "opak" meinen wir Oberflächen, für die die DepthWriteMask im Tiefenschablonenzustandauf eins festgelegt ist. Wenn die nächstgelegenen Oberflächen gerendert werden, wird der Tiefenpuffer so grundiert, dass entferntere Oberflächen effizient vom Pixelprozessor auf der GPU übersprungen werden.

Mesh-Verarbeitung

Eine Anwendung möchte möglicherweise verschiedene Vorgänge für Gitternetze auf räumlicher Oberfläche durchführen, um ihre Anforderungen zu erfüllen. Die Index- und Scheitelpunktdaten, die mit jedem Raumoberflächengitternetz bereitgestellt werden, verwenden das gleiche vertraute Layout wie die Scheitelpunkt- und Indexpuffer, die zum Rendern von Dreiecksgittern in allen modernen Rendering-APIs verwendet werden. Eine wichtige Tatsache, die Sie beachten sollten, ist jedoch, dass räumliche Zuordnungsdreiecke eine Umdrehungsreihenfolge von vorn im Uhrzeigersinn aufweisen. Jedes Dreieck wird durch drei Scheitelpunktindizes im Indexpuffer des Gitters dargestellt, und diese Indizes identifizieren die Scheitelpunkte des Dreiecks im Uhrzeigersinn, wenn das Dreieck von der Vorderseite aus angezeigt wird. Die Frontseite (oder außen) von Gitternetzen für räumliche Oberflächen entspricht dem, was Sie von der (sichtbaren) Frontseite der realen Oberflächen erwarten würden.

Anwendungen sollten eine Mesh-Vereinfachung nur durchführen, wenn die vom Oberflächenbeohrer bereitgestellte dichte des kleinsten Dreiecks immer noch unzureichend ist. Diese Arbeit ist rechenintensiv und wird bereits von der Laufzeit ausgeführt, um die verschiedenen bereitgestellten Detailebenen zu generieren.

Da jeder Oberflächenbeozeuger mehrere nicht verbundene räumliche Oberflächen bereitstellen kann, möchten einige Anwendungen diese Gitternetze der räumlichen Oberfläche möglicherweise aufeinander abschneiden und dann zusammen zippen. Im Allgemeinen ist der Clippingschritt erforderlich, da sich Gitternetze in der Nähe häufig geringfügig überschneiden.

Raycasting und Kollision

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

  • Sie enthalten nur eine kleine Anzahl von Dreiecken. Physikalische Operationen sind rechenintensiver als Renderingvorgänge.
  • Sie sind "wasserdicht". Oberflächen, die als Vollkörper vorgesehen sind, sollten keine kleinen Löcher in ihnen haben. selbst Löcher, die zu klein sind, um sichtbar zu sein, können Probleme verursachen.
  • Sie werden in konvexe Hüllen konvertiert. Konvexe Hüllen haben nur wenige Polygone und sind frei von Löchern, und sie sind wesentlich recheneffizienter zu verarbeiten als unformatierte Dreiecksgitternetze.

Beachten Sie beim Durchführen von Raycasts für räumliche Oberflächen, dass diese Oberflächen häufig komplexe, überladene Formen mit unübersichtlichen kleinen Details sind – genau wie Ihr Desk! Dies bedeutet, dass ein einzelner Raycast häufig nicht ausreicht, um Genügend Informationen über die Form der Oberfläche und die Form des leeren Raumes in der Nähe zu erhalten. In der Regel empfiehlt es sich, viele Raycasts innerhalb eines kleinen Bereichs zu verwenden und die Aggregatergebnisse zu verwenden, um ein zuverlässigeres Verständnis der Oberfläche zu erzielen. Wenn Sie beispielsweise den Durchschnitt von 10 Raycasts verwenden, um die Hologrammplatzierung auf einer Oberfläche zu steuern, ergibt dies ein wesentlich gleichmäßigeres und weniger "jittery"-Ergebnis, das nur einen einzelnen Raycast verwendet.

Beachten Sie jedoch, dass jeder Raycast hohe Rechenkosten haben kann. Abhängig von Ihrem Nutzungsszenario sollten Sie die Berechnungskosten zusätzlicher Raycasts (für jeden Frame) mit den Berechnungskosten der Meshverarbeitung abschmeiden, um Löcher in räumlichen Oberflächen zu glätten und zu entfernen (wenn räumliche Gitternetze aktualisiert werden).

Umgebungsüberprüfung

Jede Anwendung, die räumliche Zuordnung verwendet, sollte erwägen, eine "Überprüfungserfahrung" bereitzustellen. Der Prozess, durch den die Anwendung den Benutzer anleite, Oberflächen zu überprüfen, die für die ordnungsgemäße Funktionsweise der Anwendung erforderlich sind.

Beispiel für die Überprüfung
Beispiel für die Überprüfung

Die Art dieser Überprüfungserfahrung kann je nach Den Anforderungen der einzelnen Anwendungen stark variieren, aber zwei Hauptprinzipien sollten den Entwurf leiten.

Erstens ist die klare Kommunikation mit dem Benutzer das Hauptanliegen. Der Benutzer sollte immer wissen, ob die Anforderungen der Anwendung erfüllt werden. Wenn sie nicht erfüllt werden, sollte dem Benutzer sofort klar sein, warum dies der Grund ist, und er sollte schnell dazu veranlasst werden, die entsprechenden Maßnahmen zu ergreifen.

Zweitens sollten Anwendungen versuchen, ein Gleichgewicht zwischen Effizienz und Zuverlässigkeit zu finden. Wenn dies zuverlässigmöglich ist, sollten Anwendungen räumliche Zuordnungsdaten automatisch analysieren, um dem Benutzer Zeit zu sparen. Wenn dies nicht zuverlässig möglich ist, sollten Anwendungen es dem Benutzer stattdessen ermöglichen, der Anwendung schnell die zusätzlichen Informationen bereitzustellen, die sie benötigt.

Um die richtige Überprüfungserfahrung zu entwerfen, sollten Sie berücksichtigen, welche der folgenden Möglichkeiten für Ihre Anwendung zutreffen:

  • Keine Überprüfungserfahrung

    • Eine Anwendung kann ohne geführte Überprüfung perfekt funktionieren. es wird über Oberflächen informiert, die im Verlauf der natürlichen Benutzerbewegung beobachtet werden.
    • Beispielsweise erfordert eine Anwendung, die es dem Benutzer ermöglicht, mit holografischer Sprayfarbe auf Oberflächen zu zeichnen, nur die Oberflächen zu wissen, die derzeit für den Benutzer sichtbar sind.
    • Die Umgebung kann bereits überprüft werden, wenn der Benutzer bereits viel Zeit mit der Verwendung der HoloLens verbracht hat.
    • Beachten Sie jedoch, dass die von der räumlichen Zuordnung verwendete Kamera nur 3,1 m vor dem Benutzer sehen kann, sodass die räumliche Zuordnung keine weiteren entfernten Oberflächen kennt, es sei denn, der Benutzer hat sie in der Vergangenheit aus größerer Entfernung beobachtet.
    • Damit der Benutzer versteht, welche Oberflächen gescannt wurden, sollte die Anwendung visuelles Feedback zu diesem Effekt bereitstellen. Beispielsweise kann das Umwandeln virtueller Schatten auf gescannte Oberflächen dem Benutzer helfen, Hologramme auf diesen Oberflächen zu platzieren.
    • In diesem Fall sollten die Begrenzungsvolumen des Beobachters der räumlichen Oberfläche für jeden Frame in ein durch Text gesperrtes räumliches Koordinatensystemaktualisiert werden, damit sie dem Benutzer folgen.
  • Suchen eines geeigneten Standorts

    • Eine Anwendung kann für die Verwendung an einem Standort mit bestimmten Anforderungen entworfen werden.
    • Beispielsweise kann die Anwendung einen leeren Bereich um den Benutzer herum erfordern, damit er holografische kung-fu sicher üben kann.
    • Anwendungen sollten dem Benutzer vorab alle spezifischen Anforderungen mitteilen und sie mit klarem visuellem Feedback verstärken.
    • In diesem Beispiel sollte die Anwendung den Umfang des erforderlichen leeren Bereichs visualisieren und das Vorhandensein unerwünschter Objekte innerhalb dieser Zone visuell hervorheben.
    • In diesem Fall sollten die Begrenzungsvolumen des Beobachters der räumlichen Oberfläche ein weltweit gesperrtes räumliches Koordinatensystem an der ausgewählten Position verwenden.
  • Suchen einer geeigneten Konfiguration von Oberflächen

    • Eine Anwendung erfordert möglicherweise eine bestimmte Konfiguration von Oberflächen, z. B. zwei große, flache, entgegengesetzte Wände, um eine holografische Hall von Spiegeln zu erstellen.
    • In solchen Fällen muss die Anwendung die von der räumlichen Zuordnung bereitgestellten Oberflächen analysieren, um geeignete Oberflächen zu erkennen, und den Benutzer zu ihnen leiten.
    • 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 fälschlicherweise als flache Wand identifiziert, benötigt der Benutzer eine einfache Möglichkeit, diesen Fehler zu beheben.
  • Überprüfen eines Teils der Umgebung

    • Eine Anwendung möchte möglicherweise nur einen Teil der Umgebung erfassen, wie vom Benutzer angewiesen.
    • Beispielsweise scannt die Anwendung einen Teil eines Raumes, damit der Benutzer eine holografische klassifizierte Werbeeinanzeige für Diebesen posten kann, die er verkaufen möchte.
    • In diesem Fall sollte die Anwendung räumliche Zuordnungsdaten in den Regionen erfassen, die der Benutzer während der Überprüfung beobachtet hat.
  • Durchsuchen des gesamten Raumes

    • Eine Anwendung erfordert möglicherweise eine Überprüfung aller Oberflächen im aktuellen Raum, einschließlich derjenigen hinter dem Benutzer.
    • Ein Spiel kann z. B. den Benutzer in die Rolle von Gulliver versetzen, der von Hunderten von kleinen Lierungputern belagert wird, die sich aus allen Richtungen nähern.
    • In solchen Fällen muss die Anwendung bestimmen, wie viele der Oberflächen im aktuellen Raum bereits gescannt wurden, und den Blick des Benutzers anweisen, erhebliche Lücken zu füllen.
    • Der Schlüssel zu diesem Prozess ist die Bereitstellung von visuellem Feedback, das dem Benutzer klar macht, welche Oberflächen noch nicht gescannt wurden. Die Anwendung könnte z. B. entfernungsbasierte Abstände verwenden, um Bereiche visuell hervorzuheben, die nicht von räumlichen Kartenoberflächen abgedeckt sind.
  • Erstellen einer Anfangsmomentaufnahme der Umgebung

    • Eine Anwendung möchte möglicherweise alle Änderungen in der Umgebung ignorieren, nachdem eine erste Momentaufnahme erstellt wurde.
    • Dies kann geeignet sein, um eine Unterbrechung der vom Benutzer erstellten Daten zu vermeiden, die eng mit dem ursprünglichen Zustand der Umgebung gekoppelt sind.
    • In diesem Fall sollte die Anwendung nach Abschluss des Scans eine Kopie der Räumlichen Zuordnungsdaten im ursprünglichen Zustand erstellen.
    • Anwendungen sollten weiterhin Updates für räumliche Zuordnungsdaten erhalten, wenn Hologramme von der Umgebung weiterhin ordnungsgemäß verblendet werden sollen.
    • Kontinuierliche Aktualisierungen der räumlichen Zuordnungsdaten ermöglichen auch die Visualisierung aller vorgenommenen Änderungen, um dem Benutzer die Unterschiede zwischen dem vorherigen und dem aktuellen Umgebungszuständen zu verdeutlichen.
  • Erstellen von vom Benutzer initiierten Momentaufnahmen der Umgebung

    • Eine Anwendung möchte möglicherweise nur auf Umgebungsänderungen reagieren, wenn sie vom Benutzer angewiesen wird.
    • Beispielsweise könnte der Benutzer mehrere 3D-"3D-"3D-"3D-"3D-Bilder" eines Freundes erstellen, indem er seine Posen zu unterschiedlichen Zeitpunkten erfasst.
  • Zulassen, dass der Benutzer die Umgebung ändert

    • Eine Anwendung kann so entworfen werden, dass sie in Echtzeit auf Änderungen reagiert, die in der Umgebung des Benutzers vorgenommen wurden.
    • Beispielsweise könnte der Benutzer, der einen Zeichner zieht, eine "Szenenänderung" für ein holografisches Spiel auslösen, das auf der anderen Seite stattfindet.
  • Anleitung für den Benutzer, um Fehler in den räumlichen Zuordnungsdaten zu vermeiden

    • Eine Anwendung möchte dem Benutzer beim Scannen seiner Umgebung möglicherweise Anleitungen geben.
    • Dies kann dem Benutzer helfen, bestimmte Arten von Fehlern inden räumlichen Zuordnungsdaten zu vermeiden, z. B. indem er sich von den fenstern oder spiegelnden Fenstern entfernt.

Ein zusätzliches Detail, das Sie beachten sollten, ist, dass der "Bereich" der räumlichen Zuordnungsdaten nicht unbegrenzt ist. Die räumliche Zuordnung erstellt zwar eine permanente Datenbank mit großen Räumen, stellt diese Daten jedoch nur Anwendungen in einer "Blase" mit begrenzter Größe um den Benutzer zur Verfügung. Wenn Sie am Anfang einer langen Ungnung beginnen und weit genug vom Anfang entfernt sind, werden die räumlichen Oberflächen am Anfang schließlich nicht mehr vorhanden sein. Sie können dies minimieren, indem Sie diese Oberflächen in Ihrer Anwendung zwischenspeichern, nachdem sie aus den verfügbaren räumlichen Zuordnungsdaten entfernt wurden.

Mesh-Verarbeitung

Es kann helfen, häufige Arten von Fehlern in Oberflächen zu erkennen und die räumlichen Zuordnungsdaten nach Geeigneten zu filtern, zu entfernen oder zu ändern.

Beachten Sie, dass räumliche Kartendaten so gut wie möglich für reale Oberflächen bestimmt sind, sodass jede Verarbeitung, die Sie anwenden, risiken, ihre Oberflächen weiter von der "Wahrheit" zu verschieben.

Im Folgenden finden Sie einige Beispiele für verschiedene Arten der Gitternetzverarbeitung, die sie möglicherweise nützlich finden:

  • Füllung von Füllstellen

    • Wenn ein kleines Objekt, das aus einem dunklen Material besteht, nicht gescannt werden kann, wird eine Lücke in der umgebenden Oberfläche hinterlassen.
    • Lücken wirken sich auf die Okklusion aus: Hologramme können "durch" eine Lücke in einer vermutlich undurchsichtigen realen Oberfläche gesehen werden.
    • Lücken wirken sich auf Raycasts aus: Wenn Sie Raycasts verwenden, um Benutzern die Interaktion mit Oberflächen zu ermöglichen, ist es möglicherweise unerwünscht, dass diese Lichtstrahl lückenübergehen. Eine Lösung besteht in der Verwendung eines Bündels von mehreren Raycasts, die einen entsprechend großen Bereich abdecken. Auf diese Weise können Sie Die Ergebnisse von Ausreißern filtern, sodass das Aggregatergebnis auch dann gültig ist, wenn ein Raycast eine kleine Lücke durchläuft. Dieser Ansatz geht jedoch mit Rechenkosten eins ein.
    • Lücken wirken sich auf physikalische Kollisionen aus: Ein objekt, das von der physikalischen Simulation gesteuert wird, kann durch eine Lücke im Boden fallen und verloren gehen.
    • Es ist möglich, solche Lücken im Oberflächengitter algorithmusisch zu füllen. Sie müssen ihren Algorithmus jedoch so optimieren, dass "echte Lücken" wie Fenster und Türtüren nicht ausgefüllt werden. Es kann schwierig sein, "echte Lücken" zuverlässig von "imaginären Lücken" zu unterscheiden, sodass Sie mit verschiedenen Heuristiken wie "Größe" und "Begrenzungsform" experimentieren müssen.
  • Halluzinationsentfernung

    • Reflektionen, helles Licht und bewegte Objekte können kleine nach wie vor "Halluzinationen" in der Luft gleiten lassen.
    • Halluzinationen wirken sich auf die Okklusion aus: Halluzinationen werden möglicherweise sichtbar, wenn sich dunkle Formen vor anderen Hologrammen bewegen und umschließen.
    • Halluzinationen wirken sich auf Raycasts aus: Wenn Sie Raycasts verwenden, um Benutzern die Interaktion mit Oberflächen zu ermöglichen, können diese Lichtstrahl eine Halluzination anstelle der Oberfläche darunter treffen. Wie bei Lücken besteht eine Entschärfung in der Verwendung vieler Raycasts anstelle eines einzelnen Raycasts, aber auch hier kommt es zu Berechnungskosten.
    • Halluzinationen wirken sich auf physikalische Kollisionen aus: Ein objekt, das von der physikalischen Simulation gesteuert wird, kann an einer Halluzination hängen bleiben und kann sich nicht durch einen scheinbar klaren Raumbereich bewegen.
    • Es ist möglich, solche Halluzinationen aus dem Oberflächengitter zu filtern. Wie bei Lücken müssen Sie ihren Algorithmus jedoch so optimieren, dass echte kleine Objekte wie Lampe-Hänger und Türziehpunkte nicht entfernt werden.
  • Glättung

    • Die räumliche Zuordnung kann Oberflächen zurückgeben, die im Vergleich zu ihren realen Entsprechungen grob oder "laut" zu sein scheinen.
    • Glättung wirkt sich auf physische Kollisionen aus: Wenn der Boden rau ist, rollt eine physisch simulierte Ballkugel möglicherweise nicht reibungslos auf einer geraden Linie darüber.
    • Glätte wirkt sich auf das Rendering aus: Wenn eine Oberfläche direkt visualisiert wird, können sich grobe Oberflächennorm normale Darstellungen auf die Darstellung auswirken und ein "sauberes" Aussehen beeinträchtigen. Es ist möglich, dies mithilfe der entsprechenden Beleuchtung und Texturen im Shader zu verringern, der zum Rendern der Oberfläche verwendet wird.
    • Es ist möglich, die Rauheit in einem Oberflächengitter zu glätten. Dadurch wird die Oberfläche jedoch möglicherweise weiter von der entsprechenden realen Oberfläche entfernt. Eine enge Entsprechung ist wichtig, um eine genaue Hologrammverschluss zu erzeugen und Benutzern zu ermöglichen, präzise und vorhersagbare Interaktionen mit holografischen Oberflächen zu erzielen.
    • Wenn nur eine gute Änderung erforderlich ist, kann es ausreichen, die Scheitelpunktnorm normal zu glätten, ohne die Scheitelpunktpositionen zu ändern.
  • Ebenensuche

    • 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 "Plane Finding". Identifizieren von begrenzungsgebundenen, größtenteils planaren Oberflächen.
    • Planare Regionen können als holografische Arbeitsoberflächen verwendet werden, wobei holografische Inhalte von der Anwendung automatisch platziert werden können.
    • Planare Regionen können die Benutzeroberfläche einschränken, um Benutzer bei der Interaktion mit den Oberflächen zu unterstützen, die ihren Anforderungen am besten entsprechen.
    • Planare Regionen können wie in der realen Welt für holografische Entsprechungen zu funktionalen Objekten wie DISPLAYS-Bildschirmen, Tabellen oder Whiteboards verwendet werden.
    • Planare Regionen können Spielbereiche definieren, die die Grundlage von Videospielebenen bilden.
    • Planare Regionen können virtuellen Agents helfen, durch die reale Welt zu navigieren, indem sie die Bereiche des Bodens identifizieren, auf denen echte Menschen wahrscheinlich weiter gehen werden.

Prototyperstellung und Debuggen

Nützliche Tools

  • Der HoloLens-Emulator kann verwendet werden, um Anwendungen mit räumlicher Zuordnung ohne Zugriff auf eine physische HoloLens. Sie können eine Livesitzung auf einer HoloLens in einer realistischen Umgebung mit allen Daten simulieren, die Ihre Anwendung normalerweise nutzen würde, einschließlich HoloLens-Bewegung, raumbezogene Koordinatensysteme und Gitternetze für räumliche Karten. Dies kann verwendet werden, um zuverlässige, wiederholbare Eingaben zu bieten, die für das Debuggen von Problemen und das Auswerten von Änderungen am Code nützlich sein können.
  • Um ein Szenario zu reproduzieren, erfassen Sie daten der räumlichen Zuordnung über das Netzwerk von einem Live-HoloLens, speichern sie dann auf dem Datenträger und verwenden sie in späteren Debugsitzungen wieder.
  • Die Windows-Geräteportal-3D-Ansicht bietet eine Möglichkeit, alle räumlichen Oberflächen zu sehen, die derzeit über das Raumzuordnungssystem verfügbar sind. Dies bietet eine Vergleichsbasis für die räumlichen Oberflächen in Ihrer Anwendung. Beispielsweise können Sie leicht erkennen, ob räumliche Oberflächen fehlen oder an der falschen Stelle angezeigt werden.

Allgemeiner Leitfaden zur Prototyperstellung

  • Da Fehler in den räumlichen Zuordnungsdaten die Benutzerfreundlichkeit stark beeinträchtigen können, wird empfohlen, ihre Anwendung in einer Vielzahl von Umgebungen zu testen.
  • Lassen Sie sich nicht in der Angewohnheit verfangen, immer am gleichen Standort zu testen, z. B. an Ihrem Arbeitsplatz. Testen Sie unbedingt auf verschiedenen Oberflächen mit unterschiedlichen Positionen, Formen, Größen und Materialien.
  • Auch wenn synthetische oder aufgezeichnete Daten für das Debuggen nützlich sein können, sind Sie nicht zu stark von denselben Testfällen abhängig. Dies kann die Suche nach wichtigen Problemen verzögern, die bei unterschiedlicheren Tests zuvor auft gewesen wären.
  • Es ist eine gute Idee, Tests mit echten (und idealerweise nicht entcoachierten) Benutzern durchzuführen, da sie die HoloLens oder Ihre Anwendung möglicherweise nicht auf die gleiche Weise wie Sie verwenden. Tatsächlich ist es vielleicht überraschend, wie unterschiedliche Verhaltensweisen, Kenntnisse und Annahmen von Menschen sein können!

Problembehandlung

  • Damit die Oberflächengitternetze ordnungsgemäß geerbt werden, muss jedes GameObject aktiv sein, bevor es an den SurfaceObserver gesendet wird, damit das Gitternetz erstellt wird. Andernfalls werden die Gitternetze in Ihrem Raum angezeigt, aber in schrägen Winkeln gedreht.
  • Das GameObject, in dem das Skript ausgeführt wird, 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 Gitternetze zu erstellen, einen Offset, der dem Offset des übergeordneten Spielobjekts entspricht. Dies kann dazu sorgen, dass Ihre Gitternetze mehrere Meter entfernt werden, was das Debuggen der Daten erschwert.

Weitere Informationen

Die räumliche Abbildung bietet eine detaillierte Darstellung von realen Oberflächen in der Umgebung 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 auf natürliche Weise den Erwartungen der Benutzer entsprechen, indem sie vertraute Verhaltensweisen und Interaktionen in der realen Welt bereitstellen.


Geräte werden unterstützt.