Hologramstabilitet

HoloLens har en inbyggd bildstabiliseringspipeline för att uppnå stabila hologram. Stabiliseringspipelinen fungerar automatiskt i bakgrunden, så du behöver inte vidta några extra åtgärder för att aktivera den. Du bör dock använda tekniker som förbättrar hologramstabiliteten och undviker scenarier som minskar stabiliteten.

Terminologi för hologramkvalitet

Hologramkvaliteten är ett resultat av god miljö och bra apputveckling. Appar som körs i en konstant 60 bildrutor per sekund i en miljö där HoloLens kan spåra omgivningen säkerställer att hologrammet och det matchande koordinatsystemet är synkroniserade. Från en användares perspektiv flyttas inte hologram som är avsedda att stå stilla i förhållande till miljön.

Följande terminologi kan hjälpa dig när du identifierar problem med miljön, inkonsekventa eller låga renderingshastigheter eller något annat.

  • Noggrannhet. När hologrammet är världslåst och placerat i den verkliga världen bör det förbli där det placeras i förhållande till den omgivande miljön och oberoende av ändringar i användarrörelser eller små och glesa miljöer. Om ett hologram senare visas på en oväntad plats är det ett noggrannhetsproblem . Sådana scenarier kan inträffa om två distinkta rum ser identiska ut.
  • Jitter. Användare ser jitter som högfrekvent skakning av ett hologram, vilket kan inträffa när spårning av miljön försämras. För användare körs sensorjusteringen i lösningen.
  • Judder. Låga återgivningsfrekvenser resulterar i ojämn rörelse och dubbla bilder av hologram. Judder är särskilt märkbar i hologram med rörelse. Utvecklare måste ha en konstant 60 FPS.
  • Drift. Användare ser drift som ett hologram verkar flytta bort från den plats där det ursprungligen placerades. Drift inträffar när du placerar hologram långt bort från spatiala fästpunkter, särskilt i omappade delar av miljön. Att skapa hologram nära spatiala fästpunkter minskar sannolikheten för drift.
  • Hoppighet. När ett hologram "dyker upp" eller "hoppar" bort från dess plats ibland. Jumpiness kan uppstå när spårning justerar hologram så att de matchar den uppdaterade förståelsen av din miljö.
  • Simma. När ett hologram verkar svänga som motsvarar rörelse i användarens huvud. Simma inträffar när programmet inte har implementerat omprojektion helt och om HoloLens inte är kalibrerat för den aktuella användaren. Användaren kan köra kalibreringsprogrammet igen för att åtgärda problemet. Utvecklare kan uppdatera stabiliseringsplanet för att ytterligare förbättra stabiliteten.
  • Färgseparering. Skärmarna i HoloLens är sekventiella färgskärmar, som blinkar färgkanaler av röd-grön-blå-grön vid 60 Hz (enskilda färgfält visas vid 240 Hz). När en användare spårar ett rörligt hologram med sina ögon separeras hologrammets inledande och avslutande kanter i deras ingående färger, vilket ger en regnbågseffekt. Graden av separation beror på hologrammets hastighet. I vissa sällsynta fall kan flytt av huvudet snabbt medan man tittar på ett stationärt hologram också resultera i en regnbågseffekt, som kallas färgseparering.

Bildfrekvens

Bildfrekvens är den första pelare för hologramstabilitet. För att hologram ska se stabila ut i världen måste varje bild som presenteras för användaren ha hologram ritade på rätt plats. Visar på HoloLens uppdatera 240 gånger per sekund, visar fyra separata färgfält för varje ny renderad bild, vilket resulterar i en användarupplevelse på 60 FPS (bildrutor per sekund). För att ge bästa möjliga upplevelse måste programutvecklare underhålla 60 FPS, vilket innebär att konsekvent tillhandahålla en ny avbildning till operativsystemet var 16:e millisekunder.

60 FPS HoloLens måste rendera bilder från användarens position för att kunna rita hologram så att de ser ut som om de sitter i verkligheten. Eftersom bildåtergivningen tar tid förutsäger HoloLens var en användares huvud kommer att vara när bilderna visas på displayerna. Den här förutsägelsealgoritmen är dock en uppskattning. HoloLens har maskinvara som justerar den renderade bilden för att ta hänsyn till avvikelsen mellan den förutsagda huvudpositionen och den faktiska huvudpositionen. Justeringen gör att bilden som användaren ser visas som om den återges från rätt plats och hologram känns stabila. Bilduppdateringarna fungerar bäst med små ändringar och kan inte helt åtgärda vissa saker i den renderade bilden, till exempel motion-parallax.

