Holen Sie sich mit Intel RealSense den Kopf ins Spiel

Seit 1999 arbeite ich in meiner Firma TheGameCreators, um es jedem einfacher zu machen, Spiele zu erstellen. Letztes Jahr begann ich mit der Entwicklung des Intel RealSense SDK und der Kamera, mit der Sie 3D-Bilder in Echtzeit aufnehmen können. (Ich habe die RealSense App Challenge von Intel tatsächlich mit meinem Virtual 3D Video Maker gewonnen!) Es ist keine Überraschung, dass ich mir angesehen habe, wie RealSense für die Spieleentwicklung verwendet werden kann. In diesem Tutorial möchte ich ein Beispiel zeigen: Wie , um den Kopf Ihres Spielers (oder Ihres Spielers) in Ihr Spiel einzulesen. 

Warum verwenden Sie RealSense??

Viele 3D-Spielfiguren enthalten ein 2D-Texturbild, das wie bei Kila als "Skin" für das 3D-Modell verwendet wird:

Links: Kilas Textur. Rechts: Die auf das 3D-Modell angewendete 2D-Textur. Aus der Spielfiguren-Erstellungsserie: Kila.

Sie können ein deutliches Gesicht in der Textur sehen. Wenn Sie das Gesicht des Charakters an Ihr eigenes Gesicht anpassen möchten, ist es verlockend, ein flaches 2D-Foto in die Textur einzufügen. Dies führt jedoch zu keinen guten Ergebnissen, wie unten gezeigt:

Das Ergebnis des Einfügens eines flachen Fotos eines Gesichts in die Textur eines vorhandenen 3D-Modells.

Das ist ziemlich schrecklich. Das Problem ist, dass die Gesichtsstruktur nicht auf die darunterliegende "Knochenstruktur" des Modells abgebildet wird.

Zu den RealSense-Geräten gehören ein Infrarotprojektor und eine Kamera, mit denen sie eine 3D-Projektionskarte sowie ein 2D-Foto von dem aufnehmen können, auf das sie gerichtet sind. Das bedeutet, dass Sie die 2D-Textur anpassen können und das 3D-Modell eines Charakters, um sich an das neue Gesicht anzupassen.

Workflow zur Erstellung von Charakteren im Spiel

Nehmen wir an, wir möchten unseren Spielern erlauben, ein paar Selfies mit einer RealSense-Kamera aufzunehmen und dann einen 3D-Avatar für sie zu erstellen.

Anstatt zu versuchen, den gesamten Körper zu scannen und daraus ein 3D-Modell, eine Textur und eine Reihe von Animationen zu erstellen, ist es besser, ein 3D-Ganzkörpermodell von einer Site wie 3DOcean zu kaufen.

… Dann den Kopf abschneiden:

Dies macht es viel einfacher, das Spiel zu entwickeln und zu testen. Das einzige, was zwischen den Spieler-Avataren variiert, ist der Kopf.

Erfassen der Ähnlichkeit des Spielers

Um die Ähnlichkeit des Spielers festzuhalten, muss der Schöpfer des Charakters im Spiel mehrere Kopfscans machen, die alle genau kontrolliert werden, damit die Software alles wieder zusammennähen kann. (Das Intel RealSense SDK hat ein Beispiel bereitgestellt, das genau dies tut; es kann sofort aus dem vorkompilierten Binaries-Ordner ausgeführt werden.)

Natürlich sollten Sie Ihren eigenen 3D-Scanner für Ihr Projekt erstellen. Im Folgenden finden Sie eine Aufschlüsselung, wie die Technik für Sie funktionieren könnte.

Methode 1

