Problembehandlung

Auf dieser Seite finden Sie allgemeine Probleme, die Azure Remote Rendering beeinträchtigen, sowie Möglichkeiten, diese zu beheben.

Der Client kann keine Verbindung mit dem Server herstellen.

Stellen Sie sicher, dass Ihre Firewalls (auf dem Gerät, innerhalb von Routern usw.) die in den Systemanforderungen genannten Ports nicht blockieren.

Fehler beim Laden des Modells

Wenn beim Laden eines Modells (z. B. über ein Unity-Beispiel) trotz korrekter Blobkonfiguration ein Fehler auftritt, ist der Blobspeicher wahrscheinlich nicht ordnungsgemäß verknüpft. Die ordnungsgemäße Verknüpfung wird im Kapitel Verknüpfen von Speicherkonten erläutert. Nach korrekter Verknüpfung kann es bis zu 30 Minuten dauern, bis die Änderungen wirksam werden.

Manchmal wird während der Verknüpfung eines Speicherkontos das Remote Rendering-Konto nicht aufgeführt. Um dieses Problem zu beheben, wechseln Sie im Azure-Portal zum ARR-Konto, und wählen Sie Identität unter der Gruppe Einstellungen auf der linken Seite aus. Stellen Sie sicher, dass Status auf Ein festgelegt ist. Unity frame debugger

Das Modell kann nicht über ein SAS-Token geladen werden.

Wenn die Clientanwendung ein Modell nicht aus dem Speicher über ein gültiges SAS-Token lädt, kann es durch die im Blob-Speicher konfigurierte öffentliche Netzwerkzugriffsebene verursacht werden. Das Laden eines ARR-Modells aus SAS-Token funktioniert nur, wenn es mit der Option "Aus allen Netzwerken aktiviert" konfiguriert wurde: Screenshot of Azure portal settings for public network access level on blob storage.

Wenn die Beschränkung auf private Endpunkte eine Anforderung ist, muss das Speicherkonto verknüpft sein, und das Modell muss über den Nicht-SAS-Codepfad geladen werden, wie hier beschrieben.

Fehler „Disconnected: VideoFormatNotAvailable

Vergewissern Sie sich, dass Ihre GPU-Hardware Videodecodierung unterstützt. Weitere Informationen finden Sie unter Entwicklungs-PC.

Wenn Sie an einem Laptop mit zwei GPUs arbeiten, kann es vorkommen, dass die standardmäßig für Ausführungen verwendete GPU keine Funktion für die Hardwarevideodecodierung besitzt. Versuchen Sie in diesem Fall, die Verwendung der anderen GPU durch die App zu erzwingen. Die verwendete GPU kann häufig in den GPU-Treibereinstellungen geändert werden.

Fehler beim Abrufen des Sitzungs-/Konvertierungsstatus

Das Senden von REST-API-Befehlen führt zu häufig dazu, dass der Server schließlich drosselt und einen Fehler zurückgibt. Der HTTP-Statuscode für die Drosselung lautet 429 („Zu viele Anforderungen“). Als Faustregel sollte eine Verzögerung von 5–10 Sekunden zwischen nachfolgenden Aufrufen erfolgen.

Beachten Sie, dass dieses Limit nicht nur direkte REST-API-Aufrufe betrifft, sondern auch die C#-/C++-Entsprechungen wie Session.GetPropertiesAsync, Session.RenewAsync oder Frontend.GetAssetConversionStatusAsync. Einige Funktionen geben auch Informationen zurück, wenn der Vorgang wiederholt werden kann. RenderingSessionPropertiesResult.MinimumRetryDelay gibt beispielsweise an, wie viele Sekunden Sie warten sollten, bevor Sie eine weitere Überprüfung durchführen. Die Verwendung eines solchen Rückgabewerts (falls verfügbar) ist die beste Option, da Sie dann ohne Drosselung Überprüfungen so oft wie möglich durchführen können.