Genom att återge på 60 FPS gör du tre saker för att skapa stabila hologram:

  1. Minimera den övergripande svarstiden mellan återgivning av en bild och den bild som visas av användaren. I en motor med ett spel och en renderingstråd som körs i lockstep kan körning på 30FPS lägga till 33,3 ms extra svarstid. Att minska svarstiden minskar förutsägelsefelet och ökar hologramstabiliteten.
  2. Att göra det så att varje bild som når användarens ögon har en konsekvent fördröjning. Om du renderar med 30 fps visas fortfarande bilder på 60 FPS, vilket innebär att samma bild visas två gånger i rad. Den andra ramen har 16,6 ms längre svarstid än den första ramen och måste korrigera en mer uttalad mängd fel. Denna inkonsekvens i felstorlek kan orsaka oönskad 60 Hz-judder.
  3. Minska utseendet på judder, som kännetecknas av ojämn rörelse och dubbla bilder. Snabbare hologramrörelser och lägre återgivningshastigheter är associerade med mer uttalad judder. Att alltid sträva efter att underhålla 60 FPS hjälper till att undvika judder för ett givet rörligt hologram.

Konsekvens för bildfrekvens Konsekvens för bildfrekvens är lika viktigt som en hög bildfrekvens per sekund. Ibland är borttagna bildrutor oundvikliga för innehållsrika program, och HoloLens implementerar vissa sofistikerade algoritmer för att återställa från tillfälliga problem. En ständigt varierande ramhastighet är dock mycket mer märkbar för en användare än att köra konsekvent med lägre bildfrekvens. Ett program som till exempel renderas smidigt för fem bildrutor (60 FPS under dessa fem bildrutor) och sedan släpper varannan bildruta för de kommande 10 bildrutorna (30 FPS under dessa 10 bildrutor) verkar mer instabilt än ett program som konsekvent återges vid 30 FPS.

I en relaterad kommentar begränsar operativsystemet programmen till 30 FPS när mixed reality-avbildningen körs.

Prestandaanalys Det finns olika typer av verktyg som kan användas för att mäta programmets bildfrekvens, till exempel:

  • GPUView
  • Visual Studio Graphics Debugger
  • Profilerare som är inbyggda i 3D-motorer som Unity

Hologramåtergivningsavstånd

Det mänskliga visuella systemet integrerar flera avståndsberoende signaler när det fixerar och fokuserar på ett objekt.

  • Boende - Fokus för ett enskilt öga.
  • Konvergens – Två ögon rör sig inåt eller utåt för att centrera på ett objekt.
  • Binokulär syn – Skillnader mellan vänster- och högerögonbilder som är beroende av ett objekts avstånd från fixeringspunkten.
  • Skuggning, relativ vinkelstorlek och andra monocular (enöga) signaler.

Konvergens och boende är unika eftersom deras extra-retinala signaler relaterade till hur ögonen förändras för att uppfatta föremål på olika avstånd. I naturlig visning är konvergens och boende sammankopplade. När ögonen ser något nära (till exempel din näsa), korsar ögonen och rymmer till en nära punkt. När ögonen ser något i oändlighet blir ögonen parallella och ögat rymmer till oändligheten.

Användare som bär HoloLens rymmer alltid 2,0 m för att upprätthålla en tydlig bild eftersom HoloLens-skärmarna är fasta på ett optiskt avstånd cirka 2,0 m från användaren. Apputvecklare styr var användarnas ögon konvergerar genom att placera innehåll och hologram på olika djup. När användarna tar emot och konvergerar till olika avstånd bryts den naturliga länken mellan de två signalerna, vilket kan leda till visuellt obehag eller trötthet, särskilt när konfliktens omfattning är stor.

Obehag från gräns-boende konflikt kan undvikas eller minimeras genom att hålla konvergerat innehåll så nära 2,0 m som möjligt (det vill s. i en scen med mycket djup plats intresseområden nära 2,0 m, när det är möjligt). När innehållet inte kan placeras nära 2,0 m är obehaget från gränskonflikten störst när användarens blick fram och tillbaka mellan olika avstånd. Med andra ord är det mycket bekvämare att titta på ett stationärt hologram som stannar 50 cm bort än att titta på ett hologram 50 cm bort som rör sig mot och bort från dig över tid.

