2.2.4 La source de lumière

Vous savez que vous avez fait trop de raytracing quand ...
... Vous faites une série de photos juste pour apprendre comment avoir le bon éclairage.
-- Christoph Rieder

Dans toute scène, la lumière nécessaire pour éclairer vos objets doit venir d'une source de lumière. Il y a de nombreux types de sources lumineuses dans POV-Ray et l'utilisation intelligente du bon type conduit à des résultats impressionnants. Prenons le temps d'explorer quelques uns de ces types de sources lumineuses, et leurs nombreux paramètres.

2.2.4.1 La source lumineuse ponctuelle

La lumière ponctuelle est ce qu'indique son nom. Elle n'a pas de taille, est invisible et illumine tout sans se soucier de l'éloignement (cela peut être changé). C'est la source de lumière la plus simple et la plus basique. Il n'y a que deux paramètres importants, la position et la couleur. Dessinons une simple scène et plaçons y une source de lumière ponctuelle.

Nous créons un nouveau fichier litedemo.pov. Nous le modifions ainsi :

#include "colors.inc"
#include "textures.inc"
camera {
	location <-4, 3,-9>
	look_at <0, 0, 0>
	angle 48
}

Nous ajoutons quelques objets simples :

plane {
	y,-1
	texture {
		pigment {
			checker
			color rgb <0.5, 0, 0>
			color rgb <0, 0.5, 0.5>
		}
		finish {
			diffuse 0.4
			ambient 0.2
			phong 1
			phong_size 100
			reflection 0.25
		}
	}
}
torus {
	1.5, 0.5
	texture {Brown_Agate}
	rotate <90, 160, 0>
	translate <-1, 1, 3>
}
box {
	<-1,-1,-1>, <1, 1, 1>
	texture {DMFLightOak}
	translate <2, 0, 2.3>
}
cone {
	<0, 1, 0>, 0, <0, 0, 0>, 1
	texture {PinkAlabaster}
	scale <1, 3, 1>
	translate <-2,-1,-1>
}
sphere {
	<0, 0, 0>, 1
	texture {Sapphire_Agate}
	translate <1.5, 0,-2>
}

Maintenant, nous ajoutons une lumière ponctuelle :

light_source {
	<2, 10,-3>
	color White
}

Nous rendons cela à 200x150 -A et voyons que les objets sont clairement visibles, avec des ombres mordantes. Les côtés des objets vers la source ont des couleurs vives, alors que les autres faces sont assombries. Nous notons aussi que le sol est illuminé sur toute sa surface, jusqu'à l'horizon. Cela nous permet de voir le plan, mais ce n'est pas réaliste.

2.2.4.2 Le projecteur

Les projecteurs sont un type de source de lumière très utile. Ils peuvent être utilisés pour ajouter de l'intensité et mettre en évidence, comme un photographe le fait avec des projecteurs. Pour créer un projecteur ajoutez simplement le mot clé spotlight à une source ponctuelle. Il y a quelques paramètres de plus avec les faisceaux lumineux. Il y a radius, falloff, tightness et point_at. Le paramètre radius est l'angle du cône de pleine intensité. Le paramètre falloff est l'angle du cône où la lumière passe de l'intense au sombre. tightness est un paramètre qui détermine la vitesse de la baisse de lumière. Le paramètre point_at est l'endroit où pointe le faisceau. Changeons la lumière de notre scène comme suit :

light_source {
	<0, 10,-3>
	color White
	spotlight
	radius 15
	falloff 20
	tightness 10
	point_at <0, 0, 0>
}

Nous rendons cela à 200x150 -A et nous voyons que seuls les objets sont illuminés. Le reste du plan, et les portions extérieures des objets, sont dans l'ombre. Il y a une aire de déclin en bordure, mais les ombres sont toujours taillées au rasoir.

Tripotons quelques paramètres pour voir. Nous changeons la valeur du déclin pour 16 (il doit toujours être supérieur au rayon) et revoyons ça.

Maintenant, l'aire de déclin est très fine, et les objets sont soit brillamment illuminés, soit complètement dans l'ombre. Maintenant, nous changeons le déclin à 20 et plaçons la force à 100 (le plus haut est le plus fort) et rendons à nouveau.

