• Facile

Ce cours est visible gratuitement en ligne.

Vous pouvez être accompagné et mentoré par un professeur particulier par visioconférence sur ce cours.

J'ai tout compris !

Mis à jour le 08/01/2013

Les textures

Connectez-vous ou inscrivez-vous gratuitement pour bénéficier de toutes les fonctionnalités de ce cours !

Enfin, vous allez pouvoir donner à vos objets la touche qui leur manquait : le reflet. Finis les effets de plastique mou, finis les couleurs ternes. Voici les textures !

Comprendre la texture

Tout d'abord, qu'est-ce qu'une texture ?? :euh:
Un pigment est une méthode pour donner à chaque point de l'espace une couleur (mais, les surfaces étant souvent opaques, nous ne voyons le résultat que "plaqué" sur la surface).
Une texture, elle, est une méthode pour donner à chaque point de l'espace une couleur, mais également plusieurs autres paramètres, et notamment les reflets. :D

Une texture peut avoir jusqu'à 3 éléments :

  • Un "pigment", pour définir la couleur naturelle de l'objet.

  • Un "finish", pour définir la finition, c'est-à-dire déterminer les reflets de l'objet.

  • Une "normal", pour définir le relief apparent de l'objet.

Pour chaque élément, il faudra ouvrir une zone à l'intérieur de la zone texture.
En fait, la texture se contente de regrouper ces trois paramètres, afin de donner un résultat plus clair à lire. Nous avons déjà utilisé des pigment à l'extérieur d'une texture, il est de même possible de spécifier des normal ou des finish à l'extérieur de texture... mais c'est déconseillé. ;)

Ces trois paramètres sont indépendants : vous pouvez parfaitement, par exemple, dans une texture, définir un pigment et un finish, mais pas de normal...

Comment ça marche ? On commence par créer une zone texture dans l'objet, à la place de la zone pigment. Ensuite, on ajoute une zone pigment si l'on veut mettre un pigment, une zone normal si l'on veut mettre une normale, et une zone finish si l'on veut ajouter une finition...

Finish

La zone finish de la texture permet de spécifier pas mal de paramètres, qui règlent les effets de la lumière sur l'objet. Parmi ces effets, il y a les reflets ! :D

Commençons avec une sphère rouge (où le pigment est dans la zone texture), et ajoutons-lui une zone finish :

sphere {
  <0,0,0>
  1
  texture {
    pigment {
      rgb <1,0,0>
    }
    finish {
      ...
    }
  }
}

Sachez que TOUT ce que nous mettrons dans finish est optionnel.

Eclairage ambiant / éclairage diffus

Lorsqu'un objet est éclairé, on peut distinguer deux parties : une partie éclairée, et une partie non éclairée.
Pour que les parties non éclairées puissent quand même être vues, un niveau d'éclairage minimal existe.

Ambient

Le mot-clé ambient permet de spécifier cette lumière ambiante pour l'objet. La valeur par défaut est 0.1 (c'est-à-dire rgb <0.1,0.1,0.1>), ce qui explique pourquoi les zones non éclairées sont vraiment très sombres.
On peut modifier cette valeur, par exemple pour la mettre à 0 :

Ambient 0
Ambient par défaut
Ambient 0.4
Diffuse

La valeur de diffuse permet de contrôler la luminosité de l'objet dans les zones où il est éclairé.
Elle donne la proportion de lumière que l'objet renvoie. Par exemple, la valeur par défaut de 0.6 signifie que 60% de la lumière que l'objet reçoit est renvoyée (et donc que 40% est absorbée).
La valeur par défaut est souvent assez bien, donc à moins d'avoir affaire à un objet spécial, vous n'aurez pas trop besoin d'y toucher.

Diffuse 0.2
Dffuse 0.6
Diffuse 1
Brilliance

L'angle que fait la lumière avec la normale (la perpendiculaire) de la surface agit sur la quantité de lumière reçue : plus l'angle est faible, plus la lumière sera forte :
Image utilisateur
brilliance permet de contrôler le dégradé entre angle faible et angle fort. Plus la valeur est basse, plus le dégradé est court et brutal ; à l'inverse, plus elle est élevée, plus le dégradé est long et progressif.
La valeur par défaut est 1.
On peut utiliser des valeurs basses pour donner un effet cartoon :

sphere {
  <0,0,0>
  1
  texture {
    pigment {
      rgb <1,0,0>
    }
    finish {
      brilliance 0.1
    }
  }
}
Image utilisateur
Image utilisateur
Image utilisateur

Ooohh ça brille !

