Jump to: navigation, search

Difference between revisions of "Dossier:Bilan aide à la production - 2016"

(Calibration)
(Tracking)
Line 132: Line 132:
 
[[File:Skeleton-calibration-system.png|800px]]
 
[[File:Skeleton-calibration-system.png|800px]]
  
== Tracking ==
+
==== Tracking ====
  
 
Après cette phase de calibration, 2 autres programmes prennent le relais. Le programme fonctionnant sur les ''slaves'' est le ''streamer''. Le master héberge le ''merger''.
 
Après cette phase de calibration, 2 autres programmes prennent le relais. Le programme fonctionnant sur les ''slaves'' est le ''streamer''. Le master héberge le ''merger''.

Revision as of 17:52, 27 September 2016

Ce document reprends le travail et les dépenses liées à la demande d'aide à la production de Tanukis déposée auprès de la Commission des arts numériques de la Fédération Wallonie-Bruxelles en avril 2014.

Collaborations

Fishing Cactus

Le projet a été soutenu par une bourse Expérience Interactive déposée en septembre 2013. Les partenaires de cette demande étaient Fishing Cactus[1], une société montoise de jeu vidéo, et l'institut numédiart[2] de l'université de mons. Le travail a démarré le deuxième semestre 2014 et s'est arrêté début 2015.

L'ensemble du budget alloué par ce fond ayant été capté par la société montoise, aucune rétribution de François Zajéga n'ayant été prevue dans l'accord.

Fishing Cactus a alloué 2 graphistes et un programmeur à ce projet pour un total de 100 jours de travail, sur une base de 300 euros par jour (prix coûtant).

François Zajéga a bénéficié d'un espace de travail sur place, ce qui lui a permis de suivre le travail de l'équipe journnalièrement et de participer activement au développement informatique et aux recherchjes artistiques.

Au démarrage du projet, il a été décider de travailler non pas avec Mojito[3], le moteur de jeu développé en interne de la société, mais avec Unity3D[4]. Mojito était en développement intensif à cette période, et le programmeur disponible n'avait pas les compétences pour le prendre en main.

Fishing Cactus a mis a disposition du projet une librairie "maison" qui a permis de réinterpréter facilement les informations fournies par la caméra Kinect[5].

Cette collaboration a été difficile a plusieurs points de vue:

  • Timing: les heures mises à disposition par Fishing Cactus n'ont pas permis d'aboutir à une solution finalisée. Les ambitions du projet dépassaient en effet largement le tmps disponible.
  • Attentes artistiques: la communication avec les graphistes a pris beaucoup de temps à être efficace. Un problème de compréhension fondamental a en effet beaucoup ralentit la mise au point d'un nouvel avatar.
  • Attentes techniques: lié au problème de timing et au fait que le programmeur alloué au projet devait travailler sur d'autres projets en parallèle, une partie conséquente du développement a dû être assumée par François Zajéga.


Le bilan de cette collaboration est mitigé, principalement à cause de la différence de conception d'un projet artistique et des impératifs de qualité (de la part du porteur de projet) et de rentabilité (de la part de la socété montoise).

numédiart

Durant la production, Radhwan Ben Madhkour[6] a été la personne la plus active dans le projet. La collaboration a principalement porté sur la solution multi-kinect, voir skeletons pour plus de détails. Thierry Ravet[7] a mis à disposition ses connaissances en mathématiques et programmation.

Le bilan de cette collaboration est positif puisque l'accord de collaboration ne stipulait pas clairement une participation active des membres de l'équipe dans le projet.

Résidences

Espace Pasolini

Durant la phase de protoypage, l'espace Pasolini de Valenciennes[8] avait accueilli le projet pour deux résidences.

Le théâtre a accueilli le projet pour deux autres résidences, qui permis d'aboutir à une première presentation officielle dans le cadre des Instants Magnétiques[9].

  • résidence #1: janvier 2015 - deux présentations publiques non payantes.
  • résidence #2: avril 2015 - deux présentations publiques payantes, suivies d'une rencontre avec les artistes.


Le temps passé à Valenciennes ainsi que les conseils et avis de l'équipe du lieu a permis de développer la relation entre le son et l'image et d'afirmer l'identité du projet.

Imal

