Mettez votre tête au jeu avec Intel RealSense

Depuis 1999, j'ai travaillé avec ma société, TheGameCreators, pour faciliter la création de jeux pour tous. L'année dernière, j'ai commencé à développer avec le SDK et l'appareil photo Intel RealSense, qui vous permettent de capturer des images 3D en temps réel. (J'ai en fait remporté le RealSense App Challenge d'Intel avec mon Virtual Video Video Maker!) Il n'est donc pas étonnant que je regarde comment RealSense peut être utilisé pour le développement de jeux. Dans ce tutoriel, je vais vous donner un exemple: pour analyser votre tête (ou celle de votre joueur) dans votre jeu. 

Pourquoi utiliser RealSense?

De nombreux personnages de jeux 3D incluront une image de texture 2D utilisée comme "peau" pour le modèle 3D, comme pour Kila, ci-dessous:

À gauche: la texture de Kila. Droite: La texture 2D appliquée au modèle 3D. De la série Création de personnages de jeu: Kila.

Vous pouvez voir un visage distinct dans la texture. Si vous souhaitez modifier le visage du personnage pour qu'il corresponde au vôtre, essayez de coller une photo 2D à plat sur la texture. Cependant, cela ne donne pas d'excellents résultats, comme illustré ci-dessous:

Résultat du collage d'une photo plate d'un visage sur la texture d'un modèle 3D existant.

C'est assez horrible. Le problème est que la texture du visage ne correspond pas à la "structure osseuse" sous-jacente du modèle..

Les appareils RealSense incluent un projecteur et une caméra infrarouges afin de pouvoir capturer une carte de projection 3D ainsi qu'une photo 2D de tout ce sur quoi ils se dirigent. Cela signifie que vous pouvez ajuster la texture 2D et le modèle 3D d'un personnage pour s'adapter au nouveau visage.

Flux de travail du créateur de personnage en jeu

Supposons que nous voulions permettre à nos joueurs de réaliser quelques selfies avec une caméra RealSense, puis de les utiliser pour créer un avatar 3D..

Plutôt que d'essayer de numériser dans leur corps tout entier, puis de créer un modèle 3D, une texture et un ensemble d'animations à partir de cela, nous ferions mieux d'acheter un modèle 3D complet du corps à partir d'un site comme 3DOcean…

… Puis coupant la tête:

Cela facilite beaucoup le développement et le test du jeu; la seule chose qui varie entre les avatars des joueurs est la tête.

Capturer la ressemblance du joueur

Pour capturer la ressemblance du joueur, le créateur du personnage en jeu doit effectuer plusieurs analyses de sa tête, toutes contrôlées avec précision afin que le logiciel puisse tout recoller. (Le kit de développement Intel RealSense SDK a fourni un exemple permettant de le faire. Il peut être exécuté immédiatement à partir du dossier des fichiers binaires pré-compilés.)

Naturellement, vous voudrez créer votre propre scanner 3D en fonction de votre projet. Ce qui suit ne fait donc que décrire en détail comment la technique pourrait fonctionner pour vous..

Méthode 1

Vous pouvez prendre les maillages séparément, puis essayer de les connecter manuellement dans un outil graphique de fortune ou un petit programme. Cependant, le problème avec la numérisation 3D en direct est qu’il ya un humain à l’autre bout, ce qui signifie qu’il bouge, change de place, s’incline et avance de manière subtile - et cela ne tient pas compte de la hauteur subtile, bâiller et rouler de la tête elle-même. Étant donné que la tête a tendance à changer de position et à s’éloigner de la caméra pendant la session de numérisation, cela ne fera que créer de la frustration lorsqu’on essaiera de rassembler les photos..

Méthode 2

Si vos analyses sont précises, vous pouvez fusionner les mailles avec le premier maillage que vous avez scanné et effectuer des ajustements si un sommet existe dans les données du modèle d'espace mondial ou créer un nouveau point de sommet d'espace spatial s'il n'en existait pas auparavant. Cela permettra à votre maillage d’être affiné avec le nombre d’échantillons fournis par le joueur. L'inconvénient de cette technique est que placer la tête de votre joueur dans une position centrale pendant le balayage et convertir ces données 3D en coordonnées mondiales crée des défis..

Méthode 3

