Översikt över Holographic Rendering

Med holografisk rendering 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 som består av ljud och ljus. Rendering gör att programmet kan lägga till lampan.

Stöd för enheter

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

Holographic rendering

Nyckeln till holografisk rendering är att veta vilken typ av enhet som används. Enheter med genomse-skärmar, till exempel HoloLens, lägger till ljus till världen. Svarta bildpunkter är helt transparenta, medan ljusare bildpunkter blir allt täckande. Eftersom lampan från skärmarna läggs till i verklighetens ljus är vita bildpunkter genomskinliga.

Även om stereoåtergivning ger en djupikon för dina hologram kan tillägg av markeffekter hjälpa 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 djupikon, så att användarna kan tänka på avståndet och den relativa platsen för ett hologram.

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

Förutsagda renderingsparametrar

Headset för mixad verklighet (både HoloLens och integrerande headset) spårar kontinuerligt positionen och orienteringen för användarens huvud i förhållande till deras omgivning. När programmet börjar förbereda nästa bildruta förutsäger systemet var användarens huvud kommer att finnas i framtiden vid den exakta tidpunkt då ramen visas på skärmarna. Baserat på den här förutsägelsen beräknar systemet vyn och projektionens transformeringar som ska användas för den ramen. Programmet måste använda dessa transformeringar för att generera korrekta resultat. Om transformeringar som tillhandahålls av systemet inte används överensstämmer inte den resulterande bilden med den verkliga världen, vilket leder till användarupplevelse.

Anteckning

För att kunna förutsäga när en ny bildruta kommer att nå skärmarna mäter systemet ständigt den effektiva svarstiden från slutet till slut för programmets renderingspipeline. Systemet justeras efter längden på din renderingspipeline, 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ägelsen kan åsidosätta systemvyn och projektionstransformeringar. Dessa program måste fortfarande använda transformeringar som tillhandahålls av systemet som grund för deras anpassade transformeringar för att ge meningsfulla resultat.

Andra renderingsparametrar

När du återger en ram anger systemet det backbuffertvyport som programmet ska ritas i. Det här visningsområdet är ofta mindre än den fullständiga storleken på rambufferten. Oavsett visningsområdets storlek, när ramen har renderats av programmet, skalas bilden upp så att den fyller hela visningen.

För program som inte kan återges med den uppdateringshastighet som krävs kan systemrenderingsparametrar konfigureras för att minska minnestrycket och renderingskostnaden på bekostnad av ökad pixelalias. Formatet för bakåtbufferten kan också ändras, vilket för vissa appar kan hjälpa till att förbättra minnesbandbredden och pixelgenomflödet.

Renderingsfrasen, upplösningen och bildrutefrekvensen som din app uppmanas att rendera i kan också ändras från ram till ram och kan skilja sig åt över vänster och höger ögon. När mrC (Mixed Reality Capture) till exempel är aktivt och konfigurationen av bild-/videokameravyn inte är avanmäld kan ett öga renderas med en större FOV eller upplösning.

För en viss ram måste din app renderas med hjälp av den vytransformering, projektionstransformering och vyportsupplösning som tillhandahålls av systemet. Dessutom får programmet aldrig förutsätta att någon renderings- eller visningsparameter förblir fast från bildruta till bildruta. Motorer som Unity hanterar alla dessa transformeringar åt dig i sina egna kameraobjekt så att den fysiska förflyttningen av dina användare och systemets tillstånd alltid respekteras. Om ditt program tillåter virtuell förflyttning av användaren över hela världen (t.ex. med hjälp av tumsatsen på en speldator) kan du lägga till ett överordnat rig-objekt ovanför kameran som flyttar runt den. Detta gör att kameran återspeglar både användarens virtuella och fysiska rörelse. Om ditt program ändrar visningstransformeringen, projektionstransformeringen 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 för din holografiska rendering bör din app tillhandahålla för att Windows varje bildruta den djupbuffert som den använde för rendering. Om din app tillhandahåller en djupbuffert bör den ha sammanhängande djupvärden, med djup uttryckta i meter från kameran. Detta gör att systemet kan använda djupdata per pixel för att bättre stabilisera innehållet om användarens huvud förskjuts något från den förutsagda platsen. Om du inte kan tillhandahålla djupbufferten kan du ange en fokuspunkt och en normal, definiera ett plan som går igenom det mesta av ditt innehåll. Om både djupbufferten och ett fokusplan anges kan systemet använda båda. I synnerhet är det bra att tillhandahålla både djupbufferten och en fokuspunkt som innehåller en hastighetsvektor när programmet visar hologram som är i rörelse.

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

Holografiska kameror

Windows Mixed Reality introducerar begreppet holografisk kamera. Holographic-kameror liknar den traditionella kamera som finns i 3D-grafiktexter. De definierar både de extrinsiska egenskaperna (position och orientering) och inbyggda kameraegenskaper. (Till exempel används field-of-view 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 rörelse vidarebefordras till programmet ram för bildruta via en vytransform. På samma sätt definieras kamerans inbyggda egenskaper av enhetens kalibreradeoptik och vidarebefordrade bild för bild 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 Mixed Reality Capture (MRC), beroende på headsetformen. Program som har stöd för flera kameror får dem genom att välja den typ av kameror som de har stöd för.

Volymrendering

Vid rendering av medicinska MRI:er eller tekniska volymer i 3D används ofta volymrenderingstekniker. De här teknikerna kan vara intressanta i mixad verklighet, där användare naturligt kan visa en sådan volym från nyckelvinklar genom att helt enkelt flytta huvudet.

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

  • Maxstorleken för visningsområdet är en egenskap för HolographicDisplay. HoloLens är inställt på den maximala visningsportstorleken, som är 720p (1268 x 720), som standard.
  • Du kan ändra visningsområdets storlek genom att ange ViewportScaleFactor på HolographicCamera. Den här skalningsfaktorn ligger i intervallet 0 till 1.
  • Den lägsta visningsportstorleken 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 pixelfyllningsfrekvensen.

Lösningar som stöds på HoloLens 2

  • De aktuella och högsta renderingsmålstorlekarna som stöds är egenskaperna för vykonfigurationen. HoloLens 2 är inställt på den maximala renderingsmålstorleken, som är 1 440 x 936, som standard.
  • Appar kan ändra storleken på renderingsmålbuffertar genom att anropa metoden RequestRenderTargetSize för att begära en ny renderingsmålstorlek. En ny målstorlek för rendering väljs, som uppfyller eller överskrider den begärda renderingsmålstorleken. Det här API:et ändrar storleken på renderingsmålbufferten, vilket kräver minnestilldelning på GPU:n. Konsekvenserna av detta är: Renderingsmålstorleken kan skalas ned för att minska minnestrycket på GPU:n och den här metoden bör inte anropas med hög frekvens.
  • Appar kan fortfarande ändra visningsområdets storlek på samma sätt som de gjorde 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 minnestrycket 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 standardstorleken för renderingsmålet används.
  • Om en renderingsmå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 pixelfyllningsfrekvensen.

Se även