Aménagement d’intérieur dans un espace 3D en réalité virtuelle (Post WIMP 18/19)

De Ensiwiki
Aller à : navigation, rechercher

Expert.png  Troisième Année 

Présentation de l’équipe

Pour mener à bien ce projet, nous avons formé une équipe composée de :

Nous avons été encadrés par François Bérard.

Contexte et objectifs

Contexte

Notre projet s’intéresse à l’aménagement d’intérieur dans un espace 3D en réalité virtuelle. On se place dans le rôle d’un architecte d’intérieur qui souhaite aménager l’intérieur d’un appartement, et on va chercher à mettre en place les interactions en réalité virtuelle qui vont permettre à l’architecte d’effectuer son travail.

Motivations

Pour notre projet, nous avons voulu réfléchir aux domaines d’applications de la réalité virtuelle. Pour cela, nous avons tout d’abord identifié quelles caractéristiques de la réalité virtuelle nous voulions exploiter. D’après nous, la réalité virtuelle a énormément de potentiel dans le domaine des simulations. En effet, un monde 3D virtuel permet d’effectuer certains types de simulation avec plus de facilité que dans le monde réel. De plus, l’immersion totale apportée par la réalité virtuelle offre beaucoup d’avantages qui ne demandent qu’à être exploités. Nous avons tout de suite pensé au domaine de l’aménagement d’intérieur où l’immersion a un impact direct sur la qualité de la simulation. Avec ce sujet en tête, nous nous sommes demandés comment rendre les interactions en réalité virtuelle assez efficaces et plaisantes pour qu’un architecte préfère utiliser la réalité virtuelle à ses méthodes classiques de travail. L’objectif de notre projet sera donc de résoudre ce problème, et pour cela nous nous intéresserons à quelles fonctionnalités un architecte a besoin d’avoir et surtout aux interactions post-WIMP qui permettent d’utiliser ces fonctionnalités.

Solution envisagée

Analyse des besoins

Nous voulions que notre système offre plusieurs services à l’utilisateur, dans le but de satisfaire au mieux les besoins d’un architecte d’intérieur en particulier. Le cas d’usage est le suivant : l’architecte, après avoir mis en place son dispositif qui lui permet de s’immerger dans la scène 3D en réalité virtuelle (cf infra pour plus de détail) se trouve au sein du modèle 3D de l’appartement qu’il souhaite décorer (le modèle 3D de l’appartement a été chargé par l’architecte au préalable sur le logiciel de visualisation 3D). L’architecte doit ensuite pouvoir :

  • regarder la scène se trouvant autour de lui en bougeant la tête
  • se déplacer au sein de la scène 3D, en restant sur place
  • invoquer des objets 3D (meubles et autres)
  • pouvoir interagir avec les objets 3D qu’il manipule, sans que cela ne soit fatiguant sur le long terme pour l’utilisateur

Pour les deux premiers besoins, nous avons pensé qu’il était judicieux d’utiliser un casque de réalité virtuelle, nous avons donc utilisé pour notre projet le HTC Vive. Pour le troisième besoin, nous avons imaginé un système de menu. Au sein de la scène 3D, il suffirait pour l’architecte d’appuyer sur un bouton spécifique afin de faire apparaître devant ses yeux un plan représentant un menu. Ce menu contiendrait la liste des objets, puis au sein de chaque liste d’objets des sous catégories plus spécifiques. Par exemple, une première catégorie serait “canapés” et ensuite dans la liste, nous aurions: “canapé d’angle”, “canapé 3 places”,etc. Une fois l’objet choisi par l’utilisateur, nous avions pensé lui offrir deux options : un choix de couleur et un choix de matière du tissu. Une fois tous les choix effectués, l’objet apparaît simplement devant l’utilisateur.

