Übersicht über holographic Rendering
Holografisches Rendering ermöglicht es Ihrer Anwendung, ein Hologramm an einem präzisen Ort in der Welt um den Benutzer herum zu zeichnen, unabhängig davon, ob es sich genau in der physischen Welt oder in einem von Ihnen erstellten virtuellen Bereich befindet. Hologramme sind Objekte aus Ton und Licht. Mit dem Rendern kann Ihre Anwendung das Licht hinzufügen.
Geräteunterstützung
Feature | HoloLens (erste Generation) | HoloLens 2 | Immersive Headsets |
Darstellung | ✔️ | ✔️ | ✔️ |
Holographisches Rendern
Der Schlüssel zum holografischen Rendering ist es, zu wissen, welche Art von Gerät verwendet wird. Geräte mit Durchschauungsanzeigen, z. B. HoloLens, verleihen der Welt Licht. Schwarze Pixel sind vollständig transparent, während hellere Pixel zunehmend undurchsichtiger sind. Da das Licht der Displays dem Licht aus der realen Welt hinzugefügt wird, sind weiße Pixel lichtdurchlässig.
Während das stereoskopische Rendering einen Tiefenhinweis für Ihre Hologramme bietet, kann das Hinzufügen von Erdungseffekten benutzern helfen, leichter zu erkennen, welche Oberfläche sich ein Hologramm in der Nähe befindet. Eine Erdungstechnik besteht darin, ein Leuchten um ein Hologramm auf der nahe gelegenen Oberfläche hinzuzufügen und dann einen Schatten gegen diesen Schein zu rendern. Auf diese Weise scheint Ihr Schatten Licht von der Umgebung zu subtrahieren. Raumklang ist ein weiterer wichtiger Tiefenhinweis, mit dem Benutzer über die Entfernung und die relative Position eines Hologramms nachdenken können.
Geräte mit undurchsichtigen Displays wie Windows Mixed Reality immersiven Headsets blockieren die Welt. Schwarze Pixel sind einfarbig schwarz, und jede andere Farbe wird dem Benutzer als diese Farbe angezeigt. Ihre Anwendung ist dafür verantwortlich, alles zu rendern, was dem Benutzer angezeigt wird. Dies macht es noch wichtiger, eine konstante Aktualisierungsrate beizubehalten, damit die Benutzer ein komfortables Erlebnis haben.
Vorhergesagte Renderingparameter
Mixed Reality-Headsets (sowohl HoloLens als auch immersive Headsets) verfolgen kontinuierlich die Position und Ausrichtung des Kopfes des Benutzers relativ zu seiner Umgebung. Wenn Ihre Anwendung mit der Vorbereitung des nächsten Frames beginnt, sagt das System vorher, wo sich der Kopf des Benutzers in der Zukunft befindet, genau in dem Moment, in dem der Frame auf den Displays angezeigt wird. Basierend auf dieser Vorhersage berechnet das System die Ansicht und die Projektionstransformationen, die für diesen Frame verwendet werden sollen. Ihre Anwendung muss diese Transformationen verwenden, um richtige Ergebnisse zu erzielen. Wenn vom System bereitgestellte Transformationen nicht verwendet werden, entspricht das resultierende Bild nicht der realen Welt, was zu Beschwerden beim Benutzer führt.
Hinweis
Um genau vorherzusagen, wann ein neuer Frame die Displays erreicht, misst das System ständig die effektive End-to-End-Latenz der Renderingpipeline Ihrer Anwendung. Während sich das System an die Länge Ihrer Renderingpipeline anpasst, können Sie die Hologrammstabilität verbessern, indem Sie die Pipeline so kurz wie möglich halten.
Anwendungen, die erweiterte Techniken zum Erweitern der Systemvorhersage verwenden, können die Systemansichts- und Projektionstransformationen außer Kraft setzen. Diese Anwendungen müssen weiterhin vom System bereitgestellte Transformationen als Grundlage für ihre benutzerdefinierten Transformationen verwenden, um aussagekräftige Ergebnisse zu erzielen.
Andere Renderingparameter
Beim Rendern eines Frames gibt das System den Backpuffer-Viewport an, in dem Ihre Anwendung zeichnen soll. Dieser Viewport ist oft kleiner als die volle Größe des Framepuffers. Unabhängig von der Viewportgröße wird das Bild hochskaliert, sobald der Frame von der Anwendung gerendert wurde, um die gesamte Anzeige zu füllen.
Für Anwendungen, die nicht mit der erforderlichen Aktualisierungsrate gerendert werden können, können Systemrenderingparameter konfiguriert werden , um den Arbeitsspeicherdruck und die Renderingkosten auf Kosten einer erhöhten Pixelaliasierung zu verringern. Das Backpufferformat kann auch geändert werden, was für einige Apps dazu beitragen kann, die Speicherbandbreite und den Pixeldurchsatz zu verbessern.
Die Rendering frustum, Auflösung und Framerate, bei der Ihre App zum Rendern aufgefordert wird, kann sich auch von Frame zu Frame ändern und kann sich auf dem linken und rechten Auge unterscheiden. Wenn beispielsweise die Mixed Reality-Aufnahme (Mixed Reality Capture , MRC) aktiv ist und die Konfiguration der Foto-/Videokameraansicht nicht aktiviert ist, kann ein Auge mit einem größeren FOV oder einer größeren Auflösung gerendert werden.
Für einen beliebigen Frame muss Ihre App mithilfe der vom System bereitgestellten Ansichtstransformation, Projektionstransformation und Viewportauflösung rendern. Darüber hinaus darf Ihre Anwendung niemals davon ausgehen, dass ein Rendering- oder Ansichtsparameter von Frame zu Frame korrigiert bleibt. Engines wie Unity verarbeiten all diese Transformationen für Sie in ihren eigenen Kameraobjekten, sodass die physische Bewegung Ihrer Benutzer und der Zustand des Systems immer respektiert werden. Wenn Ihre Anwendung eine virtuelle Bewegung des Benutzers durch die Welt ermöglicht (z. B. mithilfe des Thumbsticks auf einem Gamepad), können Sie ein übergeordnetes Rig-Objekt über der Kamera hinzufügen, das es bewegt. Dadurch spiegelt die Kamera sowohl die virtuelle als auch die physische Bewegung des Benutzers wider. Wenn Ihre Anwendung die vom System bereitgestellte Ansichtstransformation, Projektionstransformation oder Viewportdimension ändert, muss sie das System informieren, indem sie die entsprechende Überschreibungs-API aufruft.
Um die Stabilität Ihres holografischen Renderings zu verbessern, sollte Ihre App Windows jedem Frame den Tiefenpuffer bereitstellen, den er zum Rendern verwendet hat. Wenn Ihre App einen Tiefenpuffer bereitstellt, sollte sie über kohärente Tiefenwerte verfügen, wobei die Tiefe in Metern von der Kamera angegeben wird. Dadurch kann das System Ihre Pixeltiefesdaten verwenden, um Inhalte besser zu stabilisieren, wenn der Kopf des Benutzers am Ende etwas von der vorhergesagten Position entfernt ist. Wenn Sie Ihren Tiefenpuffer nicht bereitstellen können, können Sie einen Fokuspunkt und einen Normalwert angeben und eine Ebene definieren, die den großteil Ihrer Inhalte durchschneidet. Wenn sowohl der Tiefenpuffer als auch eine Fokusebene bereitgestellt werden, kann das System beides verwenden. Insbesondere ist es hilfreich, sowohl den Tiefenpuffer als auch einen Fokuspunkt bereitzustellen, der einen Geschwindigkeitsvektor enthält, wenn Ihre Anwendung Hologramme anzeigt, die sich in Bewegung befinden.
Ausführliche Informationen zu diesem Thema finden Sie im Artikel Rendern in DirectX .
Holografische Kameras
Windows Mixed Reality führt das Konzept einer holografischen Kamera ein. Holografische Kameras ähneln der herkömmlichen Kamera in 3D-Grafiktexten; Sie definieren sowohl die extrinsischen (Position und Ausrichtung) als auch die intrinsischen Kameraeigenschaften. (Beispielsweise wird das Sichtfeld verwendet, um eine virtuelle 3D-Szene anzuzeigen.) Im Gegensatz zu herkömmlichen 3D-Kameras hat die Anwendung keine Kontrolle über die Position, Ausrichtung und die intrinsischen Eigenschaften der Kamera. Vielmehr wird die Position und Ausrichtung der holografischen Kamera implizit durch die Bewegung des Benutzers gesteuert. Die Bewegung des Benutzers wird über eine Ansichtstransformation frame-by-frame an die Anwendung weitergeleitet. Ebenso werden die intrinsischen Eigenschaften der Kamera durch die kalibrierte Optik des Geräts und frame-by-frame über die Projektionstransformation definiert.
Im Allgemeinen wird Ihre Anwendung für eine einzelne Stereokamera gerendert. Eine robuste Renderingschleife unterstützt mehrere Kameras und unterstützt sowohl Mono- als auch Stereokameras. Beispielsweise kann das System Ihre Anwendung zum Rendern aus einer alternativen Perspektive auffordern, wenn der Benutzer je nach Headsetform ein Feature wie Mixed Reality Capture (MRC) aktiviert. Anwendungen, die mehrere Kameras unterstützen können, erhalten diese, indem sie sich für die Art von Kameras entscheiden, die sie unterstützen können.
Volumengrafik
Beim Rendern medizinischer MRIs oder technischer Volumes in 3D werden häufig Volumerenderverfahren verwendet. Diese Techniken können in Mixed Reality interessant sein, wo Benutzer ein solches Volumen natürlich aus Schlüsselwinkeln betrachten können, indem sie einfach ihren Kopf bewegen.
Unterstützte Auflösungen in HoloLens (erste Generation)
- Die maximale Viewportgröße ist eine Eigenschaft des HolographicDisplays. HoloLens ist standardmäßig auf die maximale Viewportgröße von 720p (1268 x 720) festgelegt.
- Die Viewportgröße kann durch Festlegen von ViewportScaleFactor auf der HolographicCamera geändert werden. Dieser Skalierungsfaktor liegt im Bereich von 0 bis 1.
- Die niedrigste unterstützte Viewportgröße auf HoloLens (erste Generation) beträgt 50 % von 720p, was 360p (634 x 360) ist. Dies ist ein ViewportScaleFactor von 0.5.
- Alles, was niedriger als 540p ist, wird aufgrund einer visuellen Beeinträchtigung nicht empfohlen, kann jedoch verwendet werden, um Engpässe bei der Pixelfüllrate zu identifizieren.
Unterstützte Auflösungen auf HoloLens 2
- Die aktuellen und maximal unterstützten Renderzielgrößen sind Eigenschaften der Ansichtskonfiguration. HoloLens 2 ist standardmäßig auf die maximale Renderzielgröße von 1440 x 936 festgelegt.
- Apps können die Größe von Renderzielpuffern ändern, indem sie die RequestRenderTargetSize-Methode aufrufen, um eine neue Renderzielgröße anzufordern. Es wird eine neue Renderzielgröße ausgewählt, die die angeforderte Renderzielgröße erfüllt oder überschreitet. Diese API ändert die Größe des Renderzielpuffers, was eine Neuzuordnung des Arbeitsspeichers auf der GPU erfordert. Dies hat folgende Auswirkungen: Die Renderzielgröße kann herunterskaliert werden, um den Arbeitsspeicherdruck auf der GPU zu verringern, und diese Methode sollte nicht mit hoher Häufigkeit aufgerufen werden.
- Apps können die Viewportgröße weiterhin auf die gleiche Weise ändern wie für HoloLens 1. Es gibt keine zusätzliche Speicherumsetzung auf der GPU, sodass sie mit hoher Häufigkeit geändert werden kann, aber sie kann nicht verwendet werden, um den Arbeitsspeicherdruck auf der GPU zu verringern.
- Die niedrigste unterstützte Viewportgröße auf HoloLens 2 ist 634 x 412, ein ViewportScaleFactor von ungefähr 0,44, wenn die Standardrenderzielgröße verwendet wird.
- Wenn eine Renderzielgröße angegeben wird, die kleiner als die niedrigste unterstützte Viewportgröße ist, wird der Viewportskalierungsfaktor ignoriert.
- Alles, was niedriger als 540p ist, wird aufgrund einer visuellen Beeinträchtigung nicht empfohlen, kann jedoch verwendet werden, um Engpässe bei der Pixelfüllrate zu identifizieren.