Le faisceau semble plus petit, mais la réalité est que le déclin est si excessif que le rayon semble plus petit.

Nous décidons que la force à 10 (le défaut) et le déclin à 18 sont les meilleurs pour ce faisceau et nous voulons, maintenant, placer quelques faisceaux autour de la scène, pour les effets. Plaçons une lumière bleue et une rouge légèrement rapprochées, en plus de la blanche :

light_source {
	<10, 10,-1>
	color Red
	spotlight
	radius 12
	falloff 14
	tightness 10
	point_at <2, 0, 0>
}
light_source {
	<-12, 10,-1>
	color Blue
	spotlight
	radius 12
	falloff 14
	tightness 10
	point_at <-2, 0, 0>
}

En rendant cela, nous voyons quelque chose de merveilleusement mystérieux. Les trois faisceaux convergent sur les objets, les rendant bleus sur une face, rouges sur l'autre, avec assez de lumière blanche pour équilibrer.

2.2.4.3 La source de lumière cylindrique

Les projecteurs ont la forme de cônes, cela signifie que leurs effets changent avec la distance. Plus un objet sera loin, plus le rayon sera large. Mais nous pouvons vouloir un rayon et un déclin d'une taille particulière, sans tenir compte de la distance. Pour cette raison, les lumières cylindriques sont nécessaires. C'est comme un projecteur, sauf que le rayon et le déclin restent les mêmes, quelle que soit la distance. Par conséquent, sa forme est plus un cylindre qu'un cône. Nous pouvons spécifier une source de lumière cylindrique en remplaçant le mot clé spotlight par cylinder. Nous essayons ceci sur notre scène, en changeant les trois sources de lumière.

Nous remarquons que l'image est plus terne. C'est parce que la contrainte cylindrique ne laisse pas la lumière s'étendre comme avec les cônes. Des rayons et des déclins plus larges sont nécessaires pour avoir l'équivalent. Nous essayons un rayon de 20 et un déclin de 30. C'est la solution !

2.2.4.4 L'aire lumineuse

Vous savez que vous avez fait trop de raytracing quand ...
... Vous portez des vêtements duveteux pour adoucir votre ombre.
-- Mark Kadela

Quoiqu'il en soit, nos sources lumineuses ont quelque chose en commun. Elles produisent des ombres découpées. Cela parce que la source est un point infiniment petit. Les objets sont directement sous la lumière, et sont totalement illuminés, ou ils n'y sont pas, et ils sont totalement ombrés. Dans la vie réelle, ces conditions n'existent que dans l'espace, où la lumière directe du soleil perce la totale obscurité. Mais sur la Terre, la lumière semble circuler autour des objets, les englobant, et les sources ont des dimensions, signifiant qu'elles peuvent être partiellement cachées (les ombres ne sont plus aussi tranchées). Elles ont une aire floue, une aura, où il n'y a ni totale illumination ou ombre. Pour pouvoir simuler ces ombres douces, un raytraceur doit donner des dimensions à ses sources de lumière. POV-Ray accomplit cela avec une caractéristique qu'on appelle l'aire lumineuse.

L'aire lumineuse a des dimensions dans les deux axes. Elles sont spécifiées par les deux premiers vecteurs de la syntaxe. Nous devons également dire combien de sources se trouvent dans l'aire. Plus il y en a et plus les ombres sont douces, mais plus le temps de rendu est important. Usuellement, un 3*3 ou un 5*5 suffit. Nous avons également la possibilité de spécifier une valeur adaptative. Le mot clé adaptive dit au raytraceur qu'il peut adapter la situation, et envoyer seulement les rayons nécessaires pour déterminer la valeur du pixel. Si adaptive n'est pas utilisé, un rayon est lancé pour chaque source. Cela peut réellement ralentir les choses. Normalement, une valeur de 1 est suffisante. Finalement, nous voudrons probablement utiliser le mot clé jitter. Il demande un léger mouvement de chaque source lumineuse, pour que l'ombre soit réellement douce, au lieu de nous donner une ombre sous forme de bandes.