Att placera innehåll på 2,0 m är också fördelaktigt eftersom de två skärmarna är utformade för att helt överlappa på detta avstånd. För bilder som placerats utanför det här planet, när de flyttas från sidan av den holografiska ramen visas de från en skärm medan de fortfarande är synliga på den andra. Denna binokulära rivalitet kan vara störande för hologrammets djupuppfattning.

Optimalt avstånd för att placera hologram från användaren

Optimalt avstånd för att placera hologram från användaren

Klipp ut plan För maximal komfort rekommenderar vi att du klipper återgivningsavståndet vid 85 cm med tona ut innehåll från och med 1 m. I program där hologram och användare båda är stationära kan hologram visas bekvämt så nära 50 cm. I dessa fall bör program placera ett klippplan som inte är närmare än 30 cm och tona ut bör starta minst 10 cm från klippplanet. När innehållet är närmare än 85 cm är det viktigt att se till att användarna inte ofta rör sig närmare eller längre från hologram eller att hologram inte ofta rör sig närmare eller längre från användaren eftersom dessa situationer mest sannolikt kommer att orsaka obehag från konflikten mellan gräns och boende. Innehållet bör utformas för att minimera behovet av interaktion närmare än 85 cm från användaren, men när innehållet måste återges närmare än 85 cm är en bra tumregel för utvecklare att utforma scenarier där användare och/eller hologram inte rör sig mer än 25 % av tiden.

Metodtips När hologram inte kan placeras på 2 m och konflikter mellan konvergens och boende inte kan undvikas, är den optimala zonen för hologramplacering mellan 1,25 m och 5 m. I varje fall bör designers strukturera innehåll för att uppmuntra användare att interagera 1+ m bort (till exempel justera innehållsstorlek och standardplaceringsparametrar).

Återskapande

HoloLens har en sofistikerad maskinvaruassisterad holografisk stabiliseringsteknik som kallas reprojection. Reprojection tar hänsyn till rörelse och förändring av synvinkeln (CameraPose) när scenen animerar och användaren flyttar huvudet. Program måste vidta specifika åtgärder för att på bästa sätt använda omprojektion.

Det finns fyra huvudsakliga typer av reprojection

  • Återskapande av djup: Ger bästa resultat med minsta möjliga ansträngning från programmet. Alla delar av den renderade scenen stabiliseras oberoende baserat på avståndet från användaren. Vissa återgivningsartefakter kan vara synliga där det finns skarpa ändringar på djupet. Det här alternativet är endast tillgängligt på HoloLens 2 och integrerande headset.
  • Planar-reprojection: Ger programmet exakt kontroll över stabiliseringen. Ett plan anges av programmet och allt på det planet kommer att vara den mest stabila delen av scenen. Ju längre ett hologram är bort från planet, desto mindre stabilt blir det. Det här alternativet är tillgängligt på alla Windows MR-plattformar.
  • Automatisk planeringsreprojektion: Systemet anger ett stabiliseringsplan med hjälp av information i djupbufferten. Det här alternativet är tillgängligt i HoloLens generation 1 och HoloLens 2.
  • Ingen: Om programmet inte gör något används Planar Reprojection med stabiliseringsplanet som är fast vid 2 meter i riktning mot användarens huvuds blick, vilket vanligtvis ger undermåliga resultat.

Program måste vidta specifika åtgärder för att aktivera de olika typerna av reprojection

  • Återskapande av djup: Programmet skickar sin djupbuffert till systemet för varje renderad ram. I Unity görs återskapande av djup med alternativet Delat djupbuffert i fönstret Windows Mixed Reality Inställningar under Hantering av XR-plugin-program. DirectX-appar anropar CommitDirect3D11DepthBuffer. Programmet ska inte anropa SetFocusPoint.
  • Planar-reprojection: På varje bildruta talar program om för systemet var ett plan ska stabiliseras. Unity-program anropar SetFocusPointForFrame och bör ha delad djupbuffert inaktiverat . DirectX-appar anropar SetFocusPoint och bör inte anropa CommitDirect3D11DepthBuffer.
  • Automatisk planeringsreprojektion: För att aktivera måste programmet skicka sin djupbuffert till systemet på samma sätt som för att återskapa djup. Appar som använder Mixed Reality Toolkit (MRTK) kan konfigurera kamerainställningsprovidern för att använda AutoPlanar Reprojection. Interna appar ska ange DepthReprojectionMode i HolographicCameraRenderingParameters till AutoPlanar varje bildruta. För HoloLens generation 1 ska programmet inte anropa SetFocusPoint.

