Environnement virtuel de sculpture (Post-WIMP 20/21)

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

  • Fergal Feneuil
  • Baptiste Noblet
  • Meven Kerzreho
  • Remi Peruto
  • Dorian Houdelette

Contexte et objectifs

Aujourd’hui, l’étape la plus compliquée lorsque l’on souhaite créer un modèle 3D (visages, personnages, monstres…), est la modélisation 3D à partir des croquis des artistes en 2D. Nous avons remarqué que les logiciels qui effectuent ce travail sont souvent très lourds et difficiles à apprendre. Nous souhaitons que l’usage de la réalité virtuelle et du bras à retour haptique rende notre solution plus intuitive et par conséquent plus facile à apprendre. Un exemple simple pour comprendre, si l’utilisateur souhaite faire une cavité dans une sphère sur un écran il est difficile d'appréhender la profondeur de cette dernière, alors qu’avec un casque de VR et un retour haptique on peut ainsi ressentir la profondeur en plus de la voir en 3 dimensions.

Solution envisagée

Pour ce qui est du fonctionnement de notre solution, l’utilisateur portera donc le casque de réalité virtuelle, dans sa main dominante il tiendra le stylet du bras à retour haptique et dans son autre main il tiendra une manette. Au lancement du programme, l’utilisateur verra en face de lui une sphère en réalité virtuelle qu’il pourra éditer en approchant le stylet de cette dernière. Enfin avec la manette il pourra déplacer et tourner la sphère dans l’espace.

Environnement

  • Bras à retour haptique Phantom Omni et son API OpenHaptics
Phantom Omni
  • Casque de VR HTC Vive et son API SteamVR
HTC Vive
  • Unity - il possède un plugin pour OpenHaptics et un plugin pour SteamVR en plus de gérer toute la partie rendu 3D. Ainsi on peut concentrer nos efforts sur l’aspect rendu utilisateur qui est notre principal objectif durant ce projet.

Réalisation

Nous avons pu utiliser le casque de réalité virtuelle, ainsi que le bras à retour d'effort, pour créer notre environnement de sculpture 3D. Ci-dessous, un exemple ce de notre projet, vu de l’extérieur :

  • Exemples de position utilisateur lors des tests en VR
  • Pour que les mouvements soient ressentis de la même façon lors de l’extrusion et lors du creusage, la collision entre le modèle et le stylo est désactivée pendant la modification du modèle, et un effet ressort est mis entre la pointe du stylo et l’ancienne position du modèle. Cela s’est avéré bien meilleur que de laisser la collision entre le modèle et le stylo, que ce soit au niveau du ressenti ou au niveau technique car le plugin ne semblait pas capable de gérer ce cas là de manière stable.
  • Pour que l’on puisse modifier le modèle plus loin de la surface initiale, il est nécessaire d’augmenter le nombre de faces. Nous avons décidé d’implémenter une solution qui divise les arêtes en deux dans le cas où elles deviennent plus grandes qu’un seuil arbitraire. Cette approche donne beaucoup de faces, et ne crée pas plus de faces aux endroits où l’on cherche à avoir plus de précision. Il faudrait une approche moins globale et plus fine dans le futur, mais elle semble suffisante pour nos tests.
  • Nous n’avons pas implémenté de calibration automatique pour que le stylo physique soit à la même position que le stylo virtuel dans la scène, en particulier par rapport au casque VR. Il est possible de faire une calibration simple en modifiant directement la scène dans Unity après avoir branché le casque, mais nous n’avons pas trouvé nécessaire de le faire automatiquement. En effet, nous avons testé le système en mettant une grande distance entre les deux stylos, et cela ne posait aucun problème. Par exemple le stylo virtuel pouvait se trouver devant les yeux de l’utilisateur, alors que l’utilisateur est debout et que le stylo réel se trouve sur la table, à un mètre de distance. Une orientation très approximative est aussi suffisante, même si cela pose plus de problèmes d’adaptation lorsque le stylo virtuel et le stylo réel ont une orientation très différente. Néanmoins, deux problèmes peuvent apparaître. Si l’utilisateur n’a pas la main directement sur le stylo au début ou s’il le lâche, il doit quand même avoir une vague notion de où il se trouve pour pouvoir le récupérer. Le deuxième problème qui peut apparaître est que si l’on était arrivés à utiliser les manettes du Vive, alors il faudrait une calibration pour que le stylo dans la scène et la manette VR soient cohérents.
  • Aussi, nous aurions voulu pouvoir contrôler le rayon de déformation avec la manette de VR. Nous avons donc implémenté cela, mais puisque nous n’avons pas réussi à utiliser la manette, pour les tests, nous avons plutôt utilisé le clavier.
  • Pour le déplacement du modèle, le fait de se déplacer dans l’espace avec le casque VR n’est pas suffisant, car le stylo a une zone d’action assez limitée. Il était donc nécessaire d’implémenter différentes façons de déplacer le modèle dans l’espace. Nous avons implémenté des contrôles dans le repère cartésien à l’aide du clavier, mais cette solution n’était pas efficace, même lorsque le repère était fixé à la caméra. Une solution éprouvée est de fixer une manette du Vive au modèle à l’aide d’un bouton, généralement une gâchette, pour reproduire le même mouvement que dans le monde réel pour attraper un objet, c'est-à-dire de refermer la main dessus. N’ayant pas pu utiliser les manettes du Vive, nous avons donné ce comportement au stylo directement, et le bouton pour prendre l’objet est assigné au deuxième bouton du stylo.
  • Extraction de matière
  • Utilisation de la VR pour creuser efficacement
  • Manipulation du modèle
  • Ajout de vertices