OK, essayons en une. Nous mettons les sources cylindriques en commentaire, et nous ajoutons :

light_source {
	<2, 10,-3>
	color White
	area_light <5, 0, 0>, <0, 0, 5>, 5, 5
	adaptive 1
	jitter
}

Ceci est une aire lumineuse blanche centrée en <2, 10,-3>. Elle est de 5 unités (le long de l'axe des x) par 5 unités (le long des z) et a 25 (5*5) sources lumineuses. Nous avons spécifié adaptive 1 et jitter. Nous rendons cela à 200x150 -A.

Rapidement, nous notons deux choses. Le traçage est plus long qu'avec une source ponctuelle ou un faisceau, et les ombres ne sont plus découpées ! Elles ont toutes une douce aura autour d'elles. Attendez, on peut avoir mieux.

Les faisceaux et les cylindres lumineux peuvent aussi avoir des aires ! Souvenez-vous de ces ombres tranchées avec les faisceaux ? Cela n'aurait pas de sens d'utiliser une aire de 5*5 pour un faisceau, mais une aire plus petite pourrait faire du bon travail en nous donnant ce qu'il faut de flou pour un faisceau. Essayons. Nous commentons les aires lumineuses, et changeons les faisceaux comme suit :

light_source {
	<2, 10,-3>
	color White
	spotlight
	radius 15
	falloff 18
	tightness 10
	area_light <1, 0, 0>, <0, 0, 1>, 2, 2
	adaptive 1
	jitter
	point_at <0, 0, 0>
}
light_source {
	<10, 10,-1>
	color Red
	spotlight
	radius 12
	falloff 14
	tightness 10
	area_light <1, 0, 0>, <0, 0, 1>, 2, 2
	adaptive 1
	jitter
	point_at <2, 0, 0>
}
light_source {
	<-12, 10,-1>
	color Blue
	spotlight
	radius 12
	falloff 14
	tightness 10
	area_light <1, 0, 0>, <0, 0, 1>, 2, 2
	adaptive 1
	jitter
	point_at <-2, 0, 0>
}

Nous avons maintenant trois faisceaux en aire, constitués de quatre (2*2) lumières, en trois couleurs différentes, toutes illuminant notre scène. Nous rendons cela en 200x150 -A.

Cela semble fonctionner parfaitement. Toutes nos ombres ont de petites marges, exactement ce que nous espérions trouver sur un objet sous un vrai faisceau lumineux.

2.2.4.5 La source de lumière ambiante

La source de lumière ambiante est utilisée pour simuler la réflexion interdiffuse. Si cette réflexion n'existait pas, toutes les surfaces sans éclairage direct seraient complètement sombres. POV-Ray utilise le mot clé ambient pour déterminer cette quantité de lumière réfléchie par une surface.

Par défaut, cette lumière qui émet partout et dans toutes les directions, est blanche (rgb <1, 1, 1>). Changer sa couleur peut produire des effets intéressants. En tout premier lieu, la luminosité globale de la scène peut être ajustée aisément. Au lieu de changer les valeurs ambient de chaque finition, seule la source de lumière ambiante est modifiée. En assignant différentes couleurs, nous pouvons créer de jolis effets comme une luminosité rouge déprimante. Pour plus de détails, voir 'La lumière ambiante'.

Ci-dessous, un exemple de source de lumière ambiante rouge.

global_settings {ambient_light rgb <1, 0, 0>}

2.2.4.6 Les sources de lumière spéciales

2.2.4.6.1 Utilisation de lumières sans ombres

On peut assigner le mot clé shadowless aux sources de lumière, et aucune ombre ne sera générée. Quelque fois, les scènes sont difficiles à éclairer correctement. Ce n'est ni pratique, ni réaliste d'appliquer systématiquement une valeur élevée à ambient aux textures. Au lieu de cela, nous pouvons placer un couple de lumières de remplissage autour de notre scène. Elles sont simplement des lumières faibles avec le mot clé shadowless pour augmenter l'illumination des objets pas bien éclairés. Essayons en une sur notre scène.

Vous vous souvenez des trois faisceaux colorés ? Nous revenons dessus et les activons, et nous commentons toutes les autres sources de lumière. Maintenant, nous ajoutons :

light_source {
	<0, 20, 0>
	color Gray50
	shadowless
}

Ceci est une lumière faible à 20 unités au dessus du centre de la scène. Elle donnera un faible éclairage à tous les objets, en incluant le plan en arrière-plan. Nous la rendons et regardons.

2.2.4.6.2 Assigner un objet à une source de lumière

Les sources de lumière sont invisibles. Elle sont juste un endroit d'où jaillit la lumière. Elles n'ont pas de véritable taille ou forme. Si nous voulons que notre source lumineuse soit une forme visible, nous pouvons utiliser le mot clé looks_like. Nous pouvons déclarer que notre source a la forme de n'importe quel objet. Quand nous attribuons looks_like, no_shadow est automatiquement appliqué à l'objet. Cela pour qu'il ne bloque pas la lumière. Si nous voulons un estompage, il est préférable d'utiliser une union pour s'en occuper. Ajoutons un tel objet à notre scène. Voici une ampoule fabriquée pour ce besoin :

#declare Lightbulb = union {
	merge {
		sphere {<0, 0, 0>, 1}
		cylinder {
			<0, 0, 1>, <0, 0, 0>, 1
			scale <0.35, 0.35, 1.0>
			translate 0.5*z
		}
		texture {
			pigment {color rgb <1, 1, 1>}
			finish {ambient .8 diffuse .6}
		}
	}
	cylinder {
		<0, 0, 1>, <0, 0, 0>, 1
		scale <0.4, 0.4, 0.5>
		texture {Brass_Texture}
		translate 1.5*z
	}
	rotate -90*x
	scale .5
}

