Casestudy - Door gaten in uw realiteit kijken

Wanneer mensen denken aan mixed reality en wat ze kunnen doen met Microsoft HoloLens, houden ze het meestal bij vragen als 'Welke objecten kan ik toevoegen aan mijn kamer?' of 'Wat kan ik op mijn ruimte plaatsen?' Ik wil een ander gebied markeren dat u kunt overwegen, in feite een magische truc, met behulp van dezelfde technologie om te kijken naar of door echte fysieke objecten om u heen.

De technologie

Als je tegen aliens hebt gevochten terwijl ze je muren in RoboRaid doorbreken, een muurkluis in Fragments hebt ontgrendeld of het geluk had om de UNSC Infinity hangar te zien in de Halo 5-ervaring op E3 in 2015, dan heb je gezien waar ik het over heb. Afhankelijk van uw verbeelding kan deze visuele truc worden gebruikt om tijdelijke gaten in uw gipsplaat te plaatsen of om werelden te verbergen onder een losse vloerplaat.

RoboRaid voegt driedimensionale leidingen en andere structuur achter uw muren toe, die alleen zichtbaar zijn door gaten die worden gemaakt wanneer de indringers door breken.

RoboRaid voegt driedimensionale leidingen en andere structuur achter uw muren toe, die alleen zichtbaar zijn door gaten die worden gemaakt wanneer de indringers door breken.

Met behulp van een van deze unieke hologrammen op HoloLens kan een app de illusie van inhoud achter uw muren of door uw vloer bieden op dezelfde manier als de realiteit zich presenteert via een echt venster. Als u naar links gaat, kunt u zien wat zich aan de rechterkant bevindt. Als u dichterbij komt, kunt u van alles een beetje meer zien. Het grote verschil is dat echte gaten je doorlaten, terwijl je vloer koppig niet door die magische holografische inhoud laat klimmen. (Ik voeg een taak toe aan de achterstand.)

Achter de schermen

Deze truc is een combinatie van twee effecten. Eerst wordt holografische inhoud aan de wereld vastgemaakt met behulp van 'ruimtelijke ankers'. Als u ankers gebruikt om die inhoud 'wereld-vergrendeld' te maken, betekent dit dat wat u bekijkt, niet visueel afdrijft van de fysieke objecten in de buurt, zelfs niet wanneer u zich verplaatst of het onderliggende ruimtelijke kaartsysteem het 3D-model van uw ruimte bijwerken.

Ten tweede is die holografische inhoud visueel beperkt tot een zeer specifieke ruimte, zodat je alleen door het gat in je realiteit kunt kijken. Die occlusie is nodig om door een logisch gat, venster of deuropening te kijken, waardoor de truc wordt verkocht. Zonder iets dat het grootste deel van het uitzicht blokkeert, kan een scheur in de ruimte naar een geheime Jurassische dimensie er gewoon uitzien als een slecht geplaatste dinosaurus.

Dit is geen echte schermopname, maar een illustratie van hoe de geheime onderwereld van MR Basics 101 eruitziet op HoloLens. De zwarte behuizing wordt niet weergegeven, maar u kunt inhoud zien via een virtueel gat. (Wanneer je door een echt apparaat kijkt, lijkt de vloer nog meer te verdwijnen omdat je ogen zich op een grotere afstand concentreren alsof het daar niet eens is.)

Dit is geen echte schermopname, maar een illustratie van hoe de geheime onderwereld uit de MR Basics 101 eruitziet op HoloLens. De zwarte behuizing wordt niet weergegeven, maar u kunt inhoud zien via een virtueel gat. (Wanneer je door een echt apparaat kijkt, lijkt de vloer nog meer te verdwijnen omdat je ogen zich op een grotere afstand concentreren alsof het daar niet eens is.)

Holografische inhoud met wereldvergrendeling

In Unity kunt u ervoor zorgen dat holografische inhoud wereldwijd vergrendeld blijft, net zo eenvoudig als het toevoegen van een WorldAnchor-onderdeel:

myObject.AddComponent<WorldAnchor>();

De WorldAnchor component zal voortdurend de positie en rotatie van zijn GameObject (en dus al het andere onder dat object in de hiërarchie) aanpassen om het stabiel te houden ten opzichte van nabijgelegen fysieke objecten. Wanneer u uw inhoud maakt, maakt u deze op een zodanige manier dat de hoofddraai van uw object is gecentreerd op dit virtuele gat. (Als de draaiing van uw object diep in de muur is, zullen de kleine aanpassingen in positie en rotatie veel merkbaarder zijn en ziet het gat er mogelijk niet erg stabiel uit.)

Alles behalve het virtuele gat

Er zijn verschillende manieren om selectief de weergave te blokkeren van wat in uw muren is verborgen. De eenvoudigste maakt gebruik van het feit dat HoloLens gebruikmaakt van een additieve weergave, wat betekent dat volledig zwarte objecten onzichtbaar lijken. U kunt dit doen in Unity zonder speciale shader of materiaal trucs uit te voeren. Maak gewoon een zwart materiaal en wijs dit toe aan een object dat in uw inhoud is geplaatst. Als u geen zin hebt om 3D-modellering uit te voeren, gebruikt u een handvol standaard Quad-objecten en overlapt u deze enigszins. Er zijn een aantal nadelen aan deze benadering, maar het is de snelste manier om iets te laten werken en het verkrijgen van een concept met een lage kwaliteit is geweldig, zelfs als u vermoedt dat u het later wilt herstructureren.

