Case study - Guardare attraverso fori nella realtà

Quando le persone pensano alla realtà mista e a cosa possono fare con Microsoft HoloLens, di solito si attaccano a domande come "Quali oggetti posso aggiungere alla mia stanza?" o "Cosa posso layerare sopra il mio spazio?" Vorrei evidenziare un'altra area che puoi considerare, essenzialmente un trucco magico, usando la stessa tecnologia per guardare o attraverso oggetti fisici reali intorno a te.

La tecnologia

Se hai combattuto alieni mentre rompono le tue pareti in RoboRaid, sblocca un muro sicuro in Frammenti, o sono stati abbastanza fortunati a vedere l'unSC Infinity dell'esperienza di Halo 5 a E3 nel 2015, allora hai visto quello che sto parlando. A seconda della tua immaginazione, questo trucco visivo può essere usato per mettere fori temporanei nel tuo muro di secco o nascondere mondi sotto una tavola libera.

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

RoboRaid aggiunge tubi tridimensionali e altre strutture dietro le pareti, visibili solo attraverso buchi creati come gli invasori si rompono.

Usando uno di questi ologrammi unici su HoloLens, un'app può fornire l'illusione del contenuto dietro le pareti o attraverso il pavimento nello stesso modo in cui la realtà si presenta attraverso una finestra effettiva. Spostarsi a sinistra, e si può vedere qualsiasi cosa sia sul lato destro. Avvicinarsi, e si può vedere un po 'di più di tutto. La differenza principale è che i buchi reali ti permettono di attraversare, mentre il tuo pavimento testardamente non ti permetterà di salire su quel contenuto olografico magico. Verrà aggiunta un'attività al backlog.

Dietro le quinte

Questo trucco è una combinazione di due effetti. Prima di tutto, il contenuto olografico viene aggiunto al mondo usando "ancoraggi nello spazio". L'uso di ancoraggi per rendere il contenuto "bloccato" significa che ciò che si sta guardando non allontana visivamente dagli oggetti fisici vicini, anche quando si sposta o il sistema di mapping spaziale sottostante aggiorna il modello 3D della stanza.

In secondo luogo, il contenuto olografico è visivamente limitato a uno spazio molto specifico, in modo da poter vedere solo attraverso il buco nella tua realtà. Questa occlusione è necessaria per richiedere di guardare attraverso un foro logico, una finestra o una porta, che vende il trucco. Senza qualcosa che blocca la maggior parte della vista, una crepa nello spazio a una dimensione giurassa segreta potrebbe sembrare semplicemente un dinosauro poco posizionato.

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.)

Questo non è uno screenshot effettivo, ma un'illustrazione di come il segreto underworld di MR Basics 101 sembra HoloLens. Lo chassis nero non viene visualizzato, ma è possibile visualizzare il contenuto attraverso un buco virtuale. Quando si guarda attraverso un dispositivo effettivo, il pavimento sembra scomparire ancora di più perché gli occhi si concentrano su una distanza ulteriore come se non fosse nemmeno lì.

Blocco globale del contenuto olografico

In Unity, causando il blocco del contenuto olografico è semplice come l'aggiunta di un componente WorldAnchor:

myObject.AddComponent<WorldAnchor>();

Il componente WorldAnchor regola costantemente la posizione e la rotazione del relativo GameObject (e quindi qualsiasi altro elemento sotto tale oggetto nella gerarchia) per mantenerla stabile rispetto agli oggetti fisici vicini. Quando si crea il contenuto, crearlo in modo che il pivot radice dell'oggetto sia centrato in corrispondenza di questo foro virtuale. Se il pivot dell'oggetto è profondo nella parete, le sue piccole modifiche nella posizione e nella rotazione saranno molto più evidenti e il foro potrebbe non sembrare molto stabile.

Occlusione di tutto, ma il buco virtuale

Esistono diversi modi per bloccare in modo selettivo la visualizzazione a ciò che è nascosto nelle pareti. Il più semplice sfrutta il fatto che HoloLens utilizza uno schermo aggiuntivo, il che significa che gli oggetti completamente neri appaiono invisibili. È possibile eseguire questa operazione in Unity senza eseguire trucchi speciali per shader o materiali, ma solo creare un materiale nero e assegnarlo a un oggetto che riquadri nel contenuto. Se non ti piace eseguire la modellazione 3D, usa solo una manciata di oggetti Quad predefiniti e si sovrappone leggermente. Ci sono diversi svantaggi di questo approccio, ma è il modo più rapido per ottenere qualcosa di funzionante e ottenere un modello di verifica con bassa fedeltà è ottimo, anche se si sospetta che si voglia effettuare il refactoring in un secondo momento.