Maintenant, nous ajoutons la source de lumière :

light_source {
	<0, 2, 0>
	color White
	looks_like {Lightbulb}
}

Rendant cela, nous voyons une ampoule assez crédible qui illumine notre scène.

Bien sûr, si nous ne donnons pas une forte valeur à ambient, l'ampoule n'est pas éclairée par la source de lumière. Autre aspect positif, les ombres se placent correctement, comme dans la réalité. Elles sont franches, aussi ajoutons une aire lumineuse à notre ampoule :

light_source {
	<0, 2, 0>
	color White
	area_light <1, 0, 0>, <0, 1, 0>, 2, 2
	adaptive 1
	jitter
	looks_like {Lightbulb}
}

Nous notons que nous avons placé cette aire dans le plan x-y au lieu du x-z. Et que l'apparence de l'ampoule n'est pas affectée par la source de lumière. L'ampoule doit être éclairée par une autre source, ou par, comme dans ce cas, une forte valeur ambient.

2.2.4.6.3 Utilisation de l'atténuation de lumière

Si nous cherchons le réalisme, ce n'est pas le cas pour le plan, qui ne s'estompe pas avec la distance. Dans la réalité, la lumière se disperse et perd son pouvoir d'éclairage des objets éloignés. Pour simuler cela, POV-Ray autorise l'utilisation de deux mots clés : fade_distance, qui indique la distance à laquelle l'illumination ne subsiste plus, et fade_power, une valeur exponentielle, qui donne le rythme de l'atténuation. Appliquons ces mots clés à notre source lumineuse.

Premièrement, nous accentuons la brillance de notre source en la plaçant à Gray75. Puis nous effectuons les changements suivants :

light_source {
	<0, 20, 0>
	color Gray75
	fade_distance 5
	fade_power 1
	shadowless
}

Cela signifie que la totalité de la lumière sera épuisée à une distance de 5 unités de la source. Le fade_power de 1 indique une atténuation linéaire (à vitesse constante). Nous rendons cette scène et regardons le résultat.

Cela fonctionne ! Maintenant, essayons un fade_power de 2 et une distance d'atténuation de 10. Cela marche bien aussi. L'atténuation est plus rapide avec un fade_power de 2 aussi devons-nous augmenter la distance à 10.

2.2.3 Les objets CSG 2.2.3 Les objets CSG 2.2.5 Les options de texture simples 2.2.5 Les options de texture simples