vers l'index général de l'aide

height_field

objectif

Créer un terrain, une montagne, un bas-relief, etc.. à partir d'une image bitmap.

compatibilité

POV-Ray 2.0 +sup.

syntaxe

height_field {
        gif / tga / pot / png / pgm / ppm / sys 
        "nom_fichier"
        (hierarchy on/off)
        (smooth)
        (water_level Niveau) // nombre décimal
        (..modificateurs d'objets..)
        (..transformations..)
        (..matériau..)
       }
 

Un height_field est un maillage de triangles généré automatiquement à partir d'une image bitmap. Les coins de ces triangles sont situés à la verticale du centre des pixels de l'image, à une hauteur dépendant de la couleur du pixel.

Si l'image est une image "à palette" (généralement 256 couleurs), c'est la valeur d'index qui déterminera la hauteur, peu importe la couleur. La valeur d'index 0 correspondra à la hauteur minimale (0), et la valeur d'index 255 correspondra à la hauteur maximale (1). Pour voir la palette d'une image et les index correspondants, utilisez un logiciel de dessin ou un utilitaire spécialisé.

Si l'image est en 256 niveaux de gris, c'est la valeur de gris qui déterminera la hauteur. Le noir correspondra à la hauteur minimale (0), et le blanc correspondra à la hauteur maximale (1). Attention, il est possible qu'une image en niveau de gris soit en réalité une image en 256 couleurs dont la palette est composée de nuances de gris, mais pas classées par ordre de luminosité. Faites donc bien attention en manipulant les images dans les logiciels de dessin.

Si l'image est en 16 millions de couleurs, seuls les deux premiers octets de la couleur (rouge et vert) seront utilisés, pour obtenir 65 536 niveaux (chacune des trois couleurs étant codée sur 8 bits, 8 + 8 = 16 bits). Nous reparlerons plus loin de cette possibilité.

Enfin, si l'image est en 65 536 niveaux de gris (seul le format PNG permet cela), POV-Ray l'utilisera pour déterminer 65 536 niveaux. Nous en reparlerons aussi.

Dans tous les cas, le height_field résultant sera, avant transformations éventuelles, contenu dans un cube allant de <0,0,0> à <1,1,1>, indépendamment de la résolution et du type de l'image. Chaque ensemble de quatre points contigus donnant deux triangles, une image avec une résolution de N sur M points donnera (N-1)*(M-1) rectangles, qui seront finalement divisés en 2*(N-1)*(M-1) triangles. Donc, pour résumer, la résolution de l'image détermine la finesse du height_field sur X et Z, tandis que la profondeur de couleurs détermine la finesse sur Y.

Formats de fichiers utilisés

Les types de fichiers qui permettent de créer un height_field sont spécifiés par l'un des mots clés suivants: tga, png, pgm, ppm, ainsi que sys qui désigne le format spécifique du système d'exploitation (par exemple le bmp de Windows ou le pict du Macintosh). Voici un tableau récapitulatif des différents types de fichiers et de leurs propriétés.

mot clénom completnombre de couleursremarque
tgaTarga16 millions
pngPortable Network Graphics16, 256, gris, 65 000, 16 millionsFormat compressé sans pertes, très polyvalent.
pgm(déclinaison du pbm)256 niveaux de grispropre au monde Unix
ppm(déclinaison du pbm)16 millionspropre au monde Unix

Attention : l'emploi du format sys ne favorise pas la portabilité d'une scène d'une plate-forme à l'autre...

En raison d'éventuels problèmes légaux vis à vis de l'utilisation de l'algorithme de compression du format GIF, il est très probable que ce format soit exclu des versions futures de POV-Ray (ainsi que le "POT"). Pour plus d'info : burnallgifs.org

Dans une vaste majorité de situations, le PNG sera le meilleur choix, pour sa souplesse et son universalité.

Aller vers la page qui détaille l'utilisation des height_fields en 16 bits

les autres options

water_level

Ce paramètre optionnel, suivi d'un nombre décimal entre 0 et 1, indique à POV-Ray d'ignorer les parties du height_field qui se trouvent en dessous d'une certaine altitude. La valeur par défaut est 0. Par exemple, water_level 0.5 permet de dire à POV-Ray de ne représenter que la moitié supérieure du height_field, la moitié inférieure étant "sous l'eau". L'utilisation de water_level permet un calcul plus rapide que si on avait utilisé difference ou clipped_by. water_level peut aussi être utilisé pour couper des parties basses du height_field non désirées. Par exemple, si vous avez une image fractale sur un fond uniforme, et que ce fond est l'index 0 de la palette, vous pouvez enlever le fond du height_field en spécifiant water_level 0.001.

water_level 0.5

smooth

Normalement, les height_field ont un aspect crénelé, car ils sont constitués de plein de triangles plats. Ajouter le modificateur smooth permet à POV-Ray de modifier le vecteur normal de chaque triangle de manière à ce que l'interaction de chaque triangle avec la lumière donne au height_field un aspect plus lissé. Ceci permet d'utiliser des fichiers avec des résolutions plus petites (donc moins d'occupation en mémoire) pour un résultat équivalent à un "gros" fichier. Cependant, ces triangles lissés (smooth_triangle) demandent un temps de (pré-)calcul plus long. La valeur par défaut de ce paramètre est off. vous pouvez également faire suivre smooth par un booléen: smooth on ou smooth off.

Attention ! Votre height_field aura l'air plus lisse, mais ne le sera effectivement pas plus (lisse). Il sera toujours constitué du même nombre de triangles. Si vous regardez votre height_field de profil, vous le verrez toujours aussi crénelé.

hierarchy

Ce mot clé permet d'activer ou de désactiver un système d'optimisation pour le calcul des intersections. Par défaut, il est activé, mais vous pouvez l'interdire en spécifiant hierarchy off, pour de petits height_field (c'est-à-dire, à basse résolution), ce qui permettra un léger gain de temps de calcul. La plupart du temps, on peut ignorer ce paramètre.

Exemple

 
//un height_field avec son image mappée dessus
height_field
{
  png "plasma3.png"
  smooth
  texture
  {
    pigment
    {
      image_map { png "plasma3.png" map_type 0 interpolate 2 once }
      rotate x*90
      //notez bien la manoeuvre de rotation qui vise à "rabattre"
      //l'image du height_field sur lui-même
    }
  }
}

Vous trouverez ici un exemple détaillé de l'utilisation des height_fields dans un cas courant.

CSG

Fonctionne parfaitement en CSG, l'intérieur et l'extérieur étant bien définis. Attention : l'intérieur ne se limite pas à la portion du cube en "dessous" de la surface du height_field, mais s'étend, par en dessous, à l'infini, un peu comme c'est le cas avec un plan.

remarque

Si vous déclarez un objet height_field, et que vous l'utilisez plusieurs fois dans une même scène, la place utilisée en mémoire sera la même (ou presque) que si vous ne l'utilisez qu'une seule fois.

Rédacteur: Christophe Bouffartigue (Bouf)