Voyons maintenant ce que les gens veulent en général : avoir quelque chose qui brille ! Que ce soit de l'eau, de la soie, du métal ou du plastique, on veut de jolis reflets. Voici comment faire.

Il y a deux méthodes de simulation des reflets. Ces deux méthodes ne sont pas incompatibles, il peut être intéressant de mélanger les deux.

Première méthode : phong

La méthode phong permet de donner aux objets une tache de lumière qui rappelle un peu le plastique :

Phong 1

Il utilise 2 mots-clés : phong et phong_size.

  • phong donne l'intensité de la tache lumineuse en fonction de la source de lumière : une valeur de 1 donnera une tache de la même couleur que celle de la lumière, une valeur de 0.5 une tâche dont la couleur sera la moitié de celle de la lumière, etc.

  • phong_size détermine la taille de la tache. La valeur par défaut est 40. Une valeur plus grande donne une tache plus resserrée, tandis qu'une valeur plus basse donne une tache plus étalée.
    :o
    Eh oui, phong_size marche à l'envers. Il faut monter la valeur pour baisser la taille... >_

Image utilisateur
Image utilisateur
Image utilisateur
Deuxième méthode : specular

Tandis que phong donne un effet de vernis, la méthode specular donne un aspect plutôt satiné, moins mordant. Le résultat est censé être plus réaliste que phong...

Image utilisateur

Ici aussi, deux mots-clés sont utilisés : specular et roughness.

  • specular joue ici exactement le même rôle que phong : il contrôle l'intensité de la tâche lumineuse. Ici aussi, la valeur par défaut est 1.

  • roughness a pour but, comme phong_size, de contrôler la taille de la tache, mais l'effet est cette fois-ci à l'endroit : plus on augmente la valeur de roughness, plus la tâche est grosse (et vice-versa). La valeur par défaut est 0.05.

Image utilisateur
Image utilisateur
Image utilisateur
Metallic

Il suffit d'ajouter le mot-clé metallic dans la zone finish pour que la tache lumineuse (phong ou specular, ça marche pour les deux) ne dépende plus de la lumière, mais de la couleur de l'objet lui-même... Le résultat devrait mieux ressembler aux reflets métalliques.
Pour laisser quand même une petite influence à la source de lumière, on peut ajouter une valeur après metallic. La valeur par défaut est 1, ce qui veut dire que la lumière n'a aucune influence. La valeur 0 indique que l'objet n'a plus d'influence (c'est-à-dire que metallic n'a plus d'effet).

Image utilisateur
Image utilisateur
Image utilisateur
Réflexions

Le mot-clé reflection permet de rendre un objet réfléchissant.
Alors que phong et specular permettent de faire ressortir une tache de lumière, reflection permet à l'objet de se comporter comme un véritable miroir.
reflection a carrément droit à sa zone à lui tout seul dans finish ^^ :

finish {
    reflection {
        
    }
}

Maintenant, qu'est-ce qu'on va mettre dans cette zone ?
Tout d'abord, un vecteur couleur (sans le rgb ! Juste le vecteur) qui correspond à la couleur de la réflexion qui sera ajoutée à la couleur de base de l'objet... Les miroirs normaux prennent des tons de gris (car ils réfléchissent de la même manière toutes les couleurs), c'est-à-dire où les valeurs de rouge, de vert et de bleu sont égales, comme <0.5,0.5,0.5>. Or, <0.5,0.5,0.5> peut aussi s'écrire 0.5. Donc, la plupart du temps, il suffira de mettre une valeur, allant de 0 (pas de réflexion) à 1 (miroir parfait).

Un miroir parfait aura une couleur noire (donc pas d'influence sur l'image), et une couleur de réflexion de 1 :

texture {
  pigment { rgb 0 }
  finish {
      reflection { 1 }
  }
}
Réflexion
  • Il est possible d'utiliser une méthode de réflexion plus réaliste... Dans la vraie vie, un miroir est moins réfléchissant si on le regarde de face que de côté (cette différence est infime sur les miroirs parfaits, mais se voit mieux sur des objets peu réfléchissants comme de l'eau, du lineau, etc...). Il est donc possible de donner deux valeurs de réflexions : l'une, qui correspondra à la réflexion de la surface lorsque l'on regarde la surface de face, et une autre, plus grande, qui correspond à la réflexion lorsque l'on regarde la surface parallèlement. Les valeurs intermédiaires sont obtenues en mélangeant plus ou moins les deux.

    Pour enclencher ce phénomène, il suffit d'indiquer deux vecteurs (ou deux valeurs) au lieu d'un seul : le premier sera la réflexion de face, l'autre la réflexion de côté.

  • Lorsque l'on indique deux valeurs de reflection, il est possible de spécifier à quelle vitesse les valeurs passent du maximum au minimum, grâce au mot-clé falloff, suivi d'un nombre. Une valeur de 1 signifie un dégradé linéaire, une valeur de 2 donne un dégradé du 2ème degré, etc...

  • exponent permet de faire en sorte que, lorsque le miroir est un peu sombre, les objets clairs et les objets sombres ne soient pas assombris de la même façon dans le reflet.
    La valeur par défaut de exponent est 1, ce qui veut dire que les objets clairs et sombres sont assombris identiquement. Des valeurs plus basses permettent d'assombrir les objets sombres en laissant les objets clairs moins assombris...
    Sans cela, des sources très lumineuses (telles que le Soleil) peuvent paraître ternes dans des reflets.
    Ce paramètre est totalement artistique et ne correspond pas vraiment à une réalité physique, donc vous devrez tâtonner pour trouver une bonne valeur.

  • Ici aussi, il est possible d'ajouter le mot-clé metallic, éventuellement suivi d'un nombre, afin que la couleur de l'objet influe sur la réflexion. Cela peut être intéressant pour des objets multicolores, comme des boules de Noël.

  • Enfin, lorsque vous ferez des objets transparents et réfléchissants, la somme [lumière qui traverse + lumière réfléchie] peut ne pas respecter les lois de la physique de la conservation de l'énergie : par exemple, un point très réfléchissant devrait être quasiment opaque.
    Pour activer cela, il suffit d'ajouter conserve_energyà l'extérieur de la zone reflection, mais dans la zone finish.

