Les capacités extrêmement puissantes des textures sont une des choses qui met POV-Ray à part des autres raytraceurs. Jusqu'ici, nous n'avons pas réellement essayé de choses trop complexes, mais nous sommes suffisamment à l'aise avec la syntaxe pour essayer quelques unes des options les plus avancées.
Bien sûr, nous ne pouvons pas toutes les essayer. Cela demanderai un didacticiel avec beaucoup plus de pages pour utiliser toutes les options disponibles. Pour cette version limitée, nous nous contenterons d'en essayer que quelques unes pour se donner une idée de la façon dont les textures sont créées. Avec un peu de pratique, nous pourrons bientôt créer nos propres textures.
Note : les précédentes versions de POV-Ray faisaient une distinction entre les spectres de pigments et de normales, c.a.d. des spectres qui peuvent être utilisés dans une déclaration normal ou pigment. Depuis POV-Ray 3.0, cette restriction a été ôtée, donc les spectres listés dans la section 'Les spectres' peuvent être utilisés comme spectre de pigments ou de normales.
Toute surface doit avoir une couleur. Dans POV-Ray, ces couleurs sont appelées pigment. Elles n'ont pas à être une couleur unie. Elles peuvent être un spectre de couleurs, une liste de couleurs ou même une projection d'image. Les pigments peuvent aussi être superposés les uns au-dessus des suivants, tant que ceux du dessus sont partiellement transparents, pour que l'on puisse voir les autres à travers. Jouons un peu avec quelques uns de ces types de pigment.
Nous créons un fichier texdemo.pov et le modifions comme suit :
#include "colors.inc" camera { location <1, 1,-7> look_at 0 angle 36 } light_source {<1000, 1000,-1000> White} plane { y,-1.5 pigment {checker Green, White} } sphere { <0, 0, 0>, 1 pigment {Red} }

En donnant à ce fichier un tracé rapide en 200x150 -A, nous voyons que c'est une simple sphère rouge sur un plan en damier vert et blanc. Nous utiliserons la sphère pour nos textures.
Avant de commencer, vous devez noter que nous avons déjà fait un type de pigment, la liste de couleurs. Dans l'exemple précédent, nous avons utilisé un modèle en damier pour notre plan. Il y a trois autres types de liste : brick, hexagon et le modèle object. Essayons rapidement chacun d'eux. Premièrement, nous changeons le pigment du plan comme suit :
pigment {hexagon Green, White, Yellow}

En rendant ceci, nous voyons un modèle hexagonal de trois couleurs. Notez que ce modèle requière trois couleurs. Maintenant, nous changeons le pigment en ...
pigment {brick Gray75, Red rotate -90*x scale .25}

En regardant l'image, nous voyons que le plan a un modèle de briques. Nous notons que nous devons exercer une rotation pour que le modèle apparaisse correctement sur le plan plat. Ce modèle est normalement fait pour des surfaces verticales. Nous devons également le réduire pour le voir mieux. Nous pouvons jouer avec ces listes de couleurs, changer les couleurs, etc. jusqu'à ce que vous ayez le sol qui vous convienne.
Commençons par texturer notre sphère avec un modèle et une application de trois couleurs. Nous remplaçons le bloc pigment avec ceci.
pigment { gradient x color_map { [0.00 color Red] [0.33 color Blue] [0.66 color Yellow] [1.00 color Red] } }

