Projet Alita

ou comment une équipe de futurs ingénieurs ont appris à réaliser un jeu video

  • Catégories

  • Archives

Archive for novembre 2008

Concept du « Heightmap »

Posted by Guillaume Gas sur novembre 29, 2008

Après de nombreuses recherches, nous avons finalement trouvé une méthode intéressante pour la création d’un relief conforme à nos attentes. C’est là qu’est intervenu le concept du « Heightmap ».

Un « Heightmap », c’est quoi ? Il s’agit, traduction française, d’une « carte de hauteur » destinée à concevoir un relief à partir des variations de couleur. Dans notre cas, il s’agit donc d’un fichier image en noir et blanc qui représente le relief d’une carte, dont voici un exemple :

heightmap

Sur cette image, on peut distinguer des zones hautes (en blanc) et des zones basses (en noir).

On se servira donc de ce fichier pour définir l’allure que prendra notre terrain : il suffira d’utiliser un tableau à deux dimensions (largeur et longueur) qui contiendra la hauteur (donc la couleur) de chaque point de notre terrain. En gros, il va falloir matérialiser cette image sous la forme d’un tableau. La fonction suivante permet de concevoir ce terrain à partir du tableau passé en paramètres (sur lequel on a chargé le fichier image ci-dessus) :

creationrelief3d

Ainsi, nous avons finalement réussi à concevoir notre terrain, avec un relief intéressant :

relief3d

Posted in Uncategorized | Tagué: , , , , , , , , , | Leave a Comment »

Caméra, terrain, texture, relief…

Posted by Guillaume Gas sur novembre 23, 2008

La première question que nous nous sommes posés a été de savoir comment concevoir un terrain en 3D. Notre objectif premier était de concevoir un terrain plat, et d’insérer une caméra afin de pouvoir se déplacer librement sur le terrain (grâce aux touches du clavier).

CLAVIER

Tout d’abord, l’implémentation de la caméra et la gestion des touches du clavier ont été intégrés au projet en tant que « services ». Ces services seront appelés dans la fonction « Initialize » du fichier Game.

Concernant le clavier, nous avons donc implémenté deux fonctions primordiales :

  • IsKeyPressed => permet de savoir si une touche est appuyée
  • IsKeyJustPressed => permet de savoir si une touche a été appuyée puis relâchée

CAMERA

Dans notre jeu, le plan horizontal est défini par les axes X et Z (l’axe Y représentant l’axe vertical). Pour pouvoir afficher le terrain, XNA a besoin de plusieurs matrices : une première pour représenter la position d’un objet dans un espace 3D, une deuxième pour représenter la matrice de vue de la caméra (ce qui veut dire, sa position et son orientation), et une troisième pour indiquer comment les points en 3D seront transformés dans l’espace 3D (matrice de projection). Par conséquent, le service de gestion de la caméra devra gérer efficacement ces deux dernières matrices.

La caméra se définit par deux paramètres : un point dans l’espace (sa position), et un point qu’elle cible dans l’espace (sa cible). Il sera donc important de calculer le vecteur d’orientation de la caméra à partir de ces deux paramètres, ceci afin que la caméra soit bien orientée comme nous le souhaitons.

Après avoir implémenté ces données ainsi que le calcul de la matrice de projection, il est désormais possible de mettre à jour la position de la caméra (et donc la vue) lorsque l’utilisateur se déplace avec les touches du clavier. Cela s’effectue dans la fonction « Update » du fichier Game.

Les différentes fonctionnalités implémentées sont les suivantes :

  • Déplacement de la caméra à partir des touches directionnelles (Haut, Bas, Gauche, Droite)
  • Elévation de la caméra (touches PageDown et PageUp)
  • Bridage de la hauteur de la caméra, afin que la caméra ne puisse pas aller trop haut ou ne puisse pas descendre en dessous du terrain.

Après avoir géré cela, on calcule à nouveau la matrice de vue.

TERRAIN

Tout ce qui est affiché dans un jeu XNA est à base de vertex (ou vertices, au pluriel). Pour expliquer très simplement ce qu’est un vertex, on peut dire qu’il s’agit d’un sommet d’une forme. De cette façon,  à partir de ces vertices, on peut dessiner soit des points (un vertex), soit des lignes (deux vertices), soit des triangles (trois vertices). Il faut savoir que DirectX (et donc XNA) ne peut dessiner que ces trois objets. On sera donc limité à des formes de 3 vertices maximum !

