Aller au menu - Aller au contenu

Icône La puissance de pigment

Mise à jour : 01/07/2010
525 visites depuis 7 jours, dont 3 sur ce chapitre classé 218/786
Vous pensiez que pigment ne pouvait vous donner qu'une bête couleur ? Vous vous trompiez ! :lol: Pigment peut bien plus que ça...
Sommaire du chapitre :
Icône du chapitre
Chapitre précédent Sommaire Chapitre suivant

La nature cachée de pigment...

Tout d'abord, pigment, il fait quoi en fait ?...

Il donne la couleur de l'objet...
o_O Et en quoi c'est différent de ce qu'on sait dans ce cas ?...
Et bien, pigment ne se limite pas à une simple couleur unie... on peut, bien sûr, l'employer comme on l'a fait jusque là, mais on peut faire tellement plus de choses : des motifs, des objets transparents, ... vous verrez, on va mettre bien plus dans notre zone pigment que le simple rgb...

rgb, rgbf, rgbt, rgbft...

Commençons par la couleur elle-même : jusqu'ici, elle se limitait à quelque chose du genre :
rgb <1,0.3,0>.
Les valeurs étaient comprises entre 0 et 1, pour commencer. Ça peut paraître normal, mais on peut les dépasser !
Une valeur supérieure à 1 commence à "créer" sa propre lumière : si vous mettez un objet de couleur rgb <4,0,0> dans le noir, vous le verrez...
De même, mettre une couleur négative aura tendance à supprimer les couleurs...

Les valeurs négatives trouvent peu d'utilité dans les objets, en revanche, elles peuvent obtenir des effets très sympathiques dans les sources de lumière ! Une source de lumière de couleur rgb <-1,-1,-1> aura tendance à absorber la couleur... Bien qu'étant totalement irréaliste, cela peut être utile pour certains effets spéciaux... A l'inverse, donner des valeurs supérieures à 1 à une lumière aura un effet dynamique sur la scène... Essayez, ça ne peut rien vous coûter !

