2.2.5 Les options de texture simples

Les images rendues jusque là ont quelque chose d'ennuyeux au niveau de l'apparence des objets. Ajoutons quelques améliorations aux textures.

2.2.5.1 Finition de surface

Une des principales caractéristiques d'un raytraceur est sa possibilité de faire des choses intéressantes avec les finitions de surface comme certaines accentuations, et la réflexion. Ajoutons un joli petit phong (tâche claire) à une sphère. Pour faire cela, nous devons ajouter le mot clé finish suivi d'un paramètre. Nous changeons la définition de la sphère comme suit :

sphere {
	<0, 1, 2>, 2
	texture {
		pigment {color Yellow}	//Yellow est prédéfinie dans COLORS.INC
		finish {phong 1}
	}
}

Nous rendons cette scène.

Le mot clé phong ajoute une accentuation de la même couleur que l'éclairage sur l'objet. Il ajoute plus de crédibilité et rend l'objet plus lisse et reluisant. Des valeurs plus petites rendront l'accentuation moins brillante (les valeurs doivent être entre 0 et 1).

2.2.5.2 Ajout d'inégalités

La mise en valeur que nous avons ajoutée illustre à quel point notre perception dépend des propriétés réflectives d'un objet. Le raytracing peut exploiter cela en jouant des tours à notre perception, pour nous faire croire en des détails qui n'y sont pas.

Supposons que nous voulons une surface très inégale. Il serait très difficile de modéliser mathématiquement beaucoup de bosses. Nous pouvons, toutefois, en simuler l'apparence par altération de la réflexion de la lumière sur la surface. Les calculs de réflexion dépendent d'un vecteur appelé normale de surface. Il pointe perpendiculairement et vers l'extérieur de la surface. Par la modification artificielle (ou perturbation) de ce vecteur de normale, nous pouvons simuler des inégalités. Nous changeons la scène comme suivant, et la rendons :

sphere {
	<0, 1, 2>, 2
	texture {
		pigment {color Yellow}
		normal {bumps 0.4 scale 0.2}
		finish {phong 1}
	}
}

Cela dit à POV-Ray d'utiliser le modèle bumps pour modifier la normale de surface. La valeur 0.4 contrôle la profondeur apparente des bosses. Habituellement, les inégalités ont une unité de large, ce qui ne fonctionne pas bien avec une sphère de 2 unités de rayon. Le changement d'échelle les place au 1/5 de leur largeur, mais n'affecte pas leur profondeur.

2.2.5.3 Création de spectre de couleurs

Nous pouvons faire plus que donner une couleur unie à un objet. Nous pouvons créer des modèles complexes dans le bloc pigment, comme dans ces exemples :

sphere {
	<0, 1, 2>, 2
	texture {
		pigment {
			wood
			color_map {
				[0.0 color DarkTan]
				[0.9 color DarkBrown]
				[1.0 color VeryDarkBrown]
			}
			turbulence 0.05
			scale <0.2, 0.3, 1>
		}
		finish {phong 1}
	}
}
sphere {
	<0, 1, 2>, 2
	texture {
		pigment {
			wood
			color_map {
				[0.0 color Red]
				[0.5 color Red]
				[0.5 color Blue]
				[1.0 color Blue]
			}
			scale <0.2, 0.3, 1>
		}
		finish {phong 1}
	}
}

Le mot clé wood spécifie un spectre de pigments en anneaux concentriques, comme du bois. Pour toute position dans l'espace de POV, un spectre retourne une valeur dans la fourchette de 0 à 1. Les valeurs en dehors de cette fourchette sont ignorées. Le mot clé color_map dit quel vecteur de couleur est assigné à cette valeur. Dans le premier exemple, la couleur du bois ira de DarkTan à DarkBrown sur les premiers 90%, puis de DarkBrown à VeryDarkBrown sur les derniers 10%. Dans le second exemple, les couleurs ne glissent pas l'une vers l'autre mais changent abruptement. Le mot clé turbulence brasse doucement le modèle pour que les veines ne soient plus tout à fait circulaires, et le mot clé scale ajuste la taille du modèle.

La plupart des spectres sont prévus par défaut pour nous donner un élément pour une sphère de rayon 1.0. Un élément est grossièrement défini comme une transition de couleur. Par exemple, une texture bois aura une bande sur une sphère de rayon 1. Dans cet exemple, nous réduisons le modèle avec le mot clé scale suivi d'un vecteur. Dans ce cas, nous réduisons à 0.2 dans l'axe des x, à 0.3 dans l'axe des y, et nous laissons l'axe z inchangé. Des valeurs supérieures à 1 étirent un élément, celles inférieures à 1 le réduisent. Une valeur de 1 laisse l'élément inchangé.

2.2.5.4 Textures prédéfinies

POV-Ray a quelques textures sophistiquées prédéfinies dans les fichiers standards comme glass.inc, metals.inc, stones.inc et woods.inc. Certaines sont des textures complètes, avec les paramètres pour le pigment, la normale et/ou la finition déjà préparés. D'autres ne sont que les pigments, ou juste les finitions.

Nous changeons la définition de notre sphère et la traçons :

sphere {
	<0, 1, 2>, 2
	texture {
		pigment {
			DMFWood4	// prédéfini dans textures.inc
			scale 4	// agrandi également dans toutes les directions
		}
		finish {Shiny}	// prédefinie dans finish.inc
	}
}

Le pigment DMFWood4 a déjà été réduit lors de sa définition. Pour cet exemple, nous voulons un modèle plus grand. Puisque nous voulons un agrandissement sur tous les axes, nous pouvons utiliser une seule valeur, plutôt qu'un vecteur.

Nous pouvons regarder le fichier textures.inc pour voir les pigments et finitions déjà déclarés, et les essayer. Il suffit d'insérer le nouveau pigment à la place de DMFWood4 ou essayer d'autres finitions à la place de Shiny et retracer notre fichier.

Voici un exemple utilisant une texture complète, plutôt que quelques éléments.

sphere {
	<0, 1, 2>, 2
	texture {PinkAlabaster}
}

Complément sur le bois

Complément sur la turbulence

Complément sur la taille

2.2.4 La source de lumière 2.2.4 La source de lumière 2.2.6 Utilisation de la caméra 2.2.6 Utilisation de la caméra