Image utilisateur
Image utilisateur

Iridescence*

Il est possible de donner à l'objet des reflets irisées, donnant un effet "bulles de savon"...
Pour cela, il faut ouvrir une zone irid à l'intérieur de la zone finish.
La première chose à mettre est une valeur, obligatoire, donnant l'intensité de l'iridescence*. Essayez avec des valeurs près de 0.25, puis montez si cela ne suffit pas... C'est une valeur assez empirique ! :-°
Ensuite, on peut ajouter 2 paramètres : thickness et turbulence.

* l'iridescence est un phénomène selon lequel une surface paraît de couleur différente selon l'angle sous lequel on la regarde ou selon l'angle selon lequel elle est éclairée. Définition Wikipédia.

thickness

Même si thickness n'est pas vraiment obligatoire, il est fortement conseillé, car sans lui, l'iridescence est relativement moche.
thickness fait varier la densité des bandes colorées, des valeurs plus élevées correspondent à des bandes colorées plus fines et plus nombreuses.

turbulence

turbulence n'a ici rien à voir avec celui que l'on retrouve dans les motifs ^^ . Suivi ici d'un nombre décimal (souvent inférieur à 1), il fait varier un peu thickness.

Voici un exemple de bulle de savon :

sphere {
  <0,0,0>
  1
  texture {
    pigment { rgbt <1,1,1,0.9> }
    finish {
      reflection { 0.3, 0.6 }
      irid { 0.7 thickness 0.5 turbulence 0.5 }
      conserve_energy
    }
  }
}
Image utilisateur

Ça y est, vous savez tout sur la zone finish ! Cela vous permettra de faire du verre (transparent grâce au pigment + reflection grâce à finish), de l'eau, du métal, etc... la seule limite étant votre imagination !

Normal

Normal ?? Tu veux dire que jusqu'ici, ce qu'on faisait n'était pas normal ??

Meuh non ! :p La "normale" (normal en anglais), c'est en fait la perpendiculaire à la surface (vous vous souvenez de plane ? C'est la normale justement que l'on indiquait !).

