HoloDev – 03 – First App

 In Dev

Dopo aver visto i tool necessari per iniziare a sviluppare nel post precedente, iniziamo a realizzare una prima semplice applicazione.

In questi post cercherò di non ripercorrere semplicemente i sample già disponibili online ma di andare a raccontare alcuni punti oscuri degli esempi che si trovano online e spiegare perché i sample funzionano e le nostre prime applicazioni no.

Per iniziare a realizzare la prima applicazione consiglio di iniziare a seguire il sample Holograms 100 presente sul sito del Holographyic Academy. L’obiettivo di questo esempio è insegnarci a creare un piccolo progetto e visualizzare un semplice cubo. Non riporterò passo passo le istruzioni che potete seguire dal sito, ma voglio evidenziare due passaggi importanti.

MainCamera

MainCamera

Il primo concetto da capire e’ relativo alla “MainCamera” e alla relazione con il device.

Per chi non ha mai utilizzato Unity3D, una camera è, come di ce il nome, uno speciale oggetto che ha il compito di renderizzare su schermo il modo di gioco (scena). Visto che le camere possono essere molteplici(pensate a un qualsiasi gioco con una visione frontale e una mappa dall’alto), con MainCamera si indica quella che renderizza la vista principale dell’utente e che viene appunto marcata con il tag MainCamera.

Come accade anche con i visori di Realtà Virtuale, la MainCamera coincide con il punto di vista dell’utente. Nel caso degli HoloLens, la MainCamera sara’ automaticamente spostata nel mondo man mano che l’utente si muove nello spazio.

Visto che che vogliamo che la nostra scena sia renderizzata dal punto di vista degli occhi dell’utente, dobbiamo posizionarla in posizione (X: 0, Y: 0, Z: 0). Questo passaggio non e’ obbligatorio, ma se non lo facciamo otterremo un effetto di disallineamento tra noi e la scena che potrebbe comunque essere utile se vogliamo creare una prospettiva dall’alto senza far assumere all’utente una posizione scomoda.

HoloLens per renderizzare la scena in modo immersivo adotta un piccolo trucco cioè quello di renderizzare come trasparente, o meglio non renderizzare nulla, quando incontra un colore nero. Per questo motivo, il secondo settings essenziale della camera è quella del Background che deve essere impostato su SolidColor (tinta unita) nero RGBA(0, 0, 0, 0).

L’ultimo aspetto della camera su cui voglio mettere l’attenzione e’ il parametro  Near Clip Plane. Questo parametro regola la distanza minima oltre la quale la camera inizia a renderizzare gli oggetti. Nel sample ci viene consigliato di alzare questo parametro da 0.3 a 0.85, questa modifica farà sì che ogni oggetto, o pezzo di esso, più vicino di 85 cm dalla testa dell’utente non sarà visualizzato sugli schermi degli HoloLens. Questo è un parametro indicativo e non obbligatorio ma è una buona distanza per non affaticare gli occhi dell’utente (provate a mettere un dito di fronte a voi a breve distanza e guardare la stanza per capire cosa intendo).

Build Settings

BuildSettings

Il secondo concetto chiave di questo sample e’ relativo alla relazione tra applicazione Unity e applicazione UWP.

Come accennavo nel post precedente, usando Unity stiamo creando un contenitore speciale che sarà poi inserito in una applicazione UWP. Unity quando compila il progetto genera sia questo contenitore speciale (Player) sia l’applicazione UWP che lo contiene e per generarlo correttamente per HoloLens è necessario andare a specificare alcuni settings tra le impostazioni di Build Settings e  Player Settings.

Nei Build Settings dobbiamo specificare che il player che vogliamo generare sia compatibile con una Store App ( ricordate che tutte le applicazioni HoloLens sono Store App) e negli Other Settings dobbiamo specificare che stiamo esportando una applicazione di Realtà Virtuale con device HoloLens ( Rendering –> Virtual Reality Supported –> Virtual Reality Devices –> “Windows Holographic”).

Per applicazioni più complesse in questo menù dovremo specificare anche le capabilities necessarie per accedere a specifiche funzionalità del device (microfoni, camere, internet, …).

Dopo avere impostato le caratteristiche del player possiamo specificare dove salvare il progetto UWP e premere Build.

Ora che abbiamo il nostro progetto UWP possiamo fare il deploy sul device o sull’emulatore usando Visual Studio 2015.

Piccola nota di chiusura. Visual Studio non supporta ancora a pieno questo tipo di applicazioni e l’integrazione con Unity è ancora parziale e quindi non tutte le proprietà del manifest sono esposte tramite l’interfaccia grafica e potrebbe essere necessario modificare a mano alcuni valori dentro il file del manifest o del project.

Nel tutorial viene detto di cambiare manualmente alcuni parametri del file del project, ma queste modifiche era necessarie solo nelle primissime release dove HoloLens non era ancora ben integrato in Unity e Windows 10. Quindi potete tranquillamente saltare quel passaggio.

Seguendo questo tutorial si può facilmente renderizzare su HoloLens qualsiasi oggetto 3D che Unity è in grado importare ( .FBX, .dae (Collada), .3DS, .dxf.obj ). Nel mio caso, vista la moda del momento, mi sono esercitato utilizzando un piccolo Charizard. Per importare il modello è sufficiente copiare il file nella cartella generale del progetto Unity, aspettare che venga riconosciuto e elaborato, e infine aggiungerlo trascinandolo alla scena.

Se avete dubbi su questi passaggi potete leggere questa parte della documentazione.

Nel prossimo post vedremo come debuggare una applicazione Unity su HoloLens.

Prossimo Post: HoloDev – 04 – Debug Unity App

Matteo Valoriani