Imal[10] a hébergé une résidence de recherche de fin décembre 2015 au 15 janvier 2016. Cette résidence[11] a permis de travailler sur le système de captation multi-kinect avec la danseuse Mitsiko Shimura[12]. Cette session de travail s'est terminée par la présentation publique d'une courte performance.

Développements

Cette section liste les différents développements informatiques réalisés dans le cadre de ce projet.

Durant la phase de protoypage, le projet s'appuyait sur blender[13]. Cet outil ayant des limitations handicapantes pour la réalisation du projet, l'utilisation d'un moteur de jeu professionnel a été nécessaire pour le mener à bien.

Bien que la demande de subside[14] mentionnait l'utilisation de Mojito[3], le choix s'est porté sur Unity3D[4]. Voir Fishing Cactus pour les raisons de ce choix.

Bien que ce moteur soit très complet, l'idéologie avec laquelle il a été conçu ne permettait pas de satisfaire aux exigences du projet. La gestion des animations des avatars a été un des points principaux sur lequel le développement dans Unity s'est concentré. D'autres ajouts ont aussi été approtés.

B2J

L'acronyme B2J signifie blender to json.

Cet addon a été entièrement développé par François Zajéga avec le soutient de Fishing Cactus.

Les fichiers de mouvements enregistrés durant les séances de captures réalisées chez numédiart en novembre et décembre 2013[15] n'était pas utilisable directement dans Unity. La durée des enregistrement, le format bvh[16] sortaient en effet complètement du cadre standard rencontré dans les jeux vidéos. Il a donc été nécessiare de créer un lecteur spécifique pour ces fichiers.

Dans une première phase, un script python[17] transcode les fichiers de capation de mouvements du format bvh[16] au format json[18]. Ce format est en effet beaucoup plus courant. L'importation de ces fichiers dans le moteur de jeu a été possible grâce à MiniJSON[19]

Un second problème important c'est alors posé. Les structure des données des fichiers de captation ne correspondait pas aux articulations de l'avatar, tant au niveau de leur nom que de leur nombre. La position des articulations de la colonne vertébrale notamment était assez dissemblable.

Pour créer la relation entre le bvh et l'avatar, un format de fichier de mapping[20] a été mis au point. Il permet de définir la relation entre les points du bvh et les articulations de l'avatar, ainsi que le pondérateur à appliquer à chaque relation. Il est possibe d'inluencer plusieurs articulations à partir d'un seul point bvh ou l'inverse.

A cette étape, il était possible de lire un seul fichier à la fois. Que ce soit en performance ou en installation, cette contrainte était bloquante. Il fallait pouvoir passer d'une animation à l'autre sans qu'il y ait de sautes brutales.

Un moteur d'animation a permis de rencontrer cette attente. Il permet de

  • charger plusieurs fichiers de mouvements en parallèle;
  • de passer de l'un à l'autre sans acoup;
  • de faire varier la vitesse de lecture des fichiers séparément.


En plus de gérer le chargement, la lecture et mapping des fichiers d'animation, un autre concept a été ajouter. Il s'agit de masques permettant de désactiver l'influence de l'animation sur certaines articulations. Il est donc devenu possible d'animer un avatar avec plusieurs sources différentes, en choisissant l'influence de chaque source sur chaque articulation. Pour donner un exemple: la jambe droite de l'avatar peut courir, la gauche être en position assise et que le haut du corps en train de faire un mouvement de danse.

A cette étape, les développement permettaient d'imaginer une performance mais pas encore de capattion temps réelle puisque seuls les fichiers de captations étaient reconnus. La structure du moteur, avec ces lecteurs parallélisés, a été pensée pour permettre d'autres type de sources que les fichiers bvh.

Deux autres types de sources ont pu être ajoutées. Toutes deux sont temps réel, c'est-à-dire qu'elles ne s'appuient pas sur des enregistrement préalable.

Le premier type s'appuye sur l'addon dynamic bone[21]. Il simule un comportement physique des articulations de l'avatar, en réaction à la gravité et au mouvements du corps entier. Le résultat de cet addon n'est pas utilisé directement sur l'avatar mais anvoyé dans le moteur d'animation, ce qui permet de gérer son influence et de le mélangé aux autres sources. Ce développement été assez rapide et a préparer le terrain pour le deuxième type, crucial à l'installation interactive celui-là.

