SPACECRAFT

De Ensiwiki
Aller à : navigation, rechercher

Cadre du projet

  • Encadrant : Matthieu Chabanas.
  • Étudiants : Jordan RABET, Eduardo SAN MARTIN MOROTE, Arthur SONZOGNI.
  • Prérequis : programmation C++, OpenGL moderne (>= 3.2).

Description

Une planète de SPACECRAFT vue de l’espace
Atmosphère devant le soleil


Le but de ce projet est de réaliser un logiciel intéractif permettant d'explorer un univers modifiable généré de façon procédurale en temps réel, à toutes les échelles. L'idée est de donner la possibilité à l'utilisateur de visiter une planète à échelle humaine, en marchant à sa surface, mais aussi de s'envoler pour sortir de l'atmosphère de cette planète et explorer le système solaire la contenant, pour ensuite sortir de ce dernier et explorer le cluster, le supercluster puis même toute la galaxie. De plus, à échelle humaine, l'utilisateur pourra modifier le monde comme il le souhaite, en modifiant les reliefs existants et en construisant des structures. Afin de pouvoir implémenter cette fonctionalité, on se propose de modéliser le monde comme un ensemble de cubes de taille 1m x 1m x 1m représentant chacun un matériau possible. Cette modélisation est très fortement inspirée du jeu Minecraft de Mojang, et on pourrait en fait résumer ce projet comme étant de créer un Minecraft donnant accès à un univers "infini". Ce projet étant ambitieux, il peut être séparé en plusieurs sections fortement interconnectées mais relativement indépendantes dans leur fond :

  • le rendu graphique
  • la gestion des données
  • la génération procédurale de contenu en temps réel
  • les intéractions, l'aspect "jeu"

Le code du projet est disponible sur github : smealum/SPACECRAFT. Une vidéo du rendu final peut être visionnée sur youtube : [1]

Livrable

Le rendu se fera sous la forme du logiciel décrit dans la description, accompagné de son code source commenté. Dans la mesure où ce projet représente une masse de travail importante, il est difficile de dire exactement ce dont sera composé le rendu final. On se fixe cependant un état minimum; le logiciel à rendre devra contenir pour chaque section :

Vue d'un chateau devant un couché de soleil

RENDU

  • Rendu de planètes à toutes les échelles
  • Système robuste de level of detail
  • Rendu efficace grace à du frustum culling
  • Rendu simple d'étoiles proches comme lointaines

GESTION DE DONNEES

  • Architecture producteurs/consommateur (un thread principal qui utilise du contenu généré par des threads secondaires)
  • Sauvegarde/chargement non-intrusif (seamless) des modifications apportées au monde par l'utilisateur
  • Système simple de stockage des données modifiées

GENERATION PROCEDURALE

  • Génération de planètes diverses, de façon cohérente par rapport à la géographie (biomes froids aux poles, etc)
  • Génération de systèmes solaires cohérents (d'un point de vue orbital) contenant des planètes comme des satellites (naturels)
  • Système de génération procédurale globalement efficace


Vue de la Galaxiel

INTERACTION

  • Possibilité pour l'utilisateur de se déplacer, avec la possibilité de voler et de changer de vitesse de façon exponentielle
  • Gestion des collisions entre l'utilisateur et le monde
  • Possibilité pour l'utilisateur de modifier le monde, en détruisant des blocs existants et en rajoutant de nouveaux

Si ces conditions sont remplies avant la fin du projet, nous travaillerons sur des extensions de ce dernier, qui consisterons, entre autres chose, de :

  • l’ajout de nouveaux effets de rendu (par exemple : dispersion atmosphérique)
  • l’amélioration de la génération de contenu procédurale, pour qu’elle soit plus variée encore
  • l’optimisation générale du logiciel, aussi bien d’un point de vue algorithmique qu’implémentation
  • la mise en place d’aspects “jeu” plus poussés