Voici une sympathique falaise, probablement bretonne puisque fournie par le non moins sympathique Marc Jacquier, de Lorient. A noter, puisque l'on en est aux remerciments, que nous lui devons l'ensemble de cette scène d'exemples (à l'exception de l'herbe), que le ciel utilise des techniques dérivées de celles de Jaime Vives Piqueres, et que la mer reprend des techniques développées par Gilles Tran.

Bon, ça manque sérieusement de végétation tout ça. Nous allons donc faire pousser de l’herbe dessus. Première chose : l’image servant de height_field dans POV-Ray est disponible en téléchargement au format PNG. Ses dimensions sont de 1024x640 pixels, multiples de 32 (obligatoire). L’échelle utilisée dans POV-Ray pour cette scène est de 40 mètres horizontalement, et 5 verticalement : il est absolument indispensable que l’échelle horizontale soit conservée entre l’image et le height_field : le rapport largeur/hauteur doit être pris en compte si l’image n’est pas carrée. L’objet est déclaré à peu près comme ceci :
height_field{
png "falaise_1024x640.png"
smooth
texture {T_Roche}
scale <40, 5, 40*640/1024>
translate <-20, 0, -20>
}
Sachant tout ceci, on peut importer notre image dans HFC. En
double-cliquant sur l’icône de hfc.jar, ou bien en tapant
java -jar hfc.jar sur la ligne de commande, on lance le
programme. Cliquer sur « ouvrir », choisir
l’image du height_field. Le champ donnant les dimensions de
l’image indique bien 1024x640. Il faut ensuite donner les
dimensions de notre falaise dans la scène :

Appuyez toujours sur « entrée » après avoir changé une valeur numérique. Maintenant, on va pouvoir commencer à travailler.
Comme il est expliqué dans la page décrivant les grand principes de ce programme, un découpage et une analyse des similitudes entre « blocs » de l’image permet une économie très substantielle de mémoire. Cette étape de « compression » est fonction d’un paramètre de tolérance fixant la différence maximale, en altitude, que l’on tolère entre le « vrai » height_field et celui qui sera effectivement couvert d’herbe. Pour éviter que des brins d’herbe disparaissent dans le sol ou prennent leur envol, cette tolérance doit être inférieure à leur hauteur. En prenant comme seuil le tiers de la hauteur des brins, on obtient en général un résultat satisfaisant. Nous allons planter de l’herbe dont les brins font en moyenne 60 cm (0.6 m) : une tolérance de 0.2m est donc adaptée. On règle donc le curseur pour arriver à une valeur voisine (0.195). A noter que le height_field n’a que 256 valeurs en hauteur : le curseur restreint volontairement le choix aux valeurs possibles.
L’autre paramètre de la compression est la taille des blocs. Des blocs de 8 pixels marchent en général très bien, mais on peut en prendre de plus grands pour obtenir un résultat moins répétitif (mais bien plus encombrant) pour un rendu final. Restons-en à la valeur par défaut de 8 pixels : l’image comporte 10240 blocs.
Comme il s’agit pour l’instant d’un coup d’essai, ce n’est pas la peine de fignoler le positionnement des blocs, et on peut cocher l’option « compression simplifiée ». Cliquer sur « démarrer ». La barre d’état indique la construction du dictionnaire, puis la compression proprement dite. En fin de calcul, les caractéristiques du dictionnaire apparaissent : 52 blocs dont 7 uniques. On peut tout de suite juger de l’efficacité de la compression : 52 blocs seront réellement décrits sur 10240, soit environ 0.5%. Les 7 blocs uniques correspondent à des endroits critiques, assez différents du reste de l’image pour figurer de façon indépendante dans le dictionnaire.
Pour ce premier jet, nous allons en rester au plus simple. Les brins seront du type « triangles en croix », et la pente ne sera pas prise en compte. Pour ce premier essai, nous ne changerons qu’une seule valeur, en indiquant une hauteur moyenne des brins de 0.6. Cliquez sur « export », et choisissez un nom de fichier, par exemple « herbe.inc ».
Le fichier exporté n’est pas fait pour être modifié à la main. Il faut l’intégrer à la scène, ce qui est très simple. Le fichier exporté ne comporte en fait que la description des paquets d’herbe et leur mise en place, sans aucun emballage (#declare, union, texture etc…) Pour des brins d’herbe verts bien basiques, le code POV à ajouter dans votre fichier principal, par exemple après la déclaration du height_field, est :
union{
#include "herbe.inc"
pigment {ForestGreen}
translate <-20, 0, -20>
}
A supposer que vous partiez de la scène précédente, sans changer caméra ni éclairage, vous devriez obtenir ceci :

Cette image est assez banale, voire franchement tarte, mais nous allons progressivement améliorer tout ça.
Sommaire
2. Améliorations générales
© François Dispot 2003