Odstraňování potíží
Na této stránce jsou uvedeny běžné problémy, které zasahují do služby Azure Remote Rendering, a způsoby jejich řešení.
Klient se nemůže připojit k serveru
Ujistěte se, že vaše brány firewall (na zařízení, uvnitř směrovačů atd.) neblokují porty uvedené v požadavcích na systém.
Načtení modelu se nezdařilo.
Při načítání modelu (například prostřednictvím ukázky Unity) selže, i když je konfigurace objektu blob správná, je pravděpodobné, že úložiště objektů blob není správně propojené. Správné propojení je vysvětleno v propojování kapitoly účtu úložiště. Po správném propojení může trvat až 30 minut, než se změny projeví.
Nejde propojit účet úložiště s účtem ARR
Někdy během propojení účtu úložiště není uvedený účet vzdáleného vykreslování. Tento problém vyřešíte tak, že na webu Azure Portal přejdete na účet ARR a vyberete Identitu v části Nastavení na levé straně. Ujistěte se, že je stav nastavený na Zapnuto.
Model nejde načíst prostřednictvím tokenu SAS
Pokud se klientské aplikaci nepodaří načíst model z úložiště prostřednictvím platného tokenu SAS, může to být způsobeno úrovní přístupu k veřejné síti nakonfigurovanou v úložišti objektů blob. Načtení modelu ARR z tokenu SAS funguje jenom v případě, že je nakonfigurovaná s možností Povoleno ze všech sítí:
Pokud se omezení na privátní koncové body vyžaduje, musí být účet úložiště propojený a model se musí načíst prostřednictvím cesty kódu bez SAS, jak je popsáno zde.
Chyba 'Disconnected: VideoFormatNotAvailable
'
Zkontrolujte, jestli GPU podporuje dekódování hardwaru videa. Viz Vývojový počítač.
Pokud pracujete na přenosném počítači se dvěma GPU, je možné, že GPU, na kterém běžíte, ve výchozím nastavení neposkytuje funkce dekódování hardwaru videa. Pokud ano, zkuste aplikaci vynutit, aby používala další GPU. Změna použitého GPU je často možná v nastavení ovladače GPU.
Selhání načtení relace nebo stavu převodu
Odesílání příkazů rozhraní REST API příliš často způsobuje omezování serveru a vrácení selhání nakonec. Stavový kód HTTP v případě omezování je 429 (příliš mnoho požadavků). Obecně platí, že mezi následnými voláními by mělo být zpoždění 5 až 10 sekund.
Všimněte si, že tento limit ovlivňuje nejen volání rozhraní REST API při volání přímo, ale také jejich protějšky jazyka C#/C++, například Session.GetPropertiesAsync
, Session.RenewAsync
nebo Frontend.GetAssetConversionStatusAsync
. Některé funkce také vrací informace, když se uloží a zkusí to znovu. Určuje například, RenderingSessionPropertiesResult.MinimumRetryDelay
kolik sekund se má počkat, než se pokusíte provést jinou kontrolu. Pokud je k dispozici, je použití takové vrácené hodnoty nejlepší, protože umožňuje co nejčastěji provádět kontroly bez omezení.
Pokud dochází k omezování na straně serveru, změňte kód tak, aby se volání méně často dělala. Server resetuje stav omezování každou minutu, takže po minutě je bezpečné kód spustit znovu.
Kodek H265 není k dispozici
Existují dva důvody, proč může server odmítnout připojení s chybou codec not available
.
Kodek H265 není nainstalovaný:
Nejprve nezapomeňte nainstalovat Rozšíření pro video HEVC, jak je uvedeno v části Software v požadavcích na systém.
Pokud stále dochází k problémům, ujistěte se, že grafická karta podporuje H265 a máte nainstalovaný nejnovější grafický ovladač. Informace specifické pro dodavatele najdete v části Vývojový počítač v požadavcích na systém.
Kodek je nainstalovaný, ale nejde ho použít:
Důvodem tohoto problému je nesprávné nastavení zabezpečení knihoven DLL. Tento problém se projevuje při pokusu o sledování videí kódovaných pomocí H265. Přeinstalace kodeku problém nevyřeší ani. Místo toho proveďte následující kroky:
Otevření PowerShellu s právy správce a spuštěním
Get-AppxPackage -Name Microsoft.HEVCVideoExtension*
(Všimněte si, že *je důvodem, že u některých verzí instalace balíčku se
HEVCVideoExtensions
název liší ).HEVCVideoExtension
Tento příkaz by měl výstupemInstallLocation
kodeku, například:InstallLocation : C:\Program Files\WindowsApps\Microsoft.HEVCVideoExtension_1.0.23254.0_x64__5wasdgertewe
Otevření této složky v Průzkumníku Windows
Měla by existovat podsložka x86 a x64 . Klikněte pravým tlačítkem myši na jednu ze složek a zvolte Vlastnosti.
- Vyberte kartu Zabezpečení a vyberte tlačítko Upřesnit nastavení.
- Výběr možnosti Změnit pro vlastníka
- Do textového pole zadejte správce .
- Výběr možnosti Zkontrolovat jména a OK
Zopakujte výše uvedené kroky pro jinou složku.
Opakujte také výše uvedené kroky pro každý soubor KNIHOVNY DLL v obou složkách. Měly by existovat čtyři knihovny DLL.
Pokud chcete ověřit správnost nastavení, proveďte následující kroky pro každou ze čtyř knihoven DLL:
- Výběr možností Upravit zabezpečení > vlastností >
- Projděte si seznam všech skupin / uživatelů a ujistěte se, že každý z nich má nastavenou správnou sadu pro čtení a spuštění (zaškrtnutí ve sloupci Povolit musí být zaškrtnuté).
Nízká kvalita videa
Kvalita videa může být ohrožena kvalitou sítě nebo chybějícím kodekem videa H265.
- Postup identifikace problémů se sítí
- Podívejte se na požadavky na systém pro instalaci nejnovějšího grafického ovladače.
Video nahrané pomocí MRC neodráží kvalitu živého prostředí.
Video se dá nahrát na HoloLens prostřednictvím funkce MrC (Mixed Reality Capture). Výsledné video má ale horší kvalitu než živé prostředí ze dvou důvodů:
- Frekvence snímků videa je omezena na 30 Hz na rozdíl od 60 Hz.
- Obrázky videa neprocházejí krokem zpracování změny projektu v pozdní fázi, takže se zdá, že video bude vysekanější.
Obě představují základní omezení techniky nahrávání.
Černá obrazovka po úspěšném načtení modelu
Pokud jste připojení k modulu runtime vykreslování a úspěšně načetli model, ale pak uvidíte jenom černou obrazovku, může to mít několik odlišných příčin.
Než začnete provádět podrobnější analýzu, doporučujeme otestovat následující věci:
- Je nainstalovaný kodek H265? I když by měl být záložní kodek H264, viděli jsme případy, kdy tento náhradní kód nefungoval správně. Podívejte se na požadavky na systém pro instalaci nejnovějšího grafického ovladače.
- Při použití projektu Unity zavřete Unity, odstraňte dočasnou knihovnu a složky obj v adresáři projektu a znovu načtěte/sestavte projekt. V některých případech data uložená v mezipaměti způsobila, že ukázka nebude správně fungovat, a to z nějakého zřejmého důvodu.
Pokud tyto dva kroky nepomohly, je potřeba zjistit, jestli klient přijímá snímky videa, nebo ne. To lze dotazovat programově, jak je vysvětleno v kapitole dotazy na výkon na straně serveru. Má FrameStatistics struct
člena, který označuje, kolik snímků videa bylo přijato. Pokud je toto číslo větší než 0 a v průběhu času se zvyšuje, klient obdrží ze serveru skutečné snímky videa. Proto to musí být problém na straně klienta.
Hodnota škálování v nastavení převodu se u modelu nepoužije.
Pokud se model zobrazí v prezentaci nebo rychlém startu s nezměněným škálováním, i když se měřítko použije jako součást parametrů geometrie nastavení převodu, je to pravděpodobně kvůli integrované funkci automatického škálování ukázky. To znamená, že ukázka škáluje model tak, aby se nejlépe vešel do zobrazení frustum bez ohledu na jeho vstupní měřítko.
V případě prezentace je možné automatické škálování zakázat zadáním MaxSize
nuly v části modelu Transform
uvnitř souboru models.xml. Tento přístup řízený daty vyžaduje, aby se model načetl prostřednictvím XML na prvním místě, protože ve všech ostatních případech MaxSize
je výchozí hodnota 1 měřič. K dispozici je také MinSize
vlastnost, která ve výchozím nastavení 0,5 měřiče způsobuje vertikální navýšení kapacity všech menších modelů.
Další informace o způsobech načítání modelů v prezentaci najdete v kapitole Přidání 3D prostředků modelu do prezentace ARR v dokumentaci k prezentaci .
Běžné problémy na straně klienta
Model překračuje limity vybraného virtuálního počítače, konkrétně maximální počet primitiv:
Podívejte se na konkrétní omezení velikosti serveru.
Model není uvnitř fotoaparátu frustum:
V mnoha případech se model zobrazuje správně, ale nachází se mimo kameru frustum. Běžným důvodem je, že model byl exportován s daleko mimo středovým pivotem, takže je oříznutý dalekou rovinou výřezu kamery. Pomáhá programově dotazovat ohraničující pole modelu a vizualizovat ho pomocí Unity jako řádkového pole nebo vytisknout jeho hodnoty do protokolu ladění.
Kromě toho proces převodu generuje výstupní soubor JSON společně s převedeným modelem. Pokud chcete ladit problémy s umístěním modelu, je vhodné se podívat na boundingBox
položku v části outputStatistics:
{
...
"outputStatistics": {
...
"boundingBox": {
"min": [
-43.52,
-61.775,
-79.6416
],
"max": [
43.52,
61.775,
79.6416
]
}
}
}
Ohraničující rámeček je popsán jako min
a max
umístění v prostorech 3D v metrech. Souřadnice 1000,0 tedy znamená, že je 1 kilometr od původu.
U tohoto ohraničujícího rámečku mohou být dva problémy, které vedou k neviditelné geometrii:
- Box může být daleko mimo střed, takže objekt je zcela oříznutý kvůli výřezu daleko roviny. Hodnoty
boundingBox
v tomto případě by vypadaly takto:min = [-2000, -5,-5], max = [-1990, 5,5]
použití velkého posunu na ose x jako příkladu. Pokud chcete tento typ problému vyřešit, povolterecenterToOrigin
možnost v konfiguraci převodu modelu. - Krabice může být zacentrována, ale může to být řádově příliš velká. To znamená, že i když fotoaparát začíná ve středu modelu, jeho geometrie je oříznuta ve všech směrech. Typické
boundingBox
hodnoty v tomto případě by vypadaly takto:min = [-1000,-1000,-1000], max = [1000,1000,1000]
. Důvodem tohoto typu problému je obvykle neshoda škálování jednotek. Chcete-li kompenzovat, zadejte hodnotu škálování během převodu nebo označte zdrojový model správnými jednotkami. Při načítání modelu za běhu je také možné na kořenový uzel použít škálování.
Kanál vykreslení Unity nezahrnuje háky vykreslování:
Azure Remote Rendering se připojí k kanálu vykreslování Unity, aby se s videem složil rámec, a aby bylo potřeba provést reprojekt. Chcete-li ověřit, že tyto háky existují, otevřete nabídku Window > Analysis > Frame debugger. Povolte ho HolographicRemotingCallbackPass
a ujistěte se, že kanál obsahuje dvě položky:
Pokud chcete tento problém vyřešit, ujistěte se, že se používá zadaný prostředek HybridRenderingPipeline :
.. jak je popsáno podrobněji v kanálech vykreslování Unity.
Vzor checkerboardu se vykresluje po načtení modelu.
Pokud vykreslený obrázek vypadá takto:
pak renderer dosáhne limitů mnohoúhelníku pro standardní velikost konfigurace. Pokud chcete zmírnit omezení, přepněte na velikost konfigurace Premium nebo snižte počet viditelných mnohoúhelníků.
Vykreslený obrázek v Unity je vzhůru nohama
Nezapomeňte postupovat podle kurzu Unity: Zobrazení vzdálených modelů přesně. Obrázek vzhůru nohama označuje, že Unity je potřeba k vytvoření cíle vykreslení mimo obrazovku. Toto chování se v současné době nepodporuje a vytváří obrovský dopad na výkon na HoloLens 2.
Důvodem tohoto problému může být MSAA, HDR nebo povolení následného zpracování. Ujistěte se, že je v Unity vybraný profil s nízkou kvalitou a nastavený jako výchozí. Uděláte to tak, že přejdete na Upravit > nastavení projektu... > Kvalita.
Při použití modulu plug-in OpenXR v Unity 2020 existují verze kanálu URP (Universal Render Pipeline), které vytvářejí tento extra cíl vykreslování mimo obrazovku bez ohledu na povolení následného zpracování. Proto je důležité verzi URP upgradovat ručně na minimálně 10.5.1 (nebo vyšší). Tento proces upgradu je popsaný v požadavcích na systém.
Kód Unity využívající rozhraní API pro vzdálené vykreslování se nekompiluje
Použití ladění při kompilaci pro Unity Editor
Přepněte typ sestavení řešení Unity na Ladění. Při testování ARR v editoru Unity je definice UNITY_EDITOR
k dispozici pouze v sestaveních Debug. Toto nastavení nesouvisí s typem sestavení používaným pro nasazené aplikace, kde byste měli raději sestavení Release.
Selhání kompilace při kompilaci ukázek Unity pro HoloLens 2
Při pokusu o kompilaci ukázek Unity (rychlý start, ShowCaseApp, ... ) pro HoloLens 2 jsme viděli zjevná selhání. Visual Studio si stěžuje na nemožnost kopírovat některé soubory, i když tam jsou. Pokud dojde k tomuto problému:
- Odeberte všechny dočasné soubory Unity z projektu a zkuste to znovu. To znamená, že zavřete Unity, odstraňte dočasnou knihovnu a složky obj v adresáři projektu a znovu načtěte/sestavte projekt.
- Ujistěte se, že projekty jsou umístěny v adresáři na disku s přiměřeně krátkou cestou, protože krok kopírování se někdy zdá být problémy s dlouhými názvy souborů.
- Pokud to nepomůže, může to být, že MS Sense koliduje s krokem kopírování. Pokud chcete nastavit výjimku, spusťte tento příkaz registru z příkazového řádku (vyžaduje oprávnění správce):
reg.exe ADD "HKLM\SOFTWARE\Policies\Microsoft\Windows Advanced Threat Protection" /v groupIds /t REG_SZ /d "Unity"
Sestavení Arm64 pro projekty Unity selžou, protože chybí AudioPluginMsHRTF.dll
Balíček AudioPluginMsHRTF.dll
Pro Arm64 byl přidán do balíčku Windows Mixed Reality (com.unity.xr.windowsmr.metro) ve verzi 3.0.1. Ujistěte se, že máte nainstalovanou verzi 3.0.1 nebo novější prostřednictvím Správce balíčků Unity. V řádku nabídek Unity přejděte do okna > Správce balíčků a vyhledejte balíček Windows Mixed Reality.
Modul plug-in Unity Cinemachine
nefunguje v režimu vzdálené pozice
V režimu vzdálené pozice kód vazby ARR Unity implicitně vytvoří proxy fotoaparát, který provádí skutečné vykreslování. V tomto případě je maska hlavní kamery nastavená na 0 ("nothing") pro efektivní vypnutí vykreslování. Některé moduly plug-in třetích stran (například Cinemachine
) které řídí kameru, ale můžou spoléhat na nastavení alespoň některých bitů vrstvy.
Pro tento účel vám kód vazby umožňuje programově změnit bitovou masku vrstvy pro hlavní kameru. Konkrétně jsou vyžadovány následující kroky:
- Vytvořte novou vrstvu v Unity, která se nepoužívá k vykreslení žádné geometrie místní scény. V tomto příkladu předpokládejme, že vrstva má název "Cam".
- Předejte tuto masku bitů ARR, aby ji ARR nastavil na hlavní kameru:
RemoteManagerUnity.CameraCullingMask = LayerMask.GetMask("Cam");
Cinemachine
Nakonfigurujte vlastnosti tak, aby používaly tuto novou vrstvu:
Tento problém nemá vliv na místní režim pozice, protože v tomto případě vazba ARR nepřesměruje vykreslování na interní proxy kameru.
Nativní aplikace založená na jazyce C++ se nekompiluje
Chyba Knihovna nebyla nalezena pro aplikaci nebo knihovnu DLL upW
Uvnitř balíčku NuGet jazyka C++ je microsoft.azure.remoterendering.Cpp.targets
soubor, který definuje, kterou binární příchuť použít. Chcete-li zjistit UWP
, podmínky v souboru kontrola ApplicationType == 'Windows Store'
. Proto je potřeba zajistit, aby byl tento typ nastavený v projektu. To by mělo být případ při vytváření aplikace upW nebo knihovny DLL prostřednictvím průvodce projektem sady Visual Studio.
Nestabilní hologramy
V případě, že se vykreslené objekty zdá být pohybující se spolu s pohyby hlavy, může docházet k problémům s reprojektováním pozdní fáze (LSR). Pokyny k přístupu k takové situaci najdete v části věnované reprojektování pozdní fáze.
Dalším důvodem nestabilních hologramů (vápnutí, omezování, zpoždění nebo přeskakování hologramů) může být špatné síťové připojení, zejména nedostatečná šířka pásma sítě nebo příliš vysoká latence. Dobrým indikátorem pro kvalitu síťového připojení je hodnota ServiceStatistics.VideoFramesReused
statistik výkonu . Opakované snímky označují situace, kdy je potřeba znovu použít starý snímek videa na straně klienta, protože nebyl k dispozici žádný nový snímek videa – například kvůli ztrátě paketů nebo kvůli změnám latence sítě. Pokud ServiceStatistics.VideoFramesReused
je často větší než nula, značí problém se sítí.
Další hodnotou, na kterou je třeba se podívat, je ServiceStatistics.LatencyPoseToReceiveAvg
. Měl by být konzistentně nižší než 100 ms. Zobrazení vyšších hodnot může znamenat, že jste připojení k datovému centru, které je příliš daleko.
Seznam potenciálních omezení rizik najdete v pokynech pro připojení k síti.
Místní obsah (UIs, ...) na HoloLens 2 se vykresluje s výrazně větším zkreslením artefaktů než bez ARR.
Tento artefakt je způsoben výchozím nastavením, které obchoduje s kvalitou projekce místního obsahu za účelem výkonu modulu runtime. Podívejte se na kapitolu o režimech přeprojektování, abyste viděli, jak lze režim projekce změnit tak, aby se místní obsah vykresloval na stejné úrovni kvality reprojektu jako bez ARR.
Z-boj
I když ARR nabízí funkce zmírnění rizik z-boj, z-boj se může stále zobrazovat na scéně. Cílem této příručky je vyřešit tyto zbývající problémy.
Doporučené kroky
Ke zmírnění boje proti z použijte následující pracovní postup:
Otestování scény s výchozím nastavením ARR (z-fighting mitigation on)
Zakázání zmírnění rizik z-boj prostřednictvím rozhraní API
Změna kamery blízko a daleko roviny na bližší rozsah
Řešení potíží se scénou prostřednictvím další části
Vyšetřování zbývajícího boje proti z
Pokud byly výše uvedené kroky vyčerpány a zbývající z-boj je nepřijatelné, je nutné prozkoumat základní příčinu boje z. Jak je uvedeno na stránce funkce zmírnění rizik z-boj, existují dva hlavní důvody pro boj proti z: hloubková přesnost ztráty na vzdáleném konci rozsahu hloubky a povrchy, které se protínají při koplanaru. Ztráta přesnosti hloubky je matematická případná a dá se zmírnit pouze podle kroku 3 výše. Koplanární povrchy označují chybu zdrojového aktiva a jsou lépe pevné ve zdrojových datech.
ARR má funkci pro určení, jestli by povrchy mohly bojovat: zvýrazňování kontrolního panelu. Můžete také vizuálně určit, co způsobuje z-boj. Následující první animace ukazuje příklad ztráty hloubky přesnosti ve vzdálenosti a druhý ukazuje příklad téměř koplanárních ploch:
Porovnejte tyto příklady s vaším z-bojem a určete původní příčinu nebo volitelně postupujte podle tohoto podrobného pracovního postupu:
- Umístěte kameru nad povrchy z-boj, abyste se podívali přímo na povrch.
- Pomalu posouvat kameru zpět, od povrchů.
- Pokud je z-boj viditelný po celou dobu, povrchy jsou dokonale koplanární.
- Pokud je z-boj viditelný většinu času, povrchy jsou téměř koplanární.
- Pokud je z-boj viditelný pouze od dálky, příčinou je nedostatek hloubkové přesnosti.
Koplanární povrchy můžou mít mnoho různých příčin:
Objekt byl duplikován aplikací pro export z důvodu chyby nebo různých přístupů pracovního postupu.
Zkontrolujte tyto problémy s příslušnou aplikací a podporou aplikací.
Povrchy jsou duplikovány a překlopené tak, aby se v vykreslovacích nástrojích, které používají přední nebo zadní kulacení, zobrazily oboustranně.
Import prostřednictvím převodu modelu určuje instanční stránku modelu. Oboustranná hodnota se předpokládá jako výchozí. Povrch je vykreslen jako tenká stěna s fyzicky správným osvětlením z obou stran. Jednostrannost může být odvozena příznakem ve zdrojovém assetu nebo explicitně vynucena během převodu modelu. Kromě toho ale volitelně lze režim na jedné straně nastavit na "normální".
Objekty se protínají ve zdrojových prostředcích.
Objekty transformované způsobem, který se některé z jejich povrchů překrývají, také vytváří boj z. Tento problém může také vytvořit transformace částí stromu scény v importované scéně v ARR.
Povrchy jsou záměrně vytvořené tak, aby se dotýkaly, jako jsou obtisky nebo text na stěnách.
Grafické artefakty využívající stereo vykreslování s více průchody v nativních aplikacích C++
V některých případech můžou vlastní nativní aplikace jazyka C++, které pro místní obsah (vykreslování do levého a pravého oka v samostatných průchodech) po volání BlitRemoteFrame použít režim vícenásobného stereo vykreslování (vykreslování do levého a pravého oka v samostatných průchodech), můžou aktivovat chybu ovladače. Výsledkem chyby jsou ne deterministické rasterizační chyby, což způsobuje náhodné mizení jednotlivých trojúhelníků nebo částí trojúhelníků místního obsahu. Z důvodů výkonu se přesto doporučuje vykreslit místní obsah pomocí modernější techniky stereo vykreslování s jedním průchodem, například pomocí SV_RenderTargetArrayIndex.
Chyby při stahování souborů převodu
Služba převodu může narazit na chyby při stahování souborů z úložiště objektů blob kvůli omezením systému souborů. Níže jsou uvedeny konkrétní případy selhání. Podrobné informace o omezeních systému souborů systému Windows najdete v dokumentaci k pojmenování souborů, cest a oborů názvů .
Kolidovací cesta a název souboru
V úložišti objektů blob je možné vytvořit soubor a složku se stejným názvem jako položky na stejné straně. Systém souborů Systému Windows to nepovoluje. Služba proto v takovém případě vygeneruje chybu stahování.
Délka cesty
Systém Windows a služba účtují omezení délky cest. Cesty k souborům a názvy souborů v úložišti objektů blob nesmí překročit 178 znaků. Například s hodnotou blobPrefix
models/Assets
, která je 13 znaků:
models/Assets/<any file or folder path greater than 164 characters will fail the conversion>
Služba převodu stáhne všechny soubory zadané v souboru blobPrefix
, nikoli pouze soubory použité v převodu. Soubory nebo složky, které způsobují problémy, můžou být v těchto případech méně běžné, takže je důležité zkontrolovat vše, co obsahuje účet úložiště v části blobPrefix
. Informace o tom, co se stáhne, najdete v následujících příkladech vstupů.
{
"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 'Take a Picture' (MRC) nezobrazuje žádný místní ani vzdálený obsah
K tomuto problému obvykle dochází v případě, že je projekt aktualizován z WMR na OpenXR a projekt přistupoval k nastavení Třídy HolographicViewConfiguration (Windows.Graphics.Holographic). Toto rozhraní API není v OpenXR podporované a nesmí být přístupné.