Spirit Hunter

Moteur de jeux pour mobile

Détails technique

  • Client

    Epitech

  • Langages

    C++ / Obj C / Java

  • Librairies

    OpenGL ES / Physic bullet / Cardboard SDK

  • Plateformes

    iOS / Android

  • Date

    Sep 2016 - Fév 2018

Description du projet

Spirit Hunter est un jeu horrifique développé à partir d’un moteur de jeu fait par nous même avec OpenGL.

Ce jeu représente mon projet de fin d'année à Epitech. Le développement du projet s'étale sur presque 2 ans avec une équipe de 5 personnes.

L'objectif est de créer un jeu mobile VR multiplateforme accessible à tous et non contemplatif.

1. Problématique et enjeux

Epitech attends de nous un projet innovant, compétitif et commercialisable.

Lorsque le projet débute en 2016, la plupart des jeux mobile VR déjà existant ne sont que contemplatif. Le joueur n’a pas (ou très peu) d’interactions possible avec le jeu. La plupart des appareils VR pour mobile ne possèdent pas de boutons/manettes. C’est suite à cette problématiques que nous décidions de créer le projet.

On décide de centrer le projet autour de Google Cardboard (V2). L’avantage de celui-ci, c’est qu’il ne coûte que 15 euros. Il est donc accessible à tous. De plus, l’appareil possède un bouton.

C’est justement autour de cet unique bouton que l’on créera notre système d’interaction.

2. À propos du jeu

Le but du jeu est d'explorer un lieu possédant une histoire tragique. Il faudra essayer de rentrer en contact avec des esprits pour en apprendre plus sur l'histoire du lieu. Le niveau est fini quand on découvre la vérité sur les évènements passés.

Toutes les actions en jeu se font grâce à l’unique bouton du Google Cardboard.

Le joueur se déplace via un appuie prolongé sur le bouton. La direction du déplacement suit la direction du regard du joueur.

De plus, le joueur peut interagir avec un appuie simple sur le bouton. Cela permet par exemple de ramasser un objet, ouvrir une porte ou fouiller un meuble.

Pour finir, le joueur possède une barre d'action qui apparaît quand l'utilisateur regarde le sol. Cette barre d'action contient un inventaire et quelques actions spéciale.

3. À propos du moteur de jeu

L’architecture du projet est divisée en 3 morceaux. Le développement propre à iOS (écrit en Objective C), le développement propre à Android (écrit en Java) et le développement du moteur de jeu (écrit en C++).

On utilise ”OpenGL ES (3.0)” pour le moteur graphique.
On utilise ”Physique Bullet” pour le moteur physique.
On utilise ”Cardboard SDK” pour l’affichage VR et le son en 3D.
On utilise ”LibPNG” pour le chargement des PNG.
On utilise ”Nlohmann JSON” pour le chargement des JSON.

Le moteur de jeu dispose des fonctionnalités suivantes:

  • o Gestions des objets:
    • - Charger/Afficher un model 3D (format OBJ) avec une texture (format PNG)
    • - Afficher une forme simple (Cube, plan)
  • o Gestion de la lumière:
    • - La scène peut contenir plusieurs lumières
    • - Un objet peut recevoir la lumière de plusieurs sources lumineuses
    • - Plusieurs types de lumières (Point, Spot, Directionnel)
    • - Lumière est dynamique
  • o Gestions des sons:
    • - Charger/Jouer un son (format WAV) en 3D
    • - Possibilité de jouer simultanément plusieurs sons (gestion de canaux)
  • o Gestion de la scène:
    • - La scène est chargée à partir d’un fichier JSON
  • o Gestion de la physique:
    • - Collisions simple (cube et sphère)
    • - Gestion de la gravité
  • o Gestion du joueur:
    • - Déplacement
    • - Fouiller un meuble
    • - Attraper un objet
    • - Possède un inventaire 3D
  • o Gestion d’évènements :
    • - Déclenché par un collider

4. Ce que j'apporte au projet

Sur le moteur de jeu, je me suis occupé du développement qui concerne les lumières, les objets 3D, le son et le réticule.

Les objets sont chargés en faisant le ”parsing” du fichier OBJ. Je récupère ainsi les données de l’objet (vertices, texels, normals, faces).

Les objets sont affichés en utilisant un shader qui prends en compte une texture et les différentes sources de lumières. Je me suis inspiré du modèle de ”Phong” pour créer les shaders.

Les sons sont joués en utilisant le SDK de Cardboard. Les sons sont répartis en plusieurs canaux. L’un des canaux est uniquement réservé à la musique de fond, les autres sont utilisés pour les bruits d’ambiance.

Le réticule est un objet 2D à part. Il est dessiné au-dessus du rendu de la scène. Il peut être dessiné avec une forme primitive (un arc de cercle) ou avec un plan possédant une texture. La primitive est utile pour créer une animation de chargement. Le réticule possède un shader à part.

Pour finir, c’est aussi moi qui me suis occupé du développement qui concerne iOS. Ce qui représente principalement : le menu, la compilation du code C++ et le chargement des fichiers.