Översikt över Holographic Rendering

Med holografisk återgivning kan ditt program rita ett hologram på en exakt plats i världen runt användaren, oavsett om det är exakt placerat i den fysiska världen eller inom en virtuell sfär som du har skapat. Hologram är objekt av ljud och ljus. Rendering gör att programmet kan lägga till ljuset.

Stöd för enheter

Funktion HoloLens (första generationen) HoloLens 2 Integrerande headset
Rendering ✔️ ✔️ ✔️

Holografisk återgivning

Nyckeln till holografisk återgivning är att veta vilken typ av enhet som används. Enheter med genomskinliga skärmar, till exempel HoloLens, lägger till ljus i världen. Svarta bildpunkter är helt transparenta, medan ljusare bildpunkter blir alltmer ogenomskinliga. Eftersom ljuset från skärmarna läggs till i ljuset från den verkliga världen, är vita pixlar genomskinliga.

Även om stereoskopisk återgivning ger en djupreplik för dina hologram, kan du lägga till jordningseffekter som hjälper användarna att lättare se vilken yta ett hologram är nära. En grundteknik är att lägga till en glöd runt ett hologram på den närliggande ytan och sedan återge en skugga mot denna glöd. På så sätt verkar din skugga subtrahera ljus från miljön. Rumsligt ljud är en annan viktig djupreplik som låter användarna resonera om avståndet och den relativa platsen för ett hologram.

Enheter med ogenomskinliga skärmar, som Windows Mixed Reality integrerande headset, blockerar världen. Svarta bildpunkter är helsvart och alla andra färger visas som den färgen för användaren. Ditt program ansvarar för att återge allt som användaren ser. Detta gör det ännu viktigare att upprätthålla en konstant uppdateringsfrekvens så att användarna får en bekväm upplevelse.

Förutsagda återgivningsparametrar

Headset för mixad verklighet (både HoloLens och integrerande headset) spårar kontinuerligt användarens huvuds position och orientering i förhållande till omgivningen. När ditt program börjar förbereda nästa bildruta förutsäger systemet var användarens huvud kommer att finnas i framtiden vid exakt det ögonblick då ramen visas på bildskärmarna. Baserat på den här förutsägelsen beräknar systemet vyn och projektionen transformeras för den ramen. Programmet måste använda dessa transformeringar för att ge rätt resultat. Om transformeringar som tillhandahålls av systemet inte används överensstämmer inte den resulterande avbildningen med den verkliga världen, vilket leder till användarens obehag.

Anteckning

För att exakt förutsäga när en ny ram kommer att nå bildskärmarna mäter systemet ständigt den effektiva svarstiden från slutpunkt till slutpunkt för programmets renderingspipeline. Systemet anpassar sig till längden på din återgivningspipeline, men du kan förbättra hologramstabiliteten genom att hålla pipelinen så kort som möjligt.

Program som använder avancerade tekniker för att utöka systemförutsägelserna kan åsidosätta systemvyn och projektionstransformeringar. Dessa program måste fortfarande använda transformeringar som tillhandahålls av systemet som grund för sina anpassade transformeringar för att ge meningsfulla resultat.

Andra återgivningsparametrar

När du återger en ram anger systemet det backbuffertvyport som programmet ska rita i. Det här visningsområdet är ofta mindre än rambuffertens fulla storlek. Oavsett visningsområdets storlek, när ramen återges av programmet, skalar systemet upp bilden så att den fyller hela displayerna.

För program som inte kan renderas med den uppdateringshastighet som krävs kan systemåtergivningsparametrar konfigureras för att minska minnesbelastningen och återgivningskostnaden på bekostnad av ökade pixelalias. Serverbuffertformatet kan också ändras, vilket för vissa appar kan hjälpa till att förbättra minnesbandbredden och pixelgenomflödet.

Återgivningens frustum, upplösning och ramhastighet där din app uppmanas att återge kan också ändras från ram till ram och kan skilja sig åt mellan vänster och höger öga. När till exempel MRC (Mixed Reality Capture ) är aktiv och konfigurationen av bild-/videokameravyn inte är anmäld, kan ett öga återges med en större FOV eller upplösning.

För en viss ram måste din app rendera med hjälp av vytransformering, projektionstransformering och visningsupplösning som tillhandahålls av systemet. Dessutom får ditt program aldrig förutsätta att någon renderings- eller vyparameter förblir fast från bildruta till ram. Motorer som Unity hanterar alla dessa transformeringar åt dig i sina egna kameraobjekt så att användarnas fysiska rörelse och systemets tillstånd alltid respekteras. Om ditt program tillåter virtuell förflyttning av användaren genom världen (t.ex. med hjälp av tumstickan på en spelplatta) kan du lägga till ett överordnat riggobjekt ovanför kameran som flyttar runt det. Detta gör att kameran återspeglar både användarens virtuella och fysiska rörelse. Om ditt program ändrar vytransformerings-, projektionstransformerings- eller viewport-dimensionen som tillhandahålls av systemet, måste det informera systemet genom att anropa lämpligt åsidosättnings-API.

