Dela via


Fallstudie – Titta igenom hål i din verklighet

När folk tänker på mixad verklighet och vad de kan göra med Microsoft HoloLens håller de sig vanligtvis till frågor som "Vilka objekt kan jag lägga till i mitt rum?" eller "Vad kan jag lägga ovanpå mitt utrymme?" Jag vill lyfta fram ett annat område som du kan tänka på – i princip ett magiskt trick – med samma teknik för att titta på eller genom verkliga fysiska objekt omkring dig.

Tekniken

Om du har kämpat mot utomjordingar när de bryter igenom dina väggar i RoboRaid, låste upp ett väggskåp i Fragment eller hade turen att se UNSC Infinity-hangaren i Halo 5-upplevelsen på E3 2015, så har du sett vad jag pratar om. Beroende på din fantasi kan detta visuella trick användas för att sätta tillfälliga hål i din gips eller för att dölja världar under en lös golvbräda.

RoboRaid lägger till tredimensionella rör och annan struktur bakom dina väggar, synliga endast genom hål som skapats när inkräktarna bryter igenom.

RoboRaid lägger till tredimensionella rör och annan struktur bakom dina väggar, synliga endast genom hål som skapats när inkräktarna bryter igenom.

Med hjälp av ett av dessa unika hologram på HoloLens kan en app ge illusionen av innehåll bakom dina väggar eller genom ditt golv på samma sätt som verkligheten presenteras genom ett faktiskt fönster. Flytta dig åt vänster, så kan du se vad som finns på höger sida. Kom närmare, och du kan se lite mer av allt. Den största skillnaden är att verkliga hål tillåter dig igenom, medan ditt golv envist inte låter dig klättra igenom till det magiska holografiska innehållet. (Jag lägger till en uppgift i kvarvarande uppgifter.)

I bakgrunden

Det här tricket är en kombination av två effekter. Först fästs holografiskt innehåll på världen med hjälp av "spatiala fästpunkter". Att använda fästpunkter för att göra innehållet "världslåst" innebär att det du tittar på inte visuellt glider bort från de fysiska objekten nära det, även när du flyttar eller det underliggande rumsliga mappningssystemet uppdaterar sin 3D-modell av ditt rum.

För det andra är det holografiska innehållet visuellt begränsat till ett mycket specifikt utrymme, så att du bara kan se genom hålet i din verklighet. Den ocklusionen är nödvändig för att kräva att man tittar igenom ett logiskt hål, fönster eller dörröppning, som säljer tricket. Utan något som blockerar större delen av vyn kan en spricka i rymden till en hemlig Jurassic-dimension bara se ut som en dåligt placerad dinosaurie.

Detta är inte en faktisk skärmbild, utan en illustration av hur den hemliga underjorden från MR Basics 101 ser ut på HoloLens. Den svarta höljet visas inte, men du kan se innehåll genom ett virtuellt hål. (När du tittar igenom en faktisk enhet verkar golvet försvinna ännu mer eftersom dina ögon fokuserar på ett ytterligare avstånd som om det inte ens är där.)

Det här är inte en faktisk skärmbild, utan en illustration av hur den hemliga undre världen från MR Basics 101 ser ut på HoloLens. Den svarta höljet visas inte, men du kan se innehåll genom ett virtuellt hål. (När du tittar igenom en faktisk enhet verkar golvet försvinna ännu mer eftersom dina ögon fokuserar på ett ytterligare avstånd som om det inte ens är där.)

Världslåsande holografiskt innehåll

I Unity är det lika enkelt att lägga till en WorldAnchor-komponent som att orsaka att holografiskt innehåll förblir världslåst:

myObject.AddComponent<WorldAnchor>();

WorldAnchor-komponenten justerar ständigt positionen och rotationen för sin GameObject (och därmed allt annat under objektet i hierarkin) för att hålla den stabil i förhållande till närliggande fysiska objekt. När du redigerar ditt innehåll skapar du det på ett sådant sätt att objektets rotpivot centreras i det här virtuella hålet. (Om objektets pivot är djupt i väggen blir dess små justeringar i position och rotation mycket mer märkbara, och hålet kanske inte ser särskilt stabilt ut.)

Occluding allt utom det virtuella hålet

Det finns en mängd olika sätt att selektivt blockera vyn till vad som är dolt i dina väggar. Den enklaste utnyttjar det faktum att HoloLens använder en additiv display, vilket innebär att helt svarta objekt verkar osynliga. Du kan göra detta i Unity utan att göra några speciella skuggnings- eller materialtrick– skapa bara ett svart material och tilldela det till ett objekt som rutor i ditt innehåll. Om du inte känner för att göra 3D-modellering använder du bara en handfull quad-standardobjekt och överlappar dem något. Det finns ett antal nackdelar med den här metoden, men det är det snabbaste sättet att få något att fungera, och att få ett låg återgivningsbevis för koncept som fungerar är bra, även om du misstänker att du kanske vill omstrukturera det senare.

