Case study: gaten in uw realiteit doorslekken

Wanneer mensen nadenken over mixed reality en wat ze met Microsoft HoloLens kunnen doen, houden ze zich meestal aan vragen als 'Welke objecten kan ik aan mijn kamer toevoegen?' of 'Wat kan ik boven op mijn ruimte lagen?' Ik wil een ander gebied markeren dat u kunt overwegen, in wezen een magic trick, door dezelfde technologie te gebruiken om te kijken naar of door echte fysieke objecten om u heen.

De technologie

Als u tijdens het breken van uw muren in RoboRaid een wandkluis hebt ontgrendeld in Fragmenten, of gelukkig genoeg hebt gehad om de UNSC-oneindigheidsdefiniteit te zien in de Halo 5-ervaring op E3 in 2015, hebt u gezien waar ik het over heb. Afhankelijk van uw eigen verbeelding kan deze visuele trick worden gebruikt om tijdelijke gaten in uw ruit te zetten of om werelden onder een losse vloer te verbergen.

RoboRaid voegt driedimensionale pijpen en andere structuur toe achter uw muren, die alleen zichtbaar zijn via gaten die zijn gemaakt tijdens het breken van de inlaten.

RoboRaid voegt driedimensionale pijpen en andere structuur toe achter uw muren, die alleen zichtbaar zijn via gaten die zijn gemaakt tijdens het breken van de inlaten.

Met behulp van een van deze unieke hologrammen op HoloLens, kan een app de mogelijkheid bieden om inhoud achter uw muren of door uw verdieping te doen op dezelfde manier als de realiteit zich door een werkelijk venster laat zien. Verplaats uzelf naar links en u kunt zien wat er aan de rechterkant staat. Kom dichter bij elkaar en u ziet iets meer van alles. Het belangrijkste verschil is dat echte gaten u door de gaten laten gaan, terwijl uw vloer u niet laat doorslopen naar die holografische inhoud. (Ik voeg een taak toe aan de achterstand.)

Achter de schermen

Deze trick is een combinatie van twee effecten. Ten eerste wordt holografische inhoud aan de wereld vastgemaakt met behulp van 'ruimtelijke ankers'. Door ankers te gebruiken om die inhoud 'wereld vergrendeld' te maken, betekent dit dat wat u zoekt, niet visueel afdrijft van de fysieke objecten in de buurt, zelfs niet wanneer u zich verplaatst of het onderliggende ruimtelijke toewijzingssysteem het 3D-model van uw ruimte bij werkt.

Ten tweede is die holografische inhoud visueel beperkt tot een zeer specifieke ruimte, zodat u alleen door het gat in uw realiteit kunt kijken. Deze occlusie is nodig om te moeten kijken door een logisch gat, venster of deurway, waardoor de trick wordt verkocht. Zonder iets dat het grootste deel van de weergave blokkeert, kan een zwakke plek in de ruimte van een geheime Dimensie er misschien gewoon uitzien als een slecht geplaatste man.

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 weer geven, maar u kunt inhoud zien via een virtueel gat. (Wanneer u een echt apparaat doorzoekt, lijkt de vloer nog meer te verdwijnen omdat uw ogen zich op een verdere afstand richten alsof deze er nog niet is.)

Dit is geen echte schermopname, maar een illustratie van hoe de geheime onderwereld van de MR Basics 101 eruitziet op HoloLens. De zwarte behuizing wordt niet weer geven, maar u kunt inhoud zien via een virtueel gat. (Wanneer u een echt apparaat doorzoekt, lijkt de vloer nog meer te verdwijnen omdat uw ogen zich op een verdere afstand richten alsof deze er nog niet is.)

Wereldvergrendeling van holografische inhoud

In Unity is het zo eenvoudig om holografische inhoud wereldwijd vergrendeld te houden als het toevoegen van een WorldAnchor-onderdeel:

myObject.AddComponent<WorldAnchor>();

Het onderdeel WorldAnchor past voortdurend de positie en rotatie van het GameObject (en dus alle andere zaken onder dat object in de hiërarchie) aan om deze stabiel te houden ten opzichte van fysieke objecten in de buurt. Wanneer u uw inhoud ontwerpt, maakt u deze zodanig dat het hoofdpunt van uw object op dit virtuele gat is gecentreerd. (Als de pivot van uw object diep in de wand ligt, zijn de kleine aanpassingen in positie en rotatie veel beter zichtbaar en ziet het gat er mogelijk niet erg stabiel uit.)

Alles behalve het virtuele gat occluding