La technique idéale consiste à détecter les marqueurs de signature dans le maillage numérisé, afin d’obtenir un «correctif de sommet». Considérez ceci comme une représentation de votre position sur l'océan en regardant les étoiles. en utilisant des constellations, vous pouvez déterminer à la fois votre orientation et votre position relatives. Ceci est particulièrement utile lorsque vous créez un second maillage: vous pouvez appliquer le même algorithme de détection de marqueur, trouver le même motif et renvoyer l'orientation relative, la position et le décalage d'échelle du premier maillage. Une fois que vous avez ce décalage, l'ajout du deuxième maillage au premier est un simple calcul de transformation du monde, puis l'ajout des données de sommet supplémentaires au maillage d'origine. Ce processus est répété jusqu'à ce qu'il n'y ait plus de mailles à soumettre, puis vous passez à la dernière étape..

Points clés

  • Je ne recommanderais pas de mettre en œuvre les techniques ici avant d'avoir maîtrisé le codage géométrique 3D, car la manipulation de données de sommet orientées variables peut s'avérer délicate..
  • Si la technique choisie implique la superposition de données de sommet sur un seul objet, vous aurez probablement beaucoup de sommets excédentaires et qui se chevauchent. Ceux-ci doivent être supprimés et une nouvelle liste de triangle produite pour sceller l'objet.
  • Stocker les données de couleur de votre scan de visage dans la composante diffuse des données de sommet est un moyen pratique d'éviter le recours à une texture et offre d'autres avantages lorsqu'il s'agit d'optimiser le maillage final.
  • N'oubliez pas de traiter les données de profondeur brutes pour éliminer les interférences telles que les valeurs de profondeur parasite qui ne sont pas cohérentes avec les données de pixel de profondeur environnantes. Si vous ne le faites pas, tout votre travail pour créer un bon maillage en 3D sera vain.

C'est définitivement la partie difficile, mais ce n'est pas impossible; rappelez-vous, il existe une démo de travail dans les fichiers SDK que vous pouvez utiliser comme base pour que cela fonctionne dans le moteur de votre jeu.

Utiliser la ressemblance dans le jeu

Supposons que vous ayez un bon modèle 3D (et la texture correspondante) du visage du joueur:

Un mugshot futuriste.

Nous pouvons maintenant coller ceci sur le modèle de corps du personnage:

Certes, le résultat est encore assez horrible, mais nous n’avons pas encore terminé. Nous pouvons prendre une solution sur l’une des nombreuses pages de la bible des développeurs de jeux. Nous pouvons nous en convaincre, c’est une fonctionnalité plutôt agréable, par opposition à un bidouillage plutôt sinistre..

Tout ce que nous faisons est de couvrir les lacunes avec une perruque et un chapeau:

D'accord, d'accord, nous pourrions simplement coller le visage 3D sur le devant d'une tête 3D déjà modélisée, mais c'est plus amusant. Si vous préférez rester dans Team Fortress 2, les joueurs apprécieront l’option de personnaliser la tête et le visage de leur avatar avec divers accessoires; on tue deux oiseaux avec une pierre!

Si vous voulez vraiment éviter d'ajouter des chapeaux et des perruques au personnage du jeu, vous devez demander au joueur d'attacher ou de gélifier ses cheveux en arrière avant de procéder aux analyses. Plus leurs cheveux sont plats, meilleur sera le scan. Les cheveux lâches interfèrent avec la caméra de profondeur et produisent des réflexions diffuses qui ne scannent pas bien.

C'est plus facile de faire ça au moment du développement

