Les réseaux de craquelures

Introduction

Les principes

L'interface

La distribution des cellules
L'utilisation du terrain en cours d'édition
La largeur des craquelures
Les nouveaux scripts Povray fournis pour exploiter les réseaux de craquelures
Quelques utilisations amusantes de cet outil et des scripts Povray fournis




Introduction

L'intention de départ de cet outil est de pouvoir créer une imitation rapprochée d'un lit de rivière ou d'un champ asséché.

Les algorithmes utilisés dans Geomorph pour fracturer un terrain sont principalement inspirés de l'article Image-Guided Fracture, de David Mould de l'Université de la Saskatchewan. J'ai adapté les concepts et ajouté quelques fonctions, comme la possibilité d'élever les rebords des craquelures de façon à ce que la surface ait l'air d'avoir rétréci en séchant.

Parce que Geomorph est un outil de conception pour lequel l'interaction en temps réel est importante, le processus est fondamentalement non réaliste. Cette approche est plus rapide et plus créative qu'une simulation qui tente de reproduire le processus réel.

Selon la façon dont vous réglez les paramètres et selon le terrain d'où vous partez, vous pouvez obtenir un résultat d'un réalisme convaincant, ou un résultat fantaisiste, comme des craquelures guidées par un mot.

D'un point de vue réaliste, lorsqu'une surface élastique comme de la boue sèche et craquèle, il en résulte des cellules plus ou moins hexagonales. Par contre, une surface non élastique comme de la céramique ou la plupart des sols donnera des cellules plutôt rectangulaires. L'outil de réseaux de craquelures produit des hexagones, plus ou moins réguliers. Si vous désirez des cellules rectangulaires, vous pouvez utiliser plutôt le "crayon de failles" , en réglant la différence d'altitude à 0 et en dessinant des crevasses perpendiculaires puis parallèles.

Notez que le processus peut être lent, selon les paramètres choisis, même s'il a été conçu pour un usage interactif.


Les principes

Les craquelures sont les frontières de "cellules". Autrement dit, il y a une craquelure lorsque la distance entre deux centres de cellules est égale.

Mathématiquement, les réseaux de craquelures de Geomorph sont des diagrammes de Voronoï.

Le processus de génération est en gros le suivant:
Le terrain d'origine est typiquement utilisé comme une fonction de bruit pour déplacer les frontières d'une façon irrégulière.

Le terrain peut aussi être utilisé comme un "guide" plutôt qu'une matrice de bruit. Dans ce cas, les valeurs les plus élevées agissent comme une "clôture" et forcent l'apparition d'une crevasse. Cela permet, par exemple, de craqueler le terrain en suivant des lettres.


L'interface

Quand vous choisissez the voronoi tool dans la boîte à outils, vous obtenez ce dialogue d'options:


  • La grandeur moyenne des cellules est spécifiée en pourcentage de la grandeur linéaire du terrain. Ainsi, une grandeur de 10% donnera 100 cellules, et 5% donnera 400 cellules.

  • La racine contrôle le générateur pseudo-aléatoire, pour tout processus qui le requiert, par exemple pour calculer le déplacement du centre des cellules. Si vous partez de la même racine et du même terrain, vous obtiendrez le même résultat.


  • Le relèvement des bords est utilisé pour simuler le rétrécissement d'une surface en train de sécher. Le dialogue est activé seulement après le calcul des craquelures, exécuté en cliquant Appliquer.


La distribution des cellules



Les exemples sont réduits à la moitié de leur grandeur linéaire. Dans tous les cas, le terrain de départ est une "subdivision 2", sauf lorsque spécifié autrement.

Uniforme / aléatoire

Les graines, qui constituent le centre des cellules, sont réparties de façon aléatoire.
Centrée / aléatoire

Davantage de graines sont déposées au centre du terrain. Les cellules sont donc plus petites au centre. Le résultat ressemble plus ou moins à un "coup de marteau". L'espacement est proportionnel au carré de la distance au centre du terrain.
Régulière / perturbée

Les graines sont déposées régulièrement sur la surface. Le résultat est un plan d'hexagones légèment étirés à la verticale.
Les graines sont dans un deuxième temps déplacées d'une distance aléatoire, dans un intervalle spécifié par l'utilisateur.
L'exemple montre l'effet d'une variation aléatoire de 0, 50 (défaut) et 100 sur un terrain gris uniforme. Si vous utilsez un terrain comme source de bruit, avec la variation aléatoire à 0, les centres des cellules seront régulièrement espacés, mais les lignes ne seront pas droites.