Een groot nadeel van de bovenstaande 'zwarte doos'-benadering is dat deze niet goed fotografeert. Hoewel uw effect er perfect uitziet door de weergave van HoloLens, tonen schermafbeeldingen die u neemt een groot zwart object in plaats van wat er van uw muur of vloer overblijft. De reden hiervoor is dat de fysieke hardware en schermopnamen samengestelde hologrammen en realiteit anders weergeven. Laten we even omwegen in een valse wiskunde...

Valse wiskundige waarschuwing! Deze getallen en formules zijn bedoeld om een punt te illustreren, niet om een soort van nauwkeurige metrische gegevens te zijn.

Wat u ziet via HoloLens:

( Reality * darkening_amount ) + Holograms

Wat u ziet in schermafbeeldingen en video' s:

( Reality * ( 1 - hologram_alpha ) ) + Holograms * hologram_alpha

In het Engels: Wat u ziet via HoloLens is een eenvoudige combinatie van donkere realiteit (zoals via een zonnebril) en de hologrammen die de app wil laten zien. Maar wanneer u een schermopname maakt, wordt de afbeelding van de camera gemengd met de hologrammen van de app volgens de doorzichtigheidswaarde per pixel.

Een manier om dit te omzeilen is door het 'zwarte doos'-materiaal te wijzigen in alleen schrijven naar de dieptebuffer en te sorteren met alle andere ondoorzichtige materialen. Bekijk voor een voorbeeld het bestand WindowOcclusion.shader in de MixedRealityToolkit op GitHub. De relevante regels worden hier gekopieerd:

"RenderType" = "Opaque"
"Queue" = "Geometry"
ColorMask 0

(Let op: de regel Offset 50, 100 is bedoeld om niet-gerelateerde problemen af te handelen, dus het zou waarschijnlijk zinvol zijn om dat weg te laten.)

Door een dergelijk onzichtbaar occlusiemateriaal te implementeren, kan uw app een vak tekenen dat er correct uitziet in het scherm en in schermafbeeldingen van mixed reality. Voor bonuspunten kun je proberen de prestaties van die doos nog verder te verbeteren door slimme dingen te doen om nog minder onzichtbare pixels te tekenen, maar dat kan echt in het onkruid komen en is meestal niet nodig.

Hier is de geheime onderwereld van MR Basics 101 zoals Unity het tekent, met uitzondering van de buitenste delen van de occluding box. Houd er rekening mee dat de draai voor de onderwereld zich in het midden van de doos bevindt, waardoor het gat zo stabiel mogelijk blijft ten opzichte van uw werkelijke vloer.

Hier is de geheime onderwereld van MR Basics 101 zoals Unity het tekent, met uitzondering van de buitenste delen van de occluding box. Houd er rekening mee dat de draai voor de onderwereld zich in het midden van de doos bevindt, waardoor het gat zo stabiel mogelijk blijft ten opzichte van uw werkelijke vloer.

Doe het zelf

Hebt u een HoloLens en wilt u het effect zelf uitproberen? Het eenvoudigste wat u kunt doen (geen codering vereist) is om de gratis 3D Viewer-app te installeren en vervolgens het downloadbestand.fbx te laden dat ik op GitHub heb verstrekt om een bloempotmodel in uw kamer te bekijken. Laad het op HoloLens en u kunt de illusie aan het werk zien. Wanneer u zich voor het model bevindt, kunt u alleen in het kleine gat kijken. De rest is onzichtbaar. Bekijk het model van een andere kant en het verdwijnt volledig. Gebruik de besturingselementen voor beweging, draaiing en schaal van 3D Viewer om het virtuele gat tegen een verticaal oppervlak te plaatsen dat u kunt bedenken om ideeën te genereren!

Als u dit model in uw Unity-editor bekijkt, ziet u een grote zwarte doos rond de bloempot. Op HoloLens verdwijnt het vak, waardoor plaats wordt voor een magisch venstereffect.

Als u dit model in uw Unity-editor bekijkt, ziet u een grote zwarte doos rond de bloempot. Op HoloLens verdwijnt het vak, waardoor plaats wordt voor een magisch venstereffect.

Als u een app wilt bouwen die gebruikmaakt van deze techniek, raadpleegt u de zelfstudie MR Basics 101 in de Mixed Reality zelfstudies. Hoofdstuk 7 eindigt met een explosie in je vloer die een verborgen onderwereld onthult (zoals hierboven afgebeeld). Wie zei dat zelfstudies saai moesten zijn?

Hier volgen enkele ideeën voor de volgende stap:

  • Bedenk manieren om de inhoud in het virtuele gat interactief te maken. Door uw gebruikers enige impact te laten hebben buiten hun muren, kan dit het gevoel van verwondering dat deze truc kan bieden, echt verbeteren.
  • Bedenk manieren om objecten terug te zien naar bekende gebieden. Hoe kun je bijvoorbeeld een holografisch gat in je salontafel plaatsen en je vloer eronder zien?

Over de auteur

Foto van Eric Rehmeyer Eric Rehmeyer
Senior software engineer @Microsoft

Zie ook