Pour finir, pour le quatrième besoin, nous avons utilisé les manettes du HTC Vive, qui permettent d’interagir avec les objets 3D de plusieurs façons possibles. Nous voulions qu’il soit possible de cibler un objet, de le déplacer, de le supprimer et si possible de le tourner dans l’espace.

Spécifications techniques

Comme nous avons commencé à l’expliquer un peu plus haut, pour satisfaire les besoins que nous avons repérés, nous avons utilisé le HTC Vive pour tout ce qui concerne l’immersion en réalité virtuelle dans une scène 3D. En ce qui concerne le moteur 3D, nous avons utilisé Unity. Pour faire le lien entre les deux interfaces, nous avons utilisé l’application SteamVr et le plug-in Unity SteamVr.

HTC Vive

Dans notre projet, nous avons principalement utilisé le HTC Vive muni de ses deux manettes. Nous avons aussi simuler à l’aide de la technique du magicien d’Oz une interaction vocale pour permettre à l’architecte de choisir plus vite les objets parmi le catalogue disponible (voir ci-après).

HTC Vive.jpg

Lorsque l’utilisateur (i.e l’architecte d’intérieur professionnel) place le casque sur la tête, il est immergé au sein d’une scène 3D contenant l’appartement des clients qu’il souhaite décorer.

Manettes HTC Vive.jpg

Au départ du projet, nous ne connaissions pas le principe d’utilisation du HTC Vive. Par exemple, nous ne savions pas si le HTC Vive, après intégration dans Unity, aurait des commandes par défaut pour interagir avec des objets 3D. C’est pourquoi au départ nous avons pensé les interactions précisément en considérant les différents boutons des manettes. Cette mise en place théorique des commandes ne s’est pas faite au hasard mais en faisant des expériences de pensées manettes en main afin de voir quelles commandes étaient le plus pratique selon nous pour les différentes interactions. Tout d’abord, en ce qui concerne la visualisation de la scène, il suffira à l’utilisateur de bouger la tête afin que la caméra tourne de la même manière au sein de la scène virtuelle. Ensuite, l’utilisateur utilise les deux manettes pour interagir avec l’environnement 3D. Position de la manette gauche dans l’espace : sélection d’un objet de l’environnement (pointage laser ou parabolique). L2 permet de se déplacer dans les 4 directions, la direction permettant d’avancer tout droit étant donné par celle du regard dans la pièce. Cliquer sur L1 permet de se téléporter à l’endroit pointé avec la manette gauche. Appuyer sur L3 affiche une carte plane de l’appartement devant le regard, on peut alors avec L2 et L1 respectivement naviguer parmi les différentes pièces de l’appartement sur la carte et en sélectionner une. Le menu carte d’appartement se ferme quand l’utilisateur a choisi une pièce, auquel cas il est téléporté au centre de cette dernière, soit lorsqu’il ré-appuie sur le bouton L3, il n’est alors pas déplacé de sa position d’origine. L4 permet de se téléporter du centre d’une pièce à l’autre. Position de la manette droite dans l’espace : permet de positionner les objets du catalogue dans l’espace lorsque ces derniers sont pris en main. L1 : un clic permet de sélectionner l’objet pointé par la manette gauche. L2 : Permet de gérer la rotation de l’objet autour de ses axes. L4 : permet de prendre un objet en main lorsqu’il est sélectionné. L4 doit alors être maintenu pendant les rotations et déplacements de l’objet : le relâchement de L4 a pour conséquence la chute de l’objet sur le sol à l’endroit où l’utilisateur se trouve. L3 : ouvre le menu permettant d’afficher le catalogue des objets disponibles. Le menu est classé par catégorie d’objet : table, lit, armoire… La navigation au sein du menu se fait grâce à L2, la sélection d’une catégorie, sous-catégorie, objet et couleur se fait en appuyant sur R1. Le choix d’un objet + couleur provoque la fermeture du menu et l’objet que l’utilisateur vient de choisir apparaît devant lui à ses pieds. Le menu peut aussi être refermé en appuyant de nouveau sur R3 si l’utilisateur ne souhaite plus sélectionner d’objet. Pour accéder à une catégorie ou sous-catégorie rapidement, l’utilisateur peut à tout moment prononcer le nom de la catégorie et le menu s’ouvrira à l’endroit indiqué. De la même manière, l’utilisateur peut prononcer le nom d’un type d’objet pour accéder directement à la liste de tous les objets de ce type disponible.