Problèmes rencontrés

  • A cause du contexte sanitaire du moment, les séances où nous avions accès au matériel (stylo haptique + casque VR) étaient limitées (4 après-midi en tout). Pour permettre l’implémentation des fonctionnalités en dehors de ces séances, nous avons dû implémenter un contrôle au clavier/souris du stylo et de l’une des manettes du casque. Cependant, cela ne permettait pas de ressentir et d’évaluer les interactions.
  • Le deuxième problème est que nous n’avons pas réussi à utiliser la manette du HTC Vive dans Unity. En effet, même si simplement brancher le casque permettait de l’utiliser dans Unity (en tant que caméra virtuelle), nous n’avons pas réussi à lire les données de ses manettes, en utilisant le plugin SteamVR de Unity. Bien que nous avions un contrôle au clavier pour remplacer la manette, nous avons donc abandonné les interactions imaginées l’utilisant, dans la mesure où elles ne sont pas du tout naturelles au clavier.
  • Enfin, le plugin Haptic pour Unity amenait Unity à planter de temps en temps. Dans un premier temps, envoyer à chaque actualisation la déformation amenant le plugin à planter très rapidement. La solution à ce problème consistait à envoyer la nouvelle forme à haptic seulement à chaque fin de déformation (quand l’utilisateur relâche le bouton de déformation). En effet, de toute façon, la forme “touchable” ne doit pas être réelle pendant la déformation, puisqu’elle empêcherait de creuser dans la forme. Donc cela ne sert à rien de l’envoyer pendant la déformation. Dans un second temps, quand les formes devenaient trop compliquées (maillage de forme non naturelle, avec des “triangles dans tous les sens”), soit Unity plantait, soit le “vrai” stylo devenait délétère, soit le stylo dans la scène se téléportait. Nous n’avons malheureusement pas de solution à ça.
  • Bug de stylo

