Aller au menu - Aller au contenu

Icône Jouer avec les motifs

Mise à jour : 01/07/2010
525 visites depuis 7 jours, dont 6 sur ce chapitre classé 218/786
Vous savez déjà utiliser des motifs à la place d'une couleur unie...
Mais vous ne savez pas encore les modifier, ces motifs !
La plupart des motifs sont assez basiques (et donc moches)...
Mais il est possible de les améliorer ! En leur appliquant quelques modifications, on peut arriver à de très beaux résultats !
Sommaire du chapitre :
Icône du chapitre
Chapitre précédent Sommaire Chapitre suivant

Des modifications simples...

Les motifs répartissent les couleurs dans l'espace selon des lois... ça, vous savez déjà.
Maintenant, on va modifier un petit peu ces lois. :D
Prenons une onde à color_map assez simple, gradient x par exemple, que l'on assigne à un plan :

Code : C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
plane {
    y
    0
    pigment {
        gradient x
        color_map {
            [0 rgb <0,0,0>]
            [1 rgb <1,1,1>]
        }
    }
}


frequency



Placé juste après le type de motif, le mot-clé frequency (fréquence en anglais), suivi d'un nombre, permet de définir combien de fois le motif doit se répéter dans tout l'espace. La valeur par défaut est 1.
:o Ça sert à quoi ??
Eh bien, si l'on répète plus de fois le motif... alors il sera plus serré !

Essayons avec un frequency 2 :
Code : C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
plane {
    y
    0
    pigment {
        gradient x
        frequency 2
        color_map {
            [0 rgb <0,0,0>]
            [1 rgb <1,1,1>]
        }
    }
}


Comparons les deux résultats : en haut, sans le frequency :
Image utilisateur
Comme vous le voyez, avec le frequency 2, les bandes sont exactement deux fois plus serrées.

Essayez d'utiliser frequency avec d'autres motifs... le résultat n'est pas le même à chaque fois (surtout pour les spirales...).


phase



Voilà un autre mot-clé à placer après le type du motif : phase, suivi d'un nombre décimal (souvent de 0 à 1) permet de commencer le motif à une certaine valeur, et non à 0 comme par défaut.

Cela permet de le décaler un petit peu.
Code : C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
plane {
  y
  0
  pigment {
    gradient x
    phase 0.5
    pigment_map {
      [0 rgb <0,0,0>]
      [1 rgb <1,1,1>]
    }

  }
}


Image utilisateur

En fait, il décale la valeur de chaque point du motif d'autant que spécifié.

phase aura surtout un intérêt plus tard, avec les animations : faire bouger phase d'un petit peu à chaque fois donne l'impression d'une onde qui avance...

Puisque les valeurs d'un motif vont de 0 à 1, seule la partie décimale du nombre après phase importe. phase 0 et phase 1 auront le même effet, phase 1.2 et phase 2.2 aussi, etc...

Warp (1/2)

warp permet de modifier un peu les motifs, pour les rendre plus jolis, moins linéaires.
warp est une zone à part entière à l'intérieur de pigment, tout comme color_map :

Code : C
1
2
3
4
5
6
7
8
9
pigment {
    ...
    color_map {
        ...
    }
    warp {
        ...
    }
}


turbulence



turbulence est l'outil principal de warp. Il permet de... troubler le motif. o_O
Imaginez que le motif est en fait constitué de fluides colorés... turbulence permet de "souffler" dessus, pour créer des courants, et tout mélanger un peu.
turbulence est suivi d'un vecteur, donnant la direction du "souffle". La longueur du vecteur donne la force. o_O
Regarder ces deux vecteurs :
Code : C
1
2
<0,1,2>
<0,0.5,1>

Qu'ont-ils de particulier ?

Ils sont proportionnels ! :p (Bah oui, les maths ça sert !)

En fait, on dit qu'ils sont colinéaires. Ça veut dire quoi ? Qu'ils vont dans la même direction !
Seulement, l'un des deux est deux fois plus court.
Placés dans turbulence, ces deux vecteurs donneraient des souffles dans la même direction, mais de puissances différentes...

Prenons un exemple simple : un plan avec un échiquier.

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

light_source {
        <2,5,-4>
        rgb <1,1,1>
}

plane {
        y,
        0
        pigment {
                checker
                rgb <0,0,0>
                rgb <1,1,1>
        }
}


Cela devrait donner ceci :
Image utilisateur

Maintenant, ajoutons une zone warp, avec une turbulence de <0.2,0,0>...

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,2,-3>
        look_at <0,0,0>
}

light_source {
        <2,5,-4>
        rgb <1,1,1>
}

