Visualizzazione post con etichetta Daydream. Mostra tutti i post
Visualizzazione post con etichetta Daydream. Mostra tutti i post

venerdì 18 maggio 2018

Oculus Go e RIft

Ho avuto modo di provare sia Oculus Go che Oculus Rift.
L'impressione generale, anche in confronto a Daydream, e' che l'hardware sia trascurabile...cio' che fara' effettivamente la differenza sara' la disponibilita' di software




In merito a cio' Oculus Rift ha una killer application...Google Earth VR (non disponibile su Go e Daydream)...peccato che non sia possibile aggiungere dei temi personalizzati

giovedì 17 maggio 2018

Modello digitale del terreno con AFrame e Daydream controller

Tramite il framework Aframe e' possibile visualizzare su un comune browser un modello digitale del terreno in formato OBJ/MTL e poterlo navigare/ruotare con il controller nativo di Daydream

ATTENZIONE : per abilitare il controller Daydream si deve inserire nella url di Chrome la seguente stringa

chrome://flags 

e si devono attivare gli switch WebVR e Gamepad API




-------------------------------------------------------------------------------------------
<html>
  <head>
    <script src="https://aframe.io/releases/0.8.0/aframe.min.js"></script>

    <script src="//cdn.rawgit.com/donmccurdy/aframe-extras/v4.1.1/dist/aframe-extras.min.js"></script>
  </head>
  <body>

    <a-scene background="color: green">

<a-entity id="rig"
          movement-controls="fly: true; speed: 0.3"
          position="15 0 15">
  <a-entity camera
            position="0 1.6 0"
            look-controls></a-entity>
</a-entity>

<a-assets>
                        <a-asset-item id="dem-obj" src="Ricasoli_nord.obj"></a-asset-item>
                        <a-asset-item id="dem-mtl" src="Ricasoli_nord.mtl"></a-asset-item>
        </a-assets>

  <a-entity position="3 6 2" rotation="90 180 270" obj-model="obj: #dem-obj; mtl: #dem-mtl"></a-entity>

    </a-scene>
  </body>
</html>

martedì 8 maggio 2018

Unreal e Google VR per DayDream

Si crea un Nuovo Progetto/Blank settando Mobile/Tablet

Menu' Settings /Project Settings/Platforms

Nel sottogruppo Android si devono accettare le due licenze (APK Packaging e Google Play Services) e si imposta il Mininum e Target SDK almeno a 21 per Google VR

Nel sottogruppo Android SDK sempre sotto Platforms si devono poi settare 4 directory che sotto Mac con Android Studio installato e JDK 1.8 sono

SDK : /Users/lucainnocenti/Library/Android/sdk (/Library/Android/sdk)
NDK : /Users/lucainnocenti/Library/Android/sdk/ndk-bundle (/Library/Android/sdk/ndk-bundle)
Ant : /usr/local/Cellar/ant/1.10.3/ (ant installato via Homebrew)
Java_Home : /Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home

per verificare la directory di Java_Home si puo' usare lo script in /usr/libexec/java_home


