Primi esperimenti di realtà virtuale con Android Wear e Google Cardboard

24 Agosto 20156 commenti

Usare un visore a realtà aumentata, anche se semplice come Google Cardboard, può essere un'esperienza strabiliante; sono le piccole cose a sconcertare, come ad esempio guardare verso il basso e non vedere il proprio corpo. Ecco un esempio di come con le nuove tecnologie potrebbe cambiare l'interazione a cui siamo abituati.

Le esperienze d’utilizzo date dai dispositivi a realtà aumentata non cambieranno solo il modo in cui funzionano i videogame, ma anche l’interazione coi computer in generale. Ecco alcuni esperimenti e idee di Damian Mehers a riguardo.

Una delle idee è nata dalla necessità di dover impiegare i sensori di orientamento di un device Android Wear: perché non sfruttarli come input per un’innovativa esperienza VR? Cosa succederebbe se si “importasse” una parte del proprio corpo del mondo reale nel VR World, come ad esempio un braccio?

Dopo numerose ore di sperimentazione, ecco la risposta:

httpvh://youtu.be/8ywn21ValCA

The experience is nowhere near good enough for games.  But I don’t care about games.  I want to create genuinely useful VR experiences for interacting with computers in general, and I think this is good enough.  I can point to objects, and have them light up.  I can wear smart watches on both wrists (because I really am that cool) and have two arms available in the VR world.

 

Damian Mehers

Con la combinazione di tapping e swiping – direttamente dal display dei dispositivi Android Wear – è quindi possibile attivare la funzionalità in-world, senza esserne “tirato fuori”.

It sure beats sliding a magnet on the side of my face, because it is my arm I am seeing moving in the virtual world.

Ecco ora una serie di sfide tecniche dietro all’implementazione di quanto visto nel video, ricche di dettagli sul superamento di esse e sulle risorse usate.

Strumenti

Ecco il workspace indispensabile: Android Studio (a sinistra), Unity (in alto a destra) e MonoDevelop (in basso a destra):

unity 1 Android Wear

Sviluppare questa soluzione ha richiesto numerose schede reference (non ha senso scrivere da capo snippet già costruiti che possono fare al proprio caso), e ovviamente una grande confidenza con Android, Java e C#. L’autore ha dichiarate di essere “relativamente un principiante” con Unity.

Creazione di un plugin Unity in Java per sovrascrivere il plugin di Google Cardboard

La documentazione di Unity Android Plugin descrive come è possibile creare dei plugin estendendo la classe Java UnityPlayerActivity.

I experimented with this a little.  I created an Android Library using Android Studio, and implemented my own UnityPlayerActivity derived class.

 

After a little hassle, I discovered that Unity now supports the “aar” files generated when compiling libraries in Android Studio, although I found the documentation a little out of date on the matter in places.  It was simply a question of copying my generated “aar” file into Unity under Assets|Plugins|Android.

unity 2 Android Wear

unity 3 Android Wear

Per quanto riguarda il progetto Unity di Google Cardboard, Damian si è accorto che Big G era arrivata prima di lui: i suoi ingegneri avevano già creato il loro UnityPlayerActivity chiamato GoogleUnityActivity. Vi era dunque necessità di effettuare un @override.

unity 4

Ecco come sono state incluse le classi modificate dal colosso di Mountain View nelle librerie del progetto dell’artefice di questa implementazione:

unity 5 Android Wear

Once I’d copied the aar file into the Unity Android Plugins folder and ran the test app, I was delighted to see my activity say “Cooey” in the log.

La citazione si riferisce al corretto funzionamento della riga di codice Log.d(“Override Activity”, “onCreate called! Cooey!!!”); , che evoca un log a scopi di debug.

unity 6 Android Wear

Ricevere l’orientamento dello smartwatch dallo smartphone

Lo step successivo era ricevere segnali mandati dallo smartwatch Android Wear che contenessero informazioni sull’orientamento del dispositivo.

Damian ha quindi ricreato il proprio progetto, includendo anche il supporto per Android Wear:

unity 7 Android Wear

First I used the Capabilities mechanism to tell other Android Wear devices that this device (the phone) was interested in arm orientation messages:

unity 8 Android Wear

… and I set it up to receive Android Wear messages and pass them over to Unity using UnitySendMessage:

unity 9 Android Wear

Inviare l’orientamento dello smartwatch allo smartphone

A questo punto era solo una questione di cercare i Nodes Android Wear che avessero la capacità necessaria, che inviassero i cambi rilevati dal sensore d’orientamento, e che inviassero messaggi Android Wear al giusto Node. Ecco il codice per lo smartwatch:

unity 10 Android Wear

Nel mentre, Damian ha scoperto che alcuni dispositivi Wear non supportano i sensori richiesti, ma molto probabilmente lo snippet funziona su tutti i device più moderni.

Sfruttare l’orientamento del watch per animare un blocco sullo schermo

Inside Unity I created a cube which tweaked into a rectangle, and made it a child of the CardboardMain’s camera, so that it moved when I moved:

unity 11 Android Wear

Vedete la sezione “Script“, in basso a destra? Vi è uno script chiamato “WristController.cs” (per gestire il movimento del “polso”, che per ora è rappresentato da un cubo bianco). Lì è dove – grazie alla classe Java UnityPlayerActivity custom – vengono ricevute le informazioni relative all’orientamento dello smartwatch inviate da esso stesso.

I started off simply assigning the received orientation to the block’s orientation by assigning to transform.eulerAngles

unity 12 Android Wear

A quanto pare funzionava, ma era eccessivamente scattoso. Ecco la risorsa che, implementato col precedente codice, lo ha migliorato notevolmente. Ecco il sourcecode aggiornato:

unity 13 Android Wear

Animare un braccio al posto del blocco cubico

I was pleased to be smoothly animating a block, but my arm doesn’t quite look like that. It is more armish.  I went looking for a model of an arm that I could import and use instead.  I found a YouTube Unity video called ADDING ARMS by Asbjørn Thirslund, in which he explains how to to import and use a free arms model by eafg.

httpvh://www.youtube.com/watch?v=OUQuHf8M9XQ

Si è trattato di una semplice questione di dimensionamento e posizionamento degli arti come un oggetto figlio della videocamera Unity principale, ai quali si è aggiunto lo script utilizzato precedentemente per animare il blocco.

I also removed the right-hand arm, since it looked a little weird to have a zombie arm doing nothing.

unity 14 Android Wear

Lo script ArmController visibile nello screenshot ha lo stesso contenuto di WristController.cs di prima.

Considerazioni finali

Ci vorrà molto prima che questa tecnica sia a tutti gli effetti praticabile per i giochi mobile, ma per i tipi di esperienze utente desiderati da Damian i tempi sono già maturi.

I’d also need to add calibration, since the watch may be pointing in any direction initially – if I assume it always starts straight out, that would be good enough.  Detecting where the arm is pointing shouldn’t be too hard, since the cardboard code already does gaze detection – so many possibilities, but so little time for side-projects such as this!

 

This has been a fun interlude on my way to creating what I hope to be a genuinely useful VR experience based around browsing books your friends have read … more on that later.

Cosa ne pensate di questo fantastico lavoro preparato da Damian Mehers? Ditecelo nei commenti.

Loading...
Social Media Auto Publish Powered By : XYZScripts.com