Animation 3D en réalité virtuelle
Projet de 3A Post-WIMP de l'année scolaire 2019-2020
Sommaire
Membres de l’équipe
- Clara Martin
- Rémi Massiera
- Sophie Dewailly
Contexte et objectifs
L’utilisation de logiciels de création de scènes 3D (Maya, Unity…) pose souvent un problème lors de la perception de la profondeur. Nous remarquons qu’il n’est pas intuitif de déplacer à la souris, sur un écran 2D, un objet dans une scène 3D. Notre projet est donc motivé par la résolution de ce problème récurrent en animation 3D.
En plus de résoudre ce problème récurrent, nous pensons qu’une plus grande immersion dans la scène 3D à l’aide de la réalité virtuelle permet d’en avoir une meilleure visualisation dans l’espace.
L'objectif du projet est donc de permettre de visualiser, établir des keyframes et lancer une animation dans une scène 3D à l’aide d’un casque de réalité virtuelle.
Solution envisagée
Spécifications externes
Notre produit permettrait de visualiser et modifier une scène 3D, keyframe par keyframe. L’utilisateur pourrait naviguer parmi les keyframes et en sélectionner une (ou en créer une nouvelle). Une fois la keyframe à modifier sélectionnée, l’utilisateur aurait alors accès aux fonctionnalités suivantes :
- Rotation et translation de la scène : l’utilisateur pourra visualiser la scène sous plusieurs angles en la manipulant comme si la scène était contenue dans un cube. Nous avons choisi une vision “externe” de la scène (l’utilisateur ne se déplace pas dans la scène en marchant, c’est plutôt la scène qui est déplacée pour obtenir le point de vue souhaité), car cela permet de réaliser les actions proposées aussi bien assis que debout, sans nécessité de se déplacer. L’utilisateur serait alors moins fatigué par une utilisation prolongée de l’outil, et il n’aurait pas besoin d’un espace aménagé dédié à cette tâche.
- Translation et rotation d’objet de la scène
- Modification d’un objet de la scène : Déplacement des articulations de l’objet, modification de la taille des parties qui constituent l’objet.
- Zoom et dézoom de la scène
- Placement et orientation de la caméra dans la scène
- Navigation parmi les keyframes pour choisir la keyframe à sélectionner.
- Passage à la keyframe précédente/suivante : raccourci de l’action précédente pour passer plus rapidement à la keyframe précédente ou suivante.
Exemple de modification d’articulations d’un personnage dans le cadre d’une animation 3D en VR : First Person Immersive Animation Tool
Spécifications techniques
Etant donné nos objectifs et le matériel à notre disposition, nous avons décidé que notre interaction se ferait au moyen d'un casque et de manettes de réalité virtuelle HTC Vive, connectés à une scène 3D créée sur Unity. Chacune des actions proposées ci-dessus serait à réaliser en effectuant des gestes avec les manettes et/ou en activant certains boutons des manettes.
Problèmes rencontrés
- Prise en main de Unity et de la VR
Une des principales difficultés que nous avons rencontrées a été la prise en main des outils utilisés. Nous avons eu besoin de temps pour apprendre à réaliser des scripts sous Unity. Concernant les outils de VR, nous avons d'abord eu des problèmes techniques (disparition des manettes dans la scène 3D par exemple). Nous avons ensuite eu des difficultés à effectuer le binding entre les différents boutons/gestes liés aux manettes et les actions qu'ils devaient réaliser, malgré les tutoriels que nous avons suivis. Nous avons finalement gardé les bindings par défaut : s'ils ne permettent pas de réaliser toutes les actions souhaitées (navigation parmi les keyframes par exemple), ils permettent toutefois de réaliser la tâche principale répondant au problème que nous avons soulevé, c'est-à-dire déplacer un objet dans une scène 3D.
- Mesure de l'indice de difficulté pour le placement dans une scène 3D
Une autre difficulté rencontrée a été de définir la façon d'évaluer la difficulté de la tâche à réaliser. Afin de vérifier les bénéfices apportés par la réalité virtuelle par rapport à une interaction "classique" WIMP, nous avons décidé de faire tester la translation d'objets en VR et sur Unity sans VR puis de comparer les résultats obtenus. Plusieurs questions se posent alors :
- Lorsqu'on utilise les manettes VR, le contrôle de la rotation et de la translation est en réalité intégral, ce qui n'est pas le cas dans Unity où le contrôle de ces deux actions est séparé. Cela crée une différence entre les deux actions testées, et nous ne sommes pas certains de mesurer exactement la difficulté de la translation uniquement dans le cas de la VR.
- Lors du test de l'interaction "classique" sur Unity, nous avons réalisé que la difficulté du test dépendait beaucoup de l'angle de vue de l'utilisateur par rapport aux objets à manipuler, ce qui n'était pas le cas en VR, où les objets apparaissaient en face et à proximité de l'utilisateur (l'angle de vue ne change donc pas beaucoup d'un test à l'autre dans ce cas). L'utilisateur devait donc manipuler l'angle de vue dans le premier cas, en plus d'effectuer l'action de déplacement de l'objet. Cela crée encore une différence entre les deux actions testées. D'autre part, nous calculons notre indice de difficulté en fonction de la taille de la cible et de la distance entre l'objet à déplacer et la cible. Peut-être aurait-il fallu prendre en compte la difficulté liée à l'angle dans le calcul de l'indice dans le cas de l'interaction "classique".
- Pertinence des données relevées
Un des problèmes que nous avons eu est que notre interaction est destinée à des artistes 3D, cependant les participants de nos tests ont été des personnes de notre entourage et non les utilisateurs visés. Si nous avons observé un écart entre les performances sur Unity et en VR, nous ne sommes pas certains que cet écart aurait aussi significatif avec les utilisateurs visés, plus expérimentés dans la manipulation de logiciels tels que Unity. Cependant la plupart de nos testeurs étaient tout de même habitués à l'utilisation de logiciels de 3D (bien qu'à un niveau non professionnel) : on peut donc espérer que les résultats de notre expérience soient tout de même assez représentatifs des bénéfices (ou non) apportés par la VR.
D'autre part il n'était pas toujours évident de maintenir les utilisateurs concentrés sur la tâche qui leur était assignée : leur curiosité les poussaient parfois à expérimenter le matériel et nos données comportent donc quelques valeurs aberrantes.
Enfin nous avons observés que certains utilisateurs étaient plus à l'aise que d'autres quant à l'utilisation de la VR, mais nous n'avons pas jugé ce problème trop gênant car l'apprentissage des utilisateurs était très rapide (la plupart effectuaient 3-4 tâches de façon un peu lente avant de prendre un rythme régulier).
- Apparition de cibles de taille et position aléatoires
Nous avons décidé arbitrairement de placer les cibles à des positions et avec des tailles aléatoires, ce qui nous semblait pertinent afin de pouvoir effectuer de nombreux tests et avoir une courbe de Fitts correcte, cependant nous n'avions pas pensé au fait que cette méthodologie pouvait créer des indices de difficulté parfois insensés (il pouvait arriver d'avoir un ID de 20 par exemple).
De plus il devient impossible de correctement comparer les résultats des différents sujets de tests puisqu'il ne s'agit pas des mêmes tâches à effectuer. Par exemple, à cause de l'aléatoire il est possible qu'un sujet n'ait rencontré que des cibles de grandes tailles et qu'il ait développé une différente stratégie pour effectuer les tests qu'un autre sujet avec des cibles de tailles très différentes.
Ce qui a été réalisé
Etant donné les problèmes techniques rencontrés et surtout le temps limité que nous avions, nous avons revu nos objectifs à la baisse et choisi d'étudier qu'une partie de l'interaction souhaitée. Nous nous sommes concentrés sur l'évaluation de l'apport de la réalité virtuelle dans le déplacement d'objets dans une scène 3D, puisqu'il s'agissait du coeur du problème que nous avons soulevé. Ainsi, nous avons réalisé deux environnements de test : un pour la réalité virtuelle, et un pour du déplacement d'objet dans la scène 3D classique au clavier et à la souris sous Unity.
Afin de déterminer quels gestes devaient générer les actions, nous avons d'abord étudié si certains gestes venaient plus facilement à l'esprit que d'autres pour certaines actions.
- Tests de consensus sur les gestes à effectuer
Nous avons interrogé 5 étudiants pour savoir si les gestes pour différents référents paraissent plus intuitifs que d’autre. Notre objectif était d’obtenir un score de consensus, mais les différents gestes proposés par les interrogés étaient souvent détaillés et variés d’un sujet à l’autre, ce qui rendait le groupement de gestes difficile. Ainsi, nous proposons plutôt une analyse des résultats.
Nous présentions à chaque sujet une description du but idéal de notre projet, et les manettes HTC vive avec leurs boutons. Pour chaque action décrite dans les spécifications externes nous demandions à l’étudiant le geste qui lui semblait approprié. Nous avons pu interroger à la fois des étudiants familiers avec la VR, ainsi que des étudiants n’ayant jamais essayé un casque de réalité virtuelle, ce qui a permis d’obtenir différents points de vue.
Peu de gestes présentent un fort consensus, le plus marqué étant la sélection d’objet (grâce à la gâchette de la manette). Le deuxième geste presque universel est le déplacement d’objet, par déplacement physique du controller. Cela nous a confortés dans le choix de garder les bindings par défaut du matériel, puisque ces actions se réalisent de la même façon.
Les différentes rotations amènent en quasi-égalité deux gestes : l’utilisation du trackpad, et la rotation dans l’espace. Le trackpad concentre pour certains sujets de nombreuses fonctionnalités, comme la rotation, le zoom et le déplacement dans les frames. Cette multi-fonctionnalité a été expliquée par l’un des sujets par le nombre limité de boutons ergonomiques sur le contrôleur. Ainsi, certains sujets proposaient pour des gestes plus complexes l'utilisation de menus et de widgets.
Nous retenons de cette étude que de nombreux référents ne sont pas intuitifs et que, malgré le nombre de boutons limités sur les manettes, certains référents amenaient à des gestes différents pour chaque sujet.
- Environnement de test en réalité virtuelle
Exemples de position utilisateur lors des tests en VR :
Le test consiste en une série de tâches d'acquisition de cible puis de déplacement dans la scène 3D.
Il faut "attraper" le cube et le déplacer à l'intérieur de la cible (rouge). Les cibles apparaissent à des positions et avec des tailles aléatoires. Pour chaque tâche, nous enregistrons le temps (du moment où le cube apparaît jusqu'au moment où il est placé dans la cible), la distance initiale entre le cube et la cible, et la taille de la cible. Pour déplacer le cube, il faut déplacer la manette HTC Vive jusqu'à ce qu'elle soit à l'intérieur du cube, puis appuyer et maintenir la gâchette pour déplacer le cube et enfin relâcher la gâchette pour poser l'objet à sa destination. Les utilisateurs disposaient des deux manettes, leur offrant la possibilité d'interagir aussi bien avec leur main dominante que non dominante. Cela nous paraissait judicieux puisqu'en situation réelle, les utilisateurs auraient eu également accès aux deux manettes pour effectuer les différentes actions.
Le but est d'ensuite de comparer ces données aux données de placement dans une scène 3D de manière "classique" (WIMP, à la souris), ainsi que d'essayer d'établir une loi de Fitts.
- Environnement de test classique
Pour déterminer si l'interaction est réellement utile en VR, nous avons décidé de la comparer à un test d'acquisition et déplacement dans une scène 3D de manière classique.
Il s'agit des mêmes tâches, la seule différence étant la manière de déplacer le cube. Au lieu d'utiliser les manettes HTC Vive, l'utilisateur doit cliquer sur les petites flèches de couleur pour déplacer l'objet selon un axe (ou les carrés pour déplacer selon un plan).
Nous enregistrons les mêmes données que pour le test en VR, malgré le fait que certains paramètres pouvant influencer la difficulté dans cette manière "classique" de déplacer ne sont pas pris en compte. (ex : Angle initial de la caméra par rapport à la scène, etc...)
Évaluation de l'interaction
Les deux figures suivantes montrent des résultats pour l'expérience en VR :
Ces interactions suivent la loi de Fitts dans une certaine mesure : on remarque souvent des points aberrants, avec un temps trop grand. En effet, parfois les cobayes voulaient expérimenter la VR en essayant de jouer différemment avec les manettes, et donc certains points ne correspondent pas à une réalisation correcte de l'expérience. De plus, certains points aberrants sont dus à la période d'apprentissage du geste. Les coefficients de corrélation linéaire (R-value dans le titre du graphe) sont donc diminués par ces anomalies. Nous pouvons maintenant regarder un graphe obtenu avec l'interface classique :
L'interaction classique semble moins soumise à la loi de Fitts, d'une part car nous avons moins de données pour chaque personne, et d'autre part parce que nous avons constaté que l'interaction classique comporte des difficultés supplémentaires non prises en compte dans le calcul de l'indice de difficulté, comme cité précédemment.
Comme certains cobayes ont effectué les deux expériences, nous pouvons comparer leurs résultats sur un même graphe.
Nous pouvons voir que l'expérience classique est plus dure que l'expérience en VR, tendance qui est la même pour tous les autres sujets dont nous avons les deux jeux de données. En calculant l'indice de performance moyen pour chaque tâche, en utilisant toutes les données disponibles, nous obtenons une valeur de 0.26 bit/s pour l'interaction classique et 2.58 bit/s pour l'interaction en réalité virtuelle.
De plus, plusieurs sujets ont remarqué que le test VR était plus agréable que le test dit "classique", en raison de problèmes de perception de l'espace dans l'interface classique. On peut l'observer sur les graphes, car le nombre de répétitions de l'expérience classique est souvent plus faible que celui de l'expérience en VR.
Conclusion
Nous observons donc que la réalité virtuelle semble effectivement apporter un bénéfice dans le déplacement d'objets en 3D : on observe des résultats aussi bien quantitatifs que subjectifs en faveur de la réalité virtuelle, alors qu'il s'agissait pourtant d'une interaction nouvelle pour plusieurs des participants aux tests. Cependant il faudrait pouvoir effectuer cette expérience avec les réels utilisateurs visés pour confirmer ces résultats. En effet, étant experts dans la manipulation de logiciels de 3D, ceux-ci pourraient peut-être avoir des scores moins significatifs, ou ne pas vouloir changer leurs habitudes même si la réalité virtuelle devait se montrer plus efficace (est-il réellement pertinent de créer une interaction efficace mais dont les utilisateurs ne veulent pas se servir ?).
Concernant ce projet, les prochaines étapes pourraient être :
- Tester la séparabilité du contrôle de la rotation et de la translation. Nous avons laissé ce contrôle intégral par défaut, mais peut-être serait-il judicieux de le rendre séparable, puisque c'est le cas pour les interfaces "classiques" ? Par exemple dans le cas d'une translation très précise, la rotation que l'on pourrait effectuer en inclinant la main accidentellement pourrait être gênante... Il s'agissait d'ailleurs de la difficulté principale rencontrée par les utilisateurs lorsqu'ils devaient positionner le cube dans la cible.
- Etablir et tester les interactions permettant de réaliser les autres actions utiles à l'animation de scènes 3D (manipulation de la scène, navigation parmi les keyframes...). Puisque nous n'avons pas pu observer de consensus pour ces actions-là, il s'agit d'interactions plus difficiles à concevoir (du moins il n'existe à priori pas de solution intuitive ni évidente).