Wenn eine serverseitige Drosselung auftritt, ändern Sie den Code so, dass die Aufrufe seltener durchgeführt werden. Der Server setzt den Drosselungszustand jede Minute zurück, sodass der Code nach einer Minute wieder ausgeführt werden kann.

H.265-Codec nicht verfügbar

Der Server kann aus zwei Gründen die Verbindung mit dem Fehler codec not available ablehnen.

Der H.265-Codec ist nicht installiert:

Stellen Sie zunächst sicher, dass die HEVC-Videoerweiterungen wie im Abschnitt Software der Systemanforderungen beschrieben installiert wurde.

Wenn weiterhin Probleme auftreten, stellen Sie sicher, dass Ihre Grafik Karte H265 unterstützt, und Sie haben den neuesten Grafiktreiber installiert. Herstellerspezifische Informationen finden Sie im Abschnitt Entwicklungs-PC der Systemanforderungen.

Der Codec ist installiert, kann aber nicht verwendet werden:

Der Grund für dieses Problem ist eine falsche Sicherheitseinstellung in den DLLs. Dieses Problem tritt beim Versuch, mit H.265 codierte Videos anzusehen, nicht auf. Das Problem wird durch eine Neuinstallation des Codecs auch nicht behoben. Führen Sie stattdessen die folgenden Schritte aus:

  1. Öffnen Sie eine PowerShell-Instanz mit Administratorrechten, und führen Sie folgenden Befehl aus:

    Get-AppxPackage -Name Microsoft.HEVCVideoExtension*
    

    (Beachten Sie, dass „*“ angegeben ist, da bei einigen Paketinstallationsversionen der Name HEVCVideoExtensions im Gegensatz zu HEVCVideoExtension lautet). Dieser Befehl sollte die InstallLocation des Codecs ausgeben, z. B.:

    InstallLocation   : C:\Program Files\WindowsApps\Microsoft.HEVCVideoExtension_1.0.23254.0_x64__5wasdgertewe
    
  2. Öffnen Sie diesen Ordner in Windows-Explorer.

  3. Es sollten die Unterordner x86 und x64 vorhanden sein. Klicken Sie mit der rechten Maustaste auf einen der Ordner, und wählen Sie Eigenschaften aus.

    1. Wählen Sie die Registerkarte Sicherheit aus, und klicken Sie auf die Schaltfläche Erweitert.
    2. Wählen Sie für BesitzerÄndern aus.
    3. Geben Sie in das Textfeld Administratoren ein.
    4. Wählen Sie Namen überprüfen und OK aus.
  4. Wiederholen Sie die angegebenen Schritte für den anderen Ordner.

  5. Wiederholen Sie außerdem die angegebenen Schritte für jede DLL-Datei in beiden Ordnern. Insgesamt sollten vier DLL-Dateien vorhanden sein.

Um zu überprüfen, ob die Einstellungen jetzt richtig sind, führen Sie für jede der vier DLL-Dateien die folgenden Schritte aus:

  1. Wählen Sie Eigenschaften > Sicherheit > Bearbeiten aus.
  2. Gehen Sie die Liste aller Gruppen/Benutzer durch, und stellen Sie sicher, dass jeder Eintrag über die Berechtigung Lesen und ausführen verfügt (das Kontrollkästchen in der Spalte Zulassen muss aktiviert sein).

Geringe Videoqualität

Die Videoqualität kann durch die Netzwerkqualität oder einen fehlenden H.265-Videocodec beeinträchtigt werden.

Ein mit MRC aufgezeichnetes Video spiegelt nicht die Qualität des Liveerlebnisses wider

Ein Video kann mit HoloLens mithilfe von Mixed Reality Capture (MRC) aufgezeichnet werden. Das resultierende Video weist jedoch aus zwei Gründen eine schlechtere Qualität als das Liveerlebnis auf:

  • Die Videobildfrequenz ist auf 30 Hz begrenzt, im Gegensatz zu 60 Hz beim Liveerlebnis.
  • Die Videobilder durchlaufen nicht den Verarbeitungsschritt des Farbverschiebungsausgleichs, daher wirkt das Video weniger flüssig.

