Plugin de simplification de terrain en temps réel pour Virtools (IN55 : Synthèse d'image)

march 2006 - june 2006

Il s'agissait d'un sujet "couplé" avec le jeu 4L Trophy, qui avait pour but de muscler un peu le projet niveau code. L'idée de base est simple : le jeu se joue dans le désert, soit un très grand terrain. Et une liberté de mouvement totale rends la chose plus "réaliste".
Techniquement, il est donc nécessaire de faire des calculs sur les maillages pour limiter le nombre de polygones à afficher (le "LOD", Level Of Detail) - c'est la technique qui a impressionné par exemple à la sortie de Halo ou de Black and White. Sinon, c'est peine perdu : un terrain trop grand surcharge rapidement une machine, aussi moderne qu'elle soit.
C'était donc l'objectif de notre projet : implémenter une simplification de terrain temps réel sous Virtools, chose inexistante par défaut (il existe des LOD "généraux", mais aucun adapté spécifiquement aux terrains).
(screenshots et code à venir, fin août - je ne les ai pas sous la main...)

Nous avons procédé en 4 étapes :

  1. Recherche de l'algorithme de simplification de terrain le plus adapté à notre situation (implémentation simple et supportant mouvement s rapides et changements de caméra), et c'est la technique de P. Lindtrom et al. décrite ici qui l'a emporté.

  2. Compréhension du fonctionnement. Sans rentrer dans les détails, on peut quand même souligner les caractéristiques principales de l'algo : le terrain est stocké sous forme de quadtree en précalcul, et le maillage est en réalité reconstruit à chaque frame et s'arrête quand la précision voulue est atteinte.

  3. Récupération l'implémentation faite par ses soins, SOAR (disponible ), et gros lifting. Nous n'avons en effet gardé que le core de l'algorithme, en évacuant impitoyablement toute la partie affichage OpenGL, et créé une bibliothèque que nous avons nommés (avec une grande inventivité) libsoar.

  4. Utilisation de la bibliothèque dans un plugin Virtools, et "enveloppage" en C++ à l'aide SDK du logiciel : passage des paramètres, création du maillage en format maison, réglage des repères (Virtools est en repère indirect, OpenGL et donc SOAR en direct), etc. On obtient un beau Building Block, qui fonctionne à merveille à quelques soucis de texture près.

Conclusion : le jeu 4L Trophy étant destiné à être joué sur le web (via les navigateurs), l'ajout d'un plugin au logiciel s'avère possible, mais délicat (il faut un installeur, un désinstalleur, etc.). Néanmoins, la physique de Virtools nous restreignant beaucoup au niveau de la taille du terrain, le jeu final s'en passera très bien.

Images