Bien qu'il soit possible de ressembler à un joueur dans le jeu au moment de l'exécution, il est difficile de commencer. Si vous n'avez jamais essayé cela auparavant, je vous recommande d'essayer quelque chose de techniquement plus simple: créer votre propre image (ou celle d'un acteur) dans le jeu..

C'est plus facile pour trois raisons:

  1. Il y a beaucoup plus de marge d'erreur et de marge de correction. Si vous contrôlez tout le processus vous-même, ajustez manuellement les couleurs ou les maillages qui ne sont pas corrects et modifiez le résultat final jusqu'à obtenir un résultat parfait. Vous ne comptez pas sur le bon fonctionnement de votre code, pour la première fois, pour tous les visages.
  2. Vous pouvez utiliser un logiciel existant (comme Blender), sans avoir à incorporer tout le processus dans l'interface utilisateur et le code de votre jeu..
  3. Étant donné que c'est votre jeu, vous aurez probablement plus de patience que vos joueurs. Vous pouvez donc prendre (et reprendre) plus de photos et attendre plus longtemps les résultats qu'il n'est raisonnable de demander à un joueur de.

Et sur la base de ce dernier point, vous pouvez prendre le temps de scanner votre tête entière, pas seulement votre visage. En fait, nous l'avons déjà fait dans un tutoriel précédent. Reprenons là où cela s'est arrêté et expliquons comment intégrer ce modèle à Unity 5.

Obtenir votre tête dans l'unité

Après avoir suivi le didacticiel précédent, vous devriez avoir un modèle FBX de votre tête et une carte de texture UV correspondante..

Ouvrez Unity, puis créez un nouveau projet et une nouvelle scène..

Cliquez sur Actifs> Importer un nouvel actif. Sélectionnez le modèle FBX que vous avez exporté à partir de Blender..

Lorsque Unity importe l'objet, il est possible (et même probable) de ne pas importer sa texture. Dans ce cas, vous verrez une version gris-blanc de votre maillage:

C'est OK, nous allons ajouter la texture.

Sélectionnez le Matériaux dossier, puis faites un clic droit et sélectionnez Actif d'importation. Sélectionnez le fichier PNG que vous avez enregistré dans Blender, puis importez-le..

Vous verrez maintenant la carte de texture à côté d'un matériau gris-blanc portant le même nom que votre maillage. Cliquez avec le bouton droit sur le matériau gris-blanc (en forme de balle) et supprimez-le..

Retournez à votre Les atouts dossier et faites un clic droit sur le maillage que vous avez importé. Sélectionner Réimporter

Une fois réimporté, il créera correctement le matériau et texturera votre maillage:

Si le modèle semble rose dans l'aperçu de l'objet, sélectionnez simplement un autre objet (comme la caméra), puis sélectionnez à nouveau votre maillage pour l'actualiser..

Vous êtes maintenant prêt à vous lancer dans le jeu. Faites glisser votre objet vers la scène. (Vous pouvez l'agrandir et déconner avec la perspective de la caméra pour la voir.)

Quand vous frappez Jouer, vous devriez voir votre objet rendu correctement:

Si vous souhaitez ajuster la texture pour la rendre plus ou moins brillante ou métallique, rendez-vous d'abord à la Matériaux dossier et sélectionnez la version arrondie de votre texture. dans le Inspecteur panneau, vous pouvez ajuster la Métallique et Douceur curseurs pour obtenir le bon look:

Conclusion

Cela peut sembler une tâche démesurée de simplement insérer les parties antérieures d'une tête dans une scène virtuelle, mais les techniques que vous avez apprises dans cet article peuvent être appliquées à la numérisation et à l'assemblage de tout ce que vous voulez.. 

La possibilité de numériser votre essence vers l’ordinateur et de poursuivre votre voyage dans un paysage virtuel commence ici avec la numérisation d’un seul visage. Comment les jeux et les attitudes vont-ils changer alors que les protagonistes du jeu commencent à ressembler à de vraies personnes que vous pourriez rencontrer dans votre propre vie? Lorsque vous mettez un visage sur une personne, celle-ci devient réelle et il sera intéressant de voir comment les jeux et les joueurs changent..

Le programme Intel® Software Innovator soutient les développeurs indépendants innovants qui ont la capacité de créer et de démontrer des projets tournés vers l'avenir. Les innovateurs tirent parti des opportunités de présentation et de démonstration lors de manifestations de l'industrie et de réunions de développeurs..

Zone de développement Intel® offre des outils et des informations pratiques pour le développement d'applications multiplates-formes, des informations de plate-forme et de technologie, des exemples de code et l'expertise de pairs pour aider les développeurs à innover et à réussir. Rejoignez nos communautés pour le Internet des objets, Android*, Technologie Intel® RealSense ™, Code moderne, Développement de jeu et Les fenêtres* pour télécharger des outils, accéder à des kits de développement, partager des idées avec des développeurs partageant les mêmes idées et participer à des hackathons, des concours, des tournées de présentation et des événements locaux.