plane {
        y,
        0
        pigment {
                checker
                rgb <0,0,0>
                rgb <1,1,1>
                warp {
                        turbulence <0.2,0,0>
                }
        }
}


Voilà le résultat :
Image utilisateur

Comme vous pouvez le voir, turbulence a modifié les bords des cases, mais uniquement dans le sens des "x". En mettant un vecteur plus fort, comme <0.5,0,0>, on obtient :
Image utilisateur

Et voici le même plan, troublé grâce au vecteur <0.2,0,0.1> :
Image utilisateur
Ici, les cases sont déformées dans tous les sens...

Bon, j'imagine que vous avez compris comment fonctionne turbulence. Essayez avec d'autres motifs, vous verrez qu'on peut arriver à des trucs sympas. ^^

turbulence est l'outil principal de warp : il est obligatoire (du moins si vous voulez utiliser warp ^^).
Les outils suivants permettent de "configurer" turbulence.



octaves



Vous vous demandez peut-être pourquoi je viens vous parler d'octaves ici ?... :o
Non, je ne parle pas des octaves de musiques ! :lol: (bien que les musiciens pourront voir quelques rapports)

En fait, turbulence fait "bouger" des points, dans une direction qui est à peu près celle du "souffle". octaves permet de définir combien de ces déplacements on fait pour chaque point. Par défaut, octaves vaut 6, ce qui veut dire que chaque point subit 6 déplacements avant de trouver sa place finale. La valeur maximale est 10.
Plus la valeur d'octaves est élevée, plus la turbulence est précise, tandis qu'une valeur faible donne des modifications plus douces ; cependant, puisqu'il y a plus de déplacements à calculer, ça peut prendre plus de temps.

Voila des exemples avec turbulence <0.2,0,0.1> :

octaves 1
Image utilisateur

octaves 4
Image utilisateur

octaves 10
Image utilisateur

Comme vous pouvez le voir, une valeur de 4 ou 5 suffit très souvent, et permet d'obtenir un rendu plus rapide qu'avec la valeur par défaut (qui est 6). Une valeur de 1 donne un effet qui peut être intéressant...


lambda



Le paramètre lambda permet de spécifier statistiquement la différence entre un déplacement et le suivant...
Voici des exemples, pour turbulence <0.2,0,0.1> et octaves 4 :

lambda 1 :
Image utilisateur

lambda 2 :
Image utilisateur

lambda 4 :
Image utilisateur

Des valeurs basses donnent des modifications douces, tandis que des valeurs plus hautes donnent des modifications plus agitées...


omega



Et voici le dernier paramètre de warp : omega. La valeur d'omega permet de donner le rapport de distance entre un déplacement et le suivant : la valeur par défaut, de 0.5, fait en sorte que chaque déplacement soit moitié moins grand que celui d'avant.

Voici trois exemples, utilisant :
turbulence <0.2,0,0.1>
octaves 6
lambda 2


omega 0.1
Image utilisateur

omega 0.4
Image utilisateur

omega 0.8
Image utilisateur




Et voilà ! Ce n'était pas si dur, hein ?
warp est vraiment vraiment super utile, il permet de transformer les motifs tout pas beaux en motifs super-top... Je vous laisse essayer ;) .
Bon, c'est pas encore fini pour warp, il reste 2-3 petits trucs, mais le plus important est passé !

Warp (2/2)

Bon, ces deux derniers trucs ne vous seront pas vraiment très utiles, mais ça peut toujours servir de les connaître.
En fait, ils n'ont même pas besoin de turbulence pour fonctionner...


repeat



repeat permet de prendre une tranche du motif, et de la répéter sur tout le motif (à la place du motif)...
A quoi ça sert ? A pas grand chose...
Enfin si, on pourrait trouver une utilité : un mur constitué de planches de bois toutes identiques, ou un truc dans ce genre là... Avec un peu de chance, vous trouverez un jour une utilité à ce machin ^^ .

repeat est suivi d'un vecteur, qui doit être le long d'un des axes x, y ou z (une seule coordonnée ne sera pas nulle).
Ce vecteur représente la largeur d'une des "tranches".

Exemple avec un motif agate et repeat <0.5,0,0> :
Image utilisateur

Comme vous le voyez, le résultat est assez spécial...

On peut ajouter le mot-clé offset, suivi d'un vecteur, pour décaler à chaque fois la tranche utilisée. Chaque bande sera alors prise dans le motif original à un endroit un peu décalé du précédent...
Cela permet d'éviter un aspect trop répétitif... enfin, c'est l'objectif.

