2.3.6 Cours sur le média simple

Le média est une caractéristique très souple et peut être utilisé dans une large gamme d'effets spéciaux comme les lueurs, la fumée, la poussière, le brouillard, etc. Toutefois, à cause de cette souplesse, ce n'est pas la caractéristique la plus simple et la plus facile de POV-Ray et elle requiert souvent de l'expérience pour donner quelque chose de bien.

2.3.6.1 Les types de média

Il y a trois types de média : l'émetteur, l'absorbant et le dispersant. Ils ont les propriétés suivantes :

Les médias émetteurs et absorbants sont les plus simples et les plus rapides. Le média émetteur peut être utilisé pour des choses comme les lueurs, les lasers, les étincelles et autres effets lumineux similaires. Le média absorbant peut être utilisé pour des choses comme la fumée et le brouillard (la différence avec la caractéristique fog de POV-Ray est que la densité d'un média absorbant peut être modifiée par un modèle, et qu'il peut être contenu dans un objet).

Le média dispersant est plus perfectionné et le plus lent. Il est un peu similaire au média absorbant sauf qu'il est pleinement pris en compte par les sources de lumière. Cela peut être utilisé pour la fumée ou le brouillard avec des faisceaux lumineux visiles et des ombres.

2.3.6.2 Quelques concepts sur le média

Le média peut être global pour l'ensemble de l'univers, ou il peut être contenu par un objet. Dans le dernier cas, le média est défini dans le bloc interior de la définition de l'objet.

Pour qu'un objet puisse contenir un média (ou pour accepter le média d'autres objets ou de l'univers), il doit être défini avec hollow (une erreur commune est d'oublier l'ajout de ce mot clé). Si un objet sans média ne doit pas accepter d'autres médias (ex : une bille de verre pleine), alors hollow ne doit pas être utilisé pour cet objet.

Si le média est défini dans l'intérieur d'un objet ou comme média global, il doit avoir une densité constante à travers l'objet/l'univers. Toutefois, un modèle de densité peut être spécifié pour un média non uniforme. Aussi, toutes les sortes de transformations peuvent être appliquées au média. Cela est très utile pour de multiples effets (comme la fumée avec une certaine forme).

2.3.6.3 Exemples de média simple

2.3.6.3.1 Média émetteur

Commençons avec une scène très simple montrant un média émetteur utilisant un spectre de densité sphérique. Le média émetteur est utilisé avec le mot clé emission suivi d'une valeur de couleur. Cette valeur donne la couleur globale du média :

global_settings {assumed_gamma 1}
background {rgb 1}
camera {location <3, 4,-5>*.8 look_at 0 angle 35}
light_source {<20, 40, 10>, 1}

box {	// sol
	<-1.5,-1.01,-1.5>, <1.5,-1.2, 1.5>
	pigment {checker rgb 0.75, rgb 0.25 scale 0.2}
}

sphere {	// sphère transparente contenant le média
	0, 1 pigment {rgbt 1} hollow
	interior {
		media {
			emission 1
			density {
				spherical density_map {
					[0 rgb 0]
					[0.4 rgb <1, 0, 0>]
					[0.8 rgb <1, 1, 0>]
					[1 rgb 1]
				}
			}
		}
	}
}

Notez que le modèle spherical prend des valeurs entre 0 à la surface d'une sphère d'une unité, et 1 à l'origine (ainsi, la densité avec la valeur d'index 1 sera celle du centre du média).

Les valeurs de couleurs dans le spectre de densité donnent la couleur que le média émet à un certain point du modèle. Par exemple, quand le modèle prend la valeur 4, le média sera complètement rouge à cet endroit. Si la couleur est <0, 0, 0>, cela signifie que le média n'émet aucun lumière à cette position.

Notez que les couleurs du spectre de densité sont multipliées par la couleur donnée par le mot clé emission; puisque 1 est utilisé dans ce cas, les couleurs ne sont pas affectées.

Ainsi, cela donnera un média avec un centre blanc lumineux qui s'atténue en jaune et rouge aux limites de la sphère d'une unité :

Exemple de média émetteur simple
Exemple de média émetteur simple

Le média émetteur est invisible sur l'arrière-plan. Cela est dû à sa nature additive (toute couleur ajoutée au blanc pur donne le blanc pur). En fait, le média émetteur donne habituellement de meilleurs résultats sur des arrières-plans sombres.

2.3.6.3.2 Le média absorbant

La modification de l'exemple précédent pour utiliser le média absorbant est simple : changer le mot clé emission par absorption. Toutefois, les couleurs utilisées ne sont pas révélatrices pour un média absorbant, aussi changeons-les ainsi :