Välja återprojektionsteknik

Stabiliseringstyp Integrerande headset HoloLens generation 1 HoloLens 2
Återskapa djup Rekommenderas Ej tillämpligt Rekommenderas

Unity-program måste använda Unity 2018.4.12+, Unity 2019.3+ eller Unity 2020.3+. Använd annars automatisk planaromarering.
Automatisk återprojektion för planar Ej tillämpligt Rekommenderad standard Rekommenderas om djupåtergivning inte ger bästa resultat

Unity-program rekommenderas att använda Unity 2018.4.12+, Unity 2019.3+ eller Unity 2020.3+. Tidigare Unity-versioner fungerar med något degraderade reprojection-resultat.
Planera omprojektion Rekommenderas inte Rekommenderas om Automatisk Planar inte ger bästa resultat Använd om inget av djupalternativen ger önskat resultat

Kontrollera att djup har angetts korrekt

När en återprojektionsmetod använder djupbufferten är det viktigt att kontrollera att innehållet i djupbufferten representerar programmets renderade scen. Ett antal faktorer kan orsaka problem. Om det till exempel finns en andra kamera som används för att återge överlägg i användargränssnittet kommer den troligen att skriva över all djupinformation från den faktiska vyn. Transparenta objekt anger ofta inte djup. En del textåtergivning anger inte djup som standard. Det kommer att finnas synliga problem i återgivningen när djupet inte matchar de renderade hologrammet.

HoloLens 2 har en visualiserare som visar var djup är och inte anges, vilket kan aktiveras från enhetsportalen. På fliken Vyer>hologramstabilitet markerar du kryssrutan Visa djupvisualisering i headsetet . Områden som har rätt djup är blå. Renderade objekt som inte har någon djupuppsättning är markerade i rött och måste åtgärdas.

Anteckning

Visualiseringen av djupet visas inte i Mixed Reality Capture. Den visas bara via enheten.

Vissa GPU-visningsverktyg tillåter visualisering av djupbufferten. Programutvecklare kan använda dessa verktyg för att se till att djup anges korrekt. Läs dokumentationen för programmets verktyg.

Använda Planar Reprojection

Anteckning

För integrerande skrivbordsheadset är det vanligtvis kontraproduktivt att ställa in ett stabiliseringsplan, eftersom det ger mindre visuell kvalitet än att tillhandahålla appens djupbuffert till systemet för att möjliggöra djupbaserad återprojektion per bildpunkt. Om du inte kör på en HoloLens bör du i allmänhet undvika att ange stabiliseringsplanet.

Stabiliseringsplan för 3D-objekt

Enheten försöker automatiskt välja det här planet, men programmet bör hjälpa till genom att välja fokuspunkten i scenen. Unity-appar som körs på en HoloLens bör välja den bästa fokuspunkten baserat på din scen och skicka den till SetFocusPoint(). Ett exempel på hur du ställer in fokuspunkten i DirectX ingår i standardmallen för snurrande kuber.

Unity skickar din djupbuffert till Windows för att aktivera återprojektion per bildpunkt när du kör din app på ett integrerande headset som är anslutet till en stationär dator, vilket ger ännu bättre bildkvalitet utan explicit arbete från appen. Du bör bara ange en fokuspunkt när din app körs på en HoloLens, annars åsidosätts omprojektionen per bildpunkt.

// SetFocusPoint informs the system about a specific point in your scene to
// prioritize for image stabilization. The focus point is set independently
// for each holographic camera.
// You should set the focus point near the content that the user is looking at.
// In this example, we put the focus point at the center of the sample hologram,
// since that is the only hologram available for the user to focus on.
// You can also set the relative velocity and facing of that content; the sample
// hologram is at a fixed point so we only need to indicate its position.
renderingParameters.SetFocusPoint(
    currentCoordinateSystem,
    spinningCubeRenderer.Position
    );

Placeringen av fokuspunkten beror till stor del på vad hologrammet tittar på. Appen har blickvektorn som referens och appdesignern vet vilket innehåll användaren vill att användaren ska observera.