Comment peut-on alors dépasser cette limitation ? C’est cette question qui nous pousse à créer ce que l’on nomme des « mesh » (traduit en français par « maille »). Concrètement, un mesh est un objet tridimensionnel, sous forme de fil de fer, composé de polygones. Puisque sous XNA nous avons, au mieux, des triangles, il est important de bien cerner le principe des mesh. En effet, nous pouvons considérer, sous XNA toujours, qu’un mesh correspond à la concaténation des différents triangles, lignes ou points.

Dans l’exemple ci-dessous, on voit très clairement la composition d’un mesh. Chaque carré le composant est composé de 2 triangles.

Un nouveau problème se pose alors. En effet, un vertex peut faire partie de un, deux, trois, quatre, cinq ou même six triangles. Nous allons alors faire appel à un nouveau concept: les indices. A ce moment, il est important de différencier le vertex et l’indice : le vertex représente un point présent dans un espace, l’indice représente ce point pour chaque triangle sur lequel il se trouve. Ainsi, si l’on veut créer 16 triangles, il y aura 15 vertices et 48 indices.

Par la suite, on crée les vertices et les indices, avec leurs caractéristiques, et on dessine ainsi les différents triangles qui vont composer le terrain. Par la suite, on utilise la fonction « Draw » du fichier Game pour dessiner les vertices et les indices : notre terrain est créé !!!

TEXTURE

Après avoir créé le terrain, il faut maintenant plaquer une texture sur ce terrain, afin de lui donner belle allure. Il suffit d’insérer le fichier image dans le dossier Content, et de le charger dans l’application. Ensuite, la méthode Draw se charge de dessiner la texture sur le terrain. Le résultat est le suivant :

terrainnumber1

RELIEF

Nous avons maintenant un terrain texturé, mais il manque une donnée importante : le relief. Pour ce faire, il existe différentes techniques, et nous nous sommes intéressés aux fichiers « .fx ». Ces fichiers contiennent des paramètres sur l’allure que prendra le terrain, sous la forme de « techniques » que l’on peut charger directement dans l’application. Nous avons essayé d’implémenter un relief intéressant, mais nous n’avons pu obtenir qu’un résultat assez banal : chaque vertex de notre terrain voyait sa position sur l’axe Y augmentée.

Notre objectif étant d’obtenir un relief variable à certains endroits, nous avons choisi de laisser cette idée de côté et de rechercher une autre méthode.

Posted in Uncategorized | Tagué: , , , , , , | Leave a Comment »

Création d’un projet XNA

Posted by Guillaume Gas sur novembre 23, 2008

Après avoir installé le framework XNA, la création d’un projet XNA s’effectue normalement sur Visual C# :

creationprojetxna

Une fois le projet créé, certains fichiers sont créés automatiquement :

  • Program.cs => Point d’entrée de l’application
  • Game.cs => Fichier contenant les différentes sections pour le jeu

game1

Un dossier nommé « Content » est également créé pour contenir tous les documents à charger durant l’exécution du programme (image pour la texture du terrain, fichier « .fbx » pour les objets à insérer…).

content

Posted in Uncategorized | Leave a Comment »

Planning

Posted by Guillaume Gas sur novembre 23, 2008

Etant donné que nous ne disposons pas d’un grand nombre d’heures, il a été essentiel de concevoir un planning pour bien distinguer les différentes tâches à effectuer. Nous avons ensuite réparti les tâches :

Pour la fin du premier trimestre (lundi 15 décembre) :

  • Création du projet sur Visual C#
  • Création du terrain
  • Implémentation du relief et de la texture
  • Implémentation d’un skydome
  • Corrections sur l’interface graphique
  • Implémentation des objets 3D (format .fbx)
  • Déplacement des objets

Pour la fin du second semestre (lundi 2 février):

  • Gestion des collisions entre objets
  • Création d’un menu pour la gestion du jeu

A chaque fin de semestre, nous rédigerons un rapport sur ce blog.

Posted in Uncategorized | Leave a Comment »

Présentation de XNA

Posted by Guillaume Gas sur novembre 17, 2008

xna

Microsoft XNA (XNA’s Not Acronymed) désigne une série d’outils et de fonctionnalités fournis gratuitement par Microsoft, afin de faciliter les développements de jeux pour les plates-formes Windows et Xbox 360. L’objectif est de réunir un maximum d’outils en provenance de Microsoft et de ses partenaires (DirectX, Visual Studio, XACT…).