Per lanciare la applicazione su telefono si usa Launch dove compare il dispositivo (il computer ed il telefono devono essere gia' stati autorizzati)


La prima volta la compilazione e' molto, molto molto lenta perche' devono essere compilati tutti gli shader del progetto (si parla di 10 minuti per il progetto Blank)

Per creare il solo package si va in File/Package Project/Android/Android(ETC1)

Per importare modelli in Unreal la cosa piu' semplice e' usare il formato FBX. Se il modello e' troppo piccolo per la scena si puo' settare il fattore di scala

Specifiche per Google VR (DayDream)
In Project Settings spuntare Enable FullScreen Immersive on KitKat and above, Support amd64 e rimuovere armv7, In Advanced APK Packaging si spunt Configure GoogleVR for sustained performance ed in Configure GoogleVR to support specific hardware si seleziona DayDream

Nel menu Android SDK si configura l'NDK API ad android-21



Si va poi nel menu Engine/Input e si cancella la default touch interface (Clear)

Si clicca su Edit/Plugins e si seleziona la categoria Input Devices abilitando GoogleVR Motion Controller

e nella categoria Virtual Reality si aggiunge Google VR

Si riavvia l'editor per caricare i plugin

Per compilare pacchetti specifici per Daydream si deve selezionare l'opzione AndroidATC



giovedì 3 maggio 2018

Stereoscopio interattivo con QGis2ThreeJS

Circa 3 anni fa avevo provato il plugin di QGis Qgis2ThreeJS per fare DEM stereoscopici da usare Google CardBoard ma poi avevo lasciato li' la cosa perche' non riuscivo ad avere l'interazione per girare il modello. Adesso ho trovato la soluzione ed e' molto piu' banale di quanto potessi immaginare...un mouse bluetooth. Basta accoppiare il mouse al telefono, inserire il telefono in un CardBoard o DayDream e si puo' visualizzare il modello da piu' punti di vista

Per fare il progetto QGis si deve utilizzare il plugin nel ramo sperimentale

https://github.com/minorua/Qgis2threejs/tree/exp_stereo

e si deve selezione il template 3DViewer.html


Si seleziona poi il modo di controllare il modello


e questo il risultato finale (ovviamente da inserire nel visore)


venerdì 27 aprile 2018

DayDream Emulator Controller

Ho trovato ad un prezzo stranamente basso (30 euro) un visore Daydream e il controller collegato ed ho voluto provarlo
Solo dopo ho scoperto che non e' necessario avere Daydream per poterci sviluppare.
Avendo un telefono di riserva (non necessariamente supportato da Daydream) si puo' installare un emulatore di controller che si collega al telefono principale sia via Bluetooth che via WiFi



L'emulazione del controller funziona anche con il package Unity mediante una connessione USB

Peraltro sto sperimentando molti problemi con il controller fisico (quello grigio all'estrema destra) che e' molto carino ma ha difficolta' a rimanere collegato al telefono. In un caso estremo sono dovuto andare in Impostazioni/App/Servizi Google VR/Spazio di archiviazione/Cancella Dati. Questa operazione resetta le impostazioni di Google VR



Daydream Controller in Unity

Un semplice esempio di script da aggiungere al Player per muovere la Camera di Unity con il DayDream Controller





public class move_player : MonoBehaviour {


    // Use this for initialization
    void Start () {
        
    }
    
    // Update is called once per frame
    void Update () {
        Quaternion ori;

        ori = GvrController.Orientation;
        if (ori.eulerAngles.z > 20 && ori.eulerAngles.z < 90) {
            Debug.Log ("Roll Left ");
        }

        if (ori.eulerAngles.z > 270 && ori.eulerAngles.z < 340) {
            Debug.Log ("Roll Right");
        }

        if (ori.eulerAngles.x > 20 && ori.eulerAngles.x < 90) {
            Debug.Log ("Drop");
            var rot = transform.rotation;
            rot.z -= Time.deltaTime * 1;
            transform.rotation = rot;
        }

        if (ori.eulerAngles.x > 270 && ori.eulerAngles.x < 340) {
            Debug.Log ("Climb");
            var rot = transform.rotation;
            rot.z += Time.deltaTime * 1;
            transform.rotation = rot;

        }





        Debug.Log ("X : " + ori.eulerAngles.x.ToString("#.0")); //pitch
        Debug.Log ("Y : " + ori.eulerAngles.y.ToString("#.0")); // yaw
        Debug.Log ("Z : " + ori.eulerAngles.z.ToString("#.0")); // roll



        if (GvrController.IsTouching) {
            Vector2 touchPos = GvrController.TouchPos;
            Debug.Log ("Toccato " + touchPos.x.ToString ("#.00"));

            var x = touchPos.x * Time.deltaTime * 5.0f;
            var y = touchPos.y * Time.deltaTime * 5.0f;
            if (touchPos.x < 0.5f)
                x *= -1.0f;
            else
                x *= +1.0f;
            
            if (touchPos.y < 0.5f)
                y *= -1.0f;
            else
                y *= +1.0f;

            transform.Translate (x, y, 0.0f);
        }
        
    }
}

venerdì 30 marzo 2018

Modello digitale del terreno con Google DayDream ed Unity

In questo post il metodo che ho usato per mostrare dati di modelli digitali del terreno con Unity ed il visore DayDream di Google

Il progetto che ho creato e'  di tipo Android. Nel Player Settings del progetto sotto XR Settings deve essere spuntato il supporto alla realta' virtuale e si aggiunge DayDream tra gli SDK. Sempre nel Player Settings si deve impostare in Other Settings un Minimum Level API a livello 24

Sicilia con Etna

Per prima cosa si crea il modello digitale.
L'immagine deve essere a scala di grigi, in cui il livello di grigio indica la quota sul livello del mare (nero equivale a livello piu' basso, spesso il livello del mare, il bianco e' la quota piu' alta)

Si crea un oggetto Terrain da GameObject/3D/Terrain con dimensioni pari a quelle del modello DEM
Si trascina l'immagine negli assets del progetto e si prende il file HeightmapfromTexture. Dalle proprieta' dell'immagine (a destra Advanced si deve spuntare Read/Write and Apply)
L'editor delle versioni moderne di Unity (Unity 3d 2017.2) non permettono di editare direttamente file JavaScript. Si copia quindi lo script in un editor e si aggiungono le seguenti linee (dove si dichiarano le variabili x ed y)

    var mapColors = heightmap.GetPixels();
    var map = new Color[w2 * w2];
    var y = 0.0;
    var x = 0.0;



 si salva il file e lo si trascina negli assets del progetto.

Si selezione negli assets l'immagine DEM importata e si clicca sul menu' in alto Terrain/HeightMapFromTexture

Per settare il livello di amplificazione delle quote si cambia il valore di Terrain Height nell'inspector

Il modello usato e' poco dettagliato 2048x2048 pixels


Una volta importato e settato il modello digitale si deve aggiungere il supporto DayDream a Unity.
Una volta scaricato il package Daydream per Unity e lo aggiunge al progetto con il menu Assets/Import Package/Custom/GoogleVRforUnity.unitypackage.


  • Si aggiunge quindi alla Hierarchy il modulo GvrEditorEmulator
  • Si crea quindi un GameObject (dal menu' in alto), Gameobject/Create Empty e si rinomina come Player
  • Si trascina la camera e si inserisce nell'albero sotto l'oggetto Player
  • Si aggiungono GvrControllerMain e GvrEventSystem
  • Se il progetto include una canvas deve essere aggiunto GvrPointerGraphicsRaycaster da Add Component
  • Si aggiunge GvrPointerPhysicsRaycaster alla Camera da Add component
  • Si aggiunge GvrControllerPointer agganciandolo al Player

Debugger integrato ESP32S3

Aggiornamento In realta' il Jtag USB funziona anche sui moduli cinesi Il problema risiede  nell'ID USB della porta Jtag. Nel modulo...