Det viktigaste en utvecklare kan göra för att stabilisera hologram är att rendera vid 60 FPS. Om du sjunker under 60 FPS minskas hologramstabiliteten avsevärt, oavsett optimering av stabiliseringsplanet.

Metodtips Det finns inget universellt sätt att konfigurera stabiliseringsplanet och det är appspecifikt. Vår huvudsakliga rekommendation är att experimentera och se vad som fungerar bäst för ditt scenario. Försök dock att justera stabiliseringsplanet med så mycket innehåll som möjligt eftersom allt innehåll på det här planet är helt stabiliserat.

Exempel:

  • Om du bara har planmatinnehåll (läsapp, videouppspelningsapp) justerar du stabiliseringsplanet med det plan som innehåller ditt innehåll.
  • Om det finns tre små sfärer som är världslåsta gör du stabiliseringsplanet "klippt" genom mitten av alla sfärer som för närvarande finns i användarens vy.
  • Om din scen har innehåll på betydligt olika djup prioriterar du ytterligare objekt.
  • Se till att justera stabiliseringspunkten varje bildruta för att sammanfalla med det hologram som användaren tittar på

Saker att undvika Stabiliseringsplanet är ett bra verktyg för att uppnå stabila hologram, men om det missbrukas kan det leda till allvarlig instabilitet i bilden.

  • "Skjut och glöm inte". Du kan hamna med stabiliseringsplanet bakom användaren eller kopplas till ett objekt som inte längre finns i användarens vy. Se till att det normala stabiliseringsplanet är inställt på motsatt kamera framåt (till exempel -camera.forward)
  • Ändra inte snabbt stabiliseringsplanet fram och tillbaka mellan ytterligheter
  • Lämna inte stabiliseringsplanet inställt på ett fast avstånd/orientering
  • Låt inte stabiliseringsplanet skära igenom användaren
  • Ställ inte in fokuspunkten när du kör på en stationär dator i stället för en HoloLens, utan förlita dig i stället på djupbaserad återprojektion per bildpunkt.

Färgseparering

På grund av holoLens-skärmarnas natur kan en artefakt som kallas "färgseparation" ibland uppfattas. Den visas som en bild som separerar i enskilda basfärger – röd, grön och blå. Artefakten kan vara särskilt synlig när vita objekt visas, eftersom de har stora mängder rött, grönt och blått. Det är mest uttalat när en användare visuellt spårar ett hologram som rör sig över den holografiska ramen med hög hastighet. Ett annat sätt som artefakten kan manifestera är att förvränga/deformera objekt. Om ett objekt har hög kontrast och/eller rena färger som rött, grönt, blått, färgseparation uppfattas det som att det förvränger olika delar av objektet.

Exempel på hur färgseparationen för en huvudlåst vit rund markör kan se ut när en användare roterar huvudet åt sidan:

Exempel på hur färgseparationen för en huvudlåst vit rund markör kan se ut när en användare roterar huvudet åt sidan.

Även om det är svårt att helt undvika färgseparation finns det flera tillgängliga tekniker för att minimera det.

Färgseparation kan ses på:

Så här dämpar du effekterna av färgseparation:

  • Gör så att objektet släpar efter användarens blick. Det bör verka som om det har en viss tröghet och är fäst vid blicken "på fjädrar". Den här metoden saktar ned markören (minskar separationsavståndet) och placerar den bakom användarens troliga blickpunkt. Så länge det snabbt kommer ikapp när användaren slutar skifta blicken känns det naturligt.
  • Om du vill flytta ett hologram kan du försöka hålla rörelsehastigheten under 5 grader/sekund om du förväntar dig att användaren följer det med ögonen.
  • Använd ljus i stället för geometri för markören. En källa till virtuell belysning som är kopplad till blicken uppfattas som en interaktiv pekare men orsakar inte färgseparering.
  • Justera stabiliseringsplanet så att det matchar de hologram som användaren tittar på.
  • Gör objektet rött, grönt eller blått.
  • Växla till en suddig version av innehållet. Till exempel kan en rund vit markör ändras till en något suddig linje orienterad i rörelseriktningen.

Precis som tidigare är återgivning vid 60 FPS och inställning av stabiliseringsplanet de viktigaste teknikerna för hologramstabilitet. Om du står inför märkbar färgseparation kontrollerar du först att bildrutefrekvensen uppfyller förväntningarna.

Se även