Introduction
Une des possibilités offerte par les
fractales est de générer des paysages. Nous avons choisi de nous
pencher sur ce problème. L'idée de départ est de considérer une
grille de points plane d'abord et de lui appliquer l'algorithme de Fournier
Fussel Carpenter sur la conmposante Z. La grille ainsi extrudée,
est envoyée en sortie. Elle est récupérable par le programmede
raytracing Persistance Of Vision.
Le programme permet d'utiliser les formes
itératives et récursives de l'algorithme de Fournier Fussel
Carpenter. Cet algorithme ajoute au coté fractal de la création
une composante aléatoire afin de mieux rendre l'aspect naturel du
paysage.
On considère au départ un tableau
de points en 2D. Afin de faciliter le déroulement de l'algorithme, les
dimensions de la grilles seront des puissances de deux, plus un. (par
exemple 33x33, 65x65 etc....). On fixe les quatres coins à la meme
hauteur. Cela constitue le point de départ à l'invariant suiant:
L'étape du carré(square step):
On prend un
carré de quatre points, et on fixe la hauteur du milieu en moyennant
les quatres hauteurs des coins du carré. On ajoute à cette hauteur
une valeur prise au hasard. Les points ainsi calculés donnent,
lorsque plusieurs carrés sont présents, un arrangement en losange de
la grille.
L'étape en losange(diamond step):
On prend cette
fois chaque losange de quatre points, et on utilise la meme méthode
pour calculer la hauteur du point central. Un fois cette étape terminée.
La grille est divisée en carrés de taille deux fois moindre.
La taille de la grille augmente donc très fortement en fonction en
fonction du nombre d'iteration (ou de récursions). Il est égal à
2^(I+2) ou I represente le nombre de passges par l'invariant. Le
programme propose à l'utilisateur le choix entre la forme récursive et
la forme itérative de l'algorithme. La plus facile à implémenter est
la première, son schéma est le suivant:
Effectuer l'étape du carré
Effectuer l'étape du losange
Appel de la procedure 4 fois sur les sous carrés
C'est en effet très simple, mais cela
pose un gros problème. On ne peut accéder aux losanges entiers. Comme
on travaille sur des subdivisions carrées, les losanges ne peuvent
remplir leur rôle et recouvrir ces carrés afin de lisser les
discontinuités. C'est pourquoi l'algorithme itératif est proposé à
l'utilisateur. Il s'organise selon le schéma suivant:
Tant que la longueur du coté des carrés est plus grande que zéro
{
- Parcourir le tableau et appliquer l'étape du losange pour
chaque carré présent
- Parcourir le tableau et appliquer l'étape du carré pour
chaque losange présent.
}
Cette méthode permet d'éviter le coin
manquant du losange qui apparaissait dans la méthode récursive. Mais
pas dans tous les cas. Lorsque l'on traite les bords de la grille, on se
retrouve avec le meme probleme. Cependant plus de discontinuité
possible puisque nous sommes au bord du paysage. il suffit donc
d'ignorer le quatrième point qui pose problème.
Le programme génere une source POV
sous forme d'include, dont l'utilisateur peut spécifier le nom. Il
pourra alors l'utiliser a son gré dans n'importe quel script. Il
suffit d'ajouter la ligne #include <nom fichier de sortie>
pour pouvoir untiliser le paysage comme n'importe quel objet. Il est
identifié par le nom "relief".
Le programme est livré avec un exemple de script POV qui permet
de visualiser le paysage géneré dans le fichier
"defaut,inc".
Programme: montagne
| Options |
|
Defauts |
Valeurs |
| -l |
<niveau d'elevation> |
0 |
{-100..100} |
| -e |
<erreur losange> |
0 |
{0..100} |
| -v |
<erosion> |
|
>=0 |
| -p |
<fichier .prob> |
|
|
| -o |
<fichier sortie> |
<defaut.inc> |
|
| -s |
<smooth triangle> |
|
- |
| -h |
<hazard init> |
0 |
>=0 |
| -t |
<texture en
sortie> |
|
- |
| -r |
<methode recursive> |
|
- |
Liens
- les fractales - projet ESSI2
|
Quelques exemples de paysages construits avec Montagne:
| Quatre étapes
de génération d'un paysage |

Première itération |

Deuxième itération |

Troisième itération |

Quatrième itération |
- On remarque que le relief se
prononce de plus en plus, sans laisser réellement
apparaitre les subdivisions carrés selon lesquelles le
relief est construit. Cela est possible grace au
Diamond Step qui recouvre plusieurs carrés et permet un
aspect final plus naturel.
|
| Erosion |

Paysage brut |

Paysage érodé |
- Le paysage brut est trop accidenté.
L'érosion est un bon moyen de résoudre ce problème, qui
survient dès que les coefficients donnés en entrée
ne sont pas méticuleusement choisis. Ici l'érosion a été
appliquée deux fois pour un meilleur rendu.
Une
animation d'érosion (Volumineuse)
|
Exemple de paysage, avec quelques effets |
 |
-
- En plus de gradient, nous avons
ajouté du bump, un filtre qui permet de donner un aspect
irrégulier à la texture.
|
|