Aménagement d'intérieur en réalité virtuelle

De Ensiwiki
Aller à : navigation, rechercher

Expert.png  Troisième Année 

Projet de 3A Post-WIMP de l'année scolaire 2020-2021

Membres de l’équipe

  • Kilian Mac Donald
  • Marius Pélégrin
  • Jérémy Ramboasolo
  • An Xian

Contexte et objectifs

L'utilisation de logiciels classiques pour permettre à des clients d'un magasin de meubles d'intérieur (Ikea, But, etc.) de visualiser et d'aménager un intérieur pose des problèmes d'immersion. En effet, la visualisation d'un espace 3D projeté sur un plan 2D, l'écran, rend plus difficile la compréhension des distances et des angles. La solution que nous proposons a donc pour objectif de permettre de visualiser mais aussi de manipuler des objets 3D en réalité virtuelle afin de donner à l'utilisateur une idée plus fiable de l'aspect final de son aménagement.

Contraintes

Pour la réalisation de ce projet, nous avons souhaité que ce dispositif soit facile à mettre en place pour les commerçants et que tous les clients puissent l'utiliser. Cela se traduit par plusieurs contraintes:

  • L'interaction doit pouvoir se faire dans un espace restreint: premièrement pour que les commerçants n'aient pas besoin d'un espace conséquent entièrement dédié à l'aménagement virtuel, mais également pour permettre à des particuliers de tester un aménagement chez eux avant de faire leur choix en magasin.
  • L'interaction doit être simple, car le public ciblé n'est pas habitué à l'interaction en réalité virtuelle, ni même à l'interaction avec des espaces 3D virtuels de manière générale.
  • L'interaction doit permettre de visualiser un monde 3D cohérent avec la réalité physique pour éviter le plus possible un décalage avec celle-ci qui pourrait diminuer l'efficacité de l'interaction.

Solution envisagée

Spécifications externes

Notre solution doit permettre de visualiser un environnement 3D détaillé, mais également d'interagir avec les différents objets présents dans cet environnement - les meubles - , en les sélectionnant tout d'abord puis en les déplaçant et les tournant. L'utilisateur doit pouvoir se mouvoir dans l'environnement virtuel, saisir un objet, se déplacer en le tenant puis le poser à un autre endroit voulu. Pour ce faire, l'utilisateur devra avoir accès aux fonctionnalités listées ci-dessous:

  • Visualisation d'un monde en réalité virtuelle: Cela implique également un suivi de la position et de la rotation de la tête par le casque de réalité virtuelle, soit un premier système de déplacement.
  • Système de téléportation. Pour réduire l'espace réel nécessaire à l'aménagement de grandes pièces, un système de téléportation de l'utilisateur doit être mis en place.
  • Sélection et manipulation des objets virtuels: l'utilisateur pourra sélectionner les objets soit à distance soit par contact direct entre la manette et l'objet virtuel.
  • Possibilité de choisir un objet dans un catalogue virtuel.
  • Possibilité de modifier la couleur d'un meuble.

Spécifications techniques

La réalité virtuelle étant une technologie assez nouvelle, peu de choix s'offraient à nous: nous pouvions soit programmer directement en C++ avec le SDK d'un casque de réalité virtuelle particulier, soit utiliser un moteur de jeu comme Unity ou Unreal Engine. Étant donné que la précision chirurgicale de la programmation directe à partir d'un SDK n'était pas nécessaire pour notre projet, nous avons opté pour un moteur de jeu. Unity étant le choix par défaut pour ce genre de projets, c'est vers ce moteur que nous nous somme dirigés, en utilisant le package "XR Interaction Toolkit".