Il contient principalement un framework, des outils d’intégrations de contenu et la documentation nécessaire.

L’IDE utilisé est Visual Studio 2005 Express, et le langage natif de XNA est le C#.

La dernière version du framework XNA est la version 3.0.

Pour les développeurs et les utilisateurs de Xbox 360, XNA est une porte ouverte vers le développement indépendant : les jeux produits sont distribués via le Xbox Live, et les différents outils offerts par XNA permettent aux développeurs (et aux amateurs) de gagner un temps important et de développer d’intéressantes applications exploitant le concept de la 3D.

Le site des créateurs est disponible à l’adresse suivante : http://creators.xna.com/fr-FR. Il contient quelques exemples de jeux développés à partir de XNA, et présente quelques tutoriaux de formation.

Posted in Uncategorized | Leave a Comment »

Projet Alita

Posted by Florian Gutierrez sur novembre 15, 2008

C’est avec un grand plaisir que j’ouvre aujourd’hui le blog du projet Alita. Tout d’abord, qu’est-ce que ce projet ? Avant tout, c’est une aventure dans le monde de la 3D; aventure vécue par trois futurs ingénieurs de l’EPSI (École Privée des Sciences Informatiques) de Montpellier. Actuellement en dernière année, nous avons décidé de mettre à l’épreuve nos compétences en réalisant ce projet.

Comme beaucoup d’informaticiens, nous avions un jour rêvé de créer notre propre jeu vidéo. Mais par où commencer ? Notre première tâche a été de définir le projet: quel type de jeu vidéo nous voulons réaliser ? Sur quelle plateforme ? serait-ce un jeu en réseau ou non ? Tant de questions qui ont orienté notre démarche. Ainsi, je vais présenter tous ces choix que nous avons effectués.

Le point suivant a été de définir les technologies que nous allions utiliser. Si nous avons l’habitude de développer pour des ordinateurs (Windows et Linux), nous n’avons jamais eu l’occasion de déployer une application sur une console de jeu. Sur cette dernière, les ressources étant limitées, les contraintes sont plus importantes que ce à quoi nous avons été habitués. Cela dit, il nous a paru extrêmement intéressant d’apprendre à créer un jeu pour console. Après quelques recherches sur internet, nous sommes tombés sur une série d’outils gratuits, proposés par Microsoft et ses partenaires. XNA, c’est le nom de cet outil, permet un développement simplifié de jeux vidéos pour deux plateforme: Windows et XBox 360.

Ainsi, nous allons débuter notre apprentissage en développant pour Windows, puis nous comprendrons comment porter notre jeu sur XBox 360. Et c’est au travers de ce blog que nous vous ferons part des difficultés rencontrées et de la façon dont nous les avons résolues.

Pour commencer, quel type de jeu allons nous créer ? S’il est important de se faire plaisir, il est tout aussi important à nos yeux de ne pas être trop ambitieux pour ne pas être découragé face à l’étendu des tâches à réaliser. En lieu de MMORPG (Massivement Multiplayer Online Role Playing Game), voire même de RPG tout court, nous nous sommes mis d’accord pour développer une base de RTS (Real Time Strategy). Dans un premier temps, cela nous permettra de comprendre beaucoup de facettes de la programmation tri-dimensionelle.

Plus clairement, quelles sont les caractéristiques d’un tel jeu ? Des personnages (nommés ci-dessous « Unités Mobiles ») et des bâtiments (nommés « Unités Statiques »), peuvent être créées par le joueur. Comme dans la plupart des jeux, les unités mobiles peuvent se déplacer et attaquer les ennemis (mobiles ou statiques). Le but du jeu étant evidemment de détruire toutes les unités ennemis avant qu’elles ne détruisent celles du joueur. En termes de 3D, on voit clairement apparaître plusieurs phases. Tout d’abord, il faut créer un terrain sur lequel les unités évolueront. Ensuite, les unités devront être créées et positionnées à la surface de ce terrain.

Avant de gérer les collisions entre les différentes unités, il est important que les unités mobiles aient la possibilité de se déplacer. Cela sera possible après avoir permis au joueur de séléctionner l’unité (ou les unités). Le joueur décidera ensuite à quel endroit l’unité devra aller, au travers d’un menu affiché directement sur l’écran.

Posted in Uncategorized | Tagué: , , , , , | Leave a Comment »