Sie können die Netzaufnahmen separat aufnehmen und dann versuchen, sie manuell in einem Kunstwerkzeug oder einem kleinen Programm zu verbinden. Das Problem beim Live-3D-Scannen besteht jedoch darin, dass sich am anderen Ende ein Mensch befindet. Das bedeutet, dass sie zappeln, sich auf ihren Sitzen verschieben, sich zurücklehnen und auf subtile Weise vorwärts gehen - und das ist nicht die subtile Tonhöhe. Gähnen und Rollen des Kopfes selbst. Angesichts dieser Tendenz, dass der Kopf während des Scannens die Position und den Abstand von der Kamera ändert, führt dies nur zu Frust, wenn versucht wird, die Aufnahmen wieder zusammenzusetzen.

Methode 2

Wenn Ihre Scans genau sind, können Sie die Maschen mit der ersten von Ihnen gescannten Masche abgleichen und Anpassungen vornehmen, wenn in den Weltraummodelldaten ein Scheitelpunkt vorhanden ist, oder einen neuen Scheitelpunkt für den Weltraum erstellen, falls noch keiner vorhanden war. Auf diese Weise wird Ihr Kopfnetz mit den vom Spieler zur Verfügung gestellten Samples verfeinert. Der Nachteil dieser Technik ist, dass der Kopf des Players während des Scannens in einer zentralen Position bleibt und die 3D-Daten in Weltkoordinaten konvertiert werden. Dies führt zu einigen Herausforderungen.

Methode 3

Die perfekte Technik besteht darin, Signaturmarken innerhalb des gescannten Netzes zu erkennen, um einen "Scheitelpunktfix" zu erhalten. Stellen Sie sich vor, dass Sie Ihre Position auf dem Ozean darstellen, indem Sie die Sterne betrachten. Durch die Verwendung von Konstellationen können Sie sowohl Ihre relative Orientierung als auch Ihre Position ermitteln. Dies ist besonders nützlich, wenn Sie ein zweites Netz erstellen: Sie können denselben Markererkennungsalgorithmus anwenden, das gleiche Muster finden und die relative Ausrichtung, Position und Skalierungsverschiebung des ersten Netzes zurückgeben. Sobald Sie diesen Versatz haben, ist das Hinzufügen des zweiten Netzes zum ersten eine einfache Berechnung der Weltumwandlung und das Hinzufügen der zusätzlichen Scheitelpunktdaten zum ursprünglichen Netz. Dieser Vorgang wird solange wiederholt, bis Sie keine weiteren Maschen mehr einreichen möchten, und fahren Sie dann mit dem letzten Schritt fort.

Wichtige Punkte

  • Ich würde die Implementierung der Techniken erst empfehlen, wenn Sie die 3D-Geometriecodierung in der Praxis gut beherrschen, da das Manipulieren von variablenorientierten Scheitelpunktdaten schwierig sein kann.
  • Wenn bei der von Ihnen gewählten Technik Scheitelpunktdaten auf ein einzelnes Objekt geschichtet wurden, haben Sie wahrscheinlich viele überschüssige und überlappende Scheitelpunkte. Diese müssen entfernt und eine neue Dreiecksliste erstellt werden, um das Objekt zu versiegeln.
  • Das Speichern der Farbdaten Ihres Gesichts-Scans in der diffusen Komponente der Scheitelpunktdaten ist eine praktische Methode, um die Notwendigkeit einer Textur zu vermeiden, und bietet weitere Vorteile bei der Optimierung des endgültigen Netzes
  • Vergessen Sie nicht, die Rohtiefendaten zu verarbeiten, um Interferenzen zu entfernen, beispielsweise Werte für die Streustiefe, die nicht mit den Pixeldaten der umgebenden Tiefe übereinstimmen. Wenn Sie dies nicht tun, werden alle Ihre Arbeiten zur Erstellung eines guten 3D-Kopfgitters vergeblich sein.

Dies ist definitiv der schwierige Teil, aber es ist nicht unmöglich; Denken Sie daran, es gibt eine funktionierende Demo in den SDK-Dateien, die Sie als Grundlage dafür verwenden können, dass diese in der Engine Ihres Spiels ausgeführt wird.

