7. HDR (High Dynamic Range)

7.1. Description

Les formats d'image 24 bits n'offrent que 256 niveaux pour les composantes rouge, vert, bleu d'un pixel. Paul Debevec a proposé un format HDR (High Dynamic Range) où chaque composante est codée sur 4 octets au lieu de 1. L'image comporte ainsi une bien plus grande dynamique d'intensité des couleurs. Ce patch permet d'utiliser ces fichiers .hdr. Le code de lecture des images est adapté du source de vrpic de James Bowman, un outil de visualisation des .hdr pour linux.

Ce patch ajoute de plus une nouvelle map_type (map_type 7) qui repositionne un environnement HDR sur une sphère. Ce nouveau mapping couplé à la radiosité permet un rendu dit HDRI (High Dynamic Range Illumination).

7.2. Syntaxe

image_map { hdr .... [map_type 7]}

Toutes les options d'image_map (interpolate, ..) restent valides.

7.3. Exemples

Exemple pour visualiser la dynamique en jouant sur le paramètre ambient.

image hdr avec ambient 1
Ambient 1
image hdr avec ambient 10
Ambient 10
image hdr avec ambient 30
Ambient 30
camera 
{
  orthographic
  location <.5,.5,-5> right 1*x up 1*y look_at <.5,.5,0>
}

plane 
{ 
  z,0 
  pigment { image_map { hdr "rosette.hdr" once interpolate 2} }
  finish { ambient 0.5 diffuse 0 }
}

7.4. Program

Look for #ifdef HDR_PATCH in sources

A new struct with 3 float (IMAGE_FLOAT_LINE) was added to image_struct. A new constant ISFLOATIMAGE for File_Type. The map_type 7 is calculated by function hdr_image_map in image.cpp.

Possible improvements/problems

  • There are other (better ?) HDR formats (with TIFF structure for instance)
  • An option to output a render in hdr format would be nice