L'intégration des squelettes[22] captés grâce à la Kinect[5] dans le moteur d'animation a posé plusieurs problèmes:

  1. différence de format: tout comme pour le bvh, les squelettes kinect utilisent une hiérachie et un format propre et n'ayant pas nécessairement de rapport avec l'avatar à animer;
  2. mise en réseau: ce ne sont pas une mes 4 à 6 kinects qui sont utilisées dans le projet (voir Skeletons); il était donc imperatif de permettre l'arrivée des information via le réseau;
  3. identification: chaque squelette a un identifiant propre qu'il fallait mettre en relation avec un avatar dans le monde 3d.


Le point 1 & 2 ont été partiellement résolu par l'utilisation d'une librairie développée par Fishing Cactus. L'injection des données dans le moteur d'animation a demandé un certain effort mais c'est soldé par un succès.

Skeletons

Skeletons-banner.png

Skeletons[23] est le nom d'une suite de programmes développé en collaboration avec numédiart[2] qui permet de suivre les déplacements de personnes grâce à un ensemble de caméras Kinect[5] inter-connectées.

Cet aspect du projet Tanuksi est crucial puisqu'il permet d'ouvrir la surface d'interaction et de suivre des personnes étant face l'une à l'autre, quelque soit leur angle par rapport aux caméras.

Ce projet avait été ébauché en 2011 chez numédiart dans le cadre de KOSEI[24]. Le protoype développé à cette époque était instable, très difficile à calibrer et donnait des résultats de piètre qualité. De plus elle était basée sur le première version de la caméra Kinect.

Skeletons est maintenant basé sur le deuxième modèle de caméra Kinect.

Durant la production de tanukis, un effort conjoint de Françcois Zajéga et de Radhwan Ben Madhkour a permis de régler ces manquements.

L'architecture de la solution est restée identique et s'appuie sur un modéle master-slave[25]:

  • une série de machines, les slaves, sont connectés à une caméra Kinect, captent les images, pré-traitent et diffusent l'information extraite;
  • une machine centrale, le master, contrôle les slaves et fusionne les informations récupérées.