En stor nackdel med ovanstående "black box"-metod är att den inte fotograferar bra. Även om din effekt kan se perfekt ut genom visningen av HoloLens, visar alla skärmbilder du tar ett stort svart objekt istället för vad som återstår av din vägg eller ditt golv. Anledningen till detta är att den fysiska maskinvaran och skärmbilder sammansatta hologram och verklighet på olika sätt. Låt oss ta en liten avstickare till en falsk matematik...

Falsk matematisk varning! Dessa tal och formler är avsedda att illustrera en punkt, inte att vara någon form av korrekt mått!

Det här ser du via HoloLens:

( Reality * darkening_amount ) + Holograms

Det här ser du i skärmbilder och video:

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

På engelska: Det du ser genom HoloLens är en enkel kombination av mörk verklighet (som genom solglasögon) och vilka hologram appen vill visa. Men när du tar en skärmbild blandas kamerans bild med appens hologram enligt transparensvärdet per bildpunkt.

Ett sätt att komma runt detta är att ändra "black box"-materialet för att bara skriva till djupbufferten och sortera med alla andra ogenomskinliga material. Ett exempel på detta finns i filen WindowOcclusion.shader i MixedRealityToolkit på GitHub. Relevanta rader kopieras här:

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

(Observera att raden "Offset 50, 100" är att hantera orelaterade problem, så det är förmodligen klokt att utelämna det.)

Genom att implementera ett osynligt ocklusionsmaterial som det kan appen rita en ruta som ser korrekt ut på skärmen och i skärmbilder med mixad verklighet. För bonuspoäng kan du försöka förbättra prestandan för den rutan ytterligare genom att göra smarta saker för att dra ännu färre osynliga pixlar, men det kan verkligen komma in i ogräset och vanligtvis inte är nödvändigt.

Här är den hemliga undre världen från MR Basics 101 när Unity ritar den, förutom de yttre delarna av ockluuderingslådan. Observera att pivoten för underjorden är i mitten av lådan, vilket hjälper till att hålla hålet så stabilt som möjligt i förhållande till ditt faktiska golv.

Här är den hemliga undre världen från MR Basics 101 när Unity ritar den, förutom de yttre delarna av ockluuderingslådan. Observera att pivoten för underjorden är i mitten av lådan, vilket hjälper till att hålla hålet så stabilt som möjligt i förhållande till ditt faktiska golv.

Gör det själv

Har du en HoloLens och vill prova effekten själv? Det enklaste du kan göra (ingen kodning krävs) är att installera den kostnadsfria 3D Viewer-appen och sedan läsa in nedladdningen av.fbx-filen som jag har angett på GitHub för att visa en blomkrukamodell i ditt rum. Läs in den på HoloLens, så kan du se illusionen på jobbet. När du är framför modellen kan du bara se i det lilla hålet – allt annat är osynligt. Titta på modellen från någon annan sida och den försvinner helt. Använd rörelse-, rotations- och skalningskontrollerna för 3D Viewer för att placera det virtuella hålet mot alla vertikala ytor som du kan tänka dig för att generera några idéer!

Om du visar den här modellen i Unity-redigeraren visas en stor svart ruta runt blomkrukan. På HoloLens försvinner lådan, vilket ger plats för en magisk fönstereffekt.

Om du visar den här modellen i Unity-redigeraren visas en stor svart ruta runt blomkrukan. På HoloLens försvinner lådan, vilket ger plats för en magisk fönstereffekt.

Om du vill skapa en app som använder den här tekniken kan du läsa självstudien MR Basics 101 i självstudierna för Mixed Reality. Kapitel 7 slutar med en explosion i ditt golv som avslöjar en dold undre värld (som bilden ovan). Vem sa självstudier måste vara tråkigt?

Här är några idéer om var du kan ta den här idén härnäst:

  • Tänk på sätt att göra innehållet i det virtuella hålet interaktivt. Att låta användarna ha viss inverkan utanför sina väggar kan verkligen förbättra känslan av förundran som detta trick kan ge.
  • Tänk på sätt att se igenom objekt tillbaka till kända områden. Hur kan du till exempel lägga ett holografiskt hål i soffbordet och se ditt golv under det?

Om författaren

Bild av Eric Rehmeyer Eric Rehmeyer
Senior Software Engineer @Microsoft

Se även