media {
	absorption 1
	density {
		spherical density_map {
			[0 rgb 0]
			[0.4 rgb 0]
			[0.5 rgb <0, 0.5, 1>]
			[1 rgb <0, 1, 1>]
		}
	}
}
Exemple de média absorbant simple
Exemple de média absorbant simple

La caractéristique immédiatement notée est que les couleurs du média semblent inversées par rapport à celles spécifiées dans le spectre de densité : des tons bleus ont été demandés, mais l'image montre un média rougeoyant. Cela est parfaitement normal et attendu de la part de la nature soustrayante du média absorbant : il absorbe les couleurs spécifiées dans le spectre de densité. Cela signifie que la spécification de la couleur blanche (<1, 1, 1>) dans le spectre de densité absorbera toutes les couleurs, donnant un média noir.

Notez l'ombre de ce média : la lumière traversant ce média est absorbée.

A couse de sa nature absorbante, ce média fonctionne bien avec des arrières-plans clairs et assez mal avec les sombres.

2.3.6.3.3 Le média dispersant

Puisque le média dispersant prend totalement en compte les sources de lumière, nous devons faire une scène plus complexe pour le visualiser. Modifions l'exemple précédent en remplaçant la sphère par une boîte contenant un média dispersant homogène, et un cylindre qui y projettera son ombre :

box {
	-1, 1 pigment {rgbt 1} hollow
	interior {
		media {
			scattering {1, 0.5}
		}
	}
}
cylinder {<0.9,-1, 0.7>, <0.9, 0.9, 0.7>, 0.5
	pigment {rgb <1, 0.8, 0.5>}
}
Exemple de média dispersant simple
Exemple de média dispersant simple

(cela ne paraît pas naturel pour un effet de brouillard car le média est contenu dans une boîte et le cylindre est partiellement en dehors de ce conteneur, mais cela est fait pour mieux visualiser ce qui se passe.)

Le mot clé scattering prend plus de paramètres que les deux autres. Le premier nombre est le type de média dispersant. Dans cet exemple, nous utilisons le type 1. Une liste complète des types de média dispersant est donnée dans la section dispersant de la référence sur le média.

Le second paramètre est la couleur dominante du média, similaire au paramètre des deux autres types de média.

Un troisième paramètre optionnel peut être donné avec le mot clé extinction dans les accolades. Ce mot clé contrôle la vitesse d'absorption de la lumière par le média dispersant, et doit être parfois utilisé pour obtenir l'effet désiré, comme quand le média absorbe trop de lumière.

Trus : si vous recherchez un média dispersant vraiment dense et sombre, essayez différentes valeurs pour la couleur et la valeur d'extinction (habituellement, des valeurs entre 0 et 1). Ce jeu sur ces deux valeurs est normalement suffisant pour obtenir l'effet désiré.

2.3.6.4 Médias multiples dans le même objet

Le média émetteur fonctionne bien sur des arrières-plans sombres. Le média absorbant fonctionne bien sur les arrières-plans clairs. Mais que faire si nous voulons un média qui fonctionne avec les deux types d'arrières-plans ?

Une solution est d'utiliser les deux types de média au sein d'un même objet. Cela est possible avec POV-Ray.

Reprenons le tout premier exemple, qui ne fonctionnait pas bien avec l'arrière-plan blanc, et ajoutons un média légèrement absorbant à la sphère :

sphere {
	0, 1 pigment {rgbt 1} hollow
	interior {
		media {
			emission 1
			density {
				spherical density_map {
					[0 rgb 0]
					[0.4 rgb <1, 0, 0>]
					[0.8 rgb <1, 1, 0>]
					[1 rgb 1]
				}
			}
		}
		media {absorption 0.2}
	}
}

Cela fait que la sphère n'ajoute pas seulement de la lumière aux rayons la traversant, mais elle en retranche aussi.

Exemple de média émetteur et absorbant
Exemple de média émetteur et absorbant

Des médias multiples dans un même objet peuvent aussi bien être utilisés pour de nombreux autres effets.

2.3.6.5 Le média et les transformations

La densité d'un média peut être modifiée avec tout modificateur de modèle, comme la turbulence, la taille, etc. C'est un outil très puissant pour créer des effets divers.

Comme exemple, faisons un média absorbant ressemblant à de la fumée. Pour cela nous prenons l'exemple du média absorbant et nous modifions la sphère ainsi :

sphere {
	0, 1.5 pigment {rgbt 1} hollow
	interior {
		media {
			absorption 7
			density {
				spherical density_map {
					[0 rgb 0]
					[0.5 rgb 0]
					[0.7 rgb .5]
					[1 rgb 1]
				}
				scale 1/2
				warp {turbulence 0.5}
				scale 2
			}
		}
	}
	scale <1.5, 6, 1.5> translate y
}
Exemple de transformation de média
Exemple de transformation de média

Quelques notes :

