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

vers l'index des isosurfaces

les isosurfaces - fonctions de pigments

Nous allons maintenant voir une fonctionnalité extraordinaire des isosurfaces, la faculté d'employer un pigment comme fonction. La valeur de l'isosurface en un point donné de l'espace dépendra des composantes rouges et vertes de la couleur du pigment en ce point.

Puisque le déployement des pigments est infinis, il faut les "accrocher" à quelque chose, c'est pour cette raison que nous allons combiner un plan et un pigment :

#declare Plan_Y = function {x*0 + y*1 + z*0}
#declare Pig1   = function {pigment {granite scale 4}}

isosurface { 
  function {Plan_Y + Pig1*.5} 
  threshold 0   
  contained_by {box {-1,1}}
  accuracy .001
  method 2
  max_gradient 20
}

On remarquera que, comme avec l'exemple des cosinus, il est possible de contrôler l'amplitude et la fréquence du relief. Le scale dans la définition du pigment contrôle la fréquence, tandis que le coefficient multiplicateur à côté du nom du pigment, dans l'isosurface, détermine l'amplitude.

Le pigment peut être défini à l'aide de toutes les transformations et tous les modificateurs habituellement associables aux pigments.

Attention :

Selon la complexité des motifs employés, les temps de rendu peuvent devenir assez long, et la détermination d'une juste valeur de max_gradient est indispensable.

Les images suivantes montrent ce que différents types de motifs peuvent donner lors de leur "passage" en 3D. Étant donné l'infinité des possibilités, l'exhaustivité est exclue, alors, expérimentez !

cas particulier : emploi avec une image_map

Nous allons réinventer le height_field !!

#declare Map1   = function {
                             pigment {image_map {png "isohf" once} 
                             scale 2 rotate x*90 translate <-1,0,-1>}
                             }

isosurface { 
  function {Plan_Y + Map1*.4} 
  threshold 0   
  contained_by {box {-1,1}}
  accuracy .001
  method 2 
  max_gradient 55
}

Mais quel est l'intérêt de faire un height_field de cette manière, puisque c'est effroyablement plus lent ? L'intérêt, c'est de pouvoir combiner ce "height_field" avec toutes les possibilités des isosurfaces.

Pour commencer, celle de faire un "smooth" beaucoup plus efficace (sans "escaliers") en ajoutant simplement interpolate 2 ou interpolate 4 dans la définition de l'image_map (après "once").

Et surtout, la possibilité d'y superposer d'autres pigments, ce qui permet, par exemple, de moduler un relief pour lui donner un aspect rocailleux, même si la définition du "height_field" est faible, on n'y verra que du feu !

Il est également possible de créer un height_field sphérique par cette méthode. Nous n'expliquerons pas comment ici, 'n'avez qu'à chercher un peu, c'est très facile !

Lors des phases de test, vous pouvez mettre une valeur de max_gradient assez faible (entre 1 et 5). Il y aura quelques imperfections, mais ce sera nettement plus rapide !

Rédacteur: Fabien Mosen

suite : librairies de fonctions

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