Unity

Nous avons utilisé Unity car nous avions déjà entendu parler de ce moteur 3D. Principalement utilisé dans le cadre de la création de jeux-vidéos mais pas seulement, nous savions que Unity possédait un grand nombre de fonctions déjà écrites permettant de créer une scène 3D et de la visualiser simplement sans réimplémenter de nous-même une scène à partir de rien par exemple en OpenGL.

SteamVr

Après nos recherches, SteamVr s’est avéré être la solution la plus commode pour intégrer le HTC Vive dans Unity. A noter que SteamVr désigne ici en réalité deux choses distinctes : nous avons tout d’abord installé l’application SteamVr qui permet d’intégrer le HTC Vive avec le PC puis le plug-in Unity SteamVr qui permet plus spécifiquement d’intégrer le HTC Vive au sein de Unity.

Un mot sur l’implémentation du menu

Dès le départ du projet, nous nous étions dit que nous n’allions pas implémenter en détail le système qui permet à l’utilisateur, après le choix de l’objet qu’il veut manipuler en 3D, de faire apparaître cet objet devant lui dans la scène. En effet, notre projet s’intéressant aux interactions plus qu’à l’implémentations de mécanismes pratiques, nous avons utilisé la technique du magicien d’Oz afin de mimer le fonctionnement du menu.

Travail réalisé

Vision préliminaire du projet

Avant de commencer le projet, nous avons pensé qu’il était intéressant de mettre en image les interactions que nous allions mettre en place. Voici les images concepts que nous avons produites :

Image 1 ps.png
Image 2 ps.png

Installation et mise en place de SteamVr, Unity et du HTC Vive

Nous avons mis beaucoup de temps avant que les installations de toutes les applications fonctionnent correctement (voir problèmes rencontrés et solutions). Cependant, après avoir crée un compte Steam et Unity, nous avons pu installer les dernières versions des applications et importer le plug-in SteamVr au sein de Unity.

Utilisation des scènes exemples de SteamVr pour comprendre comment implémenter les interactions

Le fonctionnement du HTC Vive au sein de Unity est très loin d’être intuitif pour des utilisateurs novices de Unity. Nous avons créé un grand nombre de scène 3D tests afin de comprendre comment mettre en place des interactions simples. Nous avons aussi commencé à utiliser les scènes d’exemples présentes au sein du plug-in SteamVR, que nous avons mis relativement longtemps à trouver puisque qu’aucune documentation ne mentionne leur existence. Pour le moment, nous avons réussi à saisir des objets et à les jeter. Il faut encore implémenter le déplacement et la sélection.


Analyse des différentes interactions

Téléportation

La téléportation est une action déjà implémenter dans le plugin steamVR de Unity. Comme son nom l'indique, la téléportation permet à l'utilisateur de se placer instantanément à l'endroit de son choix, endroit qu'il indique grâce à un pointeur laser en forme d'arc.

https://ensiwiki.ensimag.fr/images/b/b0/TP.gif

Déplacement avec TouchPad

Nous avons implémenter une interaction utilisant les deux degrés de liberté du touchpad pour se déplacer. C'est un mode de déplacement qui viens remplacer la téléportation ou potentiellement la compléter quand la téléportation n'est pas possible. Pour se déplacer, l'utilisateur à simplement besoin de bouger son doigt sur le touchpad dans la direction qu'il veut. Finalement cette interaction ressemble à un joystick comme sur une manette de PS4 par exemple. Le touchpad à l'avantage de pouvoir gérer la vitesse du déplacement. En effet, la position du doigt sur le touchpad est mesurer relativement au centre du touchpad, ainsi on dispose à la fois de la distance et de la direction du doigt. Cette notion de distance s'interprète en vitesse de déplacement, et la direction en direction du mouvement.