Évaluation de l'interaction

  • L’ajout de la composante haptique est très utile car il permet à la fois un contrôle intuitif, rapide et précis. En effet, lorsqu’il n’y a pas ce retour, il est beaucoup plus long de positionner le stylo au bon endroit, puis de le déplacer là où l’on souhaite. Il y a deux acquisitions de cibles dans ce cas là. Dans le cas du retour haptique, il suffit d’envoyer le stylo dans la zone approximative voulue, puis avec la bonne profondeur maintenant obtenue, il suffit de faire glisser le long de la surface. Avec l’aide des “frottements” sur la surface, les déplacements sont encore plus précis.
  • Après avoir sélectionné la zone initiale, le décalage se fait avec une résistance au mouvement, et tous les déplacements sont à l’échelle réelle, donc si intuitivement la main est décalée de 2 centimètres dans le monde réel, il n’y aura pas “d’overshoot” grâce à l’effet ressort et le positionnement final est proche de ce que l’utilisateur voulait. Cependant la boucle est probablement fermée et obtenir la bonne position d’un seul coup est une illusion. L’effet de ressort exerce une force linéaire par rapport à la distance de déformation. De fait, par la force qu’il doit exercer pour maintenir le stylo, l’utilisateur acquiert naturellement la perception de “à quel point il a déformé”. Ainsi, si l’utilisateur veut déformer de 1cm la surface, avec un peu d’apprentissage, il a juste à appliquer une force correspondant à cette distance, sans avoir à faire d’acquisition de cible. Cette idée n’est que théorique, dans la mesure où l’on n’a pas assez utilisé le dispositif pour s’en rendre compte.
  • Même si l’utilisation du casque VR permet de changer le point de vue pendant toutes les interactions, nous avons remarqué que l’utilisateur ne bouge presque pas la tête, préférant intuitivement arrêter la modification du modèle, puis bouger le modèle pour que la zone intéressante se retrouve devant les yeux de l’utilisateur. Les cas où l’utilisateur bougeait la tête correspond à des moment où la profondeur est très importante et il est nécessaire de bouger la caméra plusieurs fois pour faire un unique mouvement (par exemple creuser dans la sphère).
  • Notre implémentation du contrôle du modèle est très facile à utiliser, et permet une bonne continuité dans l’action. Par exemple lors d’une extrusion, si le stylo arrive à la fin de sa zone d’action, alors il suffit d’appuyer sur le deuxième bouton, et de faire revenir le stylo et le modèle dans une position où la zone intéressante à modifier se retrouve au milieu de la zone d’action du stylo. Cette solution permettait de faire ce que l’on souhaitait intuitivement, mais une fonctionnalité pour changer l’échelle du modèle pourrait être très utile.

Nous aurions aimé faire tester notre prototype par différents profils de sculpteurs (débutants, experts), afin de comparer l’efficacité et l’intuitivité de notre implémentation. Cela nous aurait également permis d’avoir des retours venant de personnes extérieures au projet, et donc plus objectives, afin d’améliorer le prototype.

Améliorations possibles

  • Permettre d’utiliser la manette pour pouvoir utiliser les deux mains simultanément.
  • Afficher la zone sur laquelle le brush effectue des modifications afin de gagner en précision.
  • Faire un affichage qui permet de savoir si le stylo est en fin de course ou pas. En effet, parfois il était difficile de savoir si le stylo était bloqué parce qu’il était contre la surface ou s’il était bloqué parce qu’il était à sa limite, et donc qu’il y avait besoin de déplacer le modèle.
  • Ajouter différents outils, par exemple pour colorier ou encore lisser la surface. On pourrait imaginer sélectionner ces outils grâce au pavé tactile de la manette du vive.
  • Changer la densité de triangles dynamiquement pour avoir un meilleur contrôle aux endroits où l’on travaille, quitte à ajouter plus de faces avant la modification, puis les supprimer à la fin pour des raisons d’efficacité si elles ne sont pas nécessaires ou si elles peuvent être compactées.

Conclusion

Malgré les conditions sanitaires et le peu d’accès possible à la salle, nous avons réussi à développer et tester un prototype satisfaisant. Même si celui-ci ne possède pas toutes les fonctionnalités prévues à la base, nous avons la possibilité de déformer notre modèle avec différente taille de brush, et de déplacer celui-ci, le tout de façon assez libre. Nous sommes satisfait de notre projet, même si nous aurions aimé pouvoir plus avancer en salle.

Liens vers les vidéos

Création d'un corps :

https://drive.google.com/file/d/1v4G0MM85oZiNQfZol_PP-EE7FPCwgMY7/view?usp=sharing

Exemple d'utilisation du casque de vr pour améliorer l'expérience lors ce que l'on creuse :

https://drive.google.com/file/d/1De4BoWcmJD2yUuLrXMYwnYtrMJEdp03b/view?usp=sharing

Création d'un visage :

https://drive.google.com/file/d/1oFhtCK7pr0b1XvSV9c32yWxr9FbiH6wn/view?usp=sharing