Navigation 3D
Sommaire
[masquer]Présentation du projet
Objectifs du projet
L'objectif de ce projet est d'utiliser l'Oculus Rift afin de permettre la visualisation de monde en 3D, en l’occurrence dans le cas présent la visualisation de gros projets architecturaux. Le second objectif de ce projet est de faciliter l'immersion en combinant un système comme Kinect avec le casque afin d’interpréter d'autres mouvements que celui de la tête.
L'Oculus Rift
L'Oculus Rift est un casque de réalité virtuelle, permettant une vision en 3D stéréoscopique et couvrant tout le champ de vision contrairement à un écran classique, ce qui permet une plus grande immersion d'où son utilisation dans ce projet, l'immersion en étant la problématique principale. Il n'existe pour le moment qu'en version pour développeurs, la version grand public sortant fin 2014.
Kinect
Kinect est un périphérique initialement créé pour la Xbox 360 mais qui a fini par arriver sur pc. C'est une caméra permettant de suivre les mouvements d'une ou plusieurs personnes. Kinect est idéal pour ce projet car grâce à son capteur de profondeur, elle peut localiser les différentes parties du corps en 3 dimensions.
Cahier des charges
- Permettre l'utilisation de l'Oculus Rift pour visualiser les projets architecturaux à la première personne, à l'aide de Unity et du SDK de l'Oculus Rift.
- Utiliser les capteurs propres à l'Oculus Rift pour adapter l'image aux mouvements de la tête.
- Rajouter Kinect au système dans le but de capter d'autres mouvement.
Avancement du projet
Semaine 1 :
- J'ai commencé par l'installation du logiciel Unity, et n'ayant pas encore accès à l'Oculus Rift, je me suis concentré sur l'apprentissage de l'interface du logiciel, donc des fonctions basiques comme créer une scène, y ajouter des objets.
Semaine 2 :
- Poursuite de l'apprentissage du logiciel, cette semaine a été l'occasion de comprendre le fonctionnement des scripts. Ceux-ci peuvent êtres écrits en JavaScript, C# ou en Boo, et permettent d'ajouter des propriétés aux objets ou de modifier celles déjà existantes.
Semaine 3 :
- Installation des librairies utiles pour la suite du projet, c'est a dire le SDK d'Oculus VR ainsi que le SDK de Kinect.
- Étude du SDK de Kinect : il permet de détecter une personne et d'associer des points à chaque partie du corps, les points vont alors suivre les mouvements de l'utilisateur. Ces point vont donc pouvoir êtres associés à différentes parties d'un avatar qui suivra les mouvements de l'utilisateur.
Semaine 4 :
- Étude du SDK de l'Oculus : celui-ci se présente sous la forme d'un objet, dont l'orientation suis celle du casque grâce aux capteurs. Cet objet sert de caméra compatible avec l'Oculus Rift.
Semaine 5 :
- Rencontre avec Damien Marchal, ingénieur de recherche travaillant déjà sur l'Oculus Rift à l'IRCICA. Cette rencontre a été l'occasion d'établir les axes à développer dans le projet : ses travaux portant sur l’interaction à l'aide d'une tablette tactile, il serait intéressant de comparer le résultat avec une interaction à l'aide Kinect, sur deux plans : l'immersion et l'efficacité. La suite du projet consistera donc à interagir avec les objets de la scène avec Kinect.
- Cette semaine a aussi été l'occasion de recevoir un Oculus Rift et donc de commencer à travailler dessus.
Semaine 6 :
- Ajout de la gestion de Kinect dans Unity : ajout d'un squelette reproduisant les mouvements de l'utilisateur.
- Développement d'une fonctionnalité permettant à l'utilisateur de sélectionner un objet de la scène en le pointant du doigt. Cela a été fait à l'aide de plusieurs scripts : le premier permet de positionner la caméra de l'Oculus Rift à l'emplacement de la tête détecté par Kinect, et ce à chaque instant. Le deuxième permet d'avoir un rayon suivant l'axe tête-main et de faire en sorte que lorsque ce rayon rentre en contact avec un objet spécifique, change ce dernier de couleur. Étant donné que ce script n'est actif que lors d'un contact, un troisième script, attaché à chaque objet, le remet à sa couleur d'origine s'il n'est pas désigné par le deuxième script.
Semaine 7 :
- L'axe tête-main ne semblait pas très naturel, car lorsque l'on pointe quelque chose du doigt, c'est plutôt l'axe du doigt qui devrais être pris en compte, cependant cela est irréalisable dans ce projet avec Kinect à cause de la distance par rapport à la caméra. L'ajout d'une option permettant de suivre l'axe coude-main, qui s'en rapproche dans la plupart des cas a donc été réalisée. Celle-ci présente au final effectivement une sélection plus facile des objets.
- Étude des fonctions d'Unity ayant un rapport avec les mouvements et les collisions tels que Rigidbody, qui gère les collisions et la gravité.
Semaine 8 :
- Implémentation des fonctions permettant de déplacer les objets. J'ai pour cela utilisé une souris sans fil : un clic gauche permet d'attraper un objet, celui-ci va donc se déplacer suivant le même axe ayant servit à le sélectionner c'est à dire que l'objet va rester dans l'axe coude-main à une distance constante. Un clic gauche permet de lâcher l'objet, qui tombe donc avec la gravité. La roulette permet d'approcher ou d'éloigner l'objet et enfin un clic central permet de lancer l'objet, la fonction est identique à celle du lâcher sauf avec une accélération suivant l'axe coude-main.
Semaine 9 :
- Cette semaine a été l'occasion de corriger des bugs en rapport avec le déplacement et d'embellir un peu la scène pour la vidéo.
Bilan
Le résultat final est bien là, la combinaison de l'Oculus Rift et de Kinect pour déplacer des objets fonctionne bien. Je regrette cependant de ne pas avoir eu le temps d'implémenter l'Art Track, qui aurait pu au final être plus précis et réactif que Kinect, mais ayant finis l'implémentation de Kinect une semaine avant la fin le temps manquait.