Notes:
  1. La grandeur des cellules est arrondie à la grandeur la plus rapprochée qui donnera un nombre pair de rangées, autrement la dernière rangée serait irrégulière.
  2. Les hexagones sont légèrement allongés à la verticale de façon à ce que le terrain soit pavable. Dans un script Povray, réduire l'échelle de l'axe Z dans un rapport de 0,866 devrait donner des hexagones réguliers.
Distribution à échelle multiple (pour distribution uniforme ou centrée seulement)

Cette option répète le processus de craquelure à une échelle inférieure, en réutilisant les frontières des cellules de niveau supérieur comme guide.

L'exemple montre l'effet d'une échelle de 1x+2x+4x.

La largeur des craquelures est de 1 pixel et la grandeur des cellules est fixée à 5%. Premièrement, le programme calcule un réseau de craquelures avec des cellules de 20% (4x) et une largeur de 4 pixels. Deuxièmement, ce réseau est réutilisé pour calculer un réseau de craquelures avec des cellules à 10% et des lignes de 2 pixels. Enfin, le processus est répété une troisième fois pour calculer des cellules de 5% dans celles de 10%, avec des frontières de 1 pixel.

Un conseil:
Sur un terrain de 512x512, les résultats sont meilleurs quand la grandeur de départ des cellules est inférieure à 10% et la largeur des lignes est de 1. Dans l'exemple montré, la largeur des lignes a été réduite de sa valeur prédéfinie de 2 à 1.

Avertissement:
Le processus peut être très long, particulièrement quand du bruit est appliqué et que les cellules sont petites.


Rendu d'un réseau de craquelures à échelle multiple avec cracknet_bumptest.pov





L'utilisation du terrain en cours d'édition

1. Le terrain comme source de bruit


Un terrain utilisé comme source de bruit perturbe localement les craquelures selon la valeur de l'altitude.
De gauche à droite, l'exemple montre ce qui est produit par un niveau de bruit de 0, 50 et 100.



2. Le terrain comme "guide"


Quand l'option "guide" est utilisée, les valeurs d'altitude reçoivent un poids plus grand qu'avec l'option "bruit".
Cette option donne des résultats plus évidents avec un terrain qui montre des transitions abruptes entre les zones claires et foncées. Ces transitions deviennent des "clôtures".
Une case à cocher permet d'utiliser un terrain secondaire pour ajouter du bruit aux craquelures composant l'arrière-plan uniforme. Ce terrain est de type "subdivision 1". La racine et le niveau de relief peuvent être contrôlés.






La largeur des craquelures

La largeur des craquelures est donnée en pixels. Il s'agit d'un paramètre absolu. L'apparence du résultat dépend donc de la grandeur du terrain.

Il est aussi possible de faire varier la largeur des craquelures selon leur distance par rapport au centre de la cellule. Le principe est que les craquelures sont créées par des tensions de surface, qui amènent un rétrécissement de la surface jusqu'à ce que celle-ci "déchire". En moyenne, la tension peut être considérée comme constante par unité de surface. En s'éloignant d'un centre de cellule, la tension de chaque unité de surface s'additionne à sa voisine jusqu'à ce qu'une crevasse soit rencontrée. Le stress qui crée le rétrécissement en "tirant" des points de la surface vers le centre peut alors être considéré plus fort lorsque la distance du point considéré au centre d'une cellule est plus importante.



Fixed width, 1 / 2 / 4 (512x512)


Variable width, from 2 to 6 (512x512)




Les nouveaux scripts Povray fournis pour exploiter les réseaux de craquelures

Les réseaux de craquelures peuvent être utilisés comme des objets "height field" standard dans un script Povray.

Ils peuvent aussi être utilisés comme une "carte de relief" ("normal map") sur un plan de sol infini, comme dans l'image introductive de cette page. Dans ce cas, le réseau de craquelures est pavé pour remplir le plan.

