Casestudy - Door gaten in je realiteit kijken

Wanneer mensen nadenken over mixed reality en wat ze kunnen doen met Microsoft HoloLens, houden ze meestal vast aan vragen zoals 'Welke objecten kan ik toevoegen aan mijn kamer?' of 'Wat kan ik boven op mijn ruimte plaatsen?' Ik wil een ander gebied benadrukken dat u kunt overwegen ( in wezen een magische truc) met behulp van dezelfde technologie om echte fysieke objecten om u heen te bekijken of door te nemen.

De technologie

Als je buitenaardse wezens hebt gevochten terwijl ze je muren in RoboRaid breken, een muur veilig in Fragmenten ontgrendeld of geluk hadden om de UNSC Infinity hangar te zien in de Halo 5-ervaring bij 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 droogwand te plaatsen of om werelden onder een los vloerbord te verbergen.

RoboRaid adds three-dimensional pipes and other structure behind your walls, visible only through holes created as the invaders break through.

RoboRaid voegt driedimensionale pijpen en andere structuur achter uw muren toe, alleen zichtbaar door gaten die zijn gemaakt als de indringer doorbreekt.

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 werkelijk venster. Verplaats jezelf naar links en je kunt zien wat er aan de rechterkant staat. Ga dichterbij en je kunt nog wat meer van alles zien. Het belangrijkste verschil is dat echte gaten je doorstaan, terwijl je vloer koppig niet door die magische holografische inhoud kan 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 'wereldwijd vergrendeld' te maken, betekent dit dat wat u bekijkt, niet visueel van de fysieke objecten in de buurt verdwijnt, zelfs als u navigeert of het onderliggende ruimtelijke toewijzingssysteem het 3D-model van uw ruimte bijwerken.

Ten tweede is die holografische inhoud visueel beperkt tot een zeer specifieke ruimte, zodat u alleen het gat in uw werkelijkheid kunt zien. Die occlusie is nodig om te vereisen dat er een logisch gat, raam of deuropening wordt bekeken, die de truc verkoopt. Zonder iets dat het grootste deel van het uitzicht blokkeert, kan een scheur in de ruimte naar een geheime Jurassische dimensie eruitzien als een slecht geplaatste dinosaurus.

This is not an actual screenshot, but an illustration of how the secret underworld from MR Basics 101 looks on HoloLens. The black enclosure doesn’t show up, but you can see content through a virtual hole. (When looking through an actual device, the floor would seem to disappear even more because your eyes focus at a further distance as if it’s not even there.)

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 weergegeven, maar u kunt inhoud zien via een virtueel gat. (Wanneer u door een echt apparaat kijkt, lijkt de vloer nog meer te verdwijnen omdat uw ogen zich op een verdere afstand concentreren alsof het er niet eens is.)

Holografische inhoud met wereldvergrendeling

In Unity is het toevoegen van een WorldAnchor-component zo eenvoudig als het toevoegen van een WorldAnchor-component:

myObject.AddComponent<WorldAnchor>();

Het WorldAnchor-onderdeel zal voortdurend de positie en rotatie van het GameObject (en dus iets anders onder dat object in de hiërarchie) aanpassen om het stabiel te houden ten opzichte van fysieke objecten in de buurt. Wanneer u uw inhoud maakt, maakt u deze zodanig dat de hoofdpivot van uw object is gecentreerd in dit virtuele gat. (Als het draaipunt van uw object diep in de muur zit, zijn lichte aanpassingen in positie en draaiing veel merkbaarder en ziet het gat er mogelijk niet erg stabiel uit.)

Alles behalve het virtuele gat

Er zijn verschillende manieren om het uitzicht selectief te blokkeren naar wat er in uw muren verborgen is. De eenvoudigste maakt gebruik van het feit dat HoloLens een additief beeldscherm gebruikt, wat betekent dat volledig zwarte objecten onzichtbaar worden weergegeven. U kunt dit doen in Unity zonder speciale shader- of materiaal trucs uit te voeren. U hoeft alleen een zwart materiaal te maken en toe te wijzen aan een object dat in uw inhoud wordt geplaatst. Als u geen 3D-modellering wilt uitvoeren, gebruikt u gewoon een handvol standaard Quad-objecten en overlapt u deze enigszins. Er zijn een aantal nadelen van deze benadering, maar het is de snelste manier om iets te laten werken en een concept met een lage kwaliteit te krijgen is geweldig, zelfs als u vermoedt dat u het later wilt herstructureren.

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

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

Wat u ziet via HoloLens:

( Reality * darkening_amount ) + Holograms

Wat u ziet in schermopnamen en video:

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

In het Engels: Wat u door HoloLens ziet, is een eenvoudige combinatie van donkere realiteit (zoals via zonnebrillen) en welke hologrammen de app wil weergeven. Maar wanneer u een schermopname maakt, wordt de afbeelding van de camera gecombineerd met de hologrammen van de app volgens de doorzichtigheidswaarde per pixel.

Een manier om dit te omzeilen is door het 'zwarte doos'-materiaal alleen te schrijven naar de dieptebuffer en te sorteren op 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

(Let op de regel 'Offset 50, 100' is om te gaan met niet-gerelateerde problemen, dus het zou waarschijnlijk zinvol zijn om dat weg te laten.)

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

Here is the secret underworld from MR Basics 101 as Unity draws it, except for the outer parts of the occluding box. Note that the pivot for the underworld is at the center of the box, which helps keep the hole as stable as possible relative to your actual floor.

Hier is de geheime onderwereld van MR Basics 101 als 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 voor uzelf 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 opgegeven om een bloempotmodel in uw kamer weer te geven. Laad het op HoloLens en je kunt de illusie op het werk zien. Wanneer u zich voor het model bevindt, kunt u alleen in het kleine gat zien. Alles anders is onzichtbaar. Kijk naar het model van een andere kant en verdwijnt volledig. Gebruik de besturingselementen voor beweging, draaiing en schaal van 3D Viewer om het virtuele gat te positioneren tegen een verticaal oppervlak dat u kunt bedenken om enkele ideeën te genereren.

Viewing this model in your Unity editor will show a large black box around the flowerpot. On HoloLens, the box disappears, giving way to a magic window effect.

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

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 waar u dit idee kunt volgen:

  • Denk aan manieren om de inhoud in het virtuele gat interactief te maken. Als uw gebruikers enige impact hebben buiten hun muren, kan het gevoel van wonder dat deze truc kan bieden, echt verbeteren.
  • Denk aan manieren om objecten terug te zien naar bekende gebieden. Hoe kun je bijvoorbeeld een holographic hole in je koffietafel zetten en je vloer eronder zien?

Over de auteur

Picture of Eric Rehmeyer Eric Rehmeyer
Senior Software Engineer @Microsoft

Zie ook