Codifica per HoloLens con Unity 5 – Parte #6 – Come posso portare il mio modello 3d nel mondo della realtà mista?

Codifica per HoloLens con Unity 5 – Parte #6 – Come posso portare il mio modello 3d nel mondo della realtà mista?

Unity è ottimo per creare oggetti primitivi e l'archivio risorse è un ottimo repository per trovare oggetti prefabbricati da utilizzare nel tuo progetto. Ma cosa succede se hai il tuo oggetto che vorresti vedere e condividere in un mondo di realtà mista?

Ho sicuramente lavorato molto utilizzando Autodesk 123d con i miei progetti di stampa 3D ed ero interessato a vedere se potevo visualizzare alcuni dei miei progetti storici in HoloLens, in particolare il mio progetto di mano robotica protesica stampata in 3D.

Quindi, come posso passare da Autodesk 123d a Unity e renderizzarlo come oggetto statico in HoloLens?

A partire da Autodesk 123d

Questo è solo il mio strumento CAD preferito:non è uno strumento obbligatorio. Questo pacchetto crea file con estensione "123dx", che è un formato proprietario di Autodesk.

Tuttavia, puoi esportarli in un formato STL aperto:io uso questo formato comunemente per la stampa 3D.

Ho individuato un file 123d di una parte della mano del robot a cui ho fatto riferimento in precedenza e l'ho caricato in Autodesk 123d.

Vale la pena notare che l'ho orientato in modo che sia centrato sull'origine della griglia blu e anche che la parte anteriore delle 3 dita è orientata per allinearsi anche alla vista frontale di Autodesk.

Successivamente, l'ho esportato nel formato STL, utilizzando la voce di menu seguente:

Conversione del formato STL in OBJ

Sono sicuro che ci sono molti modi per farlo:ho scelto di utilizzare uno strumento di conversione online. Questo mi ha permesso di caricare un STL e quindi di scaricare un file OBJ.

Lo strumento che utilizzo è http://www.greentoken.de/onlineconv/.

Ci sono molte opzioni, un'altra è:http://www.meshconvert.com/

Da qui, è un semplice passo verso Unity.

Creazione di un prefabbricato Unity

Ho creato un nuovo progetto in Unity e l'ho configurato per la realtà mista. Ho già descritto i passaggi per questo, ma sostanzialmente per ripetere:

  • Crea il progetto;
  • In primo luogo, ho cambiato la posizione della fotocamera in (0,  0, 0), che significa X =0, Y =0 e Z =0;
  • Successivamente, nella sezione Fotocamera, ho modificato il valore del menu a discesa Cancella flag in Tinta unita .
  • Infine, cambio la proprietà Sfondo in Nero (R =0, G =0, B =0, A =0).

Una volta impostato il progetto di base, ho trascinato il file OBJ da dove l'ho salvato sul mio disco rigido nella cartella Risorse in Unity. Questo ha mostrato una piccola icona di anteprima della mano, che mi ha mostrato che ero sulla strada giusta.

Quindi ho trascinato questo oggetto prefabbricato nella vista Gerarchia come oggetto statico e l'ho spostato a 1 m davanti al mio campo visivo (cioè ho cambiato la posizione Z in modo che avesse valore 1).

Ho quindi creato l'app e l'ho distribuita all'emulatore HoloLens. Ma c'erano un paio di problemi immediati ed evidenti.

  • L'oggetto era molte volte più grande di quanto mi aspettassi e
  • L'oggetto è stato ruotato di 90 gradi in senso antiorario attorno all'asse X e di 90 gradi in senso antiorario attorno all'asse Y.

Correzione del ridimensionamento e della rotazione

C'è un elemento di congettura qui, ma penso che l'unità predefinita in Autodesk 123d sia millimetri. Quando esporto in STL e converto in OBJ, non memorizza la misura dell'unità e quando la carico in Unity, poiché l'unità predefinita è metri, ogni 1 mm in Autodesk 123d viene visto come 1 m in Unity. Pertanto l'oggetto è 1000 volte troppo grande e devo ridimensionare di 0,001.

Per quanto riguarda la rotazione, diversi pacchetti CAD hanno idee diverse su cosa significhi "su". Per me, è stato piuttosto semplice ruotare di -90 gradi sugli assi X e Y per rendere l'oggetto correttamente visualizzato.

Dopo aver implementato il ridimensionamento e le rotazioni mostrati sopra, Unity ha mostrato la scena seguente:

Quando eseguo questo programma nell'emulatore con i valori modificati, vedo l'ologramma qui sotto:

Alla fine, ho caricato questa app nell'HoloLens fisico per guardarla:è stata renderizzata praticamente perfettamente e identica a come è stata renderizzata nell'emulatore HoloLens.

Questo mi apre un nuovo mondo di possibilità con HoloLens:non sono limitato agli oggetti primitivi all'interno di Unity o all'uso di prefabbricati di altre persone dall'Unity Asset Store.

Conclusione

Questa è una tecnica incredibilmente potente:puoi creare i tuoi oggetti 3d complessi, esportarli in un formato standard come file STL o OBJ e quindi importarli in Unity per la visualizzazione. È stato necessario un po 'di post-elaborazione:ho scoperto che dovevo ridimensionare l'oggetto di 1000 volte e ruotarlo su un paio di assi diversi, ma questa è una modifica piuttosto banale da apportare. Ho scelto di visualizzarlo come un oggetto statico, ma come ho già discusso in precedenza, non c'è motivo per cui questo non possa essere un oggetto generato dinamicamente.