Introduction

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.

Contexte du projet

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 :

  • Unity : Cet outil est décrit comme être un Moteur de Jeu. Il fournit un environnement de développement d’applications multiplateformes. 
  • Langage C# : Unity prend en charge le C# qui lui permet au concepteur de pouvoir créer un script spécifique. En effet, les composants intégrés dans Unity sont très polyvalents, mais ne permettent pas de réaliser des fonctions complexes ou un enchaînement de fonctions. Alors que ce langage, quant à lui, le permet.
  • Des assets : Ce sont des ressources qui seront réutilisables dans différents projets. Cela permet d’économiser du temps et des efforts considérables aux créateurs de solution. Ces ressources peuvent être utilisées telles qu’elles ou être modifiées selon le souhait du développeur.
  • Blender : est un logiciel de modélisation, qui dans le cadre de conception d’une application sur un moteur de jeu, permet de modéliser des objets 3D avec quelques animations exportables sur unity. Il peut aussi permettre au concepteur de modifier des objets récupérés des ressources libres de l’asset store d’unity.

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.

Réalisation de la mascotte

1. Introduction

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

2. Procédure de modélisation

2.1 Maquette de la mascotte

Nous sommes partis à partir de la réflexion des interactions du semestre 7 où nous avons réalisé une 1er maquette :

2.2 Caractérisation

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.

Composition

Du côté de l’apparence, nous avons choisi de conserver l’appartement visqueux de Venom aussi que sa couleur noire très brillante.

Déplacement

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.

Apparition & disparition

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.

Transformation

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.

2.3 Définition du corps

Limite du corps

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.

Objet mère

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.

Corps central statique

À 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.

Corps externe statique

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.

Rendre dynamique

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.

2.4 Importation sur l'environnement virtuel

Intégration de la modélisation

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.

Définition de la transformation

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.

Définition de l'apparition/disparition

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.

Scripting

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 :

  • La transformation
  • L’apparition/disparition
  • Le déplacement

2.5 Problèmes rencontrés

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.

3. Réalisation de l'environnement virtuel

3.1 Point de départ

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.

3.2 Interaction avec l’environnement

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 :

  • Aller remettre la vis tombée
  • Chercher une photo d’un tournevis
  • Donner la photo à morphy
  • Récupérer morphy qui s’est transformé en tournevis
  • Aller visser la vis

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.

3.3 Utilisation du casque VR

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.

3.4 Evolution de l'environnement

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.

3.5 Problèmes rencontrés

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.

Conclusion

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.