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

photon mapping - approche rapide

Avant de voir la syntaxe complète, qui est assez complexe, nous allons voir comment travailler avec le minimum syndical.

dans les réglages généraux

global_settings {
  photons {
    spacing EspacementPhotons | count NombrePhotons    // décimal | entier  
    [gather CollecteMin, CollecteMax]                  // entiers
    }
}

spacing permet de spécifier l'espacement moyen entre deux photons qui arrivent sur la surface d'un objet. Le nombre de photons envoyés sera lié à cet espacement. En toute logique, puisqu'il s'agit d'unités d'espace sur une surface, diviser l'espacement par deux reviendra à quadrupler le nombre de photons employés. Une bonne valeur de départ est 0.1.

count, utilisé à la place de spacing, permet de spécifier le nombre approximatif de photons à employer, et POV-Ray tentera de s'en approcher en ajustant l'espacement de manière automatique. Observez l'indication du nombre de photons envoyés, en bas de la fenêtre, afin de voir si ce nombre est proche de celui souhaité. Une bonne valeur de départ est 5000.

gather spécifie, pour chaque point calculé, le nombre minimal et maximal de photons à évaluer. Les valeurs par défaut sont 20 et 100, parfaitement valables pour la plupart des rendus, mais pendant les essais, on peut carrément descendre à 5 et 15.

dans les objets sensibles aux photons

object{
  MyObject
  photons {
    target
    refraction on/off
    reflection on/off
  }
}

Le mot clé target dit que l'objet doit recevoir des photons. Il pourrait éventuellement être suivi d'un nombre décimal, coefficient du nombre de photons reçus par l'objet par rapport à l'espacement global. Donc, si on met 0.5, l'objet recevra quatre fois plus de photons.

Les mots clés refraction et reflection, suivis d'une valeur booléenne, spécifient si l'objet est sensible aux catacaustiques et/ou aux diacaustiques.

exemple

Avec ce que nous avons vu, nous pouvons déjà largement profiter des photons, le reste des paramètres permettant un ajustement plus fin. Voici un exemple de diacaustiques :

#include "colors.inc"

camera {location <2,10,10> direction z*1 look_at <0,5,0>}
plane {y,0 pigment {checker color SteelBlue color SteelBlue*.95}}

global_settings {
  photons {
    spacing .1
    gather 5,15
    }
}

cylinder {<0,1,0>,<0,5,0>,1.5 pigment {White filter .8} interior {ior 1.3}
            photons {
             target .5
             refraction on
             reflection off
             }
          }

light_source {<5,8,4> White*2}
diacaustiques

Attention, il n'est pas rare que, en faisant des essais, les caustiques n'apparaissent pas dans toute leur splendeur. Il faut savoir que leur apparition dépend très sensiblement de la position relative des sources et des objets. Si vous prenez une bouteille d'eau (une vraie) et que vous essayer d'"attraper" les caustiques, vous verrez que certaines positions ne donnent presque pas de caustiques. Il vous faudra donc, parfois, un peu chipoter avec les positionnements pour obtenir un résultat intéressant.

Pour les catacaustiques, on peut faire comme ceci :

cylinder {<0,1,0>,<0,5,0>,1.5 pigment {OrangeRed} normal {spiral1 1 scale .8} finish {reflection .5} 
            photons {
             target .2
             refraction off
             reflection on
             }
          }
catacaustiques

Vous remarquerez au passage que les normales sont prises en compte par les photons, ce qui permet, par exemple, de simuler les catacaustiques provoquées par une surface d'eau sur un mur.

Bien entendu, quand la matière de l'objet le justifie, on peut demander la prise en compte des catacaustiques ET des diacaustiques.

Un dernier exemple, pour montrer que les photons étant passés à travers, ou ayant rebondi sur un objet, continuent leur "chemin" et peuvent à nouveau rebondir ou dévier. Dans l'exemple, les diacaustiques provoqués par le cylindre en verre arrivent sur une sphère réfléchissante, qui en renvoie une partie en catacaustiques sur le sol.

#include "colors.inc"

camera {location <2,10,10> direction z*1 look_at <0,5,0>}
plane {y,0 pigment {checker color SteelBlue color SteelBlue*.95}}

global_settings {
  photons {
    spacing .1
    gather 5,15
    }
}

cylinder {<0,1,0>,<0,5,0>,1.5 pigment {White filter .8} interior {ior 1.3}
            photons {
             target .5
             refraction on
             reflection off
             }
          }   

sphere {<0,2.5,0>,2.5 pigment {OrangeRed} finish {reflection .5} 
            translate <-3,0,-4>
            photons {
             target .2
             refraction off
             reflection on
             }                
             }
light_source {<5,8,4> White*2}
diacaustiques + catacaustiques

C'est beau, quand même !

Rédacteur: Fabien Mosen