L'installation d'un système skeleton nécessite donc plusieurs ordinateurs. Les slaves sont de petites machines, de type mini-pc, peu onéreux (aux environs de 500 euros l'unité). Ces machines sont néanmoins assez puissantes pour assurer le bon fonctionnement d'une application d'extraction d'information. Le master quant à lui est un programme fonctionnant sur la machine qui fait aussi toruner le rendu visuel et sonore. Les différents éléments du réseau sont connectés entre eux par un réseau filaire.

Calibration

La première phase de la mise en place du système est une calibration des différents slaves. Cette étape permet de positionner les différents caméras dans un repère absolu. Pour ce faire, chaque slave envoie une photo en 3 dimensions[26] ainsi qu'un vecteur représentant la position du sol à un programme de calibration situé sur la machine centrale. Ce programme aligne automatiquement les vecteurs sol des différents slaves. Une visualisation des différents point de vue permet ensuite d'affiner le réglage automatique. Cette étape est fortement facilitée par l'alignement des sols qui réduit l'affinage à une translation 2 dimensions et une rotation dans l'axe perpendiculaire au sol.

Une fois la calibration des slaves effectuée, les matrices de transformation[27] sont envoyées à chaque slave.

Les 2 programmes impliqués dans cette étape de calibration ont été développés par Radhwan Ben Madhkourr[6] dans le cadre de sa thèse de doctorat. Ils on été affinés et stabilisés pour les besoins du projet.

Skeleton-calibration-system.png

Tracking

Après cette phase de calibration, 2 autres programmes prennent le relais. Le programme fonctionnant sur les slaves est le streamer. Le master héberge le merger.

Le rôle du streamer est de:

  • collecter les squelettes[22] présents dans le champ de vision de la Kinect;
  • affiner leur validité en fonction de leur distance et de l'orientation des membres;
  • les positionner dans le repère absolu grâce à la matrice de calibration obtenue durant le phase de calibration;
  • et enfin de les diffuser par réseau au merger.


Dans un soucis de performance, les messages sont envoyés sur port unique dans le LAN[28]. Ceci permet aussi de faciliter l'identification des paquets à la réception.

Le merger reçoit donc les positions des squelettes vus par toutes les caméras dans le bon repère. Il lui faut encore identifier quelles sont les squelettes qui semblent correspondrent à la même personnes dans les différents points de vue. Les différences temporelles, chaque squelette n'étant pas vu au même moment de tous les points de vue, ainsi que les erreurs d'approximation dans leur détection ont induit la mise en place d'un algorithme performant de classement.

Après cette étape de classement, les squelettes sont rangés dans des clusters. Chacun d'eux fusionne les positions en prenant en compte l'affinement fait par les slaves lors de la captation et les décallages temporels. En ressort un nouveau squelette, qui est à son tour diffusé sur le réseau.

C'est ce squelette résultant qui est capté par le moteur de jeu et qui permet d'animer l'avatar en temps réel.

L'ensemble des opérations de captation, transmission et fusion doit être effectuée en un minimum de temps pour éviter d'augmenter le décallage entre la personne physiquement présente et la réaction de l'avatar. L'optimisation du code des applications permet de rester en dessous des 10 millisecondes, entre la captation et la réception dans le moteur 3d.

Cette partie de la solution a été developpée par François Zajéga.

La solution est aujourd'hui en version béta et est diffusée sous license LGL[29] sur bitbucket.


High-level-RT-K2Streamer-K2Merger.png

Calendrier

Présentations

Dépenses

Évolution de la pièce

Galerie d'images

Liens

  1. Fishing Cactus, Game & Serious Games Development Studios - http://fishingcactus.com
  2. 2.0 2.1 numediart, Institute for Creative Technologies - http://www.numediart.org
  3. 3.0 3.1 Mojito - http://seriousgaming.fishingcactus.com/en/Technologie.html
  4. 4.0 4.1 Unity3D - http://unity3d.com/
  5. 5.0 5.1 5.2 Kinect, caméra RGB et infrarouge permettant le compréhension de l'espace tri-dimensionnel - http://www.xbox.com/en-US/kinect/
  6. 6.0 6.1 Radhwan BEN MADHKOUR, researcher & PHD student at numediart - http://www.tcts.fpms.ac.be/homepage.php?Firstname=Radhwan&Lastname=BEN%20MADHKOUR
  7. Thierry Ravet, researcher, PHD student at numediart - http://www.tcts.fpms.ac.be/homepage.php?Firstname=Thierry&Lastname=RAVET
  8. Espace Pasolini, laboratoire artistique - http://www.espacepasolini.fr
  9. http://www.espacepasolini.fr/?p=873
  10. Imal, centre for digital cultures and technologies - http://imal.org
  11. Page de présentation de la résidence à imal - http://imal.org/en/activity/tanukis
  12. Mitsiko Shimura, danseuse-interprète - https://www.linkedin.com/in/miko-shimura-02460049
  13. Blender, éditeur 3d inclumant un moteur de jeu vidéo - https://www.blender.org
  14. Voir le File:Tanukis-production-complet.pdf
  15. Bilan de l'aide à la conception, voir File:Tanukis-francoiszajega-conception bilan.pdf
  16. 16.0 16.1 BVH, motion capture file format developped by BioVision - http://research.cs.wisc.edu/graphics/Courses/cs-838-1999/Jeff/BVH.html
  17. Python, programming language - https://www.python.org
  18. JSON, JavaScript Object Notation - wikipedia:JSON
  19. MiniJSON Decodes and encodes simple JSON strings - https://gist.github.com/darktable/1411710
  20. Data mapping - wikipedia:Data_mapping
  21. Dynamic Bone, developped by Will Hong - https://www.assetstore.unity3d.com/en/#!/content/16743
  22. 22.0 22.1 Skeletal Tracking via kKinect camera - https://msdn.microsoft.com/en-us/library/hh973074.aspx
  23. Skeletons, suite of software for multi-kinects full body tracking - https://bitbucket.org/frankiezafe/skeletons
  24. KOSEI: a kinect observation system based on kinect and projector calibration - http://www.numediart.org/projects/16-1-kosei/
  25. Master-Slave paradigm in progamming - wikipedia:Master/slave_(technology)
  26. Point cloud, nuage de point en 3 dimension - wikipedia:Point_cloud
  27. Utilisation des matrices 4x4 pour la représentation de la translation et de la rotation en géométrie 3d - http://www.euclideanspace.com/maths/geometry/affine/matrix4x4/index.htm
  28. Local_area_network - wikipdia:Local_area_network
  29. GNU Lesser General Public License - https://www.gnu.org/licenses/lgpl.html