Le rayon de la sphère est maintenant un peu plus grand que 1 parce que le modèle perturbé prend plus de place.

La couleur d'absorption peut être plus grande que 1, rendant l'absorption plus forte et la fumée plus sombre.

Note : quand vous dimensionnez un objet contenant un média, la densité du média ne suit pas. Cela signifie que si, par exemple, vous surdimensionnez un objet conteneur, les rayons passeront à travers plus de média, donnant un résultat plus important. Si vous voulez garder le même effet média avec l'objet plus grand, vous devrez diviser la couleur du média par la valeur du surdimensionnement.

Le problème sur la nécessité de dimensionner le média avec l'objet est une question d'interprétation : par exemple, si vous avez un verre d'eau colorée, un verre plus grand aura plus de couleur car la lumière traverse une plus grande distance. C'est ce que fait POV-Ray. Quelquefois, l'objet doit être dimensionné sans faire changer le média; dans ce cas, la couleur du média doit être inversement dimensionnée.

2.3.6.6 Un exemple plus avancé de média dispersant

Pour un exemple un peu plus avancé de média dispersant, faisons une pièce avec une fenêtre et une source de lumière externe. La pièce contient un média dispersant, rendant le faisceau de lumière passant par la fenêtre visible.

global_settings {assumed_gamma 1}
camera {location <14.9, 1,-8> look_at -z angle 70}
light_source {<10, 100, 150>, 1}
background {rgb <0.3, 0.6, 0.9>}

// Une faible source de lumière dans la pièce qui n'interagit
// pas avec le média pour que nous puissons voir la pièce :
light_source {<14,-5, 2>, 0.5 media_interaction off}

// La pièce
union {
	difference {
		box {<-11,-7,-11>, <16, 7, 10.5>}
		box {<-10,-6,-10>, <15, 6, 10>}
		box {<-4,-2, 9.9>, <2, 3, 10.6>}
	}
	box {<-1.25,-2, 10>, <-0.75, 3, 10.5>}
	box {<-4, 0.25, 10>, <2, 0.75, 10.5>}
	pigment {rgb 1}
}

// La boîte de média diffusant :
box {
	<-5,-6.5,-10.5>, <3, 6.5, 10.25>
	pigment {rgbt 1} hollow
	interior {
		media {
			scattering {1, 0.07 extinction 0.01}
			samples 30, 100
		}
	}
}
Exemple plus avancé de média dispersant
Exemple plus avancé de média dispersant

Comme suggéré précedemment, la couleur de dispersion et les valeurs d'extinction sont ajustées jusqu'à ce que l'image semble bonne. Dans ce type de scène, des valeurs très faibles sont nécessaires.

Notez comment la boîte conteneur est plus petite que la pièce elle-même. Les boîtes conteneur doivent toujours être aussi petites que possible. Si la boîte avait été aussi grande que la pièce, de plus grandes valeurs pour samples auraient été nécessaires pour obtenir un bon résultat, donnant un rendu beaucoup plus lent.

2.3.6.7 Le média et les photons

La technique de projection de photons peut être utilisée dans POV-Ray pour faire des images d'une beauté frappante avec la lumière se réfléchissant et se réfractant sur les objets. Par défaut, toutefois, la lumière réfléchie et réfractée n'affecte pas le média. L'interaction des photons avec le média peut être activée avec le mot clé media dans le bloc photons dans global_settings.

Pour visualiser cela, rendons le sol de notre pièce réfléchissant pour qu'il renvoie le faisceau de lumière provenant de la fenêtre.

D'abord, à cause du fonctionnement des photons, nous devons spécifier photons { pass_through } dans notre boîte conteneur de média dispersant pour que les photons traversent ses surfaces.

Ensuite, nous voudrons désactiver les photons de notre déclaration de source de lumière parcequ'elle n'est là que pour que nous voyons l'intérieur de la pièce, et non son effet lumineux actuel. Cela peut être fait en spécifiant photons { reflection off } dans cette source de lumière.

Enfin, nous devons paramétrer les photons et ajouter un sol réfléchissant à la pièce. Ajoutons une coloration à la réflexion pour un effet supplémentaire :

global_settings {
	photons {
		count 20000
		media 100
	}
}
 
// sol réfléchissant :
box {
	<-10,-5.99,-10>, <15,-6, 10>
	pigment {rgb 1}
	finish {reflection <0.5, 0.4, 0.2>}
	photons {target reflection on}
}
Exemple de média dispersant avec des photons
Exemple de média dispersant avec des photons

Avec toutes ces fantaisies, le temps de rendu commence à devenir important, mais malheureusement c'est le prix à payer pour de tels effets.

2.3.5 Utilisation des effets atmosphériques 2.3.5 Utilisation des effets atmosphériques 2.3.7 La radiosité 2.3.7 La radiosité