Overzicht van Holoographic Rendering
Holografische rendering stelt uw toepassing in staat om een hologram te tekenen op een exacte locatie in de wereld rond de gebruiker, ongeacht of het precies is geplaatst in de fysieke wereld of binnen een virtueel domein dat u hebt gemaakt. Hologrammen zijn objecten die zijn gemaakt van geluid en licht. Met rendering kan uw toepassing het licht toevoegen.
Ondersteuning voor apparaten
Functie | HoloLens (eerste generatie) | HoloLens 2 | Immersive headsets |
Rendering | ✔️ | ✔️ | ✔️ |
Holografische rendering
Bij holografische rendering is het belangrijk om te weten welk type apparaat wordt gebruikt. Apparaten met doorknende beeldschermen, zoals HoloLens, voegen licht toe aan de wereld. Zwarte pixels zijn volledig transparant, terwijl helderdere pixels steeds ondoorzichtiger worden. Omdat het licht van de beeldschermen wordt toegevoegd aan het licht uit de echte wereld, zijn witte pixels doorschijnend.
Hoewel stereoscopische rendering één diepte-aanwijzing biedt voor uw hologrammen, kunnen gebruikers door het toevoegen van aardingseffecten gemakkelijker zien in welke buurt een hologram zich bevindt. Een aardingstechniek is het toevoegen van een gloed rond een hologram op het nabijgelegen oppervlak en vervolgens een schaduw tegen deze gloed weergeven. Op deze manier lijkt uw schaduw licht af te trekken van de omgeving. Ruimtelijk geluid is een andere belangrijke dieptehint, zodat gebruikers kunnen redeneren over de afstand en relatieve locatie van een hologram.
Apparaten met ondoorzichtige beeldschermen, zoals Windows Mixed Reality immersive headsets, blokkeren de wereld. Zwarte pixels zijn effen zwart en elke andere kleur wordt weergegeven als die kleur voor de gebruiker. Uw toepassing is verantwoordelijk voor het weergeven van alles wat de gebruiker ziet. Dit maakt het nog belangrijker om een constante vernieuwingsfrequentie te behouden, zodat gebruikers een comfortabele ervaring hebben.
Voorspelde renderingparameters
Mixed reality-headsets (zowel HoloLens als immersive headsets) volgen voortdurend de positie en richting van het hoofd van de gebruiker ten opzichte van hun omgeving. Wanneer uw toepassing begint met het voorbereiden van het volgende frame, voorspelt het systeem waar het hoofd van de gebruiker zich in de toekomst bevindt op het exacte moment dat het frame wordt weergegeven op de beeldschermen. Op basis van deze voorspelling berekent het systeem de weergave en de projectietransformaties voor gebruik voor dat frame. Uw toepassing moet deze transformaties gebruiken om de juiste resultaten te produceren. Als door het systeem geleverde transformaties niet worden gebruikt, wordt de resulterende afbeelding niet uitgelijnd met de echte wereld, wat leidt tot ongemak voor de gebruiker.
Notitie
Om nauwkeurig te voorspellen wanneer een nieuw frame de beeldschermen bereikt, meet het systeem voortdurend de effectieve end-to-endlatentie van de renderingpijplijn van uw toepassing. Terwijl het systeem zich aanpast aan de lengte van uw rendering-pijplijn, kunt u de stabiliteit van hologrammen verbeteren door die pijplijn zo kort mogelijk te houden.
Toepassingen die gebruikmaken van geavanceerde technieken om de systeemvoorspelling te verbeteren, kunnen de systeemweergave en projectietransformaties overschrijven. Deze toepassingen moeten nog steeds door het systeem geleverde transformaties gebruiken als basis voor hun aangepaste transformaties om zinvolle resultaten te produceren.
Andere renderingparameters
Bij het weergeven van een frame geeft het systeem de viewport van de backbuffer op waarin uw toepassing moet tekenen. Deze viewport is vaak kleiner dan de volledige grootte van de framebuffer. Ongeacht de grootte van de viewport, zodra het frame door de toepassing wordt weergegeven, wordt het beeld opgeschaald om de volledige weergaven te vullen.
Voor toepassingen die niet kunnen worden weergegeven met de vereiste vernieuwingsfrequentie, kunnen systeemrenderingsparameters worden geconfigureerd om de geheugendruk en renderingkosten te verminderen ten koste van verhoogde pixelaliassen. De indeling van de achterbuffer kan ook worden gewijzigd, wat voor sommige apps kan helpen om de geheugenbandbreedte en pixeldoorvoer te verbeteren.
De rendering frustum, resolutie en framerate waarin uw app wordt gevraagd om weer te geven, kunnen ook van frame tot frame veranderen en kunnen verschillen tussen het linker- en rechteroog. Wanneer mixed reality capture (MRC) bijvoorbeeld actief is en de configuratie van de foto-/videocameraweergave niet is ingeschakeld, kan één oog worden weergegeven met een grotere FOV of resolutie.
Voor een bepaald frame moet uw app worden weergegeven met behulp van de weergavetransformatie, projectietransformatie en viewportresolutie van het systeem. Bovendien mag uw toepassing er nooit van uitgaan dat een rendering- of weergaveparameter vast blijft van frame-naar-frame. Engines zoals Unity verwerken al deze transformaties voor u in hun eigen cameraobjecten, zodat de fysieke bewegingen van uw gebruikers en de status van het systeem altijd worden gerespecteerd. Als uw toepassing virtuele bewegingen van de gebruiker door de hele wereld toestaat (bijvoorbeeld met behulp van de duimstick op een gamepad), kunt u een bovenliggend rig-object boven de camera toevoegen dat deze verplaatst. Dit zorgt ervoor dat de camera zowel de virtuele als de fysieke beweging van de gebruiker weergeeft. Als uw toepassing de weergavetransformatie, projectietransformatie of viewportdimensie van het systeem wijzigt, moet deze het systeem informeren door de juiste overschrijvings-API aan te roepen.
Om de stabiliteit van uw holografische rendering te verbeteren, moet uw app aan Windows elk frame de dieptebuffer bieden die wordt gebruikt voor rendering. Als uw app wel een dieptebuffer biedt, moet deze coherente dieptewaarden hebben, met diepte uitgedrukt in meters van de camera. Hierdoor kan het systeem uw dieptegegevens per pixel gebruiken om de inhoud beter te stabiliseren als het hoofd van de gebruiker uiteindelijk iets verschoven is ten opzichte van de voorspelde locatie. Als u uw dieptebuffer niet kunt opgeven, kunt u een focuspunt en normaal opgeven, waarbij u een vlak definieert dat het grootste deel van uw inhoud doorsnijdt. Als zowel de dieptebuffer als een focusvlak worden opgegeven, kan het systeem beide gebruiken. Het is met name handig om zowel de dieptebuffer als een focuspunt te bieden dat een snelheidsvector bevat wanneer uw toepassing hologrammen weergeeft die in beweging zijn.
Raadpleeg het artikel Rendering in DirectX voor meer informatie over dit onderwerp op een laag niveau.
Holografische camera's
Windows Mixed Reality introduceert het concept van een holografische camera. Holografische camera's zijn vergelijkbaar met de traditionele camera gevonden in 3D grafische teksten; ze definiëren zowel de extrinsische (positie en oriëntatie) als de intrinsieke camera-eigenschappen. (Het weergaveveld wordt bijvoorbeeld gebruikt om een virtuele 3D-scène weer te geven.) In tegenstelling tot traditionele 3D-camera's heeft de toepassing geen controle over de positie, oriëntatie en intrinsieke eigenschappen van de camera. In plaats daarvan worden de positie en oriëntatie van de holografische camera impliciet bepaald door de beweging van de gebruiker. De beweging van de gebruiker wordt frame voor frame doorgegeven aan de toepassing via een weergavetransformatie. Op dezelfde manier worden de intrinsieke eigenschappen van de camera bepaald door de gekalibreerde optica van het apparaat en frame voor frame gerelauleerd via de projectietransformatie.
Over het algemeen wordt uw toepassing weergegeven voor één stereocamera. Een robuuste renderinglus ondersteunt meerdere camera's en ondersteunt zowel mono- als stereocamera's. Het systeem kan uw toepassing bijvoorbeeld vragen om weer te geven vanuit een alternatief perspectief wanneer de gebruiker een functie zoals mixed reality capture (MRC) activeert, afhankelijk van de vorm van de headset. Toepassingen die ondersteuning kunnen bieden voor meerdere camera's, krijgen ze door u aan te geven voor het soort camera's dat ze kunnen ondersteunen.
Volumerendering
Bij het renderen van medische MRI's of engineeringvolumes in 3D worden vaak volumerenderingstechnieken gebruikt. Deze technieken kunnen interessant zijn in mixed reality, waarbij gebruikers zo'n volume op een natuurlijke manier vanuit belangrijke hoeken kunnen bekijken, eenvoudigweg door hun hoofd te bewegen.
Ondersteunde resoluties op HoloLens (eerste generatie)
- De maximale grootte van de viewport is een eigenschap van het HolographicDisplay. HoloLens is ingesteld op de maximale grootte van de viewport, die standaard 720p (1268x720) is.
- De grootte van de viewport kan worden gewijzigd door de ViewportScaleFactor in te stellen op de HolographicCamera. Deze schaalfactor ligt in het bereik van 0 tot 1.
- De laagste ondersteunde viewportgrootte op HoloLens (eerste generatie) is 50% van 720p, wat 360p (634x360) is. Dit is een ViewportScaleFactor van 0.5.
- Iets lager dan 540p wordt niet aanbevolen vanwege visuele achteruitgang, maar kan worden gebruikt om knelpunten in de pixelvulsnelheid te identificeren.
Ondersteunde oplossingen op HoloLens 2
- De huidige en maximaal ondersteunde doelgrootten voor renderen zijn eigenschappen van de weergaveconfiguratie. HoloLens 2 is standaard ingesteld op de maximale grootte van het renderdoel, namelijk 1440x936.
- Apps kunnen de grootte van doelbuffers voor renderen wijzigen door de methode RequestRenderTargetSize aan te roepen om een nieuwe grootte voor het renderdoel aan te vragen. Er wordt een nieuwe grootte voor het renderdoel gekozen, die voldoet aan of groter is dan de aangevraagde grootte van het renderdoel. Deze API wijzigt de grootte van de doelbuffer voor renderen, waarvoor opnieuw geheugentoewijzing op de GPU is vereist. De implicaties hiervan zijn onder andere: de grootte van het renderdoel kan omlaag worden geschaald om de geheugendruk op de GPU te verminderen. Deze methode mag niet met hoge frequentie worden aangeroepen.
- Apps kunnen de grootte van de viewport nog steeds op dezelfde manier wijzigen als voor HoloLens 1. Er is geen extra geheugentoewijzing op de GPU, dus deze kan met hoge frequentie worden gewijzigd, maar kan niet worden gebruikt om de geheugendruk op de GPU te verminderen.
- De laagst ondersteunde viewportgrootte op HoloLens 2 is 634x412, een ViewportScaleFactor van ongeveer 0,44 wanneer de standaardgrootte voor het renderdoel in gebruik is.
- Als er een grootte voor het renderdoel wordt opgegeven die kleiner is dan de laagst ondersteunde viewport-grootte, wordt de viewport-schaalfactor genegeerd.
- Iets lager dan 540p wordt niet aanbevolen vanwege visuele achteruitgang, maar kan worden gebruikt om knelpunten in de pixelvulsnelheid te identificeren.