Beides sind inhärente Einschränkungen der Aufzeichnungstechnik.

Schwarzer Bildschirm nach erfolgreichem Laden des Modells

Wenn Sie mit der Renderingruntime verbunden sind und ein Modell erfolgreich geladen haben, danach jedoch nur ein schwarzer Bildschirm angezeigt wird, kann dies bestimmte Gründe haben.

Es wird empfohlen, die folgenden Tests auszuführen, bevor Sie eine ausführlichere Analyse durchführen:

  • Ist der H.265-Codec installiert? Obwohl ein Fallback auf den H.264-Codec erfolgen sollte, wurden bereits Fälle beobachtet, in denen dieses Fallback nicht ordnungsgemäß funktionierte. Informationen zum Installieren des aktuellen Grafiktreibers finden Sie in den Systemanforderungen.
  • Wenn Sie ein Unity-Projekt verwenden, schließen Sie Unity, löschen Sie die temporären Ordner library und obj im Projektverzeichnis, laden Sie das Projekt erneut, und erstellen Sie es neu. In einigen Fällen konnte das Beispiel aufgrund von zwischengespeicherten Daten nicht ordnungsgemäß ausgeführt werden, ohne dass ein offensichtlicher Grund vorlag.

Wenn diese beiden Schritte nicht hilfreich waren, müssen Sie herausfinden, ob der Client Videoframes empfängt. Dies kann programmgesteuert abgefragt werden, wie im Kapitel zu serverseitigen Leistungsabfragen erläutert. Das FrameStatistics struct weist einen Member auf, der angibt, wie viele Videoframes empfangen wurden. Wenn diese Zahl größer als 0 ist und im Lauf der Zeit zunimmt, empfängt der Client Videoframes vom Server. Es muss also ein Problem auf der Clientseite sein.

Der Skalierungswert in den Konvertierungseinstellungen wird nicht auf das Modell angewendet.

Wenn ein Modell in Showcase oder Schnellstart mit unveränderter Skalierung angezeigt wird, wenn eine Skalierung als Teil der Geometrieparameter der Konvertierungseinstellungen angewendet wird, liegt dies wahrscheinlich an der integrierten Autoskalierungsfunktion des Beispiels. Das heißt, das Beispiel skaliert das Modell optimal in das Ansichts-Frustum, unabhängig von seiner Eingabeskalierung.

Im Fall von Showcase kann die automatische Skalierung deaktiviert werden, indem im Abschnitt des Modells Transform in der Datei models.xml eine MaxSize Null angegeben wird. Für diesen datengesteuerten Ansatz muss das Modell zuerst über den XML-Code geladen werden, da in allen anderen Fällen die MaxSize Standardwerte auf 1 Meter festgelegt sind. Es gibt auch eine MinSize Eigenschaft, die standardmäßig auf 0,5 Meter festgelegt ist, wodurch alle kleineren Modelle skaliert werden. Weitere Informationen zum Laden von Modellen in Showcase finden Sie im Kapitel "Hinzufügen von 3D-Modellressourcen zu ARR Showcase " der Showcase-Dokumentation.

Häufige clientseitige Fehler

Das Modell überschreitet die Grenzwerte des ausgewählten virtuellen Computers, insbesondere die maximale Anzahl von Grundtypen:

Weitere Informationen finden Sie bei den spezifischen Servergrößenbeschränkungen.

Das Modell befindet sich nicht im Kamerafrustum:

In vielen Fällen wird das Modell ordnungsgemäß dargestellt, befindet sich jedoch außerhalb des Kamerafrustums. Ein häufiger Grund dafür ist, dass das Modell mit einem Pivot deutlich außerhalb des Mittelpunkts exportiert wurde, sodass es von der hinteren Clippingebene der Kamera beschnitten wird. Es hilft, den Begrenzungsrahmen des Modells programmgesteuert abzufragen und mit Unity als Linienrahmen zu visualisieren oder die entsprechenden Werte im Debugprotokoll auszugeben.

