Felsöka
På den här sidan visas vanliga problem som stör Azure Remote Rendering och hur du kan lösa dem.
Klienten kan inte ansluta till servern
Se till att dina brandväggar (på enheten, inuti routrar osv.) inte blockerar de portar som anges i systemkraven.
Det gick inte att läsa in modellen
När du läser in en modell (till exempel via ett Unity-exempel) misslyckas även om blobkonfigurationen är korrekt, är det troligt att bloblagringen inte är korrekt länkad. Korrekt länkning förklaras i länkningen av ett lagringskontokapitel . Efter rätt länkning kan det ta upp till 30 minuter innan ändringarna börjar gälla.
Det går inte att länka lagringskontot till ARR-kontot
Ibland visas inte fjärrrenderingskontot under länkning av ett lagringskonto . Åtgärda problemet genom att gå till ARR-kontot i Azure Portal och välja Identitet under gruppen Inställningar till vänster. Kontrollera att Status är inställt på På.
Det går inte att läsa in modellen via en SAS-token
Om klientprogrammet inte kan läsa in en modell från lagring via en giltig SAS-token kan det bero på den offentliga nätverksåtkomstnivå som konfigurerats på bloblagringen. Inläsning av en ARR-modell från SAS-token fungerar bara om den har konfigurerats med alternativet "Aktiverad från alla nätverk":
Om det är ett krav att begränsa till privata slutpunkter måste lagringskontot länkas och modellen måste läsas in via den icke-SAS-kodsökväg som beskrivs här.
Felet 'Disconnected: VideoFormatNotAvailable
'
Kontrollera att din GPU stöder maskinvaruvideodekodning. Se Utvecklingsdator.
Om du arbetar på en bärbar dator med två GPU:er är det möjligt att GPU:n som du kör som standard inte tillhandahåller funktioner för maskinvaruvideodekodning. I så fall kan du försöka tvinga appen att använda den andra GPU:n. Det går ofta att ändra den använda GPU:n i GPU-drivrutinsinställningarna.
Det går inte att hämta sessions-/konverteringsstatus
Om du skickar REST API-kommandon för ofta kan servern begränsa och returnera fel så småningom. HTTP-statuskoden i begränsningsfallet är 429 ("för många begäranden"). Som tumregel bör det finnas en fördröjning på 5–10 sekunder mellan efterföljande anrop.
Observera att den här gränsen inte bara påverkar REST API-anropen när de anropas direkt utan även deras C#/C++-motsvarigheter, till exempel Session.GetPropertiesAsync
, Session.RenewAsync
eller Frontend.GetAssetConversionStatusAsync
. Vissa funktioner returnerar också information när den sparas för att försöka igen. Anger till exempel RenderingSessionPropertiesResult.MinimumRetryDelay
hur många sekunder du ska vänta innan du försöker utföra en ny kontroll. När det är tillgängligt är det bäst att använda ett sådant returnerat värde, eftersom det gör att du kan göra kontroller så ofta som möjligt, utan att bli begränsad.
Om du upplever begränsning på serversidan ändrar du koden för att göra anropen mindre ofta. Servern återställer begränsningstillståndet varje minut, så det är säkert att köra koden igen efter en minut.
H265 codec är inte tillgängligt
Det finns två orsaker till att servern kan vägra att ansluta med ett codec not available
fel.
H265-kodcen är inte installerad:
Se först till att installera HEVC-videotillägg som nämns i avsnittet Programvara i systemkraven.
Om du fortfarande stöter på problem kontrollerar du att grafikkortet har stöd för H265 och att du har den senaste grafikdrivrutinen installerad. Se avsnittet Utvecklingsdator i systemkraven för leverantörsspecifik information.
Codec är installerad, men kan inte användas:
Orsaken till det här problemet är en felaktig säkerhetsinställning för DLL:er. Det här problemet visas inte när du försöker titta på videor som kodas med H265. Att installera om codec löser inte heller problemet. Utför i stället följande steg:
Öppna en PowerShell med administratörsrättigheter och kör
Get-AppxPackage -Name Microsoft.HEVCVideoExtension*
(Observera att "*" beror på att för vissa paketinstallationsversioner är
HEVCVideoExtensions
namnet i stället förHEVCVideoExtension
). Kommandot bör mata utInstallLocation
codec:en, ungefär så här:InstallLocation : C:\Program Files\WindowsApps\Microsoft.HEVCVideoExtension_1.0.23254.0_x64__5wasdgertewe
Öppna mappen i Utforskaren
Det bör finnas en x86 - och en x64-undermapp . Högerklicka på en av mapparna och välj Egenskaper
- Välj fliken Säkerhet och välj knappen Avancerade inställningar
- Välj Ändra för ägaren
- Skriv Administratörer i textfältet
- Välj Kontrollera namn och OK
Upprepa stegen ovan för den andra mappen
Upprepa även stegen ovan på varje DLL-fil i båda mapparna. Det bör finnas fyra DLL:er helt och hållet.
Kontrollera att inställningarna nu är korrekta genom att utföra följande steg för var och en av de fyra DLL:erna:
- Välj Egenskaper>, säkerhetsredigering >
- Gå igenom listan över alla grupper/användare och se till att var och en har rätt uppsättning Läs och kör (bockmarkeringen i kolumnen tillåt måste vara markerad)
Låg videokvalitet
Videokvaliteten kan komprometteras antingen av nätverkskvaliteten eller den saknade H265-videokodcen.
- Se stegen för att identifiera nätverksproblem.
- Se systemkraven för att installera den senaste grafikdrivrutinen.
Video inspelad med MRC återspeglar inte kvaliteten på liveupplevelsen
En video kan spelas in på HoloLens via Mixed Reality Capture (MRC). Men den resulterande videon har sämre kvalitet än liveupplevelsen av två skäl:
- Videoramhastigheten är begränsad till 30 Hz i stället för 60 Hz.
- Videobilderna går inte igenom det sena steget för omprojektionsbearbetning , så videon verkar vara hackigare.
Båda är inneboende begränsningar i inspelningstekniken.
Svart skärm efter lyckad modellinläsning
Om du är ansluten till renderingskörningen och läst in en modell utan problem, men bara ser en svart skärm efteråt, kan detta ha några olika orsaker.
Vi rekommenderar att du testar följande innan du gör en mer djupgående analys:
- Är H265 codec installerat? Även om det bör finnas en återställning till H264-codecen har vi sett fall där den här reserven inte fungerade korrekt. Se systemkraven för att installera den senaste grafikdrivrutinen.
- När du använder ett Unity-projekt stänger du Unity, tar bort det tillfälliga biblioteket och obj-mapparna i projektkatalogen och läser in/skapar projektet igen. I vissa fall gjorde cachelagrade data att exemplet inte fungerade korrekt utan någon uppenbar anledning.
Om de här två stegen inte hjälpte måste du ta reda på om videorutor tas emot av klienten eller inte. Detta kan frågas programmatiskt enligt beskrivningen i avsnittet prestandafrågor på serversidan. FrameStatistics struct
Har en medlem som anger hur många videorutor som har tagits emot. Om det här antalet är större än 0 och ökar med tiden tar klienten emot faktiska videorutor från servern. Det måste därför vara ett problem på klientsidan.
Skalningsvärdet i konverteringsinställningarna tillämpas inte på modellen
Om en modell visas i Showcase eller Snabbstart med oförändrad skalning, även om en skalning tillämpas som en del av konverteringsinställningarnas geometriparametrar, beror detta förmodligen på exemplets inbyggda funktion för automatisk skalning. Exemplet skalar alltså modellen så att den passar bäst i vyns frustum, oavsett indataskalning.
Om det gäller Showcase kan automatisk skalning inaktiveras genom att ange en MaxSize
nolla i modellens Transform
avsnitt i models.xml-filen. Den här datadrivna metoden kräver att modellen läses in via XML i första hand, eftersom standardvärdet i alla andra fall MaxSize
är 1 meter. Det finns också en MinSize
egenskap som standard är 0,5 meter, vilket gör att alla mindre modeller skalas upp.
Mer information om hur du läser in modeller i Showcase finns i avsnittet Lägga till 3D-modelltillgångar i ARR Showcase-kapitlet i Showcase-dokumentationen.
Vanliga problem på klientsidan
Modellen överskrider gränserna för den valda virtuella datorn, särskilt det maximala antalet primitiver:
Se specifika gränser för serverstorlek.
Modellen är inte inuti kameran frustum:
I många fall visas modellen korrekt men ligger utanför kameran frustum. En vanlig orsak är att modellen har exporterats med en långt utanför mitten pivot så att den klipps av kamerans avlägsna urklippsplan. Den hjälper till att köra frågor mot modellens avgränsningsruta programmatiskt och visualisera rutan med Unity som en linjeruta eller skriva ut dess värden i felsökningsloggen.
Dessutom genererar konverteringsprocessen en json-utdatafil tillsammans med den konverterade modellen. Om du vill felsöka problem med modellpositionering är det värt att titta på boundingBox
posten i avsnittet outputStatistics:
{
...
"outputStatistics": {
...
"boundingBox": {
"min": [
-43.52,
-61.775,
-79.6416
],
"max": [
43.52,
61.775,
79.6416
]
}
}
}
Avgränsningsrutan beskrivs som en min
och max
position i 3D-utrymme, i meter. Så en koordinat på 1000,0 innebär att den är 1 kilometer från ursprunget.
Det kan finnas två problem med denna avgränsningslåda som leder till osynlig geometri:
- Rutan kan vara långt utanför mitten, så objektet klipps helt på grund av långt plan urklipp. Värdena
boundingBox
i det här fallet skulle se ut så här:min = [-2000, -5,-5], max = [-1990, 5,5]
, med en stor förskjutning på x-axeln som exempel här. Lös den här typen av problem genom att aktiverarecenterToOrigin
alternativet i modellkonverteringskonfigurationen. - Rutan kan centreras men vara storleksordningen för stor. Det innebär att även om kameran börjar i mitten av modellen, är dess geometri klippt i alla riktningar. Typiska
boundingBox
värden i det här fallet skulle se ut så här:min = [-1000,-1000,-1000], max = [1000,1000,1000]
. Orsaken till den här typen av problem är vanligtvis ett matchningsfel i enhetsskalan. För att kompensera anger du ett skalningsvärde under konverteringen eller markerar källmodellen med rätt enheter. Skalning kan också tillämpas på rotnoden när modellen läses in vid körning.
Unity-återgivningspipelinen innehåller inte återgivningskrokerna:
Azure Remote Rendering ansluter till Unity-återgivningspipelinen för att göra bildrutesammansättningen med videon och för att göra omprojektionen. Om du vill kontrollera att dessa krokar finns öppnar du menyn Window > Analysis > Frame debugger. Aktivera den och se till att det finns två poster för HolographicRemotingCallbackPass
i pipelinen:
Åtgärda genom att kontrollera att den angivna HybridRenderingPipeline-tillgången används:
.. som beskrivs mer detaljerat i Unity Render Pipelines.
Checkerboard-mönster återges efter modellinläsning
Om den renderade bilden ser ut så här:
återgivningen når sedan polygongränserna för standardkonfigurationsstorleken. För att minimera kan du antingen växla till premiumkonfigurationsstorlek eller minska antalet synliga polygoner.
Den renderade bilden i Unity är upp och ned
Följ Unity-självstudien : Visa fjärrmodeller exakt. En upp och ned-bild anger att Unity krävs för att skapa ett mål för återgivning utanför skärmen. Det här beteendet stöds för närvarande inte och ger en enorm prestandapåverkan på HoloLens 2.
Orsaken till det här problemet kan vara MSAA, HDR eller aktivering av efterbearbetning. Kontrollera att profilen med låg kvalitet har valts och angetts som standard i Unity. Det gör du genom att gå till Redigera > projektinställningar... > Kvalitet.
När du använder OpenXR-plugin-programmet i Unity 2020 finns det versioner av URP (Universal Render Pipeline) som skapar det här extra återgivningsmålet utanför skärmen oavsett om efterbearbetning har aktiverats. Det är därför viktigt att uppgradera URP-versionen manuellt till minst 10.5.1 (eller senare). Den här uppgraderingsprocessen beskrivs i systemkraven.
Unity-kod som använder API:et för fjärrrendering kompileras inte
Använda felsökning vid kompilering för Unity-redigeraren
Växla build-typen för Unity-lösningen till Felsök. När du testar ARR i Unity-redigeraren är definitionen UNITY_EDITOR
endast tillgänglig i "Felsökningsversioner". Den här inställningen är inte relaterad till den byggtyp som används för distribuerade program, där du bör föredra versionsversioner.
Kompilera fel vid kompilering av Unity-exempel för HoloLens 2
Vi har sett falska fel när vi försöker kompilera Unity-exempel (snabbstart, ShowCaseApp, ... ) för HoloLens 2. Visual Studio klagar på att de inte kan kopiera vissa filer, även om de finns där. Om du stöter på det här problemet:
- Ta bort alla temporära Unity-filer från projektet och försök igen. Stäng Unity, ta bort det tillfälliga biblioteket och obj-mapparna i projektkatalogen och läs in/skapa projektet igen.
- Kontrollera att projekten finns i en katalog på disken med en relativt kort sökväg, eftersom kopieringssteget ibland verkar stöta på problem med långa filnamn.
- Om det inte hjälper kan det bero på att MS Sense stör kopieringssteget. Om du vill konfigurera ett undantag kör du det här registerkommandot från kommandoraden (kräver administratörsbehörighet):
reg.exe ADD "HKLM\SOFTWARE\Policies\Microsoft\Windows Advanced Threat Protection" /v groupIds /t REG_SZ /d "Unity"
Arm64-versioner för Unity-projekt misslyckas eftersom AudioPluginMsHRTF.dll saknas
AudioPluginMsHRTF.dll
For Arm64 lades till i Windows Mixed Reality-paketet (com.unity.xr.windowsmr.metro) i version 3.0.1. Kontrollera att du har version 3.0.1 eller senare installerat via Unity Package Manager. Från menyraden Unity går du till Fönsterpakethanteraren > och letar efter Windows Mixed Reality-paketet.
Unity-plugin-programmet Cinemachine
fungerar inte i läget Fjärrposition
I läget Fjärrposition skapar ARR Unity-bindningskoden implicit en proxykamera som utför den faktiska återgivningen. I det här fallet är huvudkamerans skyddsmask inställd på 0 ("ingenting") för att effektivt stänga av renderingen för den. Vissa plugin-program från tredje part (till exempel Cinemachine
) som kör kameran kan dock förlita sig på att åtminstone vissa lagerbitar har ställts in.
I det här syftet kan du med bindningskoden programmatiskt ändra lagerbitmasken för huvudkameran. Mer specifikt krävs följande steg:
- Skapa ett nytt lager i Unity som inte används för att återge någon lokal scengeometri. I det här exemplet antar du att lagret heter "Cam".
- Skicka den här bitmasken till ARR så att ARR ställer in den på huvudkameran:
RemoteManagerUnity.CameraCullingMask = LayerMask.GetMask("Cam");
Cinemachine
Konfigurera egenskaperna så att de använder det här nya lagret:
Det lokala poseläget påverkas inte av det här problemet, eftersom ARR-bindningen i det här fallet inte omdirigerar renderingen till en intern proxykamera.
Det interna C++-baserade programmet kompileras inte
Felet "Det gick inte att hitta biblioteket" för UWP-programmet eller DLL
I C++ NuGet-paketet finns det en filfil microsoft.azure.remoterendering.Cpp.targets
som definierar vilken av den binära smaken som ska användas. För att identifiera UWP
söker villkoren i filen efter ApplicationType == 'Windows Store'
. Därför måste du se till att den här typen anges i projektet. Det bör vara fallet när du skapar ett UWP-program eller DLL via Visual Studio-projektguiden.
Instabila hologram
Om renderade objekt verkar röra sig tillsammans med huvudrörelser kan det uppstå problem med LSR (Late Stage Reprojection). Mer information om hur du närmar dig en sådan situation finns i avsnittet Omprojektion för sent stadium.
En annan orsak till instabila hologram (wobbling, skevhet, jittering eller hoppande hologram) kan vara dålig nätverksanslutning, särskilt otillräcklig nätverksbandbredd eller för hög svarstid. En bra indikator för nätverksanslutningens kvalitet är prestandastatistikvärdet ServiceStatistics.VideoFramesReused
. Återanvända ramar indikerar situationer där en gammal videoram behövde återanvändas på klientsidan eftersom det inte fanns någon ny videoram tillgänglig, till exempel på grund av paketförlust eller variationer i nätverksfördröjningen. Om ServiceStatistics.VideoFramesReused
är ofta större än noll, indikerar det ett nätverksproblem.
Ett annat värde att titta på är ServiceStatistics.LatencyPoseToReceiveAvg
. Den bör konsekvent vara under 100 ms. Att se högre värden kan tyda på att du är ansluten till ett datacenter som ligger för långt borta.
En lista över potentiella åtgärder finns i riktlinjerna för nätverksanslutning.
Lokalt innehåll (UIs, ...) på HoloLens 2 renderas med betydligt fler förvrängningsartefakter än utan ARR
Den här artefakten beror på en standardinställning som byter ut den lokala innehållsprojektionskvaliteten mot körningsprestanda. I kapitlet om återgivningspositionslägena kan du se hur projektionsläget kan ändras så att lokalt innehåll återges på samma reprojectionkvalitetsnivå som utan ARR.
Z-fighting
Medan ARR erbjuder z-fightingreduceringsfunktioner, kan z-fighting fortfarande dyka upp i scenen. Den här guiden syftar till att felsöka de återstående problemen.
Rekommenderade åtgärder
Använd följande arbetsflöde för att minimera z-fighting:
Testa scenen med standardinställningarna för ARR (z-fighting mitigation on)
Inaktivera z-fighting-åtgärden via dess API
Ändra kameran nära och långt planet till ett närmare intervall
Felsöka scenen via nästa avsnitt
Undersöka återstående z-fighting
Om ovanstående steg har uttömts och de återstående z-striderna är oacceptabla måste den underliggande orsaken till z-fighting undersökas. Som anges på funktionssidan z-fightingreducering finns det två huvudsakliga orsaker till z-fighting: djupprecisionsförlust längst bort i djupintervallet och ytor som korsar varandra samtidigt som de är coplanar. Djupprecisionsförlust är en matematisk eventualitet och kan bara minimeras genom att följa steg 3 ovan. Coplanarytor indikerar ett källtillgångsfel och är bättre fasta i källdata.
ARR har en funktion för att avgöra om ytor kan z-fight: Checkerboard highlighting. Du kan också visuellt avgöra vad som orsakar z-fighting. Följande första animering visar ett exempel på djupprecisionsförlust i avståndet, och den andra visar ett exempel på nästan coplanära ytor:
Jämför de här exemplen med din z-fighting för att fastställa rotorsaken eller om du vill följa det här stegvisa arbetsflödet:
- Placera kameran ovanför z-fighting ytorna för att titta direkt på ytan.
- Flytta långsamt kameran bakåt, bort från ytorna.
- Om z-fighting är synlig hela tiden är ytorna helt coplanar.
- Om z-fighting är synlig för det mesta är ytorna nästan coplanar.
- Om z-fighting bara är synligt från långt borta är orsaken brist på djupprecision.
Coplanarytor kan ha många olika orsaker:
Ett objekt duplicerades av det exporterande programmet på grund av ett fel eller olika arbetsflödesmetoder.
Kontrollera dessa problem med respektive program- och programstöd.
Ytor dupliceras och vänds så att de visas dubbelsidiga i renderare som använder skyddsgallring i fram- eller baksida.
Import via modellkonverteringen avgör modellens huvudsida. Dubbelsidighet antas som standard. Ytan återges som en tunn vägg med fysiskt korrekt belysning från båda sidor. Enkelsidighet kan underförstås av flaggor i källtillgången eller uttryckligen framtvingas under modellkonverteringen. Dessutom, men om du vill, kan det enkelsidiga läget ställas in på "normal".
Objekt korsar källtillgångarna.
Objekt som transformeras på ett sätt som vissa av deras ytor överlappar skapar också z-fighting. Att transformera delar av scenträdet i den importerade scenen i ARR kan också skapa det här problemet.
Ytor är målmedvetet författade att röra vid, till exempel dekaler eller text på väggar.
Grafikartefakter med stereorendering med flera pass i interna C++-appar
I vissa fall kan anpassade interna C++-appar som använder ett stereoåtergivningsläge med flera pass för lokalt innehåll (återgivning till vänster och höger öga i separata pass) efter att ha anropat BlitRemoteFrame utlösa en drivrutinsfel. Buggen resulterar i icke-deterministiska rasteriseringsproblem, vilket gör att enskilda trianglar eller delar av trianglar i det lokala innehållet försvinner slumpmässigt. Av prestandaskäl rekommenderar vi ändå att du återger lokalt innehåll med en modernare stereorenderingsteknik med enkelpassning, till exempel med hjälp av SV_RenderTargetArrayIndex.
Nedladdningsfel för konverteringsfil
Konverteringstjänsten kan stöta på fel vid nedladdning av filer från bloblagring på grund av filsystembegränsningar. Specifika felfall visas nedan. Omfattande information om begränsningar för Windows-filsystem finns i dokumentationen namngivningsfiler, sökvägar och namnområden .
Kolliderande sökväg och filnamn
I Blob Storage är det möjligt att skapa en fil och en mapp med exakt samma namn som syskonposter. Windows-filsystemet tillåter inte detta. Därför genererar tjänsten ett nedladdningsfel i det fallet.
Sökvägslängd
Det finns sökvägslängdsgränser som införts av Windows och tjänsten. Filsökvägar och filnamn i bloblagringen får inte överstiga 178 tecken. Till exempel med en blobPrefix
av models/Assets
, vilket är 13 tecken:
models/Assets/<any file or folder path greater than 164 characters will fail the conversion>
Konverteringstjänsten laddar ned alla filer som anges under blobPrefix
, inte bara de filer som används i konverteringen. De filer/mappar som orsakar problem kan vara mindre uppenbara i dessa fall, så det är viktigt att kontrollera allt som finns i lagringskontot under blobPrefix
. Se exempelindata nedan för vad som laddas ned.
{
"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 "Ta en bild" (MRC) visar inget lokalt eller fjärranslutet innehåll
Det här problemet uppstår vanligtvis om ett projekt uppdateras från WMR till OpenXR och projektet har åtkomst till inställningarna för HolographicViewConfiguration Class (Windows.Graphics.Holographic). Det här API:et stöds inte i OpenXR och får inte nås.