Verwendung der Ähnlichkeit im Spiel

Nehmen wir an, Sie haben ein anständiges 3D-Modell (und eine entsprechende Textur) des Gesichts des Spielers:

Ein futuristischer Fahndungsfoto.

Wir können dies nun auf das Körpermodell der Figur setzen:

Zugegeben, das Ergebnis ist immer noch ziemlich schrecklich - aber wir sind noch nicht fertig. Wir können eine Lösung von einer der vielen Seiten der Bibel der Spieleentwickler nehmen, eine, die wir uns selbst davon überzeugen können, ist eine ziemlich nette Funktion im Gegensatz zu einem unheimlichen Hack.

Alles, was wir tun, ist, die Lücken mit einer Perücke und einem Hut zu überdecken:

OK, natürlich können wir das 3D-Gesicht einfach auf einen bereits modellierten 3D-Kopf kleben, aber das macht mehr Spaß. Wenn Team Fortress 2 ein Muss ist, haben die Spieler die Möglichkeit, den Kopf und das Gesicht ihres Avatars mit diversem Zubehör anzupassen. Wir töten zwei Fliegen mit einer Klappe!

Wenn Sie wirklich vermeiden möchten, dass der Spielfigur Hüte und Perücken hinzugefügt werden, müssen Sie den Spieler dazu bringen, sich die Haare zu binden oder zu bügeln, bevor Sie die Scans durchführen. Je flacher ihr Haar ist, desto besser ist der Scan. Lockeres Haar stört die Tiefenkamera und erzeugt Streuungsreflexionen, die nicht gut abtasten.

Es ist einfacher, dies zur Entwicklungszeit zu tun

Obwohl es möglich ist, die Ähnlichkeit eines Spielers zur Laufzeit ins Spiel zu bringen, ist es ein schwieriger Ort, um damit anzufangen. Wenn Sie dies noch nicht versucht haben, empfehle ich zunächst, etwas technisch Einfacheres auszuprobieren: Ein eigenes Bild (oder das eines Schauspielers) ins Spiel zu bringen.

Dies ist aus drei Gründen einfacher:

  1. Es gibt viel mehr Spielraum für Fehler und Raum für Korrekturen. Wenn Sie den gesamten Prozess selbst steuern, passen Sie manuell alle Farben oder Netze an, die nicht richtig herauskommen, und passen Sie das Ergebnis an, bis es genau richtig ist. Sie sind nicht darauf angewiesen, dass Ihr Code beim ersten Mal für jedes Gesicht einwandfrei funktioniert.
  2. Sie können vorhandene Software (wie Blender) verwenden, anstatt den gesamten Prozess in die Benutzeroberfläche und den Code Ihres Spiels integrieren zu müssen.
  3. Da es sich um Ihr Spiel handelt, haben Sie wahrscheinlich mehr Geduld als Ihre Spieler. Sie können also mehr Bilder aufnehmen (und wieder aufnehmen) und länger auf Ergebnisse warten, als es angemessen ist, einen Spieler dazu aufzufordern.

Basierend auf diesem letzten Punkt können Sie sich die Zeit nehmen, um den gesamten Kopf und nicht nur Ihr Gesicht zu scannen. Tatsächlich haben wir dies bereits in einem vorherigen Tutorial gemacht. Lassen Sie uns dort weitermachen, wo das aufgehört hat, und erfahren Sie, wie Sie dieses Modell in Unity 5 einsetzen können.

Den Kopf in die Einheit bringen

Nachdem Sie dem vorherigen Lernprogramm gefolgt sind, sollten Sie ein FBX-Modell für Ihren Kopf und eine entsprechende UV-Textur-Map haben.

Öffnen Sie Unity und erstellen Sie ein neues Projekt und eine neue Szene.

Klicken Assets> Neues Asset importieren. Wählen Sie das FBX-Modell aus, das Sie aus Blender exportiert haben.