Der Konvertierungsprozess generiert außerdem neben dem konvertierten Modell eine JSON-Ausgabedatei. Beim Debuggen von Problemen mit der Modellpositionierung ist es sinnvoll, einen Blick auf den boundingBox-Eintrag im outputStatistics-Abschnitt zu werfen:

{
    ...
    "outputStatistics": {
        ...
        "boundingBox": {
            "min": [
                -43.52,
                -61.775,
                -79.6416
            ],
            "max": [
                43.52,
                61.775,
                79.6416
            ]
        }
    }
}

Das Begrenzungsfeld wird als min- und max-Position in Metern im 3D-Raum beschrieben. Eine Koordinate von 1000,0 bedeutet daher eine Entfernung von einem Kilometer vom Ursprung.

Bei diesem Begrenzungsfeld können zwei Probleme auftreten, die zu unsichtbarer Geometrie führen:

  • Das Feld kann stark dezentriert sein, sodass das Objekt aufgrund von Verdeckung durch die entfernte Ebene in seiner Gesamtheit beschnitten wird. Die boundingBox-Werte für diesen Fall würden etwa so aussehen: min = [-2000, -5,-5], max = [-1990, 5,5], mit einem großen Offset auf der X-Achse als Beispiel für diesen Fall. Um diese Art Problem zu lösen, aktivieren Sie die Option recenterToOrigin in der Konfiguration der Modellkonvertierung.
  • Das Feld kann zentriert sein, ist aber um Größenordnungen zu groß. Das bedeutet, dass die Geometrie des Modells in allen Richtungen abgeschnitten wird, obwohl die Kamera in der Mitte es Modells startet. Typische boundingBox-Werte für diesen Fall sehen etwa so aus: min = [-1000,-1000,-1000], max = [1000,1000,1000]. Der Grund für diese Art Problem ist normalerweise ein nicht angepasster Einheitenbereich. Geben Sie zum Ausgleich einen Skalierungswert für die Konvertierung an, oder nehmen Sie ein Markup des Quellmodells mit den richtigen Einheiten vor. Skalierung kann auch auf den Stammknoten angewendet werden, wenn das Modell zur Laufzeit geladen wird.

Die Unity-Renderpipeline enthält nicht die Renderhooks:

Azure Remote Rendering erstellt Hooks in der Unity-Renderpipeline, um die Framezusammenstellung mit dem Video und die Neuprojektion durchzuführen. Öffnen Sie das Menü Window > Analysis > Frame debugger, um zu überprüfen, ob diese Hooks vorhanden sind. Aktivieren Sie ihn, und stellen Sie sicher, dass zwei Einträge für HolographicRemotingCallbackPass in der Pipeline vorhanden sind:

Unity render pipeline

Stellen Sie zum Beheben sicher, dass die bereitgestellte HybridRenderingPipeline-Ressource verwendet wird: Screenshot of the Unity asset browser and Project Settings dialog. The HybridRenderingPipeline asset is highlighted in the asset browser. An arrow points from the asset to the UniversalRenderPipelineAsset field in project settings.

.. wie in den Unity-Renderpipelines ausführlicher beschrieben.

Schachbrettmuster wird nach dem Laden des Modells gerendert

Wenn das gerenderte Bild wie folgt aussieht: Screenshot shows a grid of black and white squares with a Tools menu.

dann trifft der Renderer auf die Polygongrenzwerte für die Standardkonfigurationsgröße. Zum Minimieren der Auswirkungen kann entweder zur Größe Premium-Konfiguration gewechselt oder die Anzahl der sichtbaren Polygone reduziert werden.

Das gerenderte Bild in Unity steht auf dem Kopf

Achten Sie darauf, das Unity-Lernprogramm zu befolgen: Zeigen Sie Remotemodelle genau an. Ein umgedrehtes Bild zeigt an, dass Unity erforderlich ist, um ein Renderziel außerhalb des Bildschirms zu erstellen. Dieses Verhalten wird derzeit nicht unterstützt und hat einen großen Einfluss auf die Leistung der HoloLens 2.

