Projet Peip2 Vélo RV

Bonjour à tous !

Notre groupe d’étudiants en seconde année de classe préparatoire à Polytech Angers est composé de Victor DEBUIRE, Amaury MENAGE, Victor LODA et Titouan ROUSSEAU. Nous avons ensemble réalisé un parcours animé pour vélo en réalité virtuelle.

Contexte : L’utilisation de la réalité virtuelle (VR en anglais) s’étant de plus en plus et touche de nombreux domaines (médical, industriel, tourisme, défense, génie civil, jeux vidéo, etc.). Dans ce projet, nous nous sommes penchés sur le rôle qu’elle peut jouer dans l’expérience de consommation. En effet, en présentant un lieu à visiter à travers un casque VR, on peut étudier les réactions d’un consommateur et en déduire par exemple son attractivité.

Objectif : L’objectif initial était donc de créer numériquement un circuit à parcourir à vélo, constitué d’une série d’événements (passants, circulation, animaux, sons), puis de le faire tester à des clients potentiels, et d’étudier comment sont initiées leurs réactions comportementales et quelles sont les influences sur leurs sensations (surprise, joie, peur) pour pouvoir appréhender les émotions ressenties et les changements d’attitude.

Outils : Pour construire l’environnement virtuel, nous avons utilisé Unity3D, un casque Oculus Quest 2 et nos animations ont été codées avec Visual Studio.

Déroulé du projet : Tout d’abord, il a fallu que nous répartitions nos heures entre les différentes étapes du projet ;

  • Prise en main du logiciel Unity
  • Choix des animations à mettre dans notre parcours
  • Evolution en VR
  • Perfectionnement pour rendu final
  • Visualisation du contenu par les clients
  • Recueil des résultats

Nous avons donc commencé par apprendre les bases d’Unity3D grâce à de la documentation et des TD fournis par M.RICHARD, notre encadrant de projet. D’abord l’aspect graphique, puis la physique des objets et enfin le codage.

Test de la physique des matériaux sous Unity3D

Test de la physique des matériaux sous Unity3D


Exemple de code pour déplacer un objet avec la souris

Exemple de code pour déplacer un objet avec la souris

Ensuite, nous avons ensemble choisi l’animation que chacun allait faire. Titouan s’est occupé d’un groupe qui joue de la musique et de ses sons, Victor L du vélo et du parcours, Amaury des passants et des voitures, Victor D du parc et des oiseaux. Voici quelques exemples du résultat :

Voici une des espèces d’oiseaux présente dans le parc de notre ville. En approchant à vélo, on peut entendre de plus en plus clairement leurs chants, et en voir quelques-uns voltiger près de nous. Pour cela, Victor D a utilisé des assets (des packs de contenu) contenant des oiseaux et des chants présents sur le site d’Unity, et a désigné certains espaces comme box colliders (espace défini comme infranchissable, durs, réels) dans la ville, pour que les oiseaux puissent s’y poser. Les mouvements effectués par les oiseaux suivent un algorithme.

Oiseau qui chante et bat des ailes dans le parc

Oiseau qui chante et bat des ailes dans le parc

Pour ce qui est de l’animation des passants dans la ville, cela s’est fait en deux étapes. Tout d’abord, nous avons utilisé le site Mixamo, un site contenant une multitude d’animation possibles pour des projets unity ainsi que de nombreuses textures de personnages différentes. Amaury a donc téléchargé depuis ce site des animations de personnages qui marchent afin de rendre la ville vivante. La deuxième étape était de définir le trajet de ces passants. Pour cela, nous avons utilisé le NavMesh : une fonctionnalité du logiciel Unity qui permet grâce à un algorithme de définir automatiquement les zones où les personnages choisis (appelés NavMesh agents) peuvent se déplacer librement et les zones qui représentent un obstacle physique (mur, trou, …). Pour cette étape, il y a eu d’abord une phase de test sur un projet Unity à part pour être à l’aise avec le NavMesh, puis la retranscription sur la ville finale.

Test de mouvements de passants

Test de mouvements de passants

