Vertigo Experience

Expérience en réalité virtuelle développée sur Unreal 5.5

2025


0:00
0:00

Langage :

Blueprint

Rôles :

Lead programmation

Participation Game design / User Experience

Durée :

Projet sur 5 semaines

Equipe :

Equipe de 9 personnes

Concept :

Vertigo est une expérience VR mêlant contemplation,

énigmes légères et sensations de vertige.

Le joueur commence dans une reconstitution de la salle

307, puis explore plusieurs pièces, chacune proposant

une épreuve liée au vertige.

Entre chaque énigme, il traverse des espaces mettant

en valeur les filières de l’école (Game, Animation, DA),

avec des galeries immersives présentant des travaux

étudiants.

Pensée pour être intuitive et accessible, l’expérience

dure environ 10 minutes et mise sur un fort impact

visuel et sensoriel.


Gestion de scène :

Nos besoins

Dans Vertigo, l’expérience repose sur une succession de salles en réalité

virtuelle.

Nous devions enchaîner plusieurs scènes dans un ordre précis, tout en

respectant plusieurs contraintes clés liées à la VR :

  • Transitions fluides : Pas de chargements visibles, pas de coupures brutales, les changements de scène devaient être naturels et intégrés dans l’expérience.
  • Lighting indépendant : Chaque salle devait posséder son propre éclairage précalculé pour garantir à la fois performance et qualité visuelle, indispensable en VR.
  • Clarté de production : Travailler à plusieurs sur différentes parties du projet exigeait une structure modulaire claire, pour répartir les responsabilités (gameplay /énigmes, observation).
  • Flexibilité : Il fallait pouvoir facilement ajouter, retirer ou modifier des salles sans tout recompiler, ni casser l’ordre de progression.
{{brizy_dc_image_alt imageSrc=

La réponse, un système modulaire et scalable

Pour répondre à ces besoins, j’ai mis en place une architecture de gestion de scènes basée sur le level streaming dans Unreal Engine 5.5, combinée à une logique de transition orchestrée dans le Level Blueprint principal.

  • Utilisation du Level Streaming via Sublevels pour chaque salle (énigmes et galeries).
  • Chaques salle est un sous-niveau indépendant, chargé et déchargé à la volée.
  • Permet un lighting précalculé de manière efficace.
{{brizy_dc_image_alt imageSrc=

Gestion centralisée des transitions avec un blueprint customisé.

Celui ci comprend une fonction LoadScene avec des règles de chargement (LoadOnly, UnloadThenLoad, LoadThenUnload, OnlyUnload...) avec un

choix du niveau à charger ou à décharger très simple d’utilisation.

{{brizy_dc_image_alt imageSrc=

Les scènes sont répertoriées dans un Enum E_Scene, ce qui permet d’ajouter, charger et décharger dynamiquement n’importe quel niveau.

Et en jeu

À la fin de chaque salle, une chaîne suspendue apparaît devant le joueur. En la tirant, il déclenche un effet visuel, la lumière semble s'éteindre.

C'est en fait un simple fondu au noir.

Le niveau actuel est déchargé proprement, puis le niveau suivant est chargé dynamiquement .

Une fois le nouveau niveau prêt, un fondu inverse réactive la lumière,

pour replonger le joueur naturellement dans l’expérience.

{{brizy_dc_image_alt imageSrc=

Résultat : Un système fluide, invisible pour le joueur, qui enchaîne les salles sans rupture et conserve l’immersion VR.


Coté Gameplay :

Template VR Unreal

J’ai choisi de partir sur le template VR d’Unreal Engine, qui ore une base solide (tracking des mains, interaction physique, gestion du casque, etc.).

Cela m’a permis de gagner du temps tout en assurant une intégration stable et performante.

J’ai tout de même apportés quelques modifications :

  • Suppression de la téléportation, inutile dans notre expérience fixe.
  • Ajout d’un input de recentrage du joueur, pour ajuster facilement sa position sans recalibrage.
  • Ajout de colliders physiques sur chaque doigt, pour détecter des interactions fines avec les éléments du décor (boutons, objets d’énigme, etc.).

Énigme 1 – Reconstitution de la salle

Pour cette première énigme, nous voulions une séquence marquante mêlant vertige, observation et interaction directe : le joueur se retrouve isolé sur une plateforme suspendue au-dessus du vide, avec une salle fragmentée en morceaux autour de lui.

Son objectif : Reconstituer progressivement la salle en plaçant correctement des pièces de puzzle physiques sur un plateau central.

  • Le joueur peut les attraper avec ses mains grâce à des collisions précises sur chaque doigt.
  • Chaque pièce déposée déclenche une animation qui la positionne proprement sur le plateau.
  • A chaque succès, un fragment de la salle revient à sa position initiale, créant une boucle de reward claire, immersive et motivante.
{{brizy_dc_image_alt imageSrc=

L’énigme repose sur une architecture simple mais e²cace, articulée autour de trois Blueprints principaux :

BP_PuzzleManager :

Orchestration de l’énigme : logique centrale, état des pièces, déclenchement de fin.

BP_Puzzle :

Plateau interactif : détection de la position et validation de la pose.

BP_PuzzlePiece :

Pièce manipulable : saisissable, indexée, et animée au placement.

{{brizy_dc_image_alt imageSrc=

Dès que toutes les pièces sont bien positionnées et que la salle est entièrement reconstituée, un signal OnEnigmeEnd est envoyé par le BP_PuzzleManager.

Ce signal déclenche l’apparition de la chaîne suspendue, signature de l’expérience, que le joueur peut attraper pour lancer la transition vers la salle suivante.

{{brizy_dc_image_alt imageSrc=

Énigme 2 – Système de tour rotative

Pour cette seconde énigme, j’ai conçu un système basé sur une tour verticale de 8 étages rotatifs que le joueur doit réaligner manuellement.

Chaque étage est un Blueprint autonome (BP_FloorRotator) attaché à un pivot central.

Le joueur utilise une console physique interactive composée de deux boutons de naviguer entre les étages (index) ainsi qu’un bouton de validation pour appliquer une rotation à 90° sur l’étage sélectionné.

Une échelle visuelle (BP_EchelleFeedback) se met à jour en temps réel pour refléter l’étage actif via un système de Material Instances.

{{brizy_dc_image_alt imageSrc=

La console principale (BP_ConsoleFloorRotator) centralise la logique :

Elle gère l’index courant, envoie le signal de rotation au bon étage via un array de BP_FloorRotation référencé & applique des verrous d’interaction pour éviter les doublons en cas de multiple appuie sur les bouttons.

  • Une lampe saississable permet de se repérer dans une scene plongée dans le noir.
  • Si elle est jetée dans le vie à la manière d’une flare, elle réapparaît automatiquement dans sa boîte, évitant toute friction ou confusion pour le joueur.
{{brizy_dc_image_alt imageSrc=

Énigme 3 – Simulation par maquette interactive

Cette énigme repose sur un concept physique original : une maquette saisissable agit comme contrôleur direct de la salle réelle, que le joueur doit incliner pour en faire tomber les objets et atteindre un score cible.

La salle suit dynamiquement la rotation de la maquette, avec un système fluide de suivi interpolé (BP_DuplicateRotation), déclenché dès la saisie.

Tous les objets présents dans la salle héritent d’un BP_ ActorBasePoints, Blueprint parent

générique :

Un AC_PointGiver (ActorComponent) attaché permet de configurer le score de chaque objet de manière indépendante.

Seul le StaticMesh change d’un objet à l’autre (enceintes, néons,chaises, etc.), assurant un design modulaire et extensible.

Le BP_PointsManager gère les collisions derière la sortie : chaque objet tombé est détecté, validé et incrémente le score du joueur.

{{brizy_dc_image_alt imageSrc=
{{brizy_dc_image_alt imageSrc=
{{brizy_dc_image_alt imageSrc=

Dynamique & immersion :

L’état d'avancé est constamment lisible :

Le score est affiché en temps réel via une progress bar.

Une animation tutorielle explique l’objectif via une télévision au début de la salle, à travers un défilement d’images successives.

{{brizy_dc_image_alt imageSrc=

Certains objets suspendus (enceintes, néons...) ne tombent pas immédiatement, mais se décrochent aléatoirement après un délai suite à l’interaction avec la maquette.

Cela crée des événements imprévisibles, ce qui renforce l’immersion.

Une fois l’objectif atteint, le signal de fin est automatiquement envoyé et l’accès à la salle suivante est libéré.

{{brizy_dc_image_alt imageSrc=

Salle Don’t Push

Une fausse sortie... ou presque.

Après l’énigme 3, le joueur quitte la salle via une chaîne suspendue, seretrouve dans la salle 307 avec toujours cette même chaine...


Mais un bouton rouge attire l’œil... et la curiosité.

Lors de l’appui, une série d’événements se déclenchent :

Signal d’alarme retentit

  • Trois explosions Chaos successives
  • Une timeline anime la chute du joueur dans le vide
  • Un crash sonor retentit en bas, simulant l’impact
  • Le niveau se termine sans tirer la chaine habituelle.
{{brizy_dc_image_alt imageSrc=
{{brizy_dc_image_alt imageSrc=

Distinctions :

Le projet a été sélectionné parmi les finalistes des Rookie Awards 2025, dans la catégorie Game of the Year | Immersive Media.

{{brizy_dc_image_alt imageSrc=

Essayez le jeu :

{{brizy_dc_image_alt imageSrc=

Mot de la fin :

Vertigo a marqué une étape dans ma progression en tant que

développeur gameplay, et mon tout premier réél projet VR.

J’y ai découvert les exigences spécifiques à la réalité virtuelle : lisibilité,

confort, optimisation… et appris à adapter mes systèmes à ce

type de production immersive.

C’était aussi la première fois que je travaillais aux côtés d’un autre

développeur. On a construit ensemble des fondations techniques solides,

en échangeant beaucoup sur la structure, les besoins, les priorités.

Ce que je présente ici dans ce portfolio se concentre exclusivement sur

mes réalisations personnelles au sein du projet :

architecture modulaire des énigmes, gestion du streaming, interactions

physiques, feedbacks, logique de progression...

Et puis parfois, il faut aussi savoir ajouter un faux bouton rouge, trois

explosions , une alarme stridente… et une chute dramatique.

{{brizy_dc_image_alt imageSrc=
Retour en haut