Uno svantaggio principale dell'approccio precedente "scatola nera" è che non fotografa bene. Mentre l'effetto potrebbe sembrare perfetto attraverso la visualizzazione di HoloLens, qualsiasi screenshot che si prende mostrerà un grande oggetto nero invece di ciò che rimane del muro o del pavimento. Il motivo è che l'hardware fisico e screenshot di ologrammi compositi e realtà in modo diverso. Facciamo un giro per un momento in qualche falso matematica...

Falso avviso matematico! Questi numeri e formule sono concepiti per illustrare un punto, non per essere una metrica accurata.

Cosa viene visualizzato tramite HoloLens:

( Reality * darkening_amount ) + Holograms

Elementi visualizzati negli screenshot e nei video:

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

In inglese: ciò che vedi attraverso HoloLens è una semplice combinazione di realtà oscurata (come occhiali da sole) e qualsiasi ologramma che l'app vuole mostrare. Tuttavia, quando si crea uno screenshot, l'immagine della fotocamera viene combinata con gli ologrammi dell'app in base al valore di trasparenza per pixel.

Un modo per aggirare questo problema consiste nel modificare il materiale "scatola nera" in modo da scrivere solo nel buffer di profondità e ordinare con tutti gli altri materiali opachi. Per un esempio, vedere il file WindowOcclusion.shader nel MixedRealityToolkit in GitHub. Le righe pertinenti vengono copiate qui:

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

Si noti che la riga "Offset 50, 100" consiste nell'affrontare problemi non correlati, quindi probabilmente sarebbe opportuno lasciarlo fuori.

L'implementazione di un materiale di occlusione invisibile come questo consentirà all'app di disegnare una casella corretta nella visualizzazione e negli screenshot della realtà mista. Per i punti bonus, è possibile provare a migliorare ulteriormente le prestazioni di tale scatola facendo cose intelligenti per disegnare ancora meno pixel invisibili, ma che può davvero entrare nelle weeds e di solito non sarà necessario.

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.

Ecco il segreto underworld di MR Basics 101 come Unity lo disegna, ad eccezione delle parti esterne del box di occlusione. Si noti che il pivot per l'mondo inferiore si trova al centro della scatola, che aiuta a mantenere il foro il più stabile possibile rispetto al pavimento effettivo.

Provare

Hai un HoloLens e vuoi provare l'effetto per te stesso? La cosa più semplice che puoi fare (nessuna codifica necessaria) è installare l'app 3D Viewer gratuita e quindi caricare il download del file fbx fornito su GitHub per visualizzare un modello di vaso di fiori nella tua stanza. Caricarlo su HoloLens e puoi vedere l'illusione sul lavoro. Quando si è davanti al modello, è possibile vedere solo nel piccolo foro, tutto il resto è invisibile. Esaminare il modello da qualsiasi altro lato e scompare completamente. Usare i controlli di movimento, rotazione e scala del visualizzatore 3D per posizionare il foro virtuale su qualsiasi superficie verticale che si può pensare di generare alcune idee!

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.

La visualizzazione di questo modello nell'editor di Unity mostrerà una grande scatola nera intorno alla fioriera. Su HoloLens, la scatola scompare, dando modo a un effetto finestra magica.

Per creare un'app che usa questa tecnica, vedere l'esercitazione Mr Basics 101 nelle esercitazioni Realtà mista. Il capitolo 7 termina con un'esplosione nel pavimento che rivela un mondo nascosto (come illustrato sopra). Who detto esercitazioni doveva essere noioso?

Ecco alcune idee su dove puoi prendere questa idea:

  • Si pensi a modi per rendere interattivo il contenuto all'interno del foro virtuale. Lasciare che gli utenti abbiano un impatto oltre i loro muri può davvero migliorare il senso di meraviglia che questo trucco può fornire.
  • Si pensi a modi per visualizzare gli oggetti in aree note. Ad esempio, come si può mettere un foro olografico nel tavolo del caffè e vedere il pavimento sotto di esso?

Informazioni sull'autore

Picture of Eric Rehmeyer Eric Rehmeyer
Senior Software Engineer @Microsoft

Vedi anche