Lors du brainstorming concernant les stimuli que nous souhaitions intégrer TiTouan a eu l’idée d’ajouter un groupe de musique. L’idée étant de jouer sur le volume et le panning du son afin de créer une sensation de son en 3 dimensions : plus l’utilisateur se rapproche du groupe de musique plus le volume est fort, et selon la position de celui-ci le son est orienté plus à droite ou à gauche.

Afin d’accentuer le réalisme, le son de la guitare électrique émane directement de l’amplificateur et le son de la batterie directement d’elle-même. Titouan a créé des audios sources qu’il a paramétrées de telle sorte à ce que selon la position de la caméra l’audio soit réaliste : l’effet doppler entre en jeu et les sons paraissent plus aigus à distance ; de plus au fur et à mesure que la caméra approche le volume des sons augmente progressivement.

Les personnages et animations qui ont été utilisés proviennent du site Mixamo d’Adobe, et les objets eux sont libres de droits et proviennent du site Sketchfab. Les personnages jouent en boucle leurs animations dès que la simulation est lancée, pour cela un animator a été créé pour chaque personnage ; Titouan a assigné à chacun l’animation correspondante et cochée la case loop. Il en est de même pour la musique, la case loop est cochée dans les paramètres des audios sources : elles jouent dès que la simulation est lancée et sont donc synchronisées ensembles.

Explications - Titouan

Représentation 3D de la zone du son

Explications - Titouan_2

Algorithme dirigeant le son

Afin de reconstituer une balade à vélo dans notre ville virtuel, Victor L a recherché dans le store Unity une modélisation 3D d’un vélo. Une fois le vélo implémenté dans la ville, la caméra a été modifiée pour lier la vue de l’utilisateur au vélo. De plus, la caméra a été rendue orientable à 360 degrés, pour suivre les mouvements de tête de l’utilisateur à l’aide du casque VR.

Explications - VictorL

Vue du vélo

Puis est venu le moment de tester la VR. Comme pour Unity, il fallait avant tout comprendre son fonctionnement, pour ensuite incorporer le casque et l’environnement VR à notre parcours. Nous avons donc essayé certains tutoriels de déplacement et de visuel, malheureusement nos ordinateurs n’étaient pas assez puissants pour supporter notre projet et il existait des problèmes de compatibilité entre Windows et le casque mis à notre disposition. Par manque de matériel adapté, il nous a fallu oublier cet aspect du projet.

Finalement, nous avons pris la décision de nous concentrer sur l’aspect propre du projet pour rendre quelque chose de visuellement attractif et qu’il soit possible d’explorer en VR éventuellement plus tard si possible. Nous avons donc changé de ville pour une beaucoup plus grande, et chacun à perfectionné ce qu’il avait déjà réalisé.

Voici quelques images du rendu final du projet :

Ville à visiter à travers notre parcours

Ville à visiter à travers notre parcours

À l’aide de plusieurs modèles de villes, de route et d’objets, Victor D a recréer entièrement une partie de quartier, où il a notamment placé le parc. Pour cela, il a repris des parties déjà existantes et les a replacés à un endroit avec peu d’activité dans la ville. Le parc a été implanté au milieu de ce nouveau quartier et Victor D a raccourci les trottoirs pour que l’on voie mieux la terre, ce qui rend le tout plus vivant et plus réaliste.

Partie du quartier ajouté à la ville d'origine

Partie du quartier ajouté à la ville d’origine

Une fois le parc placé et la ville finalisée, nous avons pu placer les personnages. Pour cela, nous avons choisi différentes animations et différents personnages sur le site Mixamo. Une partie des piétons sont fixes et répètent leur animation en boucle (les personnages faisant du sport dans le parc), les autres en revanche sont mobiles et étaient donc plus compliqués à placer. En effet, Amaury a dû suivre un tutoriel pour créer le script permettant de faire marcher les personnages dans la rue. Nous avons donc fait en sorte que les personnages avancent tout droit en continu et que lorsqu’ils rencontrent un obstacle, ils fassent demi-tour.
Pour que les personnages (maintenant définis comme navmesh agent) puissent détecter les zones autorisées et les obstacles, nous avons utilisé le navmesh. Toute la route et les trottoirs sont des zones autorisées, le reste des éléments de la ville sont des obstacles.

Définition de l'espace où les personnages peuvent se déplacer