Wenn Unity das Objekt importiert, ist es möglich (und sogar wahrscheinlich), dass die Textur nicht importiert wird. In diesem Fall wird eine grauweiße Version Ihres Netzes angezeigt:

Das ist OK, wir werden als nächstes die Textur-Map hinzufügen.

Wähle aus Materialien Ordner, klicken Sie mit der rechten Maustaste und wählen Sie Asset importieren. Wählen Sie die in Blender gespeicherte PNG-Datei aus und importieren Sie sie.

Sie sehen jetzt die Texturkarte neben einem grauweißen Material mit demselben Namen wie Ihr Mesh. Klicken Sie mit der rechten Maustaste auf das grau-weiße Material (in Form einer Kugel) und löschen Sie es.

Geh zurück zu deinem Vermögenswerte Ordner und klicken Sie mit der rechten Maustaste auf das importierte Netz. Wählen Wiedereinfuhr

Nach dem erneuten Import wird das Material ordnungsgemäß erstellt und das Netz wird strukturiert:

Wenn das Modell in der Objektvorschau pink dargestellt wird, wählen Sie einfach ein anderes Objekt (z. B. die Kamera) aus und wählen Sie dann das Netz erneut aus, um es zu aktualisieren.

Jetzt bist du bereit, deinen Kopf ins Spiel zu bringen. Ziehen Sie Ihr Objekt in die Szene. (Sie können es vergrößern und mit der Kameraperspektive herumspielen, um es sichtbar zu machen.)

Wenn du schlägst abspielen, Sie sollten Ihr Objekt richtig dargestellt sehen:

Wenn Sie die Textur anpassen möchten, um sie mehr oder weniger glänzend oder metallisch zu gestalten, gehen Sie zuerst zu Materialien Ordner und wählen Sie die runde Form Ihrer Textur. In dem Inspektor Panel können Sie die einstellen Metallisch und Glätte Schieberegler, um den richtigen Look zu erhalten:

Fazit

Es scheint eine übermäßige Menge an Arbeit zu sein, nur um die Vorderteile eines Kopfes in eine virtuelle Szene zu bringen, aber die in diesem Artikel erlernten Techniken können auf das Scannen und Zusammenfügen von allem angewendet werden, was Sie möchten. 

Die Möglichkeit, Ihre Essenz in den Computer zu scannen und Ihre Reise in einer virtuellen Landschaft fortzusetzen, beginnt hier mit dem Scannen eines einzelnen Gesichts. Wie werden sich Spiele und Einstellungen ändern, wenn die Protagonisten im Spiel echten Menschen ähneln, denen Sie in Ihrem eigenen Leben begegnen könnten? Wenn Sie jemandem ein Gesicht geben, werden sie real und es wird interessant sein zu sehen, wie sich Spiele und Spieler als Ergebnis verändern.

Das Intel® Software Innovator-Programm unterstützt innovative unabhängige Entwickler, die die Fähigkeit besitzen, zukunftsweisende Projekte zu erstellen und zu demonstrieren. Innovatoren nutzen Vortrags- und Demo-Möglichkeiten bei Branchenveranstaltungen und Entwicklertreffen.

Intel® Developer Zone Bietet Tools und Anleitungen zur plattformübergreifenden App-Entwicklung, Plattform- und Technologiedaten, Codebeispiele und Expertenwissen, um Entwicklern bei der Innovation und dem Erfolg zu helfen. Treten Sie unseren Communitys für Internet der Dinge, Android*, Intel® RealSense ™ -Technologie, Moderner Code, Spieleentwickler und Windows * Laden Sie Tools herunter, greifen Sie auf Entwicklungskits zu, tauschen Sie sich mit gleichgesinnten Entwicklern aus und nehmen Sie an Hackathons, Wettbewerben, Roadshows und lokalen Veranstaltungen teil.