För att förbättra stabiliteten i din holografiska återgivning bör din app ge Windows varje ram den djupbuffert som används för återgivning. Om din app har en djupbuffert bör den ha sammanhängande djupvärden, med djup uttryckt i meter från kameran. Detta gör det möjligt för systemet att använda djupdata per bildpunkt för att stabilisera innehållet bättre om användarens huvud förskjuts något från den förväntade platsen. Om du inte kan tillhandahålla djupbufferten kan du ange en fokuspunkt och en normal plats som definierar ett plan som skär igenom det mesta av ditt innehåll. Om både djupbufferten och ett fokusplan tillhandahålls kan systemet använda båda. Det är särskilt användbart att tillhandahålla både djupbufferten och en fokuspunkt som innehåller en hastighetsvektor när ditt program visar hologram som är i rörelse.

Information om det här avsnittet finns i artikeln Rendering i DirectX .

Holografiska kameror

Windows Mixed Reality introducerar begreppet holografisk kamera. Holografiska kameror liknar den traditionella kameran som finns i 3D-grafiktexter; de definierar både extrinsiska (position och orientering) och inbyggda kameraegenskaper. (Till exempel används visningsfältet för att visa en virtuell 3D-scen.) Till skillnad från traditionella 3D-kameror har programmet inte kontroll över kamerans position, orientering och inbyggda egenskaper. I stället styrs den holografiska kamerans position och orientering implicit av användarens rörelse. Användarens förflyttning vidarebefordras till programmet ram för bildruta via en vytransformering. På samma sätt definieras kamerans inbyggda egenskaper av enhetens kalibrerade optik och reläerade ram för ram via projektionstransformen.

I allmänhet renderas programmet för en enda stereokamera. En robust renderingsloop stöder flera kameror och stöder både mono- och stereokameror. Systemet kan till exempel be ditt program att rendera från ett alternativt perspektiv när användaren aktiverar en funktion som MRC (Mixed Reality Capture ), beroende på headsetformen. Program som kan stödja flera kameror får dem genom att välja den typ av kameror som de kan stödja.

Volymrendering

Vid återgivning av medicinska MRI:er eller tekniska volymer i 3D används ofta volymrenderingstekniker . Dessa tekniker kan vara intressanta i mixad verklighet, där användare naturligt kan se en sådan volym från viktiga vinklar, helt enkelt genom att flytta huvudet.

Lösningar som stöds på HoloLens (första generationen)

  • Den maximala viewport-storleken är en egenskap för HolographicDisplay. HoloLens är inställt på den maximala viewport-storleken, som är 720p (1268 x 720), som standard.
  • Du kan ändra viewport-storleken genom att ange ViewportScaleFactor på HolographicCamera. Den här skalningsfaktorn ligger i intervallet 0 till 1.
  • Den lägsta vyportstorleken som stöds på HoloLens (första generationen) är 50 % av 720p, vilket är 360p (634 x 360). Det här är en ViewportScaleFactor på 0,5.
  • Allt som är lägre än 540p rekommenderas inte på grund av visuell försämring, men kan användas för att identifiera flaskhalsar i pixelfyllningshastigheten.

Lösningar som stöds på HoloLens 2

  • De aktuella och högsta rendermålstorlekarna som stöds är egenskaper för vykonfigurationen. HoloLens 2 är inställt på den maximala målstorleken för återgivning, som är 1440x936, som standard.
  • Appar kan ändra storleken på återgivningsmålbuffertar genom att anropa metoden RequestRenderTargetSize för att begära en ny återgivningsmålstorlek. En ny målstorlek för återgivningen väljs, som uppfyller eller överskrider den begärda målstorleken för återgivning. Det här API:et ändrar storleken på återgivningsmålbufferten, vilket kräver omallokering av minne på GPU:n. Konsekvenserna av detta är: Målstorleken för återgivningen kan skalas ned för att minska minnesbelastningen på GPU:n, och den här metoden bör inte anropas med hög frekvens.
  • Appar kan fortfarande ändra visningsportens storlek på samma sätt som för HoloLens 1. Det finns ingen extra minnesomallokering på GPU:n, så den kan ändras med hög frekvens, men den kan inte användas för att minska minnesbelastningen på GPU:n.
  • Den lägsta visningsportstorleken som stöds på HoloLens 2 är 634 x 412, en ViewportScaleFactor på cirka 0,44 när standardåtergivningsmålstorleken används.
  • Om en återgivningsmålstorlek anges som är mindre än den lägsta visningsportstorleken som stöds ignoreras skalningsfaktorn för visningsområdet.
  • Allt som är lägre än 540p rekommenderas inte på grund av visuell försämring, men kan användas för att identifiera flaskhalsar i pixelfyllningshastigheten.

Se även