La Réalité Virtuelle (VR) apparaît de plus en plus au cœur des enjeux économiques et sociétaux. Au travers des cours théoriques, nous nous sommes intéressés aux technologies de la Réalité Virtuelle ainsi qu’à leurs usages dans le milieu professionnel. Les travaux scientifiques du domaine RV et les avancées technologiques dans l’industrie sont abordés dans le but d’inciter, nous, les étudiants, à s’intéresser davantage à la recherche et au développement de ce nouveau modèle d’application.
En groupe, nous avons travaillé sur un micro-projet à caractère R&D dont l’objectif principal est d’imaginer un concept innovant susceptible d’être implémenté en RV dédié à la une activité industrielle tel que le jeu vidéo. Afin d’y parvenir, nous avons eu besoin de définir les interfaces et les protocoles entre les composants virtuels, d’utiliser les langages et environnements de génie logiciel appropriés ainsi que d’utiliser les étapes de la conception centrée utilisateur et planifier les actions.
Afin de mettre ces principes en application, nous avons réalisé un premier rapport, au semestre 7, où nous avons décrit notre choix de l’environnement ainsi que le design final de la mascotte. Plus spécifiquement, nous avons défini les interactions et objets dans l’environnement virtuel, de plus que de proposer l’interface et les interactions à implémenter.
Lors de nos différentes réflexions sur le choix du sujet, nous avons convenu de la réalisation d’un mini jeu qui se déroulera à bord d’une navette spéciale, style ISS où le joueur est un astronaute. Ce voyageur de l’espace se réveille de sa cryogénie car le vaisseau rencontre un problème. Pour aider le joueur dans sa mission, Morphy ; un symbiote qui ne fait pas seulement guider le joueur mais qui se transforme en n’importe quel objet suivent le souhait du joueur. En effet, pour lui faire part de ce souhait, le cosmonaute doit lui donner une image où l’objet en question est représenté. Le joueur a la possibilité de trouver différentes photos à l’intérieur du vaisseau.
Afin de réaliser les différentes partie du projets, nous avons suivi un certain nombre de Travaux Pratique qui nous ont permis de prendre en main différent outil tel que :
Ces outils sont indispensables à la réalisation d’une application minimaliste. Dans le cas de la modélisation d’une application.
Notre projet a été découpé en deux phases ; La modélisation et la création de l’environnement virtuel. La modélisation avait pour objet de réaliser la mascotte à partir de rien, tant dit que nous sommes partis d’une base pour réaliser l’environnement virtuel, c’est-à-dire le vaisseau spécial à partir d’assets de présentation.
Dans le cadre de la réalisation du projet de réalisation virtuel, nous devons réaliser une mascotte qui a pour rôle d’intérimaire avec l’utilisateur. Pour ce faire, nous avons imaginé les différents éléments physiques ainsi que les différentes interactions entre la mascotte et l’utilisateur.
Nous avons baptisé notre mascotte Morphy en faisant référence au Métamorph de la série animée Pokémon. En effet, cette proposition provient du fait que notre mascotte a la capacité de se transformer et ça se fête, qu’il représente un peu sous la forme d’un symbiote.
Metamorph
Venom
Morphy
Nous sommes partis à partir de la réflexion des interactions du semestre 7 où nous avons réalisé une 1er maquette :
Pour ce faire, nous chercherons au niveau des ressources disponibles sur l’Asset Store d’Unity s’il existait déjà un modèle existant ou à faire évoluer. Malheureusement, nous avons modélisé notre mascotte sans base, car il n’existait pas de modèle gratuit à partir duquel commencer. Concrètement, nous avons réalisé notre mascotte depuis blender.
Du côté de l’apparence, nous avons choisi de conserver l’appartement visqueux de Venom aussi que sa couleur noire très brillante.
Lorsque la mascotte se déplace, les petites particules qui tournent autour du centre de la mascotte subissent un décalage, cela permet de rendre la mascotte plus naturelle. Spécifiquement, la partie extérieure suit la partie intérieure.
L’optique principale de cette partie est de permettre à la mascotte de faire son entrée en scène. En effet, l’apparition doit avoir une durée assez courte de 1 à 2 secondes.
Pour la disparition, c’est très exactement le chemin inverse.
Dans les deux car, cette action se réalise avec de plus parties particules de celle de la mascotte.
Cette partie représente la mutation de la mascotte en un objet défini et temporaire. En effet, c’est la fonctionnalité qui fait suite à l’interaction principale entre l’utilisateur et la mascotte.
La transformation de la mascotte de fait dans les deux sens ; mascotte vers objet et vice versa.
Avant de commencer le visuel de la mascotte, il est nécessaire de définir la limite que la forme organique ne doit pas sortir. Pour ce faire, nous avons ajouté un objet Icosphere qui est composé entièrement de côtés plats. Cela permet d’optimiser le calcule sur cet objet lors de son utilisation. De plus, il faut bien garder en tête que cette forme ne sera pas visible.
Afin de réaliser notre mascotte, nous sommes parties du principe de créer une forme organique, même, un peu une représentation de semi-fluide. L’objet Metaball qui est de base sur Blender qui va permet de réaliser des duplications de cette dernière comme référence pour former le corpus de Morphy.
À partir de ce moment, on ajoute un système de particule sur l’Icosphere, où la Métaball sera l’instance qui sera dupliquée à l’intérieur de Icosphere avec une échelle inférieure. Le nombre et la taille des duplications dépendent du taux de remplissage de l’Icosphere, et ce, afin de trouver un compromis entre la surcharge de matières à l’intérieur et de voir entraver la mascotte.
Pour faire la partie externe, il est nécessaire de re-réaliser les parties par-dessus le résultat modélisé jusqu’à maintenant, mais de façon adaptée. En effet, commence par faire une nouvelle limite du corps, puis continue avec les indications de la partie corps central statique où l’objet mère Metaball reste identique aux deux corps. La duplication est de plus petite taille avec un nombre réduit de particules.
Une fois l’apparence terminée, il est ne resté plus qu’à ajouter le côté dynamique à Morphy. Pour ce faire, nous avons ajouté un objet vide qui nous a servi de référence. En effet, cette référence a permis de lors de rotation de d’entrainer des mouvements sur des corps interne et externe de la mascotte.
Afin d’intégrer Morphy dans l’environnement, nous avons choisi de l’exporté de Blander vers Unity au format Alembic. Ce format intègre les données d’animation dans un fichier, de sorte que nous pouvons diffuser l’animation dans Unity directement à partir du fichier. Sans oublier que cela permet d’économiser une quantité importante de ressources, car la modélisation et l’animation ne se font pas directement dans Unity.
Afin de réaliser la transformation de Morphy, nous troquons Morphy par un objet défini (tournevis, marteau, …) et vice versa. Dans le but d’effectuer la transition, nous utilisons un état de transition assez spectaculaire et rapide grâce à une nouvelle énergie.
Cette boule d’énergie est réalisée par l’intermédiaire d’Unity. En effet, sur le moteur de jeu, l’objet en question parle de Visual Effect Graph (VFX) qui fait référence au système de particule de blender, en solution temps réel.
Du côté un peu plus pratique, nous avons choisi de créer une émission d’énergie.
Dans cette partie, l’apparition se fait par l’intermédiaire des effets VFX. En effet, la solution apportée est basée sur le même principe que la transformation de Morphy en objet. Ainsi, nous partons du vide pour former Morphy dont nous avons choisi de réaliser un système de particule qui concentre en un point central de l’énergie.
Du côté de disparition, c’est la même chose mais du sens inverse. C’est-à-dire que Morphy disparaît par dissipation de l’énergie, du point central vers l’extérieur.
Pour pousser l’expérience de réaliser virtuel vis-à-vis de la mascotte, nous avons développé des scriptes afin de favoriser certaines intégrations, entre autres :
Lors de la modélisation, nous avons perdu pas mal de temps à exporter la mascotte vers Unity, car le format de fichier préconisé pendant les cours (FBX) ne permettait pas d’utiliser les systèmes de particules. En effet, les particules sont une animation simulée, Blender calcule les positions pour chaque image. Pour transférer une simulation de Blender à Unity, il faudrait faire une image clé de l’emplacement de chaque particule et importer ces animations dans Unity, sans oublier de transformer ces objets en mesh.
Au niveau de la solution apportée par le format Alembic, blender fait un rendu qu’il est possible d’exporter en animation si les objets sont déjà créés. Donc il nous a été impossible de créer les animations d’apparition et de transformation de la mascotte depuis blender.
L’environnement que nous avons choisi se base sur une station spatiale, et plus particulièrement l’ISS que nous avons décrit au semestre 7. Lors de nos recherches, nous avons trouvé un environnement qui représente, à quelque détail près, le visuel que nous voulions représenter.
Lors de notre projet, nous avons dû réaliser certaines interactions avec l’environnement. En effet, comme expliqué dans la partie contexte du projet, le joueur incarne un astronaute qui sort de sa cryogénisation. Il se retrouve face à notre mascotte nommée morphy, lorsque tout à coup, un problème apparaît dans le vaisseau. Le joueur a alors plusieurs objectifs à réaliser :
Pour réaliser ces objectifs, le joueur pourra attraper les objets tels que la vis, la photo ou encore le tournevis. Il pourra se déplacer dans le vaisseau à sa guise. Lorsque la photo touche morphy, ce dernier se transforme. Lorsque la vis est remise, cette dernière se bloque jusqu’à ce que le joueur arrive avec le tournevis pour la visser. Pour visser la vis, le joueur a simplement à approcher le tournevis de la vis, et celle-ci se vissera toute seule. Le joueur devra néanmoins rester proche de la vis avec son tournevis pour qu’elle continue à être vissée.
Sur Unity, nous avons utilisé le plugin XR Interaction Toolkit. C’est un plugin fourni par Unity qui permet les fonctions de base en XR. L’application se lance donc depuis l’Oculus Link quand on est sur un PC. Avec ce plugin on peut notamment utiliser l’application pour différents casques comme avec SteamVR.
Au départ, nous avions un environnement simple avec un Render Pipeline simple. Ainsi, nous avons utilisé SteamVR qui permet de réaliser un environnement et des interactions très rapidement. Cependant, après avoir trouvé notre environnement actuel, nous avons changé pour XR Interaction Toolkit. Dans un précédent projet, nous avions utilisé SteamVR avec des éléments HDRP et n’ayant pas les connaissances suffisantes, nous avions des soucis de shaders roses. De là, nous avons trouvé une solution : changer de SDK. Mais cela nécessitait d’apprendre un tout nouveau système… Après cela, nous avons adapté les scenes Unity de l’environnement récupéré pour pouvoir le lancer en VR.
Dans la première partie du projet, concernant les interactions avec l’environnement, tout s’est plutôt bien passé. Cependant, il y a tout de même un problème qui a été rencontré. En effet, lorsque le joueur vissait la vis, à la fin, je faisais disparaître le tournevis, sauf que cela faisait aussi disparaître la main du joueur. Finalement, le problème a pu être résolu.
Dans la deuxième partie du projet, nous avions voulu rajouter un canvas au niveau d’une des mains pour faire plus d’interactions. Mais nous avons eu un conflit avec l’environnement et nous n’avons pas pu trouver la solution à temps.
Nous avons globalement éprouvé une satisfaction sur la fin du projet. Le fait que les différentes interactions fonctionnent et que l’adaptation du nouvel environnement a été une réussite. Cela peut donner des opportunités pour la suite de l’apprentissage de cette technologie. Nous pensons que l’on aurait pu faire encore plus avec l’environnement que nous avons eu. Quand on regarde le travail derrière un environnement comme celui que nous avons utilisé, il reste de nombreuses facettes qu’Unity propose et qui peuvent être utilisables. On a aussi remarqué qu’Unity possède une importante communauté autour de la VR et que cela a grandement permis de résoudre les problèmes que nous avons eu.
Pour finir, nous pensons que ce projet est vraiment un moyen de mettre en œuvre nos compétences en programmation et notre créativité afin de proposer des interactions innovantes.