Ces nouveaux scripts sont offerts:
  1. cracknet_bumptest.pov montre le terrain courant comme une carte de relief ("normal map") sur un plan infini. Le script est adapté pour être utilisé avec la caméra prédéfinie 3. Il a été utilisé pour créer l'exemple à échelles multiples.
  2. cracknet.pov est une scène composite, qui recourt à une carte de sol (un réseau de craquelures) appelée ground_map.png comme "normal map" et au terrain courant rendu selon la méthode habituelle. C'est ce qui a été utilisé pour créer le paysage qui introduit cette page.
  3. cracknet_nobump.pov est une scène composite qui emploie un réseau de craquelures comme un terrain d'avant-plan. Le script est plus difficile à utiliser que le précédent, parce que le réseau de craquelures n'est pas pavé. Les côtés doivent être cachés, par exemple sous des zones du terrain d'arrière-plan.
Un exemple de cracknet_nobump.pov un terrain de sol de 2048x2048 à l'avant-plan



Une nouvelle carte de pigments, maprock_redmud.inc, est fournie pour s'intégrer à ces scripts. Utilisée comme gradient ("gradient pattern" dans le langage de Povray), elle permet de reproduire des bandes sédimentaires.

Pour utiliser cracknet.pov, vous devez commencer par définir un réseau de craquelures et l'enregistrer sous ground_map.png. Puis, vous travaillez sur votre terrain principal, qui peut être considéré comme un arrière-plan. Une grille de 512x512 est suffisante pour ce terrain.

Similairement, lorsque cracknet_nobump.pov est utilisé, vous devez d'abord enregistrer votre réseau de craquelures sous ground_map.png. Dans ce cas, de meilleurs résultats sont obtenus avec un grand terrain, de 1024x1024 ou 2048x2048. Craqueler un tel terrain peut requérir assez de temps pour se préparer un café.

Dans les deux cas, vous aurez probablement à déplacer et mettre à l'échelle les deux objets dans Povray pour obtenir un résultat convaincant. Comme à l'habitude, ces paramètres sont regroupés à la fin du script Povray, après la ligne d'astérisques "**********".
 
Notez qu'il n'est pas nécessaire que ground_map.png soit un réseau de craquelures. Des résultats intéressants peuvent être obtenus, par exemple, en utilisant un terrain ondulé comme plan de sol. Voyez cette page.

Quelques trucs additionnels:
  1. Pour tous ces scripts, commencez avec la caméra prédéfinie 3.
  2. Les craquelures plus larges semblent plus naturelles après un lissage avec un rayon de 1, ou davantage si le terrain est vraiment grand.
Cette archive contient d'autres exemples. Un de ces exemples met en scène des arbres générés avec le programme java Povtree, et un autre exemple est le script utilisé pour créer le paysage montré en introduction, adapté afin que les craquelures soient traduites comme un terrain plutôt que comme une carte ("normal map").




Quelques utilisations amusantes de cet outil et des scripts Povray fournis

1. Écrire un mot

L'image au haut de cette page utilise le mot Geomorph comme guide.

Voici comment:
  1. Partez avec un terrain noir ("uniforme" - le terrain par défaut - à un niveau de 0%).
  2. Choisissez le dialogue de dessin et écrivez votre texte avec un petit crayon continu  à son niveau maximal. Avec un terrain de 512x512, la grandeur la plus petite (un rayon de 2) donne le meilleur résultat.
  3. Retournez au dialogue d'édition pour choisir l'outil de réseau de craquelures, et choisissez comme utilisation de l'image courante "guide" plutôt que "bruit".
Quelques conseils:
  1. Pour amincir vos lettres, vous pouvez utiliser l'outil de crêtes ..
  2. Pour durcir les contours de vos lettres, vous pouvez utiliser l'outil de seuil pour réduire l'intervalle de valeurs de gris, coupant ainsi le flou, puis l'outil "luminosité / constraste" pour élever le contraste au maximum à l'aide du bouton "automatique".

2. Utiliser une largeur de craquelures de 0

Essayez de régler la largeur des craquelures à 0 et le relèvement des bords à 100%, puis inversez le résultat. Vous obtiendrez quelque chose comme ce qui suit:

Avec cracknet_bumptest.pov



Avec sea_and_fog.pov, non érodé et érodé




3. L'utilisation d'un terrain autre qu'un réseau de craquelures comme "carte de normales"

Voyez cette page.

______________________

Écrit en décembre 2006

Retour à l'index de la documentation


Contact:    Patrice St-Gelais

SourceForge.net Logo