Deplacement touchpad.gif

Interactions avec les objets

Les interactions avec les objets tels que le fait d'attraper ou de jeter un objet sont déjà disponible sur le plugin steamVR. Toutefois nous avons ajouté deux comportements possibles. Tout d'abord nous avons rajouté la possibilité de "supprimer" un objet. De plus nous avons voulu donner une possibilité de déplacer un objet à distance en le ciblant au préalable. Pour cela l'utilisateur doit pointer sur un objet, puis peut avec le touchpad le déplacer, déplacement qui suit le même comportement que celui décrit plus haut dans le cas du déplacement de l'utilisateur avec le touchpad.

Grip.gif
Delete.gif
Deplace distance.gif

Menu

La dernière interaction que nous avons mis en place est celle du menu. Ce type d'interaction existe déjà dans steamVR mais nous l'avons implémenter différement pour pouvoir obtenir le comportement souhaité. Concrètement il s'agit d'appuyer sur un bouton qui ouvre un menu interactif devant un des controller de l'utilisateur.

Menu 2.gif

Affichage d’un menu

Nous avons implémenté un menu basique s'ouvrant à la demande de l'utilisateur. Le menu s'affiche devant l'utilisateur sous la forme d'une première liste déroulante contenant la liste des pièces de la maison. C'est en effet la solution qui nous a paru la plus simple pour classer les objets après coup. En cliquant sur une pièce en particulier, un sous menu apparaît afin de sélectionner un objet.

Menu.gif

Evaluation de l’interaction créée

Nous avons choisi de faire des expériences pour pouvoir juger des interactions que nous avons crées. Nous avons donc mis en place deux "scénarios" dans lesquels nous comparons deux interactions différentes ayant le même cas d'usage.

La première expérience consiste à comparer deux modes de déplacement de l'utilisateur possible. Le premier mode de déplacement s'effectue par téléportation à l'aide d'un pointeur qui désigne le lieu où l'utilisateur se téléporte. Le second mode consiste à utiliser le touchpad d'un controller pour pouvoir se déplacer. Pour cette expérience nous avons mis en place un parcours que les participants doivent achever le plus vite possible.

Expérience sur le déplacement de l'utilisateur dans l'espace

Participant 1er essai 2eme essai 3eme essai 4eme essai 5eme essai
Gustave TouchPad 10.57 s 10.22s 8.52s 7.79s 7.6s
Gustave Téléportation 6.98s 7.49s 5.77s 6.03s 5.8s
Jean-Baptiste TouchPad 23s 18.6s 13.6s 13.7s 13.8s
Jean-Baptiste Téléportation 14.2s 10.15s 9.8s 8.7s 7.5s

Nous allons maintenant interpreter cette première expérience. Tout d'abord on remarque que l'utilisation de la téléportation est bien plus performante que celle du touchpad. En effet Gustave et Jean-Baptiste ont mis respectivement 7.4s et 16.5s en moyenne pour effectuer le parcours en utilisant le touchpad, comparé à la téléportation avec laquelle ils ont mis respectivement 6.5s et 10.7s en moyenne. Lors de cette expérience nous avons pu mettre en évidence deux problématiques. Tout d'abord, la téléportation nous semble permettre d'avoir une précision beaucoup plus importante sur le déplacement. Pour aller plus loin il faudrait faire une expérience dont l'objectif serait de mettre en évidence les différences de précision entre les deux modes de déplacement. Ensuite, Gustave a trouvé que la méthode utilisant le touchpad étant beaucoup moins plaisante pour l'utilisateur, il a notamment fait l'expérience de nausées. C'est une problématique souvent mise en évidence lorsque l'on traite le sujet de la réalité virtuelle, et afin de décider quel type de déplacement semble optimale, il ne faut pas s'arrêter aux performances, mais aussi prendre en compte ce type de problématique.

