Fallstudie – Titta igenom hål i din verklighet

När människor 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 skikta ovanpå mitt utrymme?" Jag vill lyfta fram ett annat område som du kan tänka på – i stort sett ett magiskt trick – med samma teknik för att titta på eller genom verkliga fysiska objekt omkring dig.

Teknikerna

Om du har lärt dig hur man bryter igenom väggar i RoboRaid, låser upp ett väggsäkert i Fragment, eller om de har tur nog att se UNSC Infinity-hangar i Halo 5-upplevelsen på E3 2015 har du sett vad jag pratar om. Beroende på din fantasi kan det här visuella tricket användas för att placera tillfälliga hål på din vägg eller för att dölja världar under en lös golvpanel.

RoboRaid lägger till tredimensionella rör och annan struktur bakom dina väggar, som bara visas genom hål som skapats när ledningar går igenom.

RoboRaid lägger till tredimensionella rör och annan struktur bakom dina väggar, som bara visas genom hål som skapats när ledningar går igenom.

Med ett av dessa unika hologram på HoloLens kan en app ge en illusion av innehåll bakom dina väggar eller genom din våning på samma sätt som verkligheten visar sig genom ett faktiskt fönster. Flytta dig själv å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 det går att komma igenom de verkliga hålen, medan din våning verkligen inte låter dig gå vidare till det fantastiska holografiska innehållet. (Jag lägger till en uppgift i loggen.)

I bakgrunden

Det här tricket är en kombination av två effekter. Först fästs holografiskt innehåll till 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 avförs från de fysiska objekten nära det, även när du flyttar eller det underliggande spatiala mappningssystemet uppdaterar 3D-modellen i rummet.

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ålen i din verklighet. Den ocklusionen är nödvändig för att kräva att du tittar igenom ett logiskt hål, fönster eller en doorway som säljer tricket. Utan att något blockerar det mesta av vyn kan en rymdknackning mot en hemlig Jurassic-dimension se ut som en dåligt placerad snisk.

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

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

Holografiskt innehåll som låser världen

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

myObject.AddComponent<WorldAnchor>();

Komponenten WorldAnchor justerar ständigt positionen och rotationen av 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 skapar ditt innehåll skapar du det på ett sådant sätt att objektets rot pivot centreras vid 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ålhålet kanske inte ser särskilt stabilt ut.)

Ockludering av 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 drar nytta av det faktum att HoloLens använder en additiv visning, vilket innebär att helt svarta objekt visas som osynliga. Du kan göra detta i Unity utan att göra några särskilda skuggar- eller materialtrick– det är bara att skapa ett svart material och tilldela det till ett objekt som rutor i ditt innehåll. Om du inte tycker om att göra 3D-modellering använder du bara några standard Quad-objekt 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 konceptbevis med låg återgivning fungerar 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, kommer alla skärmbilder som du tar att visa ett stort svart objekt i stället för det som finns kvar på din vägg eller ditt golv. Anledningen är att den fysiska maskinvaran och skärmbilder sammansatta hologram och verklighet skiljer sig åt. Låt oss ta en stund i lite falsk matematik...

Falsk matematikavisering! De här talen och formlerna är avsedda att illustrera en punkt, inte för att vara någon typ av korrekt mått!

Det här ser du HoloLens:

( Reality * darkening_amount ) + Holograms

Det här visas i skärmbilder och video:

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

På engelska: Det du ser HoloLens är en enkel kombination av mörknad verklighet (som via solglasögon) och det hologram som 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"-material till att bara skriva till djupbufferten och sortera med alla andra täckande material. Ett exempel på detta finns i filen WindowOcclusion.shader i MixedRealityToolkit på GitHub. De relevanta raderna kopieras här:

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

(Observera att raden "Offset 50, 100" (Förskjutning 50, 100) är för att hantera orelaterade problem, så det skulle förmodligen vara bra att lämna det utanför.)

Genom att implementera ett osynligt ocklusionsmaterial som det kan din app 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 boxens prestanda ännu mer genom att göra smarta saker för att få ännu färre osynliga bildpunkter, men det kan verkligen komma in i händer och vanligtvis är det inte nödvändigt.

Här är hemligheten underworld från MR Basics 101 när Unity ritar den, förutom de yttre delarna i ockludingboxen. Observera att pivoten för undervärlden är i mitten av lådan, vilket hjälper till att hålla hålen så stabila som möjligt i förhållande till ditt faktiska golv.

Här är hemligheten underworld från MR Basics 101 när Unity ritar den, förutom de yttre delarna i ockludingboxen. Observera att pivoten för undervärlden är i mitten av lådan, vilket hjälper till att hålla hålen så stabila som möjligt i förhållande till ditt faktiska golv.

Gör det själv

Har du HoloLens och vill testa effekten själv? Det enklaste du kan göra (ingen kodning krävs) är att installera den kostnadsfria 3D-visningsprogram-appen och sedan läsa in filen .fbx som jag angav på GitHub för att visa en modell för blomman i rummet. Läs in den HoloLens och du kan se illusionen i arbetet. När du är framför modellen kan du bara se det lilla hålet – allt annat är osynligt. Titta på modellen från någon annan sida så försvinner den helt och hållet. Använd förflyttnings-, rotations- och skalningskontrollerna för 3D-visningsprogram för att placera det virtuella hålet mot en lodrät yta som du kan tänka på för att generera några idéer!

Om du visar den här modellen i Unity-redigeraren visas en stor svart låda runt blomman. På HoloLens försvinner rutan och ger plats för en magisk fönstereffekt.

Om du visar den här modellen i Unity-redigeraren visas en stor svart låda runt blomman. På HoloLens försvinner rutan och ger plats för en magisk fönstereffekt.

Om du vill skapa en app som använder den här tekniken kan du titta på självstudien OM GRUNDERNA FÖR MR 101 i Mixed Reality självstudierna. Kapitel 7 slutar med en explosion i ditt golv som visar en dold undervärld (se bilden ovan). Vem sa att självstudier var tvungna att vara bra?

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

  • Tänk på olika 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 att det här tricket kan ge.
  • Tänk på olika sätt att gå igenom objekt tillbaka till kända områden. Hur kan du till exempel placera ett holografiskt hål i kaffetabellen och se ditt golv under det?

Om författaren

Picture of Eric Rehmeyer Eric Rehmeyer
Senior programvarutekniker @Microsoft

Se även