Définition de l’espace où les personnages peuvent se déplacer

Dans un souci d’amélioration des détails et afin d’accentuer le réalisme Titouan a tenu a différencié les paramètres des audios sources de la guitare et de la batterie : la portée du son émanant de la batterie a été augmentée, car ce sont des sons secs et graves qui se propagent à 360° là où le son de la guitare est seulement propagé depuis l’amplificateur.

De plus, Titouan a décidé de composer lui-même la musique jouée par le groupe. Cela a permis d’ajuster la reverb afin de rendre le rendu encore plus réaliste étant donné que le groupe joue dans une rue encerclée d’immeuble où la réverbération des sons doit être importante.

Explications - Titouan_3

Vue de la zone son dans le quartier

Explications - Titouan_4

Orchestre

Pour créer l’itinéraire du vélo à travers la ville, nous avions plusieurs options : utiliser les box colliders, créer un itinéraire scripter avec des coordonnées, ou utiliser un nouvel asset appelé “Path Creator”, un créateur d’itinéraire pour les objets. Après avoir étudié et testé les trois options, Victor L a choisi le Path Creator. L’outil Path Creator nous permet de créer une ligne en 2 ou 3 dimensions dans Unity. Une fois cette ligne créée, nous pouvons utiliser un script pour déplacer des objets le long de cette ligne. Victor L a donc lié le vélo au chemin et a codé un script pour déplacer le vélo dessus. En gardant à l’esprit que le script devra plus tard être adapté à la pédale d’un vélo.

Explications - VictorL_2

Vue d’ensemble du parcours vélo

Conclusion : Dans l’ensemble, nous sommes très contents de ce que nous avons réussi à réaliser sous Unity3D. Nos connaissances dans le domaine de la programmation et de la Réalité Virtuelle se sont grandement élargies, et tant l’aspect créatif que scientifique ou technique ont beaucoup plus à chacun de nous. Certes, les complications liées au COVID et au travail à distance ne nous ont pas permis de concrétiser nos objectifs jusqu’au bout, mais cela ne nous a pas empêchés de réaliser beaucoup de choses. Notre groupe tient finalement à remercier M.RICHARD et M.LEVEAU pour leur participation.

Projet Peip2 : Dépollution, un serious game basé sur Unity3D

Logo du jeu - Dépollution

Logo du jeu – Dépollution

    Bonjour chers lecteurs et lectrices,

Nous sommes trois étudiants du second cycle préparatoire de Polytech Angers, Alexandre, Arthur et Veton. Durant notre quatrième semestre, nous devions travailler sur un projet de conception pour un total de 80h. Nous avions choisi celui qui portait sur la mise en sécurité d’un site industriel pour l’intérêt qu’il offrait à la fois sur les filières BEMS et SAGI par le biais des contrôles de sécurité sur un site industriel et sur l’utilisation d’un moteur graphique. Dépollution est un serious game basé sur Unity 3D.

Photo de groupe De gauche à droite : Veton G., Arthur C. et Alexandre B.