La seconde expérience consiste à comparer deux modes de déplacement d'un meuble par l'utilisateur. La première méthode consiste à attraper le meuble grâce à un controller et à l'amener grâce à la téléportation sur une case ciblée. Le second mode consiste à cibler le meuble puis utiliser le touchpad pour le déplacer. Nous avons seulement étudier les translations du meuble et non pas sa rotation. Pour cette expérience aussi nous avons mis en place un parcours que les participants doivent achever le plus vite possible.

Expérience sur le déplacement d'objets dans l'espace

Participant 1er essai 2eme essai 3eme essai 4eme essai 5eme essai
Gustave TouchPad 4.25s 4s 3.55s 4.1s 3.2s
Gustave Téléportation 6.94s 7.7s 5.95s 5.2s 5.7s
Jean-Baptiste TouchPad 6.15s 7.7s 4.75s 6.38s 6s
Jean-Baptiste Téléportation 7.7s 6s 6.66s 6.3s 6.6s

Contrairement à la première expérience où la téléportation est très adapté, dans cette seconde le touchpad fait concurrence, spécialement dans le cas de Gustave. Gustave avait plus d'expérience que Jean-Baptiste avec l'utilisation du touchpad, ce qui peut expliquer qu'il ai obtenu de meilleurs performances. Jean-Baptiste et Gustave avaient autant d'expérience avec la téléportation, cela se reflète bien par leurs temps voisins. Avec cette expérience, on observe que la translation d'objets dans l'espace est plus efficace avec le touchpad. Toutefois le touchpad ne possède que deux degrés de liberté, il n'est donc pas adapté pour des taches de docking demandant 6 degrés de liberté. Pour aller plus loin il faudrait ajouter au touchpad un moyen d'influencer les 4 degré de liberté manquant.

TroubleShooting

Cette section se veut être un court mémo pour la mise en place d’interactions basiques en réalité virtuelle avec le HTC Vive sous Unity.

Voici la liste des étapes à suivre :

  • Avant d'ouvrir Unity, s'assurer que l'application SteamVR détecte bien tous les composants (cela doit être le cas si le casque, les deux capteurs, ainsi que les deux manettes sont bien branchés et allumés)
  • Ouvrir Unity, et si ce n'est pas déjà fait importer le plug-in SteamVR depuis Unity à partir de l'Asset Store
  • Ouvrir la scène exemple d'interactions se trouvant à l'emplacement suivant : Assets > SteamVr > InteractionSystem > Samples > Interactions_Example.unity. A noter que selon les versions du plug-in SteamVR de Unity, l'emplacement, le nom et le contenu des scènes d'exemples peut varier.
  • Une fois dans la scène exemple, vérifier la présence de l'objet Player puis lancer le mode Play. En cas d’absence de Player, l'objet se trouve dans Assets > SteamVr > InteractionSystem > Core > Prefabs . Si le casque de réalité virtuelle n'est toujours pas bien linké à la scène, placer (après avoir désactiver le mode Play) dans la scène en plus l'objet [CameraRig] se trouvant dans Assets > SteamVr > Prefabs. Réactiver le mode Play. Normalement le casque devrait être maintenant bien linké à la scène 3D Unity. Désactiver le mode Play et enlever [CameraRig], le casque restera toujours linké à la scène.
  • Regarder les différents attributs des objets lançables, intéragissables, etc. afin de comprendre quel type d'attribut mettre sur ses objets pour quel type d'interaction.

Problème rencontrés et solutions mises en place

Problème de versions entre Unity et SteamVR

