Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Leistung
Damit die zugrunde liegende Mixed Reality-Plattform und das Gerät die besten Ergebnisse erzielen können, ist es wichtig, dass Sie bildfrequenzen erzielen. Die Zielframerate (z. B. 60 FPS oder 90 FPS) variiert plattform- und geräteübergreifend. Mixed Reality-Anwendungen, die die Framerate erfüllen, verfügen jedoch über stabile Hologramme und eine effiziente Kopfnachverfolgung, Handnachverfolgung und vieles mehr.
Umgebungsnachverfolgung
Stabiles holografisches Rendering basiert stark auf der Nachverfolgung von Kopfhaltungen durch die Plattform & Geräts. Unity rendert die Szene jeden Frame aus der Kameraposition, die von der zugrunde liegenden Plattform geschätzt und bereitgestellt wird. Wenn diese Nachverfolgung der tatsächlichen Kopfbewegung nicht ordnungsgemäß folgt, erscheinen Hologramme visuell ungenau. Diese Nachverfolgung ist besonders offensichtlich und wichtig für AR-Geräte wie HoloLens, bei denen Benutzer virtuelle Hologramme mit der realen Welt in Beziehung setzen können. Die Leistung ist für eine zuverlässige Kopfnachverfolgung von Bedeutung, aber es können auch andere wichtige Features vorhanden sein. Die Typen von Umgebungselementen, die sich auf die Benutzererfahrung auswirken, hängen von den spezifischen Plattformdaten ab.
Windows Mixed Reality
Die Windows Mixed Reality-Plattform bietet Referenzmaterial zur Stabilisierung von Hologrammen auf der Plattform. Es gibt jedoch eine Handvoll wichtiger Tools, die Entwickler nutzen können, um die visuelle Benutzeroberfläche für Hologramme für Benutzer zu verbessern.
Freigabe des Tiefenpuffers
Unity-Entwickler haben die Möglichkeit, den Tiefenpuffer der Anwendung für die Plattform freizugeben. Dies liefert Informationen, bei denen Hologramme für einen aktuellen Frame vorhanden sind, die die Plattform verwenden kann, um Hologramme über einen hardwaregestützten Prozess zu stabilisieren, der als Late-Stage Reprojection bezeichnet wird.
Späte Neuprojektion
Am Ende des Renderns eines Frames übernimmt die Windows Mixed Reality-Plattform die Farbe & von der Anwendung erzeugten Tiefenrenderingziele und transformiert die endgültige Bildschirmausgabe, um alle leichten Kopfbewegungen seit der letzten Kopfhaltungsvorhersage zu berücksichtigen. Die Ausführung der Spielschleife einer Anwendung nimmt Zeit in Anspruch. Bei 60 FPS nimmt die Anwendung beispielsweise ~16,667 ms zum Rendern eines Frames auf. Auch wenn dieser Zeitraum wie ein winziger Zeitraum erscheinen mag, ändert sich die Position und Ausrichtung des Kopfes des Benutzers, was zu neuen Projektionsmatrizen für die Kamera beim Rendern führt. Bei der Späteren Neuprojektion werden die Pixel im endgültigen Bild transformiert, um dieser neuen Perspektive Rechnung zu tragen.
LSR pro Pixel und Stabilisierungsebene
Abhängig vom Geräteendpunkt und der Betriebssystemversion, die auf einem Windows Mixed Reality Gerät ausgeführt wird, kann der Late-Stage Reprojection-Algorithmus pro Pixel oder über eine Stabilisierungsebene ausgeführt werden.
Tiefenbasiert pro Pixel
Die tiefenbasierte Neuprojektion pro Pixel umfasst die Verwendung des Tiefenpuffers, um die Bildausgabe pro Pixel zu ändern und so Hologramme in verschiedenen Entfernungen zu stabilisieren. Beispielsweise kann sich eine 1m entfernte Kugel vor einer 10m entfernten Säule befindet. Die Pixel, die die Kugel darstellen, weisen eine andere Transformation auf als die weit entfernten Pixel, die die Säule darstellen, wenn der Benutzer den Kopf leicht gekippt hat. Bei der Neuprojektion pro Pixel wird dieser Abstandsunterschied bei jedem Pixel berücksichtigt, um eine genauere Neuprojektion zu ermöglichen.
Stabilisierungsebene
Wenn es nicht möglich ist, einen genauen Tiefenpuffer für die Freigabe für die Plattform zu erstellen, verwendet eine andere Form von LSR eine Stabilisierungsebene. Alle Hologramme in einer Szene erhalten eine gewisse Stabilisierung, aber Hologramme, die in der gewünschten Ebene liegen, erhalten die maximale Hardwarestabilisierung. Der Punkt und die Normalität für die Ebene können der Plattform über die von Unity bereitgestellteHolographicSettings.SetFocusPointForFrame-API bereitgestellt werden.
Tiefenpufferformat
Wenn HoloLens für die Entwicklung als Ziel verwendet wird, wird dringend empfohlen, das 16-Bit-Tiefenpufferformat im Vergleich zu 24-Bit zu verwenden. Dieses Format kann enorme Leistungseinbußen erzielen, obwohl Tiefenwerte eine geringere Genauigkeit aufweisen. Um die geringere Genauigkeit auszugleichen und Z-Fighting zu vermeiden, wird empfohlen, die entfernte Clipebene von dem von Unity festgelegten Standardwert von 1000 m zu reduzieren.
Hinweis
Bei Verwendung des 16-Bit-Tiefenformats funktionieren die erforderlichen Effekte für den Schablonenpuffer nicht, da Unity in dieser Einstellung keinen Schablonenpuffer erstellt . Wenn Sie umgekehrt das 24-Bit-Tiefenformat auswählen, wird in der Regel ein 8-Bit-Schablonenpuffer erstellt, falls zutreffend auf der Endpunktgrafikplattform.
Tiefenpufferfreigabe in Unity
Um die tiefenbasierte LSR zu nutzen, müssen Entwickler zwei wichtige Schritte ausführen.
- UnterProjekteinstellungen>bearbeiten>Player>XR Settings>Virtual Reality SDKs> Enable Depth Buffer Sharing (Tiefenpufferfreigabe aktivieren)
- Wenn HoloLens als Ziel verwendet wird, wird empfohlen, auch das 16-Bit-Tiefenformat auszuwählen.
- Beim Rendern von Farben auf dem Bildschirm können Sie auch die Tiefe rendern.
Opaque GameObjects in Unity schreibt in der Regel automatisch in die Tiefe. Bei transparenten & Textobjekten wird jedoch in der Regel nicht standardmäßig in die Tiefe geschrieben. Bei Verwendung des MRTK Standard Shader oder Text Mesh Pro kann dies problemlos behoben werden.
Hinweis
Um schnell zu ermitteln, welche Objekte in einer Szene nicht visuell in den Tiefenpuffer schreiben, können Sie das Hilfsprogramm Rendertiefepuffer unter den Editoreinstellungen im MRTK-Konfigurationsprofil verwenden.
Transparent MRTK Standard Shader
Für transparente Materialien, die den MRTK Standard Shader verwenden, wählen Sie das Material aus, um es im Inspektorfenster anzuzeigen. Klicken Sie dann auf die Schaltfläche Jetzt beheben , um das Material so zu konvertieren, dass es in die Tiefe schreibt (d. h. Z-Write On).
Vor
Nach
Text Mesh Pro
Wählen Sie für Text Mesh Pro-Objekte das TMP-GameObject aus, um es im Inspektor anzuzeigen. Wechseln Sie unter der Materialkomponente den Shader für das zugewiesene Material, um den MRTK TextMeshPro-Shader zu verwenden.
Benutzerdefinierter Shader
Wenn Sie einen benutzerdefinierten Shader schreiben, fügen Sie das ZWrite-Flag oben in der Pass-Blockdefinition hinzu, um den Shader für das Schreiben in den Tiefenpuffer zu konfigurieren.
Shader "Custom/MyShader"
{
SubShader
{
Pass
{
...
ZWrite On
...
}
}
}
Nicht transparente Unterstützungen
Wenn die oben genannten Methoden für ein bestimmtes Szenario nicht funktionieren (d. h. mithilfe der Unity-Benutzeroberfläche), ist es möglich, dass ein anderes Objekt in den Tiefenpuffer schreibt. Ein gängiges Beispiel ist die Verwendung von Unity UI Text in einem unverankerten Bereich in einer Szene. Indem das Panel undurchsichtig oder zumindest in die Tiefe geschrieben wird, wird der Text & das Panel von der Plattform stabilisiert, da ihre Z-Werte so nah beieinander liegen.
WorldAnchors (HoloLens)
Neben der Sicherstellung, dass die richtigen Konfigurationen erfüllt sind, um die visuelle Stabilität zu gewährleisten, ist es wichtig, sicherzustellen, dass Hologramme an ihren richtigen physischen Positionen stabil bleiben. Um die Plattform über wichtige Orte in einem physischen Raum zu informieren, können Entwickler WorldAnchors auf GameObjects verwenden, die an einem Ort bleiben müssen. Ein WorldAnchor ist eine Komponente, die einem GameObject hinzugefügt wird und die absolute Kontrolle über die Transformation dieses Objekts übernimmt.
Geräte wie HoloLens scannen ständig und lernen die Umgebung kennen. Wenn die HoloLens bewegung & Position im Raum nachverfolgt, werden ihre Schätzungen aktualisiert und das Unity-Koordinatensystem angepasst. Wenn ein GameObject z. B. 1 m von der Kamera entfernt platziert wird, da die HoloLens die Umgebung nachverfolgt, kann erkannt werden, dass der physische Punkt, an dem sich das GameObject befindet, tatsächlich 1,1 m entfernt ist. Dies würde dazu führen, dass das Hologramm driftet. Wenn Sie ein WorldAnchor-Objekt auf ein GameObject anwenden, kann der Anker die Transformation des Objekts steuern, sodass das Objekt an der richtigen physischen Position verbleibt (z. B. ein Update auf 1,1 m statt auf 1 m zur Laufzeit). Um WorldAnchors über App-Sitzungen hinweg beizubehalten, können Entwickler worldAnchorStore verwenden, um WorldAnchors zu speichern und zu laden.
Hinweis
Nachdem eine WorldAnchor-Komponente zu einem GameObject hinzugefügt wurde, ist es nicht möglich, die GameObject-Transformation (d. h. transform.position = x) zu ändern. Ein Entwickler muss worldAnchor entfernen, um die Transformation zu bearbeiten.
WorldAnchor m_anchor;
public void AddAnchor()
{
this.m_anchor = this.gameObject.AddComponent<WorldAnchor>();
}
public void RemoveAnchor()
{
DestroyImmediate(m_anchor);
}
Wenn Sie eine Alternative zum manuellen Arbeiten mit Anchors benötigen, lesen Sie die Microsoft World Locking Tools.