Par exemple, supposons que l'on veuille faire une sphère cabossée. On ne va quand même pas faire toutes les bosses et les creux en relief, ce serait très long (et très ennuyeux) !
Mais qu'est-ce que viennent faire les normales ?...
Et bien, on va demander à POV-Ray de modifier la normale des points !
Quel sera le résultat ?...
POV-Ray va donner à chaque point de la sphère une hauteur virtuelle, un peu différente de sa hauteur normale. On va donc se faire une "sphère cabossée virtuelle". Ensuite, il va traiter chaque point de la sphère (de la vraie cette fois) comme s'il s'agissait de l'autre...
o_O
Ça change quoi ? Eh bien, les effets de lumière, tels que les ombres ou les reflets, seront appliqués comme si la sphère avait réellement du relief (alors qu'en "réalité", elle reste une bête sphère !), donnant ainsi l'impression que la sphère est en relief.

Pas convaincu ? Voilà un exemple :

Image utilisateur

On dirait bien qu'elle est cabossée, notre sphère, non ?

Mais si l'on coupe cette sphère, regardez ce que l'on a :

Image utilisateur

On voit bien qu'en réalité, la sphère reste lisse. Mais l'effet est bien trompeur !

Bon, vous voulez savoir comment utiliser ces superbes normales ? :lol:
Allez hop, on ouvre une zone normal dans notre zone texture :

texture {
    pigment { ... }
    normal {

    }
}

Mais comment dire à POV-Ray de quelle manière on veut donner du relief à notre objet ?...
On va utiliser un motif ! :D

Un motif ?? Mais je croyais que c'était pour les pigments !?!

Oui ! Mais pas uniquement !
Rappelez-vous, le motif se contente de donner à chaque point de l'espace une valeur, de 0 à 1 ;) .
On peut l'utiliser dans un pigment avec des couleurs, mais aussi dans une normale ! Dans ce cas-là, la valeur sert à donner la hauteur virtuelle du point.
Vous pouvez utiliser tous les motifs que nous avons déjà vus, sauf ceux présentant de trop fortes transitions (les motifs à liste, cells, etc...).

Tout comme avec les pigments, il faut ici écrire simplement le nom du motif dans la zone "normal" et le tour est joué !

Il est aussi possible, tout comme avec les motifs, d'utiliser scale, rotate et translate (même si on ne se servira presque que de scale, puisque les motifs sont généralement... grands... trop grands).

Voilà un exemple complet :

camera {
        location <0,2,-3>
        look_at <0,0,0>
}

light_source {
        <1,2,-3>
        rgb <1,1,1>
}

sphere {
        <0,0,0>
        1.5
        texture {
                pigment {
                        rgb <1,0,0>
                }
                finish {
                        specular 1
                }
                normal {
                        wrinkles scale 0.4
                }
        }
}

Image utilisateur

Plutôt sympa, non ?

Voilà la même boule, avec un motif bumps scale 0.2 :Image utilisateur

Il est possible de régler l'amplitude maximale du relief avec bump_size, suivi d'une valeur. On peut enlever bump_size et mettre uniquement la valeur, s'il n'y a pas de scale, ou autre chose avant (sinon il pourrait y avoir confusion). Ce n'est pas très utile, et pas très clair non plus, donc je vous conseille de mettre quand même bump_size.
Il est difficile de donner une bonne valeur, vu que ça dépend énormément des dimensions de l'objet... essayez, vous verrez bien si ça va !

Indice de réfraction...

Ce dernier paramètre ne fait pas vraiment partie de la texture, mais il peut être très utile dans la conception d'objets transparents : c'est l'indice de réfraction.
Il se définit dans une zone interior, qui se place dans l'objet, tout comme texture.
Plusieurs paramètres peuvent être utilisés dans interior, mais un seul nous intéressera ici : ior (Indice Of Refraction), qui sera suivi d'une valeur (l'indice de réfraction justement).
A quoi ça sert ? Eh bien, lorsque la lumière passe à travers un objet transparent, elle est déviée, en fonction de la densité de l'objet. L'air et le vide sont les matériaux les moins denses, et leur indice de réfraction est de 1. Tous les autres matériaux ont des indices de réfraction supérieurs à 1.
Plus l'objet est dense, plus l'indice de réfraction est élevé, est plus la lumière est déviée.
Par défaut, la valeur est 1 (comme l'air) ce qui est très rare dans la vraie vie.
Voici quelques indices de réfractions :
l'eau : 1.33
le verre : 1.5
le diamant : 2.4.

Voici un exemple de verre :

camera { location -3*z+y look_at 0 }

light_source { 3 rgb 1 }

box { -5, 5 pigment { checker } }


sphere {
  0, 1
  pigment { rgbf 1 }
  interior { ior 1.5 }
}
Sphere de verre

Et voilà ! Vous savez désormais tout sur les textures. A présent, vous pouvez à peu près tout faire...
Par exemple, essayez de faire de l'eau : une couleur bleu-blanc assez claire, une bonne dose de filter (n'hésitez pas à dépasser 0.9), un peu de réflexion, et une normale en ripples !
Pour du métal, mettez un gris moyen et un peu de réflexion...
Bon, ça peut vous paraître un peu déroutant au début, mais vous vous habituerez vite ;) .

Exemple de certificat de réussite
Exemple de certificat de réussite