Photo de groupe
De gauche à droite : Veton Gashi, Arthur Cochennec et Alexandre Bataille

  • Notre objectif

    Le but de ce projet est d’apprendre à reconnaître les différents polluants et dangers que nous pourrions trouver sur un site industriel désaffecté et de pouvoir évaluer leur dangerosité. Le joueur devra utiliser la solution adéquate pour décontaminer chaque composant sensible du site suivant les mesures qui lui seront annoncés.

    Le jeu se veut à la fois sérieux et ludique, principe du serious game en anglais. Vous jouerez le rôle de l’ancien directeur dont son but consiste à nettoyer toute la zone dans un temps imparti.

    Avec cette article nous voulons vous présenter comment nous en sommes arrivé là. D’une part, nous avons découpé le travail en trois parties: la conception du terrain, le codage et la collecte de données. Pour le dernier, nous n’en parlerons que brièvement. Il ne s’agit que de recherches approfondies sur les différents produits et matériaux toxiques que l’on peut retrouver dans une centrale.

  • Le level design

    Petite aparté, le level design consiste en la création des niveaux et l’environnement présent(s) dans un jeux vidéos ainsi que ses éléments décoratifs.

    Dans notre cas, nous avons décidé de démarrer sur une île pour sa simplicité aux niveaux des bordures (la carte étant entourée d’eau) et qui est plutôt grande afin de créer différentes zones.

    Capture d'écran de notre usine sur Unity 3D

    Capture d’écran de notre usine sur Unity 3D


    L’usine présente un complexe industriel similaire aux centrales à charbon déjà existantes. Nous avons choisi une usine à charbon plutôt qu’une centrale nucléaire par exemple, parce que celle-ci présente davantage d’éléments polluants de risques différents et plus ou moins dangereux pour l’homme et l’environnement.

    Capture d'écran de la carrière sur ledit logiciel

    Capture d’écran de la carrière sur ledit logiciel


    Nous souhaitions rajouter une carrière afin d’ajouter un autre univers lié à l’exploitation des ressources naturelles, ici celle du charbon.

    Capture d'écran du lac (Unity 3D)

    Capture d’écran du lac (Unity 3D)


    Enfin, nous avons créé un lac pour le refroidissement de la centrale, lui-même lié à la carrière via l’écoulement des eaux.

  • Le game design

    Le game design quant à lui décrit tout ce qui se rapporte aux règles du jeu, à l’élaboration des mécaniques de gameplay, à la physique des éléments et bien plus.

    Celui-ci se résume au codage que nous avons fait avec le langage C#. Le codage est sans aucun doute la partie la plus fastidieuse et la plus complexe du projet.

    D’une part, nous avions choisi de commencer par l’élaboration d’un cycle jour/nuit ainsi qu’un chronomètre. Très vite, nous avons remplacé le second par une barre de vie qui diminue au fil du temps et qui décélère plus le joueur arrive à dépolluer correctement. Nous avons ensuite ajouté une fenêtre de fin pour indiquer que le joueur a réussi sa mission et a contrario, un game over. Puis nous avons fini sur les éléments toxiques, avec des interactions pouvant ajouter une couleur en fonction du bon ou du mauvais choix qui a été émis.

    Voici une petite présentation du jeu en vidéo :

  • Les problèmes rencontrés

    Nous avions rencontré quelques problèmes au cours de nos sessions de projet. Avant toute chose, nous devions nous approprier le logiciel Unity3D à l’aide du cours de M. Richard et le projet initial mis à disposition par M. Capelle, nos deux professeurs référents. Malheureusement, nous n’avons pas reçu la partie xml du fichier sur laquelle nous devions nous reposer afin de générer un texte automatique.
    À cela s’ajoute la corruption de données dû aux mises à jour. Il était donc important de vérifier que nous avions la bonne version de Unity, celle avec laquelle nous avions commencé la première fois. D’autre part, le jeu est assez volumineux et pas bien optimisé ce qui rajoute de la latence lorsque nous voulons ajouter de la flore sur la carte, comme des arbres par exemple ou bien de l’eau en mouvement. Ainsi, nous avons dû nous dispenser de ces idées pour la conception du terrain.

  • Ce que nous retenons de ce projet

    Le projet était en somme très attrayant, nous avons pu découvrir les différentes étapes lors de la conception d’un jeu vidéo, mais aussi comprendre le fonctionnement d’un moteur graphique. Également, ce projet nous a permis d’approfondir nos connaissances au niveau de la programmation avec des exemples concrets comme la création d’un game over.

    La partie sur l’élaboration du terrain demandait assez de minutie et de patience mais le rendu final était au delà de ce que nous nous imaginions. L’environnement est soigné, détaillé et les textures sont de plutôt bonne qualité.

    D’un point de vue global, ce projet nous a permis de progresser sur notre manière d’appréhender un travail de groupe, sur la diffusion des connaissances et sur notre organisation.

    EVA : Extra – Vehicular Activity

    Bonjour à tous !

    Notre groupe, composé de Victor Fourgeoux, Quentin Dubois et Mathieu Laisné, tous étudiants en PEiP-2, a réalisé une station spatiale en réalité virtuelle afin d’expérimenter l’Activité Extra-Véhiculaire (ou Extra-Vehicular Activity en anglais).

    Pour ce faire, nous avons utilisé le moteur de jeu Unity3D ainsi que le langage de programmation C#.

      OBJECTIFS

    Notre objectif principal était de réaliser une station spatiale, semblable à l’ISS, afin de pouvoir la visiter à l’intérieur, comme à l’extérieur. Au fil du projet, nous nous sommes rajoutés de nouveaux objectifs afin de rendre le projet plus interactif et immersif.

    Nous devions aussi :

  • Faire un menu au démarrage du jeu permettant d’évoluer à l’intérieur ou l’extérieur.
  • Permettre le déplacement du joueur en extérieur en s’agrippant à des poignée.
  • Permettre la réparation de pièce cassée à l’extérieur de la station.
  • Permettre le déplacement entre l’extérieur et l’intérieur de la station.
  • Donner vie à l’intérieur de la station.
    Vue Extérieure de la station

    Vue Extérieure de la station

      CRÉATION DE L’INTÉRIEUR

    Afin de créer l’intérieur de la station, nous avons créer une première scène. Une scène, dans Unity, est semblable à un niveau dans un jeu-vidéo; on peut y placer différents objets, programme, personnages, etc.
    Pour former l’intérieur, nous nous sommes basé sur un plan que nous avons au préalable réalisé sur papier. Ensuite, en utilisant des “packages” nous avons assemblé des modules. Les packages sont des ressources (modèle 3D, 2D, ou programmes) réalisés et mis à disposition par les utilisateurs du moteur. Le package que nous avons utilisé nous a été fournit par Paul Richard.

    Nouveau couloir

    Nouveau Couloir

    Après cela, viens l’agencement de l’intérieur et la création de patrouille dans la station. Nous avons utilisé des personnages pré-fait (Astrella et Adam) qui sont disponibles dans l’Asset Store d’Unity. Nous y avons ensuite ajouté des programmes les dictant une routine à réaliser.

    Hall Intérieur

    Hall Intérieur avec les personnages


    Ensuite nous avons du rajouter la réalité virtuelle, qui est gérée par un package fournit par Oculus, afin de permettre l’intégration du casque Oculus Rift. Ce package est suffisant pour gérer les mouvements en présence de gravité et permet aussi d’attraper les objets que l’on désigne “grabbable”.

    Enfin, nous avons créé un script en C# permettant de sortir de la station en rentrant en contact avec une combinaison. Celà se traduisait par un changement entre la scène “Intérieur” et “Extérieur”.

    Combinaison pour sortir

    Combinaison pour sortir

      CRÉATION DE L’EXTÉRIEUR

    Extérieur de la station

    Extérieur de la station


    Pour créer l’extérieur de la station nous avons créé une seconde scène. Dans cette dernière nous avons importé des packages fourni contenant des modules de station. Nous avons ensuite dessiné un plan sur papier pour choisir la forme que prendrait notre station. Ensuite, nous avons dû placer tout les modules disponibles en suivant notre plan pour créé notre vaisseau.

    Ensuite, pour permettre le mouvement sans gravité par le biais de jets packs, nous avons dû modifier les programmes fournis par Oculus. Nous y avons aussi ajouté la gestion des réservoirs d’oxygène ainsi que de carburant. De cette manière, l’oxygène diminue en fonction du temps jusqu’à un seuil critique, et le carburant diminue quand le joueur utilise les joysticks. Cette perte est visualisable grâce à deux barres, semblables aux barres de vie dans les jeux-vidéos.

    Barres d'oxygène (en haut) et de carburant (en bas)

    Barres d’oxygène (en haut) et de carburant (en bas)

    Finalement, nous avons créé un script permettant de s’accrocher à des poignées afin de se tirer le long de la station, ainsi que plusieurs script permettant la réparation de pièces ou leurs remplacement dans l’espace après avoir appuyer sur une touche.

    Une partie du script gérant les poignées

    Script appliqué aux poignées, permettant leur utilisation

    Concernant l’EVA, nous avons permis au joueur de pouvoir remplacer des panneaux solaires cassés autour de la station. Pour les réparer le joueur doit s’en approcher, puis une instruction s’affiche et indique au joueur de rester appuyer sur un bouton des Controllers. Et après 2 secondes, le panneau se répare.

      GESTION DES COLLISIONS

    Enfin, nous avons dû gérér les collisions. Les collisions sont une partie très importante dans la conception de jeux-vidéos. En effets, des collisions mal gérées peuvent créer des bugs, notamment le joueur traversant les objets et le sol.
    Normalement, lors de la création de modèles 3D avec des logiciels tel que 3ds Max, un Mesh est créé. Ce mesh, qui est donc un ensemble de triangles dans l’espace, permet ensuite de faire un collider. Le collider permet donc la collision soit en extérieur (en convexe) soit en intérieur, comme avec des couloirs.

    Collider d'un Module

    Collider d’un Module

      MENUS ET CHARGEMENT

    Pour finir, nous avons relié l’intérieur et l’extérieur avec un menu permettant de choisir si nous voulons lancer le jeu dans l’intérieur, dans l’extérieur ou quitter.

    Menu au lancement

    Menu au lancement


    Ceci consistait à créer une nouvelle scène de menu en 2D, qui permettait au joueur de cliquer avec sa souris sur les 3 options qui lui était proposé. Après avoir choisit l’espace où il allait évoluer, le joueur n’as plus qu’à enfiler le casque Oculus Rift et la simulation commence !

    photo eva

      CONCLUSION

    Notre résultat final est assez conforme à nos attentes et à nos buts. Malgré quelques “bugs” autour du déplacement grâce aux poignées, tout les mouvements en 0G sont semblables à la réalité. L’implémentation de l’Oculus Rift est aussi réussie, ainsi que les différents changements d’environnement (menu, intérieur & extérieur). Nous remercions M.RICHARD pour son aide apportée à notre projet.

    Projet animation Robot InMoov !

    Bonjour à tous !

    Nous sommes, Adrien et Alexandra, 2 étudiants en deuxième année de cycle préparatoire à l’ISTIA (école d’ingénieurs de l’université d’Angers) et aujourd’hui nous allons vous présenter notre projet de conception.
    Tout d’abord qu’est-ce que ce le robot InMoov ?
    extrait du site http://inmoov.fr/gallery-v2/

    extrait du site http://inmoov.fr/gallery-v2/

    InMoov est un robot humanoïde simple que vous pouvez imprimer en 3D de chez vous ! Toutes les pièces sont téléchargeables sur son site et il ne vous reste plus qu’à le monter !

    Mais pour nous le projet consistait à télécharger ces pièces, les assembler sur le logiciel Blender puis l’animer au sein de Unity 3D. Et en objectif final de notre projet de créer une banque de données pour permettre à des 4èmes du collège Rabelais de le personnaliser en changeant ses couleurs à volonté.

  • Assemblage des différentes pièces du Robot sous Blender
  • Nous avons eu la chance de pouvoir récupérer une partie de l’assemblage auprès de M.Richard notre tuteur, ce qui nous a permis de gagner un peu de temps, ainsi nous n’avons eu besoin que de lui rajouter son dos.

    Assemblage dos Robot InMoov

  • Animation sous Unity 3D
  • C’était la partie la plus importante et la plus conséquente de notre projet. En effet, après une étude rapide de son anatomie et en consultant notre tuteur, la décision a été prise de l’animer avec des forces par le biais de joints entre chaque partie de son corps. Comme Unity 3D est un logiciel qui permet de recréer un univers virtuel, l’ajout de forces sur son corps à certaines limites. Rien que le fait de le faire tenir debout et de compenser la force de gravité n’est pas une mince affaire ! Mais nous avons tout de même réussi à lui faire faire des mouvements simples,comme bouger la bouche pour simuler la parole, bouger la tête ou encore lever les bras.

    Animation Robot InMoov

  • Personnalisation du robot
  • Pour finir, nous avons mis à disposition une banque de matériaux (principalement des couleurs et des textures) pour pouvoir personnaliser l’aspect extérieur au goût de chacun !

    Personnalisation Robot InMoov

    Si vous souhaitez avoir plus d’information sur notre démarche n’hésitez pas à nous contacter (alexandra.dion@etud.univ-angers.fr ou adrien.mortreau@etud.univ-angers.fr)

    Merci pour votre intérêt et bonne journée à vous !