Er zijn verschillende manieren om selectief de weergave te blokkeren van wat verborgen is in uw muren. De eenvoudigste optie maakt gebruik van het feit dat HoloLens een additieve weergave gebruikt, wat betekent dat volledig zwarte objecten onzichtbaar worden weergegeven. U kunt dit doen in Unity zonder speciale shader- of materiaaltrucs uit te voeren. Maak gewoon een zwart materiaal en wijs dit toe aan een object dat vakken in uw inhoud bevat. Als u geen 3D-modellering wilt, gebruikt u gewoon een aantal standaard Quad-objecten en overlapt u deze enigszins. Er zijn een aantal nadelen van deze benadering, maar het is de snelste manier om iets aan de slag te laten gaan. Het is ook geweldig om een werkbaar concept met een lage betrouwbaarheid te verkrijgen, zelfs als u vermoedt dat u het later wilt herfactoren.

Een belangrijk nadeel van de bovenstaande 'zwarte doos'-benadering is dat deze niet goed foto's maakt. Hoewel uw effect er perfect uit kan zien door de weergave van HoloLens, tonen schermopnamen die u maakt een groot zwart object in plaats van wat er van uw wand of vloer overblijft. De reden hiervoor is dat de fysieke hardware en schermafbeeldingen van samengestelde hologrammen en de realiteit anders zijn. Laten we even de weg naar een aantal valse wiskunde...

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

Wat u ziet via HoloLens:

( Reality * darkening_amount ) + Holograms

Wat u ziet in schermopnamen en video' s:

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

In het Engels: Wat u ziet HoloLens is een eenvoudige combinatie van donkere realiteit (zoals via zonnebrillen) en alle 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 op basis van de transparantiewaarde per pixel.

U kunt dit onder andere doen door het black box-materiaal te wijzigen, alleen naar de dieptebuffer te schrijven en te sorteren met alle andere ondoorzichtige materialen. Bekijk voor een voorbeeld hiervan het bestand WindowOcclusion.shader in de MixedRealityToolkit op GitHub. De relevante regels worden hier gekopieerd:

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

(Houd er rekening mee dat de regel Offset 50, 100 is om niet-gerelateerde problemen op te lossen, dus het is waarschijnlijk zinvol om dat weg te laten.)

Als u een onzichtbaar occlusiemateriaal zoals dit implementeert, kan uw app een vak tekenen dat er correct uitziet in de weergave en in mixed reality-schermafbeeldingen. Voor bonuspunten kunt u proberen de prestaties van dat vak nog verder te verbeteren door slimme dingen te doen om nog minder onzichtbaar pixels te tekenen, maar dat kan echt in het wieden komen en is meestal niet nodig.

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

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

Doe het zelf

Hebt u HoloLens en wilt u het effect zelf uitproberen? Het eenvoudigste wat u kunt doen (geen codering vereist) is de gratis 3D-viewer-app te installeren en vervolgens het downloadbestand .fbx te laden dat ik heb opgegeven op GitHub om een bloempoesmodel in uw kamer weer te geven. Laad deze op HoloLens en u ziet de gedaante op het werk. Wanneer u voor het model staat, kunt u alleen in het kleine gat kijken: al het andere is onzichtbaar. Als u het model van een andere kant bekijkt, verdwijnt het volledig. Gebruik de besturingselementen voor verplaatsen, draaien en schalen van 3D-viewer virtuele gaten te plaatsen tegen een verticaal oppervlak dat u kunt bedenken om enkele ideeën te genereren.

Als u dit model bekijkt in uw Unity-editor, wordt een grote zwarte doos rond de bloemist weergegeven. Op HoloLens verdwijnt de doos, waardoor er een magic window-effect wordt weergegeven.

Als u dit model bekijkt in uw Unity-editor, wordt een grote zwarte doos rond de bloemist weergegeven. Op HoloLens verdwijnt de doos, waardoor er een magic window-effect wordt weergegeven.

Als u een app wilt bouwen die gebruikmaakt van deze techniek, raadpleegt u de MR Basics 101-zelfstudie in Mixed Reality zelfstudies. Hoofdstuk 7 eindigt met een explosieve op uw verdieping die een verborgen onderwereld toont (zoals hierboven afgebeeld). Wie dat zelfstudies nogal wat moeten zijn?

Hier zijn enkele ideeën over waar u dit idee als volgende kunt nemen:

  • Denk aan manieren om de inhoud in het virtuele gat interactief te maken. Door uw gebruikers enige invloed buiten hun muren te laten hebben, kan het gevoel van de vraag dat deze trick kan bieden, echt worden verbeterd.
  • Denk aan manieren om objecten terug te kijken naar bekende gebieden. Hoe kunt u bijvoorbeeld een holografische gat in uw koffietabel zetten en daaronder de vloer bekijken?

Over de auteur

Picture of Eric Rehmeyer Eric Rehmeyer
Senior softwaretechnicus @Microsoft

Zie ook