Eigene 3D-Modelle mit der Kinect V2

Von Berndt+Hamb%c3%b6ck+(Gastblogger) Autor Feed 3. March 2016 13:00

Letzte Woche war der Nefertiti-Hack einer der großen Aufreger in der IT-Gemeinde. Zwei deutsche Künstler (Nora Al-Badri and Jan Nikolai Nelles) behaupten mit der Kinect V1 die 3300 Jahre alte Büste der Königin Nefertiti (bzw. Nofretete) im Neuen Museum Berlin eingescannt zu haben. Dies noch dazu unter erschwerten Bedingungen, da ebendort eigentlich sogar das Fotografieren verboten ist.

Wie sich das abgespielt haben soll ist hier zu sehen: https://vimeo.com/148156899

clip_image002 clip_image003
Bild 1: Büste der Nofretete (links Ägyptische Abteilung im Neuen Museum Berlin (Quelle: Wikipedia),
rechts vom Scan)

Herausgekommen ist eine 100MB große STL-Datei, bzw. eine 20MB große OBJ-Datei (diese ist hier, auf der Webseite für den Hack zu finden: http://nefertitihack.alloversky.com/).

Überraschend ist die hohe Auflösung, die den beiden Künstlern da gelungen ist, bei der Ansicht des Resultats hat mich ebenfalls sogleich das 3D Fieber gepackt. Ich wollte wissen, ob mir das auch gelingen könnte – nicht gleich in einem Museum, sondern zu Hause und mit meiner Tochter und mir als williges und geduldiges Testobjekt.

Eigene Scans mit der Kinect V2

Der Wunsch ist also einen relativ guten 3D Scans eines (lebenden) Modells zu erstellen. Das soll mithilfe der aktuelleren Kinect V2 erreicht werden. Diese soll fix montiert werden, um einen möglichst gleichmäßigen Scan zu erreichen, das bedeutet aber, es soll sich nun das Modell langsam im Kreis drehen – sich dabei aber möglichst sonst nicht bewegen, um einen guten, kompletten, 360° Scan zu erreichen.

Um nun also seinen eigenen 3D-Scan im Eigenbau zu erstellen wird somit folgendes benötigt:

  • Einen aktuellen/leistungsstarken PC mit USB 3 Schnittstelle (ich habe für diesen Blog-Eintrag das Surface Pro 4 verwendet).
  • Eine Kinect V2, inkl. Adapter für Windows, diese ist im Microsoft Store zu finden, z. B. hier

clip_image005
Bild 2: Kinect mit Adapter für Windows

  • Software zum Scannen:
  • Ein Stativ auf dem die Kinect montiert wird (ich habe zusätzlich einen Kugelkopf verwendet, um etwas flexibler in der Ausrichtung zu sein, dieser ist aber nicht unbedingt nötig).
  • Zusätzlich bietet sich ein Barhocker an, auf dem das zu scannende Modell Platz nimmt, das sieht dann ungefähr so aus:
    clip_image007clip_image009
    Bild 3: Kinect auf dem Stativ und Barhocker für das Modell

Somit wäre also alles beisammen und der Versuch kann beginnen.

Das Scannen

Das eigentliche Scannen geschieht mit der 3D Scan App, diese wird allerdings aus der mit der 3D Builder App heraus aufgerufen, indem dr Scan Button loinks unten gedrückt wird.

clip_image011
Bild 4: 3D Builder APP

Nach dem Start kann der Scan konfiguriert werden, Die Breite, Höhe, Tiefe, sowie die Auflösung. Mit dem Start Button kann es auch schon losgehen. Das Modell muss sich nun langsam im Kreis drehen (darum der Barhocker), sollte sich das Modell zu schnell drehen, beschwert dich die APP und das Modell muss sich ein klein wenig zurückdrehen, bis die APP wieder synchron mit der Position des Modells ist. Wurde ein kompletter 360° Scan durchgeführt, wird der Stop Button gedrückt und das Modell wird in die 3D Builder Appp übergeben, wo dieses noch nachbearbeitet und gespeichert werden kann.

clip_image013 clip_image015
Bild 5: 3D Scann APP und 3D Builder APP mit dem Resultat

In meinen Versuchen ist doch ein recht brauchbares Resultat herausgekommen. Zumindest was mich betrifft, mit meiner Tochter hat das nicht ganz so gut geklappt, aber die heutige Jugend neigt dazu etwas ungeduldig zu sein. Ein brauchbarer Scan braucht nun einmal seine Zeit und das wird auch nicht gleich beim ersten Versuch klappen.

clip_image016clip_image017
Bild 6: Resultate mit der Kinect V2 und der 3D Scan APP

Generell kann gesagt werden, dass mit folgenden Tipps recht brauchbare Resultate erreicht werden:

  • Mit dem Gesicht zur Kinect den Scan beginnen, damit wird der wichtigste Teil des Scans schon einmal recht gut getroffen.
  • Möglichst einheitlicher und dunkler Hintergrund, damit dieser den Scan nicht stört.
  • Gleichmäßige Beleuchtung, möglichst wenig Schatten auf dem Modell.

Damit sollten schon recht gute 3D-Scans gelingen, diese können auch sofort mit der 3D Builder APP zu einem 3D-Drucker zum Ausdrucken geschickt werden.

Auch einer Verwendung in Unity steht nichts im Wege, da die Modelle in verschiedenen Formaten gespeichert werden können, so eben auch beispielsweise im OBJ Format, welches dann importiert werden kann.

clip_image019 clip_image021

Um ein beliebeiges mit der Kinect V2 und der 3D-Builder App erstelltes Modell in Unity zu verwenden, muss nur ein Projekt geladen, bzw. erstellt werden. Danach kann das 3D-File mittels Drag&Drop in den Assets Folder importiert werden. Der nächste Schritt ist das Hinzufügen in die Szene, ebenfalls mit Drag&Drop.

clip_image022
Bild 7: Kinect V2 Modell in Unity

Als leidenschaftlicher C#-Entwickler wollte ich die gespeicherten 3D-Modelle natürlich noch in einer eigenen WPF-Applikation laden, das möchte ich abschließend noch gerne beschreiben.

3D Viewer mit WPF

Für die Anzeige eines 3d-Modells in einer WPF Applikation gibt es das Helix Toolkit als Nuget Package. Dieses wird zu einer neuen WPF-Applikation in Visual Studio hinzugefügt.

clip_image024
Bild 8: Helios Toolkit NuGet Package

Danach muß der Namespace in der MainWindow.xaml hinzugefügt werden.

xmlns:helix=http://helix-toolkit.org/wpf

Jetzt noch das HelixViewport3D Control hinzufügen, etwas Licht und die Datenbindung zu einem selbst geladenen Modell angeben (oder als zweite Option rein nur den Pfad zu ebensolchem).

<helix:HelixViewport3D Name="helixViewPort" ZoomExtentsWhenLoaded="True" >
<ModelVisual3D>
<helix:SunLight/>
<ModelVisual3D Content="{Binding CurrentModel}"/>
<!--<helix:FileModelVisual3D Source="{Binding}" />—>
</ModelVisual3D>
</helix:HelixViewport3D>

Code-seitig ist hier nicht allzu viel zu tun, um das 3D-Modell einfach nur einmal anzuzeigen. Es wird ein Property vom Typ Model3D benötigt (für die Datenbindung).

//using System.Windows.Media.Media3D
public Model3D CurrentModel { get; set; }

Danach kann es auch schon los gehen mit dem definieren eines Default-Materials – dieses wird für die Anzeige des 3D-Modells verwendet, es können auch Texturen geladen werden, das habe ich in diesem Beispiel jetzt nicht gemacht.

ModelImporter importer = new ModelImporter();
Material material = new DiffuseMaterial(new SolidColorBrush(Colors.Beige));
importer.DefaultMaterial = material;

Jetzt noch das eigentliche Laden der OBJ-Datei (entweder den eigenen Scan, oder ein beliebeiges anderes 3D-Modell – ich habe hier die Datei aus dem Nefertiti-Hack verwedet) und die Datenbindung herstellen.

string fileName = @"d:\3D\Nefertiti\nefertiti.obj";
model = importer.Load(fileName);
this.CurrentModel = model;
this.DataContext = this;

Kompilieren und laufen lassen, das Resultat sollte sich in jedem Fall sehen lassen.

clip_image026 clip_image028
Bild 9: Nefertiti im WPF Viewer, bzw. Rückansicht eines eigenen 3D-Modells

Für den eigenen 3D-Viewer gibt es einiges an „3D-Futter“, beispielsweise genauer gesagt hier:
https://sketchfab.com/models?features=downloadable&q=nasa&sort_by=-likeCount

Dort finden sich die 3D-Modelle, die von der NASA zur Verfügung gestellt wurden, und, ganz ehrlich, wer wollte schon nicht immer sein eigenes Hubble-Teleskop in WPF-Rendern, oder als 3D-Druck auf dem Schreibtisch stehen haben?

Zusammenfassung

In Zeiten, wo 3D-Drucker immer günstiger werden, bzw. auch die Hololens quasi vor der Türe steht lohnt es sich, sich ein wenig mit der 3D Technik zu beschäftigen. Microsoft liefert uns fast alles, was benötigt wird frei Haus – mit der Kinect können 3D Modelle gescannt werden, mit der 3D-Builder APP diese gerendert und gedruckt werden – eben diesen müssen wir uns noch bei dem Hardware-Händler unseres Vertrauens besorgen. Auch in WPF stehen uns diese 3D-Modelle schnell zur Verfügung, oder in einem eigenen Spiel, möglicherweise mit Unity, wo die 3D-Datei importiert werden kann. Eine tolle Technologie, wo der Einstieg nicht allzu teuer kommt.


Berndt Hamböck ist seit 2007 MCT, darüber hinaus befasst er sich mit Lösungen für komplexe Anwendungsszenarien mit den neuesten Microsoft Technologien. Die Erfahrungen aus der Projektarbeit gibt er in Vorträgen und Trainings weiter und begleitet Entwicklerteams in Softwareunternehmen bei Projekten im Microsoft Umfeld.

Das ist ein Gastbeitrag. Die Meinung des Autors muss sich nicht mit jener von Microsoft decken. Durch den Artikel ergeben sich keinerlei Handlungsempfehlungen. Microsoft übernimmt keine Gewähr für die Richtigkeit oder Vollständigkeit der Angaben

Kinect | 3D

Tags:

Add comment

  Country flag

biuquote
  • Comment
  • Preview
Loading

Datenschutzhinweis: Sie stimmen durch "Kommentar speichern" der Speicherung Ihrer Angaben durch Microsoft Österreich für die Beantwortung der Anfrage zu. Sie erhalten dadurch keine unerwünschten Werbezusendungen. Ihre Emailadresse wird auf Ihren Wunsch dazu verwendet Sie über neue Kommentare zu informieren.

Microsoft respektiert den Datenschutz. Datenschutz & Cookies


 
    Build2016
    Developer Events

Aktuelle Downloads

Azure Free Trial
 
Visual Studio Downloads
 
Windows Azure Free Trial
Instagram
CodeFest.at on Facebook

Datenschutz & Cookies · Nutzungsbedingungen · Impressum · Markenzeichen
© 2013 Microsoft. Alle Rechte vorbehalten · BlogEngine.NET 2.7.0.0 · Diese Website wird für Microsoft von atwork gehostet.
powered by atwork