Gründe für dieses Problem könnten MSAA, HDR oder die Aktivierung der Nachbearbeitung sein. Stellen Sie sicher, dass das Profil mit niedriger Qualität ausgewählt und in Unity als Standard festgelegt ist. Wechseln Sie dazu zu Bearbeiten > Projekteinstellungen... > Qualität.

Wenn Sie das OpenXR-Plug-In in Unity 2020 verwenden, gibt es Versionen der universelle Renderpipeline (URP), die dieses zusätzliche Offscreen-Renderziel unabhängig vom Aktivierungsstatus der Nachverarbeitung erstellen. Daher ist es wichtig, ein manuelles Upgrade auf die URP-Version 10.5.1 oder höher durchzuführen. Dieser Upgradeprozess wird in den Systemanforderungen beschrieben.

Unity-Code, der die Remote Rendering-API verwendet, wird nicht kompiliert.

Verwenden von „Debuggen“ beim Kompilieren für den Unity-Editor

Stellen Sie den Buildtyp der Unity-Lösung auf Debug um. Beim Testen von ARR im Unity-Editor ist die Definition UNITY_EDITOR nur in Debugbuilds verfügbar. Diese Einstellung ist nicht mit dem Buildtyp verknüpft, der für bereitgestellte Anwendungen verwendet wird, wobei Sie "Release"-Builds bevorzugen sollten.

Kompilierungsfehler beim Kompilieren von Unity-Beispielen für HoloLens 2

Bei dem Versuch, Unity-Beispiele (Schnellstart, ShowCaseApp, …) für HoloLens 2 zu kompilieren, sind fälschlicherweise Fehler aufgetreten. Visual Studio beanstandet, dass einige Dateien nicht kopiert werden können, obwohl sie vorhanden sind. Wenn Sie auf dieses Problem treffen:

  • Entfernen Sie alle temporären Unity-Dateien aus dem Projekt, und versuchen Sie es erneut. Schließen Sie hierzu Unity, löschen Sie die temporären Ordner library und obj im Projektverzeichnis, und laden/erstellen Sie das Projekt erneut.
  • Stellen Sie sicher, dass sich die Projekte in einem Verzeichnis auf dem Datenträger mit einem relativ kurzen Pfad befinden, da es beim Kopieren gelegentlich zu Problemen mit langen Dateinamen zu kommen scheint.
  • Wenn das nicht hilft, könnte zwischen MS Sense und dem Kopierschritt ein Konflikt bestehen. Um eine Ausnahme einzurichten, führen Sie diesen Registrierungsbefehl über die Befehlszeile aus (erfordert Administratorrechte):
    reg.exe ADD "HKLM\SOFTWARE\Policies\Microsoft\Windows Advanced Threat Protection" /v groupIds /t REG_SZ /d "Unity"
    

Bei Arm64-Builds für Unity-Projekte treten Fehler auf, da die Datei „AudioPluginMsHRTF.dll“ fehlt.

Die AudioPluginMsHRTF.dll für Arm64 wurde dem Windows Mixed Reality-Paket (com.unity.xr.windowsmr.metro) in Version 3.0.1 hinzugefügt. Stellen Sie sicher, dass Sie Version 3.0.1 oder höher über den Unity Package Manager installiert haben. Navigieren Sie in der Menüleiste von Unity zu Fenster > Paket-Manager, und suchen Sie nach dem Windows Mixed Reality-Paket.

Das Unity-Plug-In Cinemachine funktioniert im Remoteposenmodus nicht.

Im Remote-Pose-Modus erstellt der ARR-Unity-Bindungscode implizit eine Proxykamera, die das tatsächliche Rendering ausführt. In diesem Fall wird die Cullingmaske der Hauptkamera auf 0 („nothing“) festgelegt, um das Rendering für sie zu deaktivieren. Manche Plug-Ins von Drittanbietern (wie z. B. Cinemachine), die die Kamera steuern, benötigen jedoch mindestens ein paar festgelegte Ebenenbits.

