Rendu de terrain fractal en OpenGL

Alexandre Cruz, Julien Hognon, Jérôme Petazzoni

|Introduction |Lamination géodésique |Gestion du niveau de détail |Mouvement de caméra |Optimisation du rendu |Conclusion |

Introduction

But du projet ?

Nous avons décidé de nous appuyer sur un modèle original : la lamination géodésique. Il s'agit d'une transformation qui déforme une sphére (ou un ensemble quelconque de points). En l'itérant assez longtemps, on peut obtenir un sphéroïde pouvant passer pour une planète.

La planète étant modélisée par des triangles, afin de bénéficier d'un rendu fin (mais gourmand) ou bien grossier (mais rapide), nous partons d'une sphère comportant un petit nombre de facettes. Nous avons implémenté un système permettant d'affiner à volonté le rendu (par création de triangles plus petits).

Lamination géodésique

La génération de terrain sphérique est une opération très simple.

Pour Chaque itération Faire
    Déterminer alétoirement l'équation d'un plan passant à proximité du centre de la sphère.
    Pour Chaque point de la sphère Faire
        Si le point est "devant" le plan Alors
            Eloigner le point du centre de la sphère
        Sinon
            Rapprocher le point du centre
        Fin Si
    Fin Pour
Fin Pour

Nous pouvons voir que l'algorithme de base est trés intuitif et facile à implanter. Or, il n'est pas suffisant d'en effectuer un implantation strict pour obtenir des résultats satisfaisant. Il faut en effet tenir compte d'un grand nombre de paramètres comme le nombre d'itération, l'éloignement par rapport au centre, le pas de déplacement des points, etc ...

Problèmes liés au mécanisme de lamination

Nous avons brièvement évoqué précédement le fait que le mécanisme de lamination, s'il n'était pas controlé, pouvait donner de mauvais résultats.
Par exemple, étant donnée que la lamination consiste à éloigner ou rapprocher les point d'une sphère par rapport au centre, on risque de dilater ou contracter la sphère de départ. Pour cela, on ajoute une phase à la suite des laminations consistant à recalibrer la distance au centre de tous les points grâce à une analyse statistique. Par ailleurs, on utilisera cette analyse pour déterminer les différentes pages de couleurs appliquées au terrain.
D'autre part, il se peut que le relief soit beaucoup trop accidenté. Ceci est encore une fois une conséquence de l'opérateur de lamination. En effet, d'un coté d'un plan, les points sont éloignés, de l'autre, ils sont approchés, donc, on assiste à chaque itération à la création de "falaises locales". Ce phénomêne est de plus accentué par le grand nombre de répétition du processus. Il faut donc, par pur soucis esthétique, lisser le terrain en faisant une moyenne pondérée locale pour chaque point de la sphère.
En bref, voici le résumé des opérations à éffectuer :

  • Lamination
  • Lissage
  • Analyse statistique
  • Recalibrage
  • Attribution des couleurs

Résultats

Voici les différents résultats que l'on peut obtenir grâce à l'implantation de l'algorithme décrit ci-dessus.

(img ...) Description

Gestion du niveau de détail

Mouvement de caméra

Les différentes opérations applicables à une caméra sont les suivantes : Afin de pouvoir effectuer ces opérations, il a fallut utiliser une structure spécifique permettant de placer et d'orienter la caméra dans l'espace. Une caméra a donc été définie à l'aide des champs suivants :


Note : le vecteur "right" que l'on peut voir sur la figure est utile mais il n'a pas besoin d'être stocké car il peut être retrouvé à l'aide du produit vectoriel de "dir" et "up".

Les différents mouvements de caméra sont donc définis en appliquant des rotations ou des translations aux vecteurs et points représentant une caméra.
exemple : dans le cas du look around, on effectue une rotation des vecteurs "dir" et "up" ainsi que du point "target" autour du point "eye".

Note : toutes ces opérations sont définies à l'aide de matrices de rotation et de translation

Optimisation du rendu

Nous avons apporté une attention toute particulière à la vitesse d'exécution de notre programme. Voici donc les facteurs limitants (bottlenecks) que nous avons identifiés, et les réponses apportées à chacun des problèmes :