Exemple avec offset <0,0,0.3> :
Image utilisateur

Évidemment, si on met le même vecteur après offset et repeat, alors on obtiendra le motif d'origine...

Enfin, flip permet de faire subir au motif une symétrie entre chaque bande. Il est également suivi d'un vecteur, et les coordonnées non nulles de ce vecteur correspondent aux axes suivant lesquels on effectue la symétrie...

Par exemple, flip <1,0,0> fera une symétrie suivant l'axe des x à chaque bande. Encore un truc pas vraiment utile...


black hole



Un peu plus marrant dans le principe, mais toujours assez rarement utilisé, black_hole permet d'ajouter une espèce de "trou noir" dans le motif : une zone où le motif sera comme "attiré" par un point.
black_hole est suivi d'un vecteur de position, déterminant le centre du trou noir, puis du rayon. Voici un exemple assez simple :

Code : C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
plane {
        y,
        0
        pigment {
                checker
                rgb <0,0,0>
                rgb <1,1,1>
                warp {
                        black_hole <0,0,0> 10
                }
        }
}


Cela donnera un trou noir située en 0, de rayon 10...
Image utilisateur
On voit bien qu'au milieu, les cases semblent attirées vers un point...


Plusieurs paramètres optionnels permettent de paramétrer ce trou noir :

strength


Ajouter strength, suivi d'un nombre décimal, permet de faire varier l'intensité du trou noir. La valeur par défaut est 1.

falloff


Le mot-clé falloff, suivi d'un nombre décimal, permet de donner la puissance à laquelle la vitesse diminuera en approchant du bord du trou noir.
Une valeur de 1 donne une diminution linéaire. Une valeur de 2 (par défaut) donne une diminution rapide autour du centre, et plus lente près du bord du trou. A l'inverse, une valeur inférieure à 1 donne une diminution lente autour du centre, et plus brutale près des bords.

inverse


Ajouter simplement le mot-clé inverse permet d'inverser l'effet du trou noir : au lieu d'attirer le motif, il le repoussera.


C'est à peu près tout pour les trous noirs... d'autres paramètres permettent de faire une répétition de trous noirs, mais ils sont complexes à comprendre et redoutablement inutiles... Si vous voulez plus d'informations à ce sujet, vous pouvez aller voir ici.

En réalité, turbulence et ses paramèrtes n'ont pas besoin d'être dans un bloc warp ; il marchent très bien directement dans le bloc pigment. Repeat et black_hole, en revanche, en ont besoin : autant tout mettre dans le bloc warp donc ! ;)


Ça y est, on a fini avec warp... pfiou !
C'était la partie la plus compliquée sur les modificateurs de motifs. La suite est bien plus simple, vous verrez ^^ .

Les formes d'onde

Voici le dernier, et le plus facile, des modificateurs de motifs.
Il permet de modifier la forme de l'onde du motif... o_O
Pour l'instant, le motif donne au point une valeur, et le color_map (ou la liste de couleurs) donne à la valeur une couleur.
Maintenant, imaginez qu'on change un peu la manière dont le motif assigne les valeurs... ça changerait les répartitions de couleurs !
La forme d'onde permet justement de modifier un peu la manière dont le motif répartit les couleurs.
Image utilisateur

Maintenant, intéressons-nous à cette forme d'onde. Comment transforme-t-elle la valeur du point ?...

Voici un exemple pour une onde linéaire.
Image utilisateur

Maintenant, voilà la même chose pour une onde triangulaire :
Image utilisateur

Par défaut, l'onde est linéaire (logique !).
Voici les différents types de formes d'ondes, avec des graphiques montrant l'onde (graphiques qui ne sont pas de moi) :

ramp_wave


C'est la valeur par défaut pour beaucoup de motifs. L'onde est linéaire.
Image utilisateur

triangle_wave


C'est la valeur par défaut de marble (eh oui, marble n'est en fait qu'un gradient x avec une forme d'onde en triangle...), de wood et des spirales.
L'onde atteint le maximum à la moitié, puis redescend.
Image utilisateur

sine_wave


sine_wave parcourt les valeurs de manière sinusoïdale, commence et termine sur la valeur 0.5 .
Image utilisateur

scallop_wave


scallop_wave est une espèce de triangle_wave courbé, comme une parabole.
Image utilisateur

cubic_wave


cubic_wave parcourt les valeurs avec une courbe du 2ème degré dont la pente est nulle, au début et à la fin.
Image utilisateur

poly_wave