En traçant ceci, nous voyons que le modèle gradient donne d'intéressantes rayures verticales. Nous changeons la direction du gradient pour y. Les rayures sont horizontales maintenant. Nous changeons la direction du gradient pour z. Les rayures sont des anneaux concentriques. Cela parce que la direction du gradient est dans l'axe de la caméra. Nous remettons une direction selon x et ajoutons ceci au bloc pigment.
pigment { gradient x color_map { [0.00 color Red] [0.33 color Blue] [0.66 color Yellow] [1.00 color Red] } rotate -45*z // <- ajouter cette ligne }

Les barres verticales sont maintenant inclinées selon un angle de 45°. Tous les modèles peuvent être tournés, déplacés et changés d'échelle de cette manière. Essayons maintenant différents types de modèles. Un à la fois, nous substituons les mots clés suivants au gradient x, et rendons pour voir le résultat :
bozo,
marble,
agate,
granite,
leopard,
spotted
wood
En traçant ceci, nous pouvons voir chaque résultat dans un modèle légèrement différent. Mais pour avoir de meilleurs résultats, chacun d'eux demande l'utilisation de quelques modificateurs de modèle.
Jetons un oeil sur quelques modificateurs de modèles. Premièrement, nous changeons le type de modèle en bozo. Ensuite, nous ajoutons ces modifications.
pigment { bozo frequency 3 // <- ajouter cette ligne color_map { [0.00 color Red] [0.33 color Blue] [0.66 color Yellow] [1.00 color Red] } rotate -45*z }

Le modificateur frequency détermine le nombre de fois où la palette de couleurs est répétée par unité de taille. Ce changement fait que le modèle bozo contient beaucoup plus de bandes. Maintenant, changeons le type de modèle en marble.

Quand nous rendons cela, nous voyons un motif en bande similaire au gradient y mais qui ne ressemble pas au marbre. Cela parce que le marbre demande un autre modificateur. C'est le modificateur turbulence. Nous changeons la ligne frequency 3 en turbulence 1 et retraçons.

C'est mieux ! Maintenant remettons frequency 3 après la turbulence et faisons un autre essai.

Encore plus intéressant !
Mais attendez, cela peut être mieux ! La turbulence a également des modificateurs. Nous pouvons l'ajuster de différentes façons. Premièrement, le nombre qui suit le mot clé turbulence peut avoir des valeurs plus grandes, nous donnant plus de turbulence. Deuxièmement, nous pouvons utiliser les mots clés omega, lambda et octaves qui changent les paramètres de la turbulence.
Essayons maintenant :
pigment { marble turbulence 0.5 lambda 1.5 omega 0.8 octaves 5 frequency 3 color_map { [0.00 color Red] [0.33 color Blue] [0.66 color Yellow] [1.00 color Red] } rotate 45*z }

En rendant ceci, nous voyons que la turbulence a changé, et que le modèle semble différent. Nous jouons avec les valeurs de turbulence, lambda, omega et octaves pour voir ce que ça donne.
Les pigments sont décrits par des valeurs numériques qui donnent les valeurs rgb de la couleur à utiliser (color rgb <1, 0, 0> nous donne la couleur rouge). Mais cette syntaxe nous donnera plus. Nous pouvons spécifier une transparence filtrante en faisant le changement suivant : color rgbf <1, 0, 0, 1>. Le f se comprend comme filter, le mot de POV-Ray pour transparence filtrante. Une valeur de 1 signifie que la couleur est complètement transparente, mais continue de filtrer la lumière en accord avec le pigment. Dans ce cas, la couleur serait un rouge transparent, comme un cellophane rouge.
Il y a un autre genre de transparence dans POV-Ray. C'est la transmission ou transparence non filtrante (Le mot clé est transmit; voir aussi rgbt). Elle est différente de filter car elle ne filtre pas la lumière selon la couleur du pigment. Au contraire, elle autorise toute la lumière à passer sans transformation. Elle peut être spécifiée ainsi : rgbt <1, 0, 0, 1>.
Utilisons quelques pigments transparents pour créer un nouveau genre de texture : la texture stratifiée. Retournant à notre exemple précédent, déclarons la texture suivante.
#declare LandArea = texture { pigment { agate turbulence 1 lambda 1.5 omega .8 octaves 8 color_map { [0.00 color rgb <.5, .25, .15>] [0.33 color rgb <.1, .5, .4>] [0.86 color rgb <.6, .3, .1>] [1.00 color rgb <.5, .25, .15>] } } }
Cette texture sera la terre. Maintenant, faisons l'océan avec ceci.
#declare OceanArea = texture { pigment { bozo turbulence .5 lambda 2 color_map { [0.00, 0.33 color rgb <0, 0, 1> color rgb <0, 0, 1>] [0.33, 0.66 color rgbf <1, 1, 1, 1> color rgbf <1, 1, 1, 1>] [0.66, 1.00 color rgb <0, 0, 1> color rgb <0, 0, 1>] } } }
Note : l'océan est l'aire bleue opaque, et la terre est la zone claire qui autorisera la vue au travers des textures stratifiées.
Maintenant, déclarons une texture de plus pour simuler l'atmosphère avec des nuages tourbillonnants.
#declare CloudArea = texture { pigment { agate turbulence 1 lambda 2 frequency 2 color_map { [0.0 color rgbf <1, 1, 1, 1>] [0.5 color rgbf <1, 1, 1, .35>] [1.0 color rgbf <1, 1, 1, 1>] } } }
Maintenant, appliquons tout ceci à notre sphère.
sphere { <0, 0, 0>, 1 texture {LandArea} texture {OceanArea} texture {CloudArea} }
Nous rendons ceci et obtenons une assez bonne simulation d'un petit planétoïde.

Mais cela peut être mieux. Nous n'aimons pas particulièrement l'apparence des nuages. Il y a un moyen de les rendre plus réalistes.
Les pigments peuvent être mélangés ensembles, comme les couleurs dans une palette de couleurs en utilisant le mot clé de modèle pigment_map. Faisons juste un essai.
Nous ajoutons ces déclarations, en prenant bien soin qu'elles apparaissent avant les autres déclarations du fichier.
#declare Clouds1 = pigment { bozo turbulence 1 color_map { [0.0 color White filter 1] [0.5 color White] [1.0 color White filter 1] } } #declare Clouds2 = pigment { agate turbulence 1 color_map { [0.0 color White filter 1] [0.5 color White] [1.0 color White filter 1] } } #declare Clouds3 = pigment { marble turbulence 1 color_map { [0.0 color White filter 1] [0.5 color White] [1.0 color White filter 1] } } #declare Clouds4 = pigment { granite turbulence 1 color_map { [0.0 color White filter 1] [0.5 color White] [1.0 color White filter 1] } }
Maintenant, nous utilisons ces déclarations dans notre couche nuageuse. Nous remplaçons la couche de nuage par :
#declare CloudArea = texture { pigment { gradient y pigment_map { [0.00 Clouds1] [0.25 Clouds2] [0.50 Clouds3] [0.75 Clouds4] [1.00 Clouds1] } } }
Nous rendons ceci et voyons un remarquable modèle qui ressemble beaucoup plus aux motifs nuageux sur la planète terre. Ils sont en bandes, simulant les différents climats des différentes latitudes.

Les objets de POV-Ray ont des surfaces très lisses. Cela n'est pas très réaliste, aussi il y a plusieurs moyens pour déranger le lissé des objets en perturbant la normale de surface. La normale de surface est le vecteur qui est perpendiculaire à la tangente de la surface. En changeant cette normale, la surface peut apparaître bosselée, ridée ou d'un tout autre modèle disponible. Essayons en deux d'entre eux.
Nous commentons le planétoïde et, en bas du fichier, nous créons une nouvelle sphère avec une simple texture colorée.
sphere { <0, 0, 0>, 1 pigment {Gray75} normal {bumps 1 scale .2} }
Ici, nous avons ajouté un bloc normal en plus du bloc pigment (notez qu'il n'est pas nécessaire de les inclure dans un bloc texture, sauf si on veut les modifier ensembles, ou les utiliser dans une texture stratifiée). Nous rendons ceci pour voir à quoi ça ressemble.

Maintenant, un à la fois, nous substituons au mot clé bumps les mots clés suivants :
dents,
wrinkles,
ripples
waves
(vous pouvez aussi utiliser n'importe quel modèle listé dans "Les modèles"). Nous rendons chacun d'entre eux pour voir. Nous jouons avec la valeur qui suit le mot clé. Nous expérimentons aussi les échelles.
Pour ajouter de l'intérêt, nous ajoutons un plan de couleur unie avec une normale comme suit.
plane { y,-1.5 pigment {color rgb <.65, .45, .35>} normal {dents .75 scale .25} }

Les normales peuvent être superposées comme les pigments, mais les résultats sont imprévisibles. Essayons ceci maintenant en modifiant la sphère comme ceci :
sphere { <0, 0, 0>, 1 pigment {Gray75} normal {radial frequency 10} normal {gradient y scale .2} }

Comme vous pouvez le voir, le modèle résultant n'est ni radial, ni gradué. Il est le résultat d'un premier calcul en mode radial, puis d'un calcul en mode gradué. Le résultat est simplement l'addition. Cela peut être difficile à contrôler, aussi POV-Ray donne à l'utilisateur d'autres méthodes pour mélanger les normales.
L'une est l'utilisation de spectres de normales. Un spectre de normales travaille comme les spectres de pigments. Changeons la texture de notre sphère ainsi :
sphere { <0, 0, 0>, 1 pigment {Gray75} normal { gradient y frequency 3 turbulence .5 normal_map { [0.00 granite] [0.25 spotted turbulence .35] [0.50 marble turbulence .5] [0.75 bozo turbulence .25] [1.00 granite] } } }

En traçant cela, nous voyons que la sphère a une surface très irrégulière. Le type de modèle gradient sépare les normales en bandes, mais elles sont très perturbées, donnant à la surface une apparence chaotique. Mais cela nous donne une idée.
Supposons que nous utilisions le même modèle pour un spectre de normales que celui utilisé pour l'océan de notre planétoïde, et appliquons-le à la terre. Cela signifie-t-il que si nous utilisons le même modèle et les même modificateurs sur une sphère de même taille, la forme du modèle sera la même ? Cela ne rendra-t-il pas la terre bosselée en laissant les océans lisses ? Essayons. D'abord, rendons les deux sphères côte à côte pour voir si les modèles restent les mêmes. Nous enlevons les commentaires pour le planétoïde et faisons les modifications suivantes :
sphere { <0, 0, 0>, 1 texture {LandArea} texture {OceanArea} // texture {CloudArea} // <- commentez ceci translate -x // <- ajoutez cette transformation }
Maintenant, nous changeons la sphère grise comme suit :
sphere { <0, 0, 0>, 1 pigment {Gray75} normal { bozo turbulence .5 lambda 2 normal_map { [0.4 dents .15 scale .01] [0.6 agate turbulence 1] [1.0 dents .15 scale .01] } } translate x // <- ajoutez cette transformation }
Nous rendons cela pour voir si le modèle est le même.

Nous voyons que c'est le cas. Donc, commentons la sphère grise et ajoutons son bloc normal à la texture de la terre de notre planétoïde. Nous enlevons la transformation pour que le planétoïde soit de nouveau centré.
#declare LandArea = texture { pigment { agate turbulence 1 lambda 1.5 omega .8 octaves 8 color_map { [0.00 color rgb <.5, .25, .15>] [0.33 color rgb <.1, .5, .4>] [0.86 color rgb <.6, .3, .1>] [1.00 color rgb <.5, .25, .15>] } } normal { bozo turbulence .5 lambda 2 normal_map { [0.4 dents .15 scale .01] [0.6 agate turbulence 1] [1.0 dents .15 scale .01] } } }

En regardant notre image, nous voyons que notre idée fonctionne ! Les aires de terre sont irrégulières alors que les océans sont lisses. Nous remettons la couche de nuage et notre planétoïde est complet.

Il y a beaucoup d'autres choses que nous ne découvrons pas ici, à cause des contraintes de place. Nous devons prendre sur nous le temps d'explorer les spectres d'inclinaisons, de moyennes et de bosses.
Le dernier élément d'une texture POV-Ray est finish. Elle contrôle les propriétés de surface d'un objet. Elle peut le rendre brillant et réflectif, ou terne et plat. Elle peut également spécifier ce qui arrive à la lumière qui passe au travers de pigments transparents, ce qui arrive à la lumière dispersée par des surfaces pas tout à fait lisses, et ce qui arrive à la lumière reflétée par une surface couverte d'un fin film interférant. Il y a douze propriétés disponibles dans POV-Ray pour spécifier la finition d'un objet. Elles sont contrôlées par les mots clés suivants : ambient, diffuse, brilliance, phong, specular, metallic, reflection, crand et iridescence. Dessinons un couple de textures qui utilisent ces paramètres.
Lorsque les objets sont illuminés dans POV-Ray, les morceaux à l'ombre seraient complètement noirs s'il n'y avait pas les deux propriétés de finition ambient et diffuse. ambient est utilisé pour simuler la lumière qui est éparpillée autour de la scène, et qui ne vient pas directement de la source de lumière. diffuse détermine la quantité de lumière qui semble venir directement de la source. Ces deux mots clés travaillent ensemble pour contrôler la simulation de la lumière ambiante. Utilisons notre sphère grise pour une démonstration. Changeons également notre plan pour revenir à son motif en damier vert et blanc.
plane { y,-1.5 pigment {checker Green, White} } sphere { <0, 0, 0>, 1 pigment {Gray75} finish { ambient .2 diffuse .6 } }
Dans l'exemple précédent, les valeurs par défaut sont utilisées. Nous rendons cela pour voir les effets,

puis faisons les changements suivants à la finition :
ambient 0 diffuse 0

La sphère est noire car nous disons qu'aucune lumière n'est reflétée par la sphère. Remettons diffuse à 0.6, le défaut.

Maintenant, nous voyons la couleur grise de la sphère là où la lumière tombe directement sur la sphère, mais le côté à l'ombre reste totalement noir. Mettons diffuse à 0.3 et ambient à 0.3.

La sphère semble plate. Ceci parce que nous avons donné un haut degré de lumière ambiante, et un faible niveau de lumière de la source se reflète vers la caméra. Les valeurs par défaut de ambient et diffuse sont plutôt de bonnes moyennes, et un bon début. Dans la plupart des cas, une valeur de 0.1 à 0.2 pour ambient est suffisante, et 0.5 à 0.7 pour diffuse fera le travail. Il y a un couple d'exceptions. Si vous avez une surface totalement transparente avec de fortes valeurs pour la réfraction et/ou la réflexion, de faibles valeurs pour ambient et diffuse seront meilleures. Voici un exemple :
sphere { <0, 0, 0>, 1 pigment {White filter 1} finish { ambient 0 diffuse 0 reflection .25 specular 1 roughness .001 } interior {ior 1.33} }

C'est du verre, visiblement. Le verre est une matière qui tient presque toute son apparence de l'environnement. Très peu de la surface est vue car elle transmet ou reflète pratiquement toute la lumière qui l'atteint. Voyez glass.inc pour d'autres exemples.
Si vous avez besoin d'un objet complètement illuminé, indépendamment de la situation, vous pouvez faire cela artificiellement en spécifiant une valeur 1 à ambient et 0 à diffuse. Cela éliminera toute nuance et donnera simplement sa couleur à l'objet, dans toute sa force et en tout point. Cela est bon pour des objets qui émettent de la lumière comme les ampoules, et pour les ciels dans les scènes où ils ne peuvent pas être correctement éclairés.
Essayons avec notre sphère.
sphere { <0, 0, 0>, 1 pigment {White} finish { ambient 1 diffuse 0 } }

Nous avons une aveuglante sphère blanche, sans reflet lumineux ou ombre. Cela fera une lampe de rue correcte.
Dans l'exemple de verre précédent, nous avons noté qu'il y avait un petit point lumineux brillant sur la surface. Cela donna à la sphère une apparence dure et brillante. POV-Ray nous donne deux méthodes pour spécifier des surbrillances de surface. La première est appelée surbrillance phong. Usuellement, la surbrillance phong est décrite en utilisant deux mots clés : phong et phong_size. Le nombre qui suit phong détermine l'intensité de la surbrillance, tandis que le nombre suivant phong_size détermine sa taille. Essayons ceci :
sphere { <0, 0, 0>, 1 pigment {Gray50} finish { ambient .2 diffuse .6 phong .75 phong_size 25 } }

En traçant ceci, nous voyons une surbrillance assez large, douce, qui donne à la sphère une apparence de plastique. Maintenant, changeons phong_size à 150.

Cela fait une surbrillance plus petite qui donne une apparence plus dure et brillante.
Il y a un autre genre de surbrillance, calculée d'une autre manière, appelée la surbrillance spéculaire. elle est spécifiée en utilisant le mot clé specular qui opère en conjonction avec un autre mot clé appelé roughness. Ces deux mots clés travaillent ensemble de la même façon que phong et phong_size pour créer des surbrillances altérant l'éclat apparent de la surface. Essayons d'utiliser specular sur notre sphère.
sphere { <0, 0, 0>, 1 pigment {Gray50} finish { ambient .2 diffuse .6 specular .75 roughness .1 } }

Nous voyons une large et douce surbrillance similaire à l'utilisation de phong_size à 25. Changeons roughness à .001 et retraçons.

Maintenant, nous avons une petite surbrillance étroite similaire à un phong_size de 150. Pour parler plus généralement, specular est légèrement plus précis et réaliste que phong, mais vous devrez essayer les deux méthodes lors de la création d'une texture. Il y a des cas où les deux méthodes doivent être utilisées sur une finition.
Il y a un autre paramètre de surface qui permet d'avoir la main sur les surbrillances : reflection. Les surfaces qui sont très brillantes ont un degré de réflexion. Voyons par l'exemple.
sphere { <0, 0, 0>, 1 pigment {Gray50} finish { ambient .2 diffuse .6 specular .75 roughness .001 reflection { .5 } } }

Nous voyons maintenant que notre sphère reflète le plan en damier vert et blanc, et l'arrière-plan noir, mais la couleur grise de la sphère semble déplacée. Voici encore un lieu ou une faible valeur doit être utilisée pour diffuse. Généralement, plus reflection est élevé, plus diffuse doit être bas. Nous baissons la valeur de diffuse à 0.3 et la valeur de ambient à 0.1 et retraçons.

C'est beaucoup mieux. Rendons notre sphère aussi brillante et polie qu'une balle d'or poli.
sphere { <0, 0, 0>, 1 pigment {BrightGold} finish { ambient .1 diffuse .1 specular 1 roughness .001 reflection { .75 } } }

C'est parfait mais il y a quelque chose de raté, la couleur de la réflexion et la surbrillance. Pour faire en sorte que la surface apparaisse plus comme du métal, le mot clé metallic est utilisé. Nous l'ajoutons et voyons la différence.
sphere { <0, 0, 0>, 1 pigment {BrightGold} finish { ambient .1 diffuse .1 specular 1 roughness .001 reflection { .75 metallic } } }

La réflexion a maintenant plus de couleur or que de couleur de l'environnement. Dernier détail, la surbrillance. Nous ajoutons une nouvelle déclaration metallic, à la finition en dehors du bloc de la réflexion.
sphere { <0, 0, 0>, 1 pigment {BrightGold} finish { ambient .1 diffuse .1 specular 1 roughness .001 metallic reflection { .75 metallic } } }

Nous voyons que la surbrillance a pris la couleur de surface plutôt que celle de la source de lumière. Cela donne une apparence plus métallique.
L'irisation est ce que nous voyons à la surface d'une tâche d'huile quand le soleil y brille. L'effet arc-en-ciel est créé par ce qui appelé un film d'interférence (lire "L'irisation" pour les détails). Pour l'instant, essayons de l'utiliser. L'irisation est spécifiée par la déclaration irid et trois valeurs : la somme, thickness et turbulence. La somme est la contribution de toute la couleur de surface. Usuellement, 0.1 à 0.5 est suffisant. thickness affecte le 'travail' de l'effet. Gardons le entre 0.25 et 1 pour les meilleurs résultats. La turbulence est un peu différente de celle du pigment ou de la normale. Nous ne définissons pas octaves, lambda ou omega mais nous pouvons spécifier une valeur qui affectera thickness selon une approche différente de la valeur de thickness. Les valeurs entre 0.25 et 1 travaillent bien ici aussi. Finalement, l'irisation réagira avec la normale de surface puisqu'elle dépend de l'angle d'incidence des rayons lumineux sur la surface. Avec tout cela en tête, ajoutons un peu d'irisation à notre sphère de verre.
sphere { <0, 0, 0>, 1 pigment {White filter 1} finish { ambient .1 diffuse .1 reflection .2 specular 1 roughness .001 irid { 0.35 thickness .5 turbulence .5 } } interior { ior 1.5 fade_distance 5 fade_power 1 caustics 1 } }

Nous essayons de faire varier les valeurs pour la somme, thickness et turbulence pour en voir les effets. Nous essayons aussi d'ajouter un bloc normal pour voir ce qui arrive.
Voyons le spectre de pigments. Nous ne devons pas le confondre avec le spectre de couleurs qui ne prend que des couleurs individuelles en entrée, alors que le spectre de pigments peut prendre des motifs de pigments complets. Pour se faire une idée, commençons par établir un plan avec un spectre de pigments simple. Maintenant, dans l'exemple suivant, nous allons déclarer chaque pigment, avant de les utiliser. Ce n'est pas vraiment nécessaire (nous pouvons placer l'entière description du pigment dans chaque entrée de l'application) mais cela rend les choses plus lisibles.
// Simple damier noir et blanc. C'est un classique #declare Pigment1 = pigment { checker color Black color White scale .1 } // Une sorte d'effet psychédélique #declare Pigment2 = pigment { wood color_map { [0.0 Red] [0.3 Yellow] [0.6 Green] [1.0 Blue] } } plane { -z, 0 pigment { gradient x pigment_map { [0.0 Pigment1] [0.5 Pigment2] [1.0 Pigment1] } } }

OK, ce que nous avons fait est très simple, et probablement assez compréhensible si nous avons déjà travaillé avec des spectres de couleurs. Tout ce que nous avons fait est de placer un spectre de pigments, là où se trouve normalement un spectre de couleurs, et comme entrées, nous avons référencé nos pigments déclarés. Quand nous rendons cet exemple, nous voyons un motif qui est un va et vient entre le classique damier et ces anneaux colorés. Parce que nous glissons du Pigment1 au Pigment2 puis revenons en arrière, nous voyons un clair mélange des deux motifs aux points de transition. Nous pouvons tout aussi aisément obtenir une transition soudaine en modifiant le spectre.
pigment_map {
[0.0 Pigment1]
[0.5 Pigment1]
[0.5 Pigment2]
[1.0 Pigment2]
}

Le mélange de motifs de pigments individuels est seulement un début.
Pour notre prochain exemple, nous remplaçons le plan par ce qui suit.
plane { -z, 0 pigment {White} normal { gradient x normal_map { [0.0 bumps 1 scale .1] [1.0 ripples 1 scale .1] } } }
Premièrement, nous avons choisi une couleur unie blanche pour donner le meilleur effet à nos bosses. Deuxièmement, nous notons que notre spectre passe doucement d'un bosselage total à 0.0 aux rides à 1.0, mais comme c'est un gradient par défaut, il revient abruptement aux bosses au début du cycle suivant.

Nous rendons cela et voyons une transition évidente là où une normale passe la main à l'autre, cependant, l'autre est un exemple sur ce que deviennent deux motifs de normales quand elles passent lentement de l'une vers l'autre.
La syntaxe est la même que celle attendue. Nous avons seulement changé le type d'application, la déplaçant dans un bloc de normale et fournissant les types de bosses appropriées. Il est important de se souvenir que dans POV-Ray 3, tous les modèles qui fonctionnent avec les pigments, le font aussi avec les normales (et vice et versa, sauf pour les facettes) donc nous pouvons aussi aisément passer du bois au marbre, ou tout autre modèle. Nous expérimentons un peu, et prenons la mesure de ce que donnent les différents modèles.
Après avoir vu ce que donne les différentes normales dans une application, nous aimerions les voir se mélanger totalement, plutôt que passer de l'une vers l'autre. Bien, c'est possible aussi, mais nous serions dépassés. C'est la fonction average, et nous y reviendrons.
Nous savons comment mélanger les couleurs, les modèles de pigments, de normales, et nous pensons probablement : et pour les finitions ? Les textures complètes ? Elles peuvent être traitées dans le même chapitre. Quoiqu'il n'y ait pas de spectre de finitions per se, il y a des spectres de textures, et nous pouvons aisément les adapter pour qu'ils servent comme spectre de finitions, simplement en mettant le même pigment et/ou normale dans chacune des entrées de texture du spectre. Voici un exemple. Nous éliminons les pigments déclarés et le plan, et ajoutons ceci.
#declare Texture1 = texture { pigment {Grey} finish {reflection 1} } #declare Texture2 = texture { pigment {Grey} finish {reflection 0} } cylinder { <-2, 5,-2>, <-2,-5,-2>, 1 pigment {Blue} } plane { -z, 0 rotate y * 30 texture { gradient y texture_map { [0.0 Texture1] [0.4 Texture1] [0.6 Texture2] [1.0 Texture2] } scale 2 } }

Maintenant, qu'avons-nous fait ? Le plan d'arrière-plan est alterné verticalement avec deux textures identiques sauf pour leur finition. Quand nous rendons cela, le cylindre a une part de réflexion sur le plan, puis ne se reflète plus, puis recommence et s'arrête à nouveau selon un motif graduel. Avec un peu d'adaptation, cela peut être utilisé avec n'importe quel modèle, et selon n'importe quelle façon créative, si nous voulons donner différentes finitions à des morceaux d'un objet ou différentes textures complètes.
Quelqu'un pourrait demander : s'il y a un spectre de textures, pourquoi avons nous besoin de spectres de pigments et de spectres de normales ? Bonne question. La réponse : la vitesse de calcul. Si nous utilisons un spectre de texture, à chaque changement de point, POV-Ray doit faire de multiples calculs sur chaque élément de texture, puis faire une moyenne pour affecter la bonne valeur au point. L'utilisation d'un spectre de pigments (ou seulement un spectre de normales) réduit le nombre de calcul, et notre texture est rendue plus vite par dessus le marché. Comme principe établi : nous utilisons les spectres de pigments ou de normales partout où nous pouvons, et nous ne revenons à des spectres de textures que si nous devons avoir plus de souplesse.
Si nous avons suivis les exercices correspondants aux pigments simples, nous savons qu'il y a trois modèles appelés modèles de liste de couleurs, parce que plutôt que d'utiliser une palette de couleurs, ces modèles simples, mais utiles, prennent une liste de couleurs juste derrière le mot clé. Nous parlons du damier, de l'hexagone, du modèle brique et du modèle objet.
Naturellement, ils fonctionnent aussi avec des pigments complets, des normales, et des textures entières, comme les autres modèles le font. La seule différence est que nous listons les entrées dans le modèle (comme nous le ferions avec des couleurs individuelles) au lieu d'utiliser des spectres d'entrées. Voici un exemple. Nous enlevons le plan et tous les pigments déclarés que nous avons laissés dans l'exemple précédent, et nous ajoutons ceci.
#declare Pigment1 = pigment { hexagon color Yellow color Green color Grey scale .1 } #declare Pigment2 = pigment { checker color Red color Blue scale .1 } #declare Pigment3 = pigment { brick color White color Black rotate -90*x scale .1 } box { -5, 5 pigment { hexagon pigment {Pigment1} pigment {Pigment2} pigment {Pigment3} rotate 90*x } }

Nous commençons par déclarer un exemple de chaque modèle de liste de couleurs, comme des pigments individuels. Ensuite, nous utilisons le modèle hexagone comme un modèle de liste de pigments, en le remplissant d'une liste de pigments plutôt que de couleurs, comme nous le faisions auparavant. Il y a deux commandes de rotation dans cet exemple, parce que les briques sont alignées selon l'axe z, et les hexagones le sont seulement sur l'axe y, et nous voulons que tout fasse face à la caméra, déclarée à l'origine dans l'axe des z.
Bien sûr, les modèles de liste de couleurs sont utilisés seulement pour les pigments, mais depuis la version 3 de POV-Ray, tout ce qui fonctionne pour les pigments peut aussi être adapté pour les normales et les textures complètes. Un couple d'exemples rapides ressemblerait à cela
normal { brick normal {granite .1} normal {bumps 1 scale .1} }
ou...
texture { checker texture {Gold_Metal} texture {Silver_Metal} }
Dans les précédentes versions, il y avait des modèles de textures appelés tiles. En utilisant simplement les modèles de textures en damier (comme vu juste au dessus), nous pouvons obtenir les mêmes effets, donc les tuiles sont obsolètes. Elles sont seulement supportées par POV-Ray 3 pour la compatibilité des anciennes scènes, mais maintenant, il est temps de prendre l'habitude d'utiliser plutôt le damier.
Maintenant, les choses deviennent intéressantes. Avant, nous commencions à voir comment les pigments et les normales peuvent glisser de l'un à l'autre quand nous les utilisions dans des applications. Mais comment faire si nous voulons un mélange des modèles sur toute la surface ? C'est ici qu'une nouvelle caractéristique, appelée average, peut devenir très pratique. La moyenne fonctionne avec les spectres de pigments, de normales et de textures, bien que la syntaxe soit un peu différente, et si nous ne nous y attendons pas, la modification peut nous troubler. Voici un simple exemple. Nous utilisons nos include standards, une caméra et une source de lumière, comme d'habitude, et entrons les objets suivants.
plane {-z, 0 pigment {White} normal { average normal_map { [1, gradient x] [1, gradient y] } } }

Ce que nous avons fait s'explique de lui même dès que nous le traçons. Nous avons combiné un gradient de bosses vertical et un horizontal, créant des croisements de gradient. Actuellement, l'effet de croisement est un doux mélange de gradient x et de gradient y sur tout notre plan. Maintenant que dire sur la différence de syntaxe ?
Nous voyons comment notre spectre de normales a changé par rapport aux précédents. Le nombre décimal à gauche de chaque entrée a une fonction différente maintenant. Elle donne le facteur de poids de chaque entrée du spectre. Essayez quelques valeurs pour le gradient x et voyez comment changent les normales.
Le facteur de poids peut être omis, alors ce sera comme si chaque entrée avait un poids de 1.
Avec la multitude des couleurs, motifs et options pour créer des textures complexes, nous pouvons facilement être profondément captivé par le mélange et la transformation pour ajuster la texture à appliquer à notre dernière création. Mais, tôt ou tard, nous voudrons cette fameuse texture. Cette texture qui ressemble à du bois, seulement verni, et avec cette sorte de petite striure jaune, et quelques marques verticales grises, qui ressemblent à un début de peinture, laissant apparaître le bois.
Seulement... maintenant quoi ? Comment mettre tout cela dans une seule texture ? Aucun motif ne peut faire toutes ces choses. Avant de paniquer et de parler d'application d'image, il y a encore une dernière option : les textures stratifiées.
Avec les textures stratifiées, nous devons seulement spécifier une série de textures, les unes après les autres, toutes associées au même objet. Chaque texture listée sera appliquée au dessus de la précédente, du bas en haut dans l'ordre de leur apparition.
Il est très important de noter que nous devons avoir un certain degré de transparence (filtre ou transmission) dans les pigments de nos textures supérieures, ou les suivantes seront recouvertes. Nous ne recevrons aucun avertissement ou message d'erreur, car c'est techniquement légal de les recouvrir : cela n'a pas de sens, c'est tout. C'est comme passer des heures à créer une image élaborée sur un mur, puis de le recouvrir d'une peinture blanche unie.
Dessinons un objet très simple avec une texture stratifiée, et regardons comment ça fonctionne. Nous créons le fichier LAYTEX.POV et ajoutons les éléments suivants.
#include "colors.inc" #include "textures.inc" camera { location <0, 5,-30> look_at <0, 0, 0> } light_source {<-20, 30,-50> color White} plane {y, 0 pigment {checker color Green color Yellow}} background {rgb <.7, .7, 1>} box { <-10, 0,-10>, <10, 10, 10> texture { Silver_Metal // un objet de métal ... normal { // ... qui a encaissé un choc dents 2 scale 1.5 } } // (fin de la texture de base) texture { // ... a quelques traces de rouille ... pigment { granite color_map { [0.0 rgb <.2, 0, 0>] [0.2 color Brown] [0.2 rgbt <1, 1, 1, 1>] [1.0 rgbt <1, 1, 1, 1>] } frequency 16 } } // (fin de la texture de rouille) texture { // ... et quelques traces noires pigment { bozo color_map { [0.0 color Black] [0.2 color rgbt <0, 0, 0, .5>] [0.4 color rgbt <.5, .5, .5, .5>] [0.5 color rgbt <1, 1, 1, 1>] [1.0 color rgbt <1, 1, 1, 1>] } scale 3 } } // (fin de la texture des marques noires) } // (fin de la déclaration de la boîte)
Ouf. Cela devient compliqué, aussi, pour le rendre lisible, nous avons inclus des commentaires pour dire ce que nous faisions et indiquer les fins de déclarations (ainsi, nous ne nous perdons pas dans toutes ces parenthèses !). Pour commencer, nous créons une simple boîte au-dessus d'un plancher en damier, classique, et donnons un ciel bleu pâle en arrière-plan. Maintenant, pour la partie amusante...
Nous avons fait la boîte avec la texture Silver_Metal comme décrite dans textures.inc (pour les points de bonus, regardez textures.inc et voyez comment cette texture a été déclarée à l'origine). Pour donner le départ à cet abus, nous avons ajouté le motif de normale dents, qui crée l'illusion de quelques creux à la surface, comme si notre mystérieuse boîte avait été choquée.
Les marques de rouille ne sont rien de plus qu'un motif de granite à grain fin, allant de rouge sombre à marron, qui s'interrompt brutalement pour devenir totalement transparent sur tout le reste du spectre de couleurs. C'est vrai, nous aurions pu parvenir à un motif plus réaliste, en utilisant un spectre de pigments pour des grappes de points de rouille, mais les spectres de pigments sont le sujet d'un autre exercice, donc sautons-le pour l'instant.
Enfin, nous avons ajouté une troisième texture au lot. La texture bozo, aléatoire dans le placement, varie en passant pas des centres noircis, un gris semi transparent, pour finir en transparence totale dans la dernière moitié du spectre de couleurs. Cela donne des marques de suie aidant à gâcher la surface de la boîte. Le résultat final laisse notre boîte vraiment corrompue, en utilisant de multiples modèles de textures, les uns au dessus des autres, pour produire un effet inaccessible avec un modèle unique !

Dans l'éventualité d'une réutilisation de notre texture stratifiée, nous pouvons la déclarer. Nous ne répèterons pas la totalité de la texture, mais le format général est le suivant :
#declare Abused_Metal = texture { /* insérez votre texture de base ici... */ } texture { /* et vos marques de rouille ici... */ } texture { /* et bien sûr, vos tâches de suie ici */ }
POV-Ray n'a pas de problème de détection de la fin de la déclaration, car les textures se suivent sans intervention d'objets ou de directives. La texture stratifiée est censée continuer jusqu'à ce qu'il trouve autre chose qu'une texture, ainsi, toute quantité de couche peut être ajoutée dans la déclaration.
Un dernier mot : quelle que soit la texture stratifiée créée, déclarée ou non, vous ne devez pas quitter l'emballage de texture. Dans les textures conventionnelles, un raccourci classique est d'avoir seulement un pigment, ou juste un pigment et une finition, ou juste une normale, ou quoi que ce soit, et de les laisser en dehors de la déclaration de texture. Cela ne peut être étendu aux textures stratifiées. Vous pouvez mettre en couche des textures entières, mais pas des pièces individuelles. Par exemple
#declare Bad_Texture = texture { /* insérez votre texture de base ici... */ } pigment {Red filter .5} normal {bumps 1}
ne fonctionnera pas. Le pigment et la normale se baladent sans appartenir à un bloc de texture. A l'intérieur d'un objet, avec une simple texture, nous pouvons faire ce genre de chose, mais avec les textures stratifiées, nous ne créerons qu'une erreur, que ce soit dans un objet ou une déclaration.
Pour compléter l'explication sur la façon dont fonctionne les textures stratifiées, un autre exemple est décrit en détail. Une nappe est créée pour être utilisée dans une scène de repas champêtre. Puisque un simple tissu en damier rouge et blanc paraîtrait trop neuf, trop plat, et se rapprocherait trop d'un plancher pavé, des textures stratifiées sont utilisées.
Nous allons créer une scène contenant quatre compartiments. Le premier a cette texture rouge et blanche, le second ajoute une strate pour atténuer de façon réaliste le tissu, le troisième ajoute quelques tâches de vin et le dernier ajoute quelques rides (ce n'est pas une autre strate, mais nous devons noter quand et où les ajouts de changements à la normale de surface ont un effet sur les textures stratifiées).
Nous commençons par placer une caméra, quelques lumières, et la première boîte. A ce niveau, la texture est un pavage ordinaire, pas stratifié. Voir layered1.pov.
#include "colors.inc" camera { location <0, 0,-6> look_at <0, 0, 0> } light_source {<-20, 30,-100> color White} light_source {<10, 30,-10> color White} light_source {<0, 30, 10> color White} #declare PLAIN_TEXTURE = // damier rouge/blanc texture { pigment { checker color rgb <1.000, 0.000, 0.000> color rgb <1.000, 1.000, 1.000> scale <0.2500, 0.2500, 0.2500> } } // boîte plaquée d'un damier rouge/blanc box { <-1,-1,-1>, <1, 1, 1> texture { PLAIN_TEXTURE } translate <-1.5, 1.2, 0> }
Nous rendons cette scène.

Ce n'est pas particulièrement intéressant, n'est ce pas ? Voilà pourquoi nous utiliserons des textures stratifiées.
D'abord, nous ajoutons une strate de deux gris partiellement transparents. Nous les pavons comme les couleurs rouge et blanche, mais nous ajoutons un peu de turbulence pour faire une décoloration plus réaliste. Nous ajoutons la boîte suivante et retraçons (voir layered2.pov).
#declare FADED_TEXTURE = // texture en damier rouge/blanc texture { pigment { checker color rgb <0.920, 0.000, 0.000> color rgb <1.000, 1.000, 1.000> scale <0.2500, 0.2500, 0.2500> } } // les gris pour ternir le rouge et le blanc texture { pigment { checker color rgbf <0.632, 0.612, 0.688, 0.698> color rgbf <0.420, 0.459, 0.520, 0.953> turbulence 0.500 scale <0.2500, 0.2500, 0.2500> } } // la boîte au damier rouge/blanc terni box { <-1,-1,-1>, <1, 1, 1> texture { FADED_TEXTURE } translate <1.5, 1.2, 0> }

Bien que ce soit une différence subtile, le damier semble moins neuf.
Puisqu'il y a une bouteille de vin dans la scène du repas, nous pensons que ce serait une jolie touche d'ajouter une tache ou deux. Quoique cet effet puisse être accompli en plaçant un blob aplati sur le tissu, ce que nous voulons vraiment est un effet de renversement, pas une tache. Donc, il est temps d'ajouter une autre strate.
A nouveau, nous ajoutons une boîte et retraçons (voir layered3.pov).
#declare STAINED_TEXTURE = // damier rouge/blanc texture { pigment { checker color rgb <0.920, 0.000, 0.000> color rgb <1.000, 1.000, 1.000> scale <0.2500, 0.2500, 0.2500> } } // les gris pour ternir le damier texture { pigment { checker color rgbf <0.634, 0.612, 0.688, 0.698> color rgbf <0.421, 0.463, 0.518, 0.953> turbulence 0.500 scale <0.2500, 0.2500, 0.2500> } } // tache de vin texture { pigment { spotted color_map { [0.000 color rgb <0.483, 0.165, 0.165>] [0.329 color rgbf <1.000, 1.000, 1.000, 1.000>] [0.734 color rgbf <1.000, 1.000, 1.000, 1.000>] [1.000 color rgb <0.483, 0.165, 0.165>] } turbulence 0.500 frequency 1.500 } } // la boîte tachée box { <-1,-1,-1>, <1, 1, 1> texture { STAINED_TEXTURE } translate <-1.5,-1.2, 0> }

Maintenant, il y a une texture de nappe avec de la personnalité.
Une autre touche que nous voulons ajouter à la nappe est quelques plis, comme si elle avait été froissée. Cela n'est pas une nouvelle texture stratifiée, mais nous devons garder en mémoire que les changements de normales de surface doivent être inclus dans la plus haute strate de la texture. Les modifications sur les autres niveaux n'ont aucun résultat (rien à voir avec la transparence des couches supérieures).
Nous ajoutons cette boîte finale et retraçons (voir layered4.pov)
#declare WRINKLED_TEXTURE = // damier rouge et blanc texture { pigment { checker color rgb <0.920, 0.000, 0.000> color rgb <1.000, 1.000, 1.000> scale <0.2500, 0.2500, 0.2500> } } // les gris pour ternir le damier texture { pigment { checker color rgbf <0.632, 0.612, 0.688, 0.698> color rgbf <0.420, 0.459, 0.520, 0.953> turbulence 0.500 scale <0.2500, 0.2500, 0.2500> } } // les taches de vin texture { pigment { spotted color_map { [0.000 color rgb <0.483, 0.165, 0.165>] [0.329 color rgbf <1.000, 1.000, 1.000, 1.000>] [0.734 color rgbf <1.000, 1.000, 1.000, 1.000>] [1.000 color rgb <0.483, 0.165, 0.165>] } turbulence 0.500 frequency 1.500 } normal { wrinkles 5.0000 } } // la boîte plissée box { <-1,-1,-1>, <1, 1, 1> texture { WRINKLED_TEXTURE } translate <1.5,-1.2, 0> }

Bien, cela n'est pas la nappe que nous voulons aux pique-niques où nous sommes attendus, mais si nous comparons cette dernière boîte avec la première, nous voyons toute la profondeur, la dimension et la personnalité qui est possible en utilisant seulement des textures créatives.
Une dernière note : les commentaires sur les normales de surface ne s'applique pas aux finitions. Si une couche basse contient une finition particulière, et qu'une couche haute n'en contienne pas, elle sera vue à travers les transparences de cette couche haute.
Nous avons de puissants outils pour les textures à notre disposition, mais que faire si nous voulons plus de liberté dans l'arrangement de textures complexes ? Bien, comme les applications d'images le font pour les pigments, et les spectres de bosses pour les normales, des textures complètes peuvent être faites en utilisant une application de matériaux, si le besoin se fait sentir.
Comme pour les applications d'images, et les spectres de bosses, nous avons besoin d'une image en format bitmap qui sera appelée par POV-Ray pour servir de patron et guider la disposition des textures individuelles, mais cette fois, nous aurons besoin de spécifier quelle texture sera associée avec chaque index de l'application. Pour faire une telle image, nous pouvons utiliser un programme de dessin qui nous autorise le choix de couleurs par leur numéro d'index dans la palette (la couleur actuelle est sans importance, puisque ce n'est qu'un patron qui dit à POV-Ray quelle texture doit aller à telle position). Maintenant, si nous avons l'environnement complet qui va avec POV-Ray, nous avons dans nos fichiers inclus une image appelée povmap.gif, qui est une image utilisant seulement les quatre premiers indices de la palette, pour créer un carré bordé avec les mots 'Persistence of Vision' dedans. Cela fera l'affaire pour l'exemple suivant. En utilisant nos mêmes fichiers d'inclusion, la caméra et la source de lumière, nous entrons l'objet suivant.
plane { -z, 0 texture { material_map { gif "povmap.gif" interpolate 2 once texture {PinkAlabaster} // le bord interne texture {pigment {DMFDarkOak}} // le bord externe texture {Gold_Metal} // lettres texture {Chrome_Metal} // le panneau } translate <-0.5,-0.5, 0> scale 5 } }
La position de la source de lumière, et l'absence d'objets en avant-plan pouvant se refléter, ne montrent pas cette texture à son avantage. Mais nous pouvons voir comment ça fonctionne. Les textures ont été placées en accord avec la position des pixels selon l'index d'une palette. En utilisant le mot clé once (pour éviter le pavage), en déplaçant et en redimensionnant notre patron, pour convenir à la caméra utilisée, nous pouvons voir la totalité de la chose.
Bien sûr, cela ne fonctionne qu'avec des images suivant une palette de couleurs, comme le GIF et certains PNG. Les applications de matériaux peuvent également utiliser des formats sans palette de couleurs, comme TGA, le format de sortie de POV-Ray. Cela nous conduit à une conséquence intéressante : nous pouvons utiliser POV-Ray pour produire des palettes sources pour POV-Ray ! Avant de passer aux limitations des textures spéciales, faisons encore une chose avec les applications de matériaux, pour montrer comment POV-Ray peut faire sa propre source.
Pour commencer, si on n'utilise pas de format avec une palette, POV-Ray regarde le composant rouge de 8 bit de la couleur du pixel (qui aura une valeur entre 0 et 255) pour déterminer la texture de la liste à utiliser. Donc, pour créer une application source, nous devons contrôler très précisément la valeur rouge d'un pixel. Nous pouvons le faire en
rgb pour choisir notre couleur, comme rgb <N/255, 0, 0>, où 'N' est la valeur de rouge que nous voulons assigner au pigment, puis...finish { ambient 1 } à tous les objets, pour s'assurer que la surbrillance et l'ombrage n'interviendront pas.Perdu ? Bien, voici un exemple, qui génèrera une carte très proche de povmap.gif, mais au format TGA. Nous notons que nous avons donné des valeurs aux verts et aux bleus. POV-Ray les ignorera dans le patron final, mais c'est pour nous, humains, dont les yeux ne peuvent pas faire la différence entre des nuances de rouge de 0 à 4/255. Sans ces nuances de bleu et de vert, nous ne verrions qu'un carré noir. Cela peut être un moyen pour envoyer des messages secrets en utilisant POV-Ray (ajouter à une application de matériaux pour décoder) mais ce n'est d'aucune utilité si nous voulons voir à quoi ressemble notre source, pour être sûr d'avoir ce que nous désirons.
Nous créons le code suivant, le nommons povmap.pov, puis le rendons, et nommons le résultat povmap.tga (povmap.bmp sur Windows).
camera { orthographic up <0, 5, 0> right <5, 0, 0> location <0, 0,-25> look_at <0, 0, 0> } plane { -z, 0 pigment {rgb <1/255, 0, 0.5>} finish {ambient 1} } box { <-2.3,-1.8,-0.2>, <2.3, 1.8,-0.2> pigment {rgb <0/255, 0, 1>} finish {ambient 1} } box { <-1.95,-1.3,-0.4>, <1.95, 1.3,-0.3> pigment {rgb <2/255, 0.5, 0.5>} finish {ambient 1} } text { ttf "crystal.ttf", "The vision", 0.1, 0 scale <0.7, 1, 1> translate <-1.8, 0.25,-0.5> pigment {rgb <3/255, 1, 1>} finish {ambient 1} } text { ttf "crystal.ttf", "Persists!", 0.1, 0 scale <0.7, 1, 1> translate <-1.5,-1,-0.5> pigment {rgb <3/255, 1, 1>} finish {ambient 1} }
Tout ce qui nous reste à faire est la modification de notre dernière application de matériaux pour passer du GIF au TGA est de changer le nom du fichier. Quand nous traçons, en utilisant la nouvelle carte, le résultat est très similaire à celui qui utilisait la carte GIF, sauf que nous n'avons pas utilisé un programme de dessin extérieur pour générer notre source : POV-Ray a tout fait !

Il y a un couple de limitations pour toutes les textures spéciales que nous avons vues (depuis les spectres de textures, de pigments et de normales, jusqu'à l'application de matériaux). Premièrement, si vous avez utilisé la directive par défaut pour placer la texture par défaut pour tous les objets de la scène, elle n'acceptera pas les textures spéciales. Cela est relativement mineur, car vous pouvez toujours en faire une déclaration et l'appliquer individuellement sur chaque objet.Cela ne vous empêche pas de faire tout ce que vous pouvez faire.
L'autre est plus limitative, mais comme nous l'avons rapidement vu, peut être assez facilement contournée. Si vous avez travaillé avec des textures stratifiées, vous avez vu comment les placer les unes sur les autres (tant qu'elles ont de la transparence). Cette technique très utile a un problème pour l'incorporation des textures spéciales comme strates. Mais nous avons la réponse !
Par exemple, disons que vous avez une texture stratifiée appelée Speckled_Metal, qui produit une surface métallique argentée, et que vous voulez poser de petites taches de rouille dessus. Alors nous décidons, pour une apparence vraiment rouillée, que nous voulons créer des plaques de rouille plus concentrées, aléatoirement sur toute la surface. L'approche évidente est de créer un modèle de texture spéciale, avec de la transparence pour l'utiliser au sommet des strates. Mais, nous ne savons pas utiliser ce type de motif de texture comme une strate. Nous ne génèrerions qu'un message d'erreur. La solution est de prendre le problème à l'envers, et d'intégrer notre texture stratifiée au modèle de texture, comme ceci :
// Cette partie déclare un pigment à utiliser // dans le modèle de taches de rouille #declare Rusty = pigment { granite color_map { [0 rgb <0.2, 0, 0>] [1 Brown] } frequency 20 } // et ceci l'applique // Notez que notre texture stratifiée de départ // "Speckled_Metal" fait maintenant partie de la palette #declare Rust_Patches = texture { bozo texture_map { [0.0 pigment {Rusty}] [0.75 Speckled_Metal] [1.0 Speckled_Metal] } }
Et l'effet est le même que si nous avions ajouté le modèle tâches de rouilles sur le Speckled_Metal.
Avec la gamme complète de modèles, pigments, normales, finitions, textures stratifiées et spéciales, il n'y a pratiquement rien que nous ne puissions créer dans la recherche de textures extraordinaires. Un nombre presque infini de nouvelles possibilités attendent d'être créées !
| 2.3.5 Utilisation des effets atmosphériques |