Kodierung für die HoloLens mit Unity 5 – Teil #6 – Wie bekomme ich mein 3D-Modell in die Mixed-Reality-Welt?

Kodierung für die HoloLens mit Unity 5 – Teil #6 – Wie bekomme ich mein 3D-Modell in die Mixed-Reality-Welt?

Unity eignet sich hervorragend zum Erstellen primitiver Objekte, und der Asset Store ist ein großartiges Repository, um vorgefertigte Objekte zu finden, die Sie in Ihrem Projekt verwenden können. Aber was ist, wenn Sie Ihr eigenes Objekt haben, das Sie in einer Mixed-Reality-Welt sehen und teilen möchten?

Ich habe bei meinen 3D-Druckprojekten sicherlich viel mit Autodesk 123d gearbeitet, und ich war gespannt, ob ich einige meiner historischen Projekte dazu bringen könnte, sie in der HoloLens anzuzeigen – insbesondere mein 3D-gedrucktes prothetisches Roboterhandprojekt. P>

Wie kann ich also von Autodesk 123d zu Unity wechseln und es als statisches Objekt in der HoloLens rendern?

Ab Autodesk 123d

Dies ist nur das CAD-Tool meiner Wahl – dies ist kein obligatorisches Tool. Dieses Paket erstellt Dateien mit der Erweiterung „123dx“, einem proprietären Autodesk-Format.

Sie können diese jedoch in ein offenes STL-Format exportieren – ich verwende dieses Format häufig für den 3D-Druck.

Ich habe eine 123d-Datei eines Teils der Roboterhand gefunden, auf die ich mich zuvor bezogen habe, und sie in Autodesk 123d hochgeladen.

Es ist erwähnenswert, dass ich dies so ausgerichtet habe, dass es auf den Ursprung des blauen Gitters zentriert ist, und dass die Vorderseite der 3 Finger auch so ausgerichtet ist, dass sie mit der Vorderansicht von Autodesk übereinstimmt.

Als nächstes habe ich dies in das STL-Format exportiert, indem ich den folgenden Menüpunkt verwendet habe:

Konvertieren des STL- in das OBJ-Format

Ich bin mir sicher, dass es eine Reihe von Möglichkeiten gibt, dies zu tun – ich habe mich für die Verwendung eines Online-Konvertierungstools entschieden. Dadurch konnte ich eine STL hochladen und dann eine OBJ-Datei herunterladen.

Das von mir verwendete Tool ist http://www.greentoken.de/onlineconv/.

Es gibt viele Möglichkeiten – eine andere ist:http://www.meshconvert.com/

Von hier aus ist es nur noch ein einfacher Schritt zu Unity.

Erstellen eines Unity-Prefabs

Ich habe ein neues Projekt in Unity erstellt und es für Mixed Reality konfiguriert. Ich habe die Schritte dafür bereits zuvor beschrieben, aber im Grunde genommen noch einmal:

  • Projekt erstellen;
  • Zuerst habe ich die Position der Kamera auf (0, 0, 0) geändert, was bedeutet, dass X =0, Y =0 und Z =0;
  • Als Nächstes habe ich im Abschnitt Kamera den Dropdown-Wert Markierungen löschen in Vollfarbe geändert .
  • Schließlich ändere ich die Hintergrundeigenschaft in Schwarz (R =0, G =0, B =0, A =0).

Sobald das Basisprojekt eingerichtet war, zog ich die OBJ-Datei von dort, wo ich sie auf meiner Festplatte gespeichert hatte, in den Ordner „Assets“ in Unity. Dies zeigte ein kleines Vorschausymbol der Hand, das mir zeigte, dass ich auf dem richtigen Weg war.

Dann habe ich dieses vorgefertigte Objekt als statisches Objekt in die Hierarchieansicht gezogen und es 1 m vor mein Sichtfeld verschoben (d. h. ich habe die Z-Position geändert, um den Wert 1 zu haben).

Anschließend habe ich die App erstellt und im HoloLens-Emulator bereitgestellt. Aber es gab ein paar unmittelbare und offensichtliche Probleme.

  • Das Objekt war um ein Vielfaches größer als ich erwartet hatte, und
  • Das Objekt wurde um 90 Grad gegen den Uhrzeigersinn um die X-Achse und um 90 Grad gegen den Uhrzeigersinn um die Y-Achse gedreht.

Skalierung und Rotation korrigieren

Hier muss etwas spekuliert werden, aber ich denke, dass die Standardeinheit in Autodesk 123d Millimeter ist. Wenn ich in STL exportiere und in OBJ konvertiere, wird die Messung der Einheit nicht gespeichert – und wenn ich sie in Unity lade, wird jeder 1 mm in Autodesk 123d als 1 m in Unity angesehen, da die Standardeinheit Meter ist. Daher ist das Objekt 1000-mal zu groß und ich muss um 0,001 skalieren.

In Bezug auf die Drehung haben verschiedene CAD-Pakete unterschiedliche Vorstellungen davon, was „oben“ bedeutet. Für mich war es ziemlich einfach, um -90 Grad in der X- und Y-Achse zu drehen, damit das Objekt korrekt gerendert wird.

Nachdem ich die oben gezeigten Skalierungen und Drehungen implementiert hatte, zeigte Unity die folgende Szene:

Wenn ich dieses Programm im Emulator mit den geänderten Werten ausführe, sehe ich das folgende Hologramm:

Schließlich habe ich diese App in die physische HoloLens geladen, um sie mir anzusehen – sie wurde ziemlich perfekt gerendert und war identisch mit der Wiedergabe im HoloLens-Emulator.

Dies eröffnet mir mit der HoloLens eine neue Welt voller Möglichkeiten – ich bin nicht auf primitive Objekte innerhalb von Unity beschränkt oder verwende die Prefabs anderer Leute aus dem Unity Asset Store.

Schlussfolgerung

Dies ist eine unglaublich leistungsstarke Technik – Sie können Ihre eigenen komplexen 3D-Objekte erstellen, sie in ein Standardformat wie STL- oder OBJ-Dateien exportieren und dann zur Anzeige in Unity importieren. Etwas Nachbearbeitung war notwendig – ich stellte fest, dass ich das Objekt um das 1000-fache verkleinern und in ein paar verschiedenen Achsen drehen musste, aber das ist eine ziemlich triviale Modifikation. Ich habe mich dafür entschieden, dies als statisches Objekt anzuzeigen – aber wie ich bereits erwähnt habe, gibt es keinen Grund, warum dies kein dynamisch generiertes Objekt sein könnte.