poly_wave est suivi d'une valeur, et donne une onde suivant une courbe du type y = x^n, où n est la valeur indiquée. La valeur 1 donne une courbe linéaire, une valeur plus élevée donne une courbe lente au début et plus brutale à la fin, et une valeur plus basse, au contraire, donne une pente forte au début, et plus douce à la fin.
Voici un exemple avec une valeur 0.5 :
Image utilisateur


Pour donner une forme d'onde à un motif, rien de plus simple ! Il suffit d'ajouter le nom de la forme d'onde dans la définition du pigment.

Exemple :

Code : C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
plane {
        y,
        0
        pigment {
                agate
                color_map {
                        [0 rgb <0,0,0>]
                        [1 <1,1,1>]
                }
                triangle_wave
        }
}


Normalement, vous ne devriez pas trop utiliser les formes d'onde, mais qui sait ?...

Modificateurs usuels

On vient de voir les modificateurs spécifiques aux motifs... mais nous pouvons également utiliser les modificateurs que nous avons vu avant, à savoir rotate, scale ou translate !

Prenons un exemple : une boîte, à laquelle on applique un motif agate en noir et blanc.

Code : C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
box {
        <-1,-1,-1>
        <1,1,1>
        pigment {
                agate
                color_map {
                        [0 rgb <0,0,0>]
                        [1 rgb <1,1,1>]
                }
        }
}


Maintenant, on aimerait que le motif soit un petit peu décalé vers la droite. Comment faire ? En ajoutant translate <0.2,0,0> (par exemple) dans la définition du pigment, tout simplement !
Code : C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
box {
        <-1,-1,-1>
        <1,1,1>
        pigment {
                agate
                color_map {
                        [0 rgb <0,0,0>]
                        [1 rgb <1,1,1>]
                }
                translate <0.2,0,0>
        }
}


Et le motif est décalé !
Évidemment, rotate et scale marchent aussi !


Petite remarque : lorsque vous appliquer scale, rotate ou translate à tout l'objet, le motif est affecté aussi. Mais lorsque vous mettez la transformation dans la zone pigment, seul le motif est affecté.

Q.C.M.

Quel mot-clé faut-il utiliser pour faire commencer le motif à une autre valeur ?
Que fait Turbulence ?
A quoi sert warp ?
Que fait triangle_wave, lorsqu'il est mis dans un motif ?

Statistiques de réponses au QCM

Ça y est ! Vous savez à présent faire vos propres motifs et les modifier, afin de les rendre plus jolis !
Le prochain chapitre vous parlera des textures : vous apprendrez à donner un pseudo-relief à votre objet, à le faire briller, etc... !!!
Chapitre précédent Sommaire Chapitre suivant

Partager

2 commentaires pour "Jouer avec les motifs"
Note moyenne : 3.96 / 4 (24 votes)
Pseudo Commentaire
Hors ligne titi.be # Posté le 24/11/2006 à 21:54:17
Avatar

On arrive a faire des chose déjà très bien avec tout ca 19 o_O
Hors ligne Jio15 # Posté le 24/09/2008 à 21:47:39
FFGAGFCAFCCCDbCBAbGCF
Avatar

je suis déçu par apport aux images du début 15

Une parodie de Phèdre version wesh ? (Entièrement faite par moi !)

:h&#1072;&#1088;:

++[->+++++<]>+[-<++++++>>++++++<]<.>++++++++[<++++>->++++<]++++[-<+++>]<+.-.>+++[->+++<]>-.<<+.>>++<+++[-<++>>++<]<.>>. rouge = facultatif

IAV2AB&2BB&1ABAU1Q2BB&1BBA&T traumatisé

Voire même : ++[->+++++<]>+[-<++++++>>++++++<]<.>++++++++[<++++>->++++>++++<<]++++[-<+++>]<+.-.>+++[->+++<]>-.<<+.>>++<+++[-<++>>++<]<.>>.>.+.

Et c'est tout du codé main ! (Si je veux faire plus court, il y a ++++++++++[->+++++++>+++++++++++>++++++++++++>+++<<<<]>----.>+.-.----.+++++.>---.---.>++.+. , mais c'est bien moins classe ^^)

++++[>+++<-]+>>++++++++++[->>>++++++++>+++<<<<],<[->---->++++>+++++<<<]>[>>>.<+++++.>+++.>++.<<<<<]<[>]>>.

(ou, en anglais: ++++[>+++<-]+>>++++++++++[->>++++++++>+++<<<],<[->---->++++<<]>[>>--.+.+++++.>++.<<<<]<[>]>>. )

,>,,>>++++++++++++++++[-<+++<---<--->>>]<<[<[>>+>+<<<-]>>>[<<<+>>>-]<<-]>.
 

Voir tous les commentaires