Enfin, pour les interactions elles-mêmes, les outils nécessaires resteront assez classique: système de raycast (rayon partant des manettes en ligne droite afin de pouvoir "pointer" un élément de l'environnement 3D), détection de l'appuie de certaines touches des manettes, récupération des positions et rotations des manettes, du casque etc.

Problèmes rencontrés

  • Prise en main de Unity et de la VR

Aucun d'entre nous n'ayant jamais eu d'expérience avec le monde du développement en VR, il nous a fallu apprendre à utiliser le logiciel, que ce soit pour les déplacements 3D ou l'interaction avec les objets, et le manque de tutoriels sur internet ne nous a pas facilité la tâche. De plus, à cause du temps mis en place pour prendre en main unity pour faire du développement en VR ainsi que le manque de possibilité de tester, nous n'avons pu mettre en place qu'un seul moyen à l'utilisateur afin de manipuler les objets. Ce denier consiste dans la sélection à distance mais l'objet est téléporté au niveau de la main de l'utilisateur, puis le déplacement se fait en suivant le mouvement de la main de l'utilisateur.

  • Confinement et distanciation sociale

Bien évidemment, le problème majeur pour ce projet (de même que pour les autres projets de cette année) est le confinement dû à la crise sanitaire. Premièrement, l'accès à l'école et plus particulièrement aux équipements mis à disposition étant restreint, nous ne pouvions envoyer qu'un membre aux quelques séances prévues dans l'emploi du temps. Cependant, nous avons la chance qu'un membre de l'équipe dispose de son propre casque de réalité virtuelle, ce qui nous a permis d'effectuer des tests de manière plus fréquente même si d'un autre coté une seule personne pouvait effectuer les tests et observer le résultat.

  • Tests effectués par des tiers

Un autre problème découlant directement de la pandémie est que nous n'avons pas pu faire tester le prototype par des personnes tierces. Nous n'avons pas pu non plus mettre en place le protocole de test auquel nous avions pensé au début: montrer une pièce avec quelques objets à une personne, puis leur demander de reproduire cette disposition avec un logiciel avec une souris puis avec notre modèle.

Ce qui a été réalisé

Description des différentes interactions

  • Visualisation d'un monde en réalité virtuelle

L'utilisateur peut regarder et se déplacer dans le monde virtuel en utilisant le tracking du casque de réalité virtuelle. Les manettes sont également affichées et deux rayons en partent afin de pouvoir pointer des objets ou des directions. Un environnement a été créé avec quelques meubles afin de pouvoir tester l'interaction, et le moteur physique de Unity assure le reste (collisions rigides...).

  • Sélection et manipulation des objets virtuels

En appuyant sur le bouton "grip" de la manette droite tout en pointant un objet, celui-ci est sélectionné. Il est alors téléporté dans la main de l'utilisateur, son affichage devient translucide et il ne peut plus rentrer en collision avec d'autres objets (afin de pouvoir le manipuler sans bouger involontairement d'autres objets).

En relâchant le bouton, l'objet est alors déposé, ses collisions sont réactivées et il redevient opaque.

  • Système de téléportation

En appuyant sur le bouton "grip" de la manette gauche tout en pointant une direction, l'utilisateur est téléporté dans cette direction. Si un objet était dans la main de l'utilisateur à ce moment là, alors l'objet est également téléporté avec lui.

Démonstration vidéo

https://youtu.be/r63TpkJk1A4

Ce qui n'a pas pu être réalisé

  • Manipulation d'objets à distance

Ce n'est pas faute d'avoir essayé mais par incompréhension du plugin XR Interaction toolkit que nous n'avons pas réussi à manipuler d'objet à distance. L'idée était de pointer un objet et de le sélectionner avec la gâchette. A ce moment, l'objet était alors fixé au rayon, et les joysticks permettait la rotation et la translation de l'objet.

  • Catalogue de meuble et sélection de couleur

Par manque de temps nous n'avons pas pu mettre en place de menu permettant de sélectionner un meuble ou sa couleur.

Évaluation de l'interaction

Comme dit précédemment, le protocole de test auquel nous avions pensé a été impossible à mettre en place. Cependant, si le contexte l'avais permis, voici ce que nous aurions proposé:

Le but de l'expérience est de comparer notre modèle avec un outil d'aménagement plus classique, comme par exemple celui proposé actuellement dans les magasins.

Dans un premier temps, nous mettons l’utilisateur dans une pièce avec différents meubles positionnés d’une certaine façon (3-4 meubles seulement afin de ne pas fausser les résultats en introduisant un potentiel problème ou source d’erreur lié à une mauvaise ou moins bonne mémoire de la part de l’utilisateur). Ensuite nous lui demandons de réaliser le même arrangement (sans la pièce originale sous les yeux) d'abord avec un système existant puis avec le notre. Nous avons également pensé à faire deux groupes de personnes, afin d'inverser les ordres d'utilisation des logiciels.

Nous ne souhaitons pas évaluer l'utilisateur sur le choix des meubles, ainsi les objets seraient déjà présents dans la pièce, il n'y a qu'à les déplacer. Pour évaluer cette expérience, nous prenons en compte le temps mis pour recréer la scène, ainsi que le retour de l'utilisateur pour savoir ce qu'il a préféré et trouvé le plus intuitif.

Conclusion

Nous avons réussi à implémenter un système permettant d'interagir avec des meubles dans un environnement 3D. Malheureusement, le manque de temps, la distanciation et le manque de tests par des tiers pour avoir une idée plus précise de ce qu'il aurait été possible d'améliorer, de rajouter ou de modifier à rendu le développement de ce projet plus difficile. De ce que Marius a pu tester, l'interaction est intuitive et permet un déplacement intuitif et précis des objets, mais des tests à plus grande échelle seraient nécessaire pour en être sûrs.

Les étapes suivantes pourraient être:

  • mettre en place le dispositif de test dont nous avons parlé dans une partie précédente
  • avoir un plus grand éventail d'objets et de couleurs
  • permettre à l'utilisateur de choisir un objet dans un catalogue
  • permettre de changer la forme de la pièce