Zu diesem Zweck können Sie mit dem Bindungscode die Ebenenbitmaske der Hauptkamera programmgesteuert ändern. Hierfür sind die folgenden Schritte erforderlich:

  1. Erstellen Sie eine neue Ebene in Unity, die nicht zum Rendern einer lokalen Szenengeometrie verwendet wird. In diesem Beispiel heißt die Ebene „Cam“.
  2. Übergeben Sie diese Bitmaske an ARR, sodass ARR sie auf der Standard Kamera festlegt:
    RemoteManagerUnity.CameraCullingMask = LayerMask.GetMask("Cam");
    
  3. Konfigurieren Sie die Eigenschaften für die Cinemachine Verwendung dieser neuen Ebene: Screenshot that shows Unity's inspector panel for camera settings in Cinemachine.

Der lokale Posenmodus ist von diesem Problem nicht betroffen, da die ARR-Bindung das Rendern in diesem Fall nicht an eine interne Proxykamera umleitet.

Native C++-basierte Anwendung lässt sich nicht kompilieren

Fehler „Bibliothek nicht gefunden“ für UWP-Anwendung oder DLL

Im C++-NuGet-Paket befindet sich die Datei microsoft.azure.remoterendering.Cpp.targets, die definiert, welche der binären Varianten verwendet werden soll. Um UWP zu identifizieren, prüfen die Bedingungen in der Datei auf ApplicationType == 'Windows Store'. Es muss daher sichergestellt werden, dass dieser Typ im Projekt festgelegt wird. Dies sollte der Fall sein, wenn Sie eine UWP-Anwendung oder DLL über den Projekt-Assistenten von Visual Studio erstellen.

Instabile Hologramme

Wenn bei Kopfbewegungen auch gerenderte Objekte bewegt werden, liegen möglicherweise Probleme mit der Late Stage Reprojection (LSR) vor. Hinweise zur Vorgehensweise in einer solchen Situation finden Sie im Abschnitt zur Late Stage Reprojection.

Ein weiterer Grund für instabile Hologramme (wabernde, verzerrte, zitternde oder springende Hologramme) kann eine schlechte Netzwerkkonnektivität sein, insbesondere unzureichende Netzwerkbandbreite oder zu hohe Latenz. Ein guter Indikator für die Qualität der Netzwerkverbindung ist der LeistungsstatistikwertServiceStatistics.VideoFramesReused. Wiederverwendete Frames deuten auf Situationen hin, in denen ein altes Videoframe auf der Clientseite wiederverwendet werden musste, da kein neues Videoframe verfügbar war – beispielsweise aufgrund von Paketverlusten oder von Schwankungen der Netzwerklatenz. Wenn ServiceStatistics.VideoFramesReused häufig größer als null ist, deutet dies auf ein Netzwerkproblem hin.

Ein anderer Wert, der untersucht werden kann, ist ServiceStatistics.LatencyPoseToReceiveAvg. Er sollte konstant weniger als 100 ms betragen. Höhere Werte können darauf hinweisen, dass Sie mit einem zu weit entfernten Rechenzentrum verbunden sind.

Eine Liste der möglichen Entschärfungen finden Sie in den Richtlinien für die Netzwerkkonnektivität.

Lokale Inhalte (Benutzeroberflächen, ...) in HoloLens 2 werden mit deutlich mehr Verzerrungsartefakten gerendert als ohne ARR

Dieses Artefakt wird durch eine Standardeinstellung verursacht, bei der die Projektionsqualität lokaler Inhalte zugunsten der Leistung zur Laufzeit gemindert ist. Im Kapitel über die Posenmodi für die Neuprojektion erfahren Sie, wie der Projektionsmodus geändert werden kann, sodass lokale Inhalte auf der gleichen Qualitätsstufe der Neuprojektion gerendert wird wie ohne ARR.

Z-Fighting