Nous avons passé plusieurs après-midi entière à mettre en place les différents logiciels. En effet, au départ du projet, nous voulions suivre différents tutoriels explicatifs mais ceux-ci concernaient des versions anciennes de Unity et de SteamVr, et finalement en raison de problème de compatibilité nous avons dû renoncer et installer les dernières versions de tous les logiciels.

Peu de documentations pour nous aider

Notre principal problème a été le peu (en fait quasi non existence) de documentation que nous pouvions trouver sur internet pour nous aider lors de la mise en place des différents outils. Nous avons donc dû regarder des tutoriels fait par des amateurs du domaine, notamment sur Youtube, afin de nous aider.

Réinstallation des machines Windows qui nous a fait perdre une bonne après midi

Après avoir mis en places les premières versions des logiciels, le service informatique de l’école a dû réinstaller les machines Windows en raison d’une erreur de manipulation, ce qui nous a fait perdre une après-midi entière, car nous avons dû réinstaller toutes nos applications.

Conclusion

Pour conclure ce projet, nous allons revenir sur notre problématique et essayer d'y apporter une réponse synthétique. Le contexte dans lequel nous posons notre problématique est celui d'un architecte d'intérieur voulant utiliser la réalité virtuelle pour designer un intérieur. La question que l'on se pose est de savoir quels sont les interactions les plus pertinentes à mettre en place pour remplir les taches qu'un architecte d'intérieur à besoin d'effectuer. Pour cela nous avons tout d'abord étudié le mouvement de l'utilisateur dans l'espace. Dans ce cadre, la téléportation nous semble être le moyen de transport optimal, à la fois car il est plus rapide que les autres modes de déplacement que nous avons envisagé, mais aussi car il offre plus de confort à l'utilisateur (pas ou très peu de nausées comparé au touchpad). Il nous semble aussi être plus précis mais n'ayant pas effectuer d'expérience à ce sujet nous ne pouvons pas l'affirmer. Ensuite nous avons réfléchi aux fonctionnalités utiles au métier d'architecte, notamment l'ajout ou la suppression de meubles dans l'environnement 3D. La réponse que nous avons trouvé à ce besoin est l'implémentation d'une interface qui permet d'ajouter des éléments dans une liste pré-établi. De plus nous avons pensé à implémenter des fonctionnalités tels que la suppression ou le déplacement des meubles. Concernant ce dernier point, nous avons voulu analyser quelle méthode de déplacement est la plus efficace. D'après ce que nous avons pu observer, utiliser le touchpad pour des déplacement à deux degrés de liberté est bien plus efficace que d'utiliser une combinaison de téléportation avec l'objet accroché au controller. Toutefois cette observation n'est valide que dans le cadre de déplacements à deux degrés de liberté, il faudrait rajouter d'autres interactions en plus du touchpad pour pouvoir réaliser des tâches de docking. Une idée serait de combiner le touchpad avec les trois degré de liberté en rotation du controller par exemple.

Améliorations possibles

Nous avons fait face à de nombreux problèmes que ce soit concernant la mise en place des outils ou sur le manque de documentation les concernant. Dans le cadre du projet cela nous a demandé beaucoup de temps de résoudre ces problèmes, nous laissant que peu de temps pour l'implémentation des différentes interactions. Ainsi la première chose à améliorer est la qualité de nos interactions. Aujourd'hui, le déplacement au trackpad est rudimentaire, avec une implémentation plus sérieuse nous aurions surement eu des résultats différents. La poursuite de ce projet demanderai d'implémenter de meilleurs interactions et d'effectuer des tests plus nombreux et plus spécifique. Étudier la précision que l'on peut avoir avec les différentes interactions sur des taches de docking permettrai de faire une analyse plus exhaustive avec une meilleure mise en contexte, ce qui permettrai de répondre avec plus de certitude à la problématique. Pour avoir de meilleurs résultats il faudrait effectuer des test avec des utilisateurs ayant des experience différente avec la technologie de la réalité virtuelle.