Mais les valeurs de rouge, de vert et de bleu ne sont pas tout. La "couleur" d'un objet peut prendre 2 autres paramètres : transmit et filter.
Ces deux paramètres sont tous deux utilisés pour définir une certaine transparence, mais de deux types :
  • une grande valeur de transmit laisse passer la lumière à travers l'objet sans la modifier. La lumière passera plus ou moins, mais sortira inchangée au niveau de sa couleur.
  • Une haute valeur de filter laisse passer la lumière, mais en modifiant sa couleur : un objet rouge laissera passer la lumière rouge, etc. Ce paramètre est surtout utilisé pour les filtres (d'où son nom).

Comment utiliser ces paramètres ?...
Si on regarde bien, dans rgb <1,0.9,0.5>, r, g et b indiquent chacun le type de paramètre d'une valeur. r pour red, g pour green et b pour blue. Pour indiquer une valeur de filter ou de transmit, il suffit d'ajouter f ou t, selon le paramètre à régler, ou les deux. Ainsi, ce n'est plus 1, mais 4 mots-clés possibles que l'on peut mettre devant un vecteur :
  • rgb avec un vecteur couleur à 3 dimensions (rouge, vert, bleu)
  • rgbf avec un vecteur couleur à 4 dimensions (rouge, vert, bleu, filter)
  • rgbt avec un vecteur couleur à 4 dimensions (rouge, vert, bleu, transmit)
  • rgbft avec un vecteur couleur à 5 dimensions (rouge, vert, bleu, filter, transmit).

Par exemple, rgbt <1,0,0,0.5> sera un rouge un peu transparent mais n'influençant pas la lumière le traversant.
Ne confondez pas rgbft et rgbtf. Ce dernier n'existe pas !

Autre chose : lorsque la somme transmit + filter dépasse 1, l'objet laisse passer plus de lumière qu'il n'en reçoit, conduisant la plupart du temps à des résultats étranges...

Voilà un simple exemple d'utilisation de transmit :

Code : C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
camera {
    location <0,1.5,-2.3>
    look_at <0,0.5,0>
}


light_source {
    <2,3,-3>
    rgb <1,1,1>           
}  
                                
plane { 
    y
    0
    pigment { rgb <0.6,0.2,0.5> }
}                                
  
box {
    <-0.5,0,-0.5>
    <0.5,1,0.5>
    pigment { rgbt <1,1,1,0.6> }
}

Ceci aura pour résultat :
Image utilisateur


Vous allez maintenant comprendre l'utilité du merge dans le code suivant :
Prenons deux sphères à moitié transparentes, unies par une union :
Code : C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
union {
    sphere {
        <-0.3,0.5,0>
        0.5
        pigment { rgbt <1,1,1,0.7> }
    }
    sphere {
        <0.3,0.5,0>
        0.5
        pigment { rgbt <1,1,1,0.7> }
    }
}

Voici le résultat :
Image utilisateur
On distingue bien les bords intérieurs des sphères... et cela peut souvent être gênant !
Utilisons merge :
Code : C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
merge {
    sphere {
        <-0.3,0.5,0>
        0.5
        pigment { rgbt <1,1,1,0.7> }
    }
    sphere {
        <0.3,0.5,0>
        0.5
        pigment { rgbt <1,1,1,0.7> }
    }
}

Et voilà le résultat :
Image utilisateur
Plus satisfaisant, n'est-ce pas ? ^^
Une seule chose est à éviter : donner une valeur de filter à un objet noir. Le filter fonctionne par multiplication ; son utilisation avec une couleur noire sera sans effet, et l'objet restera opaque !
Par contre, transmit fonctionne sans erreur avec le noir.

Les motifs

Voici la meilleure partie de pigment : la possibilité d'indiquer non pas une valeur unie, mais un motif de couleurs (pouvant être transparentes, évidemment).

Pour comprendre ce qu'est un motif, il faut savoir exactement ce qu'est un pigment : c'est un système qui donne à chaque point de l'espace une couleur (qui peut éventuellement être transparente).
Oui, vous avez bien lu, à chaque point de l'espace, et non simplement de la surface.
Ainsi, lorsque l'objet est opaque, vous n'en voyez que la surface. La couleur de cette surface est obtenue en prenant la couleur que lui attribue le pigment en ce point...
o_O
Bon, quand la couleur est unie, la couleur est la même dans tout l'espace, donc sur tout l'objet. Mais imaginez qu'il existe un moyen de donner une couleur différente à chaque point en fonction de sa position dans l'espace...
Eh bien c'est exactement ce que font les motifs. Les motifs permettent de donner une "règle" à pigment, pour lui indiquer comment positionner les couleurs dans l'espace. La surface de l'objet aura donc la couleur des points dont elle est constituée...
:waw:
Vous avez compris ?...
En gros, pigment donne à chaque point une couleur. Motif permet de faire varier cette couleur, donc de dessiner des espèces de motifs sur les surfaces ^^ , et non de simples couleurs unies.

Pour cela, on commence par vider notre zone pigment :
Code : C
1
2
3
pigment {

}

Ensuite, on met le type de motif que l'on souhaite utiliser. Il y en a pas mal, je vous les décrirai plus tard.
Deux types de motifs sont disponibles :
  • les motifs "à liste", qui n'utilisent qu'un nombre restreint de couleurs, que l'on spécifie dans une liste (par exemple, rouge et vert uniquement).
  • Les motifs "à carte", qui utilisent un très grand nombre de couleurs par dégradé des valeurs données.

o_O Tout ça ne doit pas vous dire grand-chose...
Mais ça ira mieux quand je vous aurai expliqué !

Les motifs "à liste"



Ces motifs sont en fait les plus simples à comprendre et à utiliser. Imaginez que vous donniez une liste de couleurs, par exemple rouge (rgb <1,0,0>) et vert (rgb <0,1,0>). Le motif va créer des zones, et en remplir certaines de rouge, et d'autres de vert. C'est aussi simple que ça !
Prenons par exemple le motif checker (vous verrez la liste complète des motifs dans le prochain chapitre), qui prend une liste de 2 couleurs. Ce motif crée un échiquier, et donne alternativement aux cases les deux valeurs de la liste.
Comment l'écrire, cette liste ? :o Tout simplement en écrivant à la suite les couleurs, juste après le type du motif !
Ainsi,
Code : C
1
2
3
4
5
pigment {
  checker 
    rgb <1,0,0>
    rgb <0,1,0>
}

donnera un quadrillage rouge et vert : utilisé dans un plan, voilà le résultat :
Image utilisateur

Pour utiliser un motif à liste, il suffit donc d'écrire dans la zone pigment le type de motif, suivi des couleurs utilisées.


Les motifs "à carte"



Les motifs "à carte" (colormap en anglais) assignent à chaque point une valeur allant de 0 à 1, et donne à ce point la couleur correspondante à cette valeur. La "carte des couleurs" permet d'indiquer la couleur en fonction du nombre. Les différents motifs répartissent différemment ces valeurs de 0 à 1...

Par exemple, le motif onion déploie les valeurs de 0 à 1 de manière circulaire et répétée, comme sur le schéma :
Image utilisateur
Ici, blanc = 0 et noir = 1.
Là encore, je détaillerai tous les motifs à carte dans le prochain chapitre.

Maintenant, parlons de ce colormap (j'utiliserai ce terme plutôt que "carte des couleurs"). Faut-il définir pour chaque décimale la valeur de la couleur ?... :( Ce serait bien long et fastidieux !
Heureusement, il y a bien plus simple. Pour définir un colormap, il suffit de donner à certaines valeur une couleur spécifique, POV-Ray se chargera alors de compléter le reste en dégradant les couleurs !

Pour bien comprendre comment marche le color_map, voilà un schéma :
Image utilisateur

Par exemple, sur le plan avec l'onion au-dessus, on avait mis la couleur blanche à la valeur 0, et la couleur noire à la valeur 1 : le dégradé s'est alors fait tout seul !

Pour résumer,
Image utilisateur
On voit bien qu'au final, le pigment permet bien de donner à chaque point une couleur.

Maintenant que la théorie est passée, venons-en aux faits. Nous avons notre zone pigment, nous avons choisi le motif onion. Voici le code jusque là :
Code : C
1
2
3
pigment {
  onion
}

A présent, il est temps de définir le colormap. Pour cela, nous allons mettre une zone color_map à l'intérieur de la zone pigment :
Code : C
1
2
3
4
5
6
pigment {
  onion
  color_map {

  }
}

Pour donner la couleur en fonction du nombre, il suffit d'écrire le nombre en question, suivi de la couleur, et cela entre crochets. Ainsi, assigner "blanc" à la valeur 0 se fera ainsi :
Code : C
1
2
3
4
5
6
pigment {
  onion
  color_map {
    [0 rgb <1,1,1>]
  }
}


Vous comprenez ? Et si l'on veut mettre plusieurs couleurs, il suffit d'en ajouter d'autres : voilà donc le code entier du plan que nous avons vu :
Code : C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
plane {
    y
    0
    pigment {
        onion     
        color_map { 
            [0 rgb <1,1,1>]
            [1 rgb <0,0,0>] 
        }            
    }
}

Image utilisateur

Il est parfaitement possible d'assigner plus de deux couleurs ! Il y aura donc plusieurs dégradés successifs.

C'est tout pour le fonctionnement des motifs à carte !

Q.C.M.

A quoi sert transmit ?
Qu'est-ce qu'un motif ?
Où mettre le type de motif ?
Combien de couleurs utilise un motif à liste ?

Statistiques de réponses au QCM

Assez compliqué ce chapitre, n'est-ce pas ? Tout ça ne peut pas encore vous servir, il vous faut maintenant connaître les différents types de motifs. Malgré tout, un chapitre essentiel... Vraiment !
Chapitre précédent Sommaire Chapitre suivant

Partager

2 commentaires pour "La puissance de pigment"
Note moyenne : 3.96 / 4 (24 votes)
Pseudo Commentaire
Hors ligne Knacki # Posté le 31/08/2006 à 14:02:30

Franchement, j'attendais d'arriver à ce chapitre avec impatience ;)

Les trucs qu'on peut faire avec sont magnifiques, et jouer avec les effets de lumière c'est ce que je trouve de plus passionnant et de plus spectaculaire.

Tu expliques tout ca avec brio, tu conclues que ce chapitre est compliqué, mais avec quelques tests, on le comprend très bien.

Merci beaucoup, j'aime ce chapitre.

Cependant j'ai trouvé d'explication des colormap un peu trop théorique (mais y'a un expemple après :p )

Encore félicitations pour ce tuto :D

Secret (cliquez pour afficher)
19/20 (jpeux pas mettre 20)
Hors ligne titi.be # Posté le 24/11/2006 à 20:39:06
Avatar

C'est clair et ca permet de progresser rapidement :-° 19

Voir tous les commentaires