Obwohl ARR eine Z-Fighting-Minimierungsfunktion bietet, kann Z-Fighting in der Szene immer noch auftreten. Dieser Leitfaden zielt auf die Behebung dieser verbleibenden Probleme ab.

Verwenden Sie den folgenden Workflow zur Minimierung von Z-Fighting:

  1. Testen Sie die Szene mit den Standardeinstellungen von ARR (Z-Fighting-Minimierung ist aktiviert).

  2. Deaktivieren Sie die Z-Fighting-Minimierung über dessen API.

  3. Wechseln Sie die nahe und entfernte Ebene der Kamera in einen näheren Bereich.

  4. Beheben Sie Fehler in der Szene über den nächsten Abschnitt.

Untersuchung des verbleibenden Z-Fightings

Wenn die oben genannten Schritte ausgeschöpft sind und das verbleibende Z-Fighting nicht akzeptabel ist, muss die zugrunde liegende Ursache des Z-Fightings untersucht werden. Wie auf der Seite zur Z-Fighting-Minimierungsfunktion dargelegt, gibt es zwei Hauptgründe für Z-Fighting: Tiefengenauigkeitsverlust am äußersten Ende des Tiefenbereichs und Oberflächen, die sich schneiden, obwohl sie koplanar sind. Der Tiefengenauigkeitsverlust ist eine mathematische Eventualität und kann nur durch Befolgen von Schritt 3 oben minimiert werden. Koplanare Oberflächen weisen auf einen Fehler des Quellmedienobjekts hin und sind in den Quelldaten besser behoben.

ARR verfügt über ein Feature zum Bestimmen, ob Oberflächen Z-Kampf könnten: Checkerboard-Hervorhebung. Sie können auch visuell ermitteln, wodurch das Z-Fighting verursacht wird. Die folgende erste Animation zeigt ein Beispiel für den Tiefengenauigkeitsverlust in der Entfernung, und die zweite Animation zeigt ein Beispiel für nahezu koplanare Oberflächen:

Animation shows an example of depth-precision loss in the distance.Animation shows an example of nearly coplanar surfaces.

Vergleichen Sie diese Beispiele mit Ihrem Z-Kampf, um die Ursache zu ermitteln oder optional diesen Schritt-für-Schritt-Workflow zu befolgen:

  1. Positionieren Sie die Kamera über den Z-Fighting-Oberflächen, um direkt auf die Oberfläche zu blicken.
  2. Bewegen Sie die Kamera langsam nach hinten (weg von den Oberflächen).
  3. Wenn das Z-Fighting die ganze Zeit sichtbar ist, sind die Oberflächen perfekt koplanar.
  4. Wenn das Z-Fighting die meiste Zeit sichtbar ist, sind die Oberflächen nahezu koplanar.
  5. Wenn das Z-Fighting nur von weitem sichtbar ist, liegt die Ursache in mangelnder Tiefengenauigkeit.

Koplanare Oberflächen können eine Reihe verschiedener Ursachen haben:

  • Ein Objekt wurde von der exportierenden Anwendung aufgrund eines Fehlers oder unterschiedlicher Workflowansätze dupliziert.

    Prüfen Sie diese Probleme mit der jeweiligen Anwendung und der Anwendungsunterstützung.

  • Oberflächen werden dupliziert und gespiegelt, sodass sie in Renderern, die Frontface oder Backface Culling verwenden, doppelseitig erscheinen.

    Der Import über die Modellkonvertierung bestimmt die prinzipielle Seitigkeit des Modells. Doppelseitigkeit wird als Standard angenommen. Die Oberfläche wird als dünne Wand mit physisch korrekter Beleuchtung von beiden Seiten gerendert. Die Einseitigkeit kann durch Flags im Quellmedienobjekt impliziert oder während der Modellkonvertierung explizit erzwungen werden. Zusätzlich, aber optional, kann der einseitige Modus auf „normal“ festgelegt werden.

  • Objekte überschneiden sich in den Quellmedienobjekten.

    Objekte, die so transformiert wurden, dass sich einige ihrer Oberflächen überlappen, erzeugen ebenfalls Z-Fighting. Auch das Transformieren von Teilen der Szenenstruktur in der importierten Szene in ARR kann dieses Problem verursachen.

  • Oberflächen werden gezielt zum Anfassen erstellt, z. B. Bilder oder Text auf Wänden.

Grafikartefakte mit Stereorendering mit mehreren Durchläufen in nativen C++-Apps

In einigen Fällen können benutzerdefinierte native C++-Apps, die nach dem Aufruf von BlitRemoteFrame einen Stereorenderingmodus mit mehreren Durchläufen für lokale Inhalte verwenden (Rendering für das linke und rechte Auge in getrennten Durchläufen), einen Treiberfehler auslösen. Der Fehler führt zu nicht deterministischen Rasterungsfehlern, die dazu führen, dass einzelne Dreiecke oder Teile von Dreiecken des lokalen Inhalts zufällig verschwinden. Aus Leistungsgründen wird empfohlen, lokale Inhalte mit einem moderneren Stereorenderingverfahren mit einzelnem Durchlauf zu rendern, z. B. mit SV_RenderTargetArrayIndex.

Fehler beim Herunterladen der Konvertierungsdatei

Aufgrund von Dateisystemeinschränkungen kann es beim Konvertierungsdienst zu Fehlern beim Herunterladen von Dateien aus Blob Storage kommen. Spezifische Fehlerfälle sind unten aufgeführt. Umfassende Informationen zu Einschränkungen des Windows-Dateisystems finden Sie in der Dokumentation Naming Files, Paths, and Namespaces (Benennen von Dateien, Pfaden und Namespaces).

Konflikt von Pfad- und Dateiname

In einem Blobspeicher können Sie eine Datei und einen Ordner mit demselben Namen als gleichgeordnete Einträge erstellen. Im Windows-Dateisystem ist dies nicht zulässig. Dementsprechend gibt der Dienst in diesem Fall einen Downloadfehler aus.

Pfadlänge

Es gibt Grenzwerte für die Pfadlänge, die durch Windows und den Dienst auferlegt werden. Dateipfade und Dateinamen in Ihrem Blobspeicher dürfen nicht mehr als 178 Zeichen umfassen. Angenommen, Sie verwenden ein blobPrefix von models/Assets, das 13 Zeichen umfasst:

models/Assets/<any file or folder path greater than 164 characters will fail the conversion>

Der Konvertierungsdienst lädt alle unter der blobPrefixKonvertierung angegebenen Dateien herunter, nicht nur die dateien, die in der Konvertierung verwendet werden. Die problematischen Dateien/Ordner sind in diesen Fällen möglicherweise weniger offensichtlich. Deshalb ist es wichtig, alle Inhalte im Speicherkonto unter blobPrefix zu überprüfen. Nachfolgend sehen Sie einige Beispieleingaben für heruntergeladene Inhalte.

{
  "settings": {
    "inputLocation": {
      "storageContainerUri": "https://contosostorage01.blob.core.windows.net/arrInput",
      "blobPrefix": "models/Assets",
      "relativeInputAssetPath": "myAsset.fbx"
    ...
  }
}
models
├───Assets
│   │   myAsset.fbx                 <- Asset
│   │
│   └───Textures
│   |       myTexture.png           <- Used in conversion
│   |
|   └───MyFiles
|          myOtherFile.txt          <- File also downloaded under blobPrefix      
|           
└───OtherFiles
        myReallyLongFileName.txt    <- Ignores files not under blobPrefix             

HoloLens2 "Ein Bild aufnehmen" (MRC) zeigt keine lokalen oder Remoteinhalte an

Dieses Problem tritt in der Regel auf, wenn ein Projekt von WMR auf OpenXR aktualisiert wird und auf die HolographicViewConfiguration Class (Windows.Graphics.Holographic)-Einstellungen zugegriffen wurde. Diese API wird in OpenXR nicht unterstützt und darf nicht darauf zugegriffen werden.

Nächste Schritte