3.5.1 L'intérieur

Introduit par POV-Ray 3.1, voici une déclaration de modificateur d'objet appelé interior. La syntaxe est :

INTERIOR:
	interior { [INTERIOR_IDENTIFIER] [INTERIOR_ITEMS...] }
INTERIOR_ITEM:
	ior Value | caustics Value | dispersion Value | 
	dispersion_samples Samples | fade_distance Distance | 
	fade_power Power | fade_color <Color>
	MEDIA...

Les valeurs par défaut sont :

ior : 1.0
caustics : 0.0
dispersion : 1.0
dispersion_samples : 7
fade_distance : 0.0 
fade_power : 0.0
fade_color : <0, 0, 0>

interior contient des éléments qui décrivent l'intérieur d'un objet. C'est en contraste avec texture et interior_texture qui décrivent seulement les propriétés de surface. L'intérieur d'un objet n'est intéressant que s'il a une texture transparente pour en voir le contenu. Il ne s'applique également qu'aux objets dont la distinction dedans/dehors est bien définie.

Note : le mot clé open ou le modificateur clipped_by, vous autorisent une vue interne, mais la caractéristique interior ne se rendra pas correctement. Ils doivent être évités si des intérieurs précis sont requis.

Des identificateurs de l'intérieur peuvent être déclarés pour rendre la scène plus lisible et paramétrable. Un identificateur est déclaré ainsi :

INTERIOR_DECLARATION:
	#declare IDENTIFIER = INTERIOR |
	#local IDENTIFIER = INTERIOR

IDENTIFIER est le nom de l'identificateur, sur 40 caractères de long, et INTERIOR et toute déclaration valide de interior. Voir "#declare vs. #local" pour plus d'information sur la portée des identificateurs.

3.5.1.1 Pourquoi "interior" et "media" sont-ils nécessaires ?

Dans les versions précédentes, la plupart des éléments de la caractéristique interior se trouvaient dans la déclaration finish. De même, le halo, qui faisait partie de la déclaration texture, a été remplacé par la caractéristique media qui fait partie de interior.

Vous demandez pourquoi ? Comme expliqué, interior contient des éléments qui décrivent les propriétés de l'intérieur d'un objet. Cela est en contraste avec texture qui ne décrit que les propriétés de surface. Toutefois, cela n'est pas un changement philosophique. Il y avait de sérieuses inconsistances dans l'ancien modèle.

Le principal problème apparaît quand un spectre de texture, ou autre texture modélisée, est utilisé. Ces caractéristiques vous permettent de créer des textures qui sont le mélange de deux textures et qui font varier la texture dans sa totalité d'un point à un autre. Le mélange est fait par une totale évaluation de la couleur par usage de la première texture, puis une totale réévaluation avec l'autre texture. Les deux résultats sont mélangés.

C'est illogique d'avoir un rayon entrant avec un index de réfraction, puis de le recalculer avec un autre index. Le résultat n'est pas une moyenne des deux valeurs ior. De même, il est insensé d'avoir un rayon entrant avec un ior, puis sortant avec un autre ior sans faire de transition entre eux pendant le trajet. POV-Ray ne calcule la réfraction que lors de l'entrée et de la sortie. Il ne peut pas faire un calcul par étapes dans l'objet. Des objets réels comme les fibres optiques ou les verres progressifs ont des ior variables que POV-Ray ne peut pas simuler.

De même, les calculs de halo ne peuvent pas se faire comme le veut la syntaxe. L'utilisation d'un halo dans des objets multitexturés ne le fait pas varier dans l'objet. Au lieu de cela, il calcule deux halos et fait une moyenne des résultats. Le media, qui remplace le halo, rend possible la variation du média au travers de l'intérieur d'un objet, en accord avec un motif, mais indépendamment de la texture de surface. Parce qu'il y a d'autres modifications dans les termes de cette caractéristique qui la rendent significativement différente, elle n'est pas seulement déplacée vers interior, mais renommée.

Pendant notre développement, certains demandèrent si nous allions créer des intérieurs modélisés, ou une caractéristique de motif d'intérieur. Ce n'est pas le cas. Cela aurait vaincu les raisons de son déplacement initial. Ils ne peuvent pas être modélisés, et avoir des résultats logiques et consistant.

3.5.1.2 Les objets vides et pleins

Il est très important que vous connaissiez les concepts de base derrière les objets vides et pleins dans POV-Ray, pour comprendre pleinement comment les caractéristiques comme les intérieurs et la translucidité sont utilisées. Les objets dans POV-Ray peuvent être pleins, vides ou emplis de (petites) particules.

Un objet plein est fait d'une matière spécifiée par ses caractéristiques pigment et finition (et par la caractéristique normale, à un certain degré). Par défaut, tous les objets sont pris comme pleins. Si vous assignez une texture de pierre à une sphère, vous obtenez une bille faite de pierre. C'est comme si vous aviez taillé cette bille dans un bloc de pierre. Une balle de verre est une sphère en verre massif. Vous devez être conscient que les objets pleins sont des choses conceptuelles. Si, par exemple, vous coupez une sphère, vous verriez que la sphère est vide, c'est-à-dire que l'intérieur est vide et qu'elle a seulement une mince surface.

Cela n'est pas contraire au concept d'objet solide de POV-Ray. Il est assumé que tout l'espace dans la sphère est couvert par le interior de la sphère. La lumière passant à travers l'objet est affectée par les propriétés d'atténuation et de réfraction. Donc il n'y a pas de place pour d'autres particules comme celles des brouillards ou des médias intérieurs.

Les objets vides sont créés par l'ajout du mot clé hollow (voir 'Creux') aux caractéristiques de l'objet. Un objet vide (ou troué) est censé être fait d'une surface fine qui est de la matière spécifiée par les déclarations de pigment, finition et normale. L'intérieur est vide, c'est-à-dire qu'il contient normalement des molécules d'air.

Un objet vide peut être rempli avec des particules par ajout de brouillard ou de média atmosphérique à la scène, ou de média d'intérieur à l'objet. Il est très important de comprendre que pour pouvoir remplir un objet avec une quelconque sorte de particule, il faut le faire creux.

Il y a un piège dans l'implémentation vide/plein d'un objet.

Pour pouvoir placer des objets dans un média ou un brouillard, un test doit être fait pour chaque rayon traversant le média. Si ce rayon traverse un objet, le média ne sera pas calculé. C'est ce que tout le monde attend. Une bille de verre dans un brouillard, ne contient pas de brouillard.

Le problème apparaît quand le rayon de la caméra est dans un objet non creux. Dans ce cas, le rayon voyage toujours à travers un objet plein, et même si le conteneur média de l'objet est touché, il ne sera pas calculé. Il n'y a aucun moyen de faire la différence.

POV-Ray doit déterminer si la caméra est dans ou hors un objet avant de tracer son rayon, pour pouvoir correctement rendre les médias quand la caméra est dans l'objet conteneur. Il n'y a pas d'alternative.

La solution à ce problème (qui apparaît souvent avec des objets infinis comme les plans) est de rendre ces objets également creux. Ainsi, le rayon voyage dans un objet creux, touche le conteneur, et le média est calculé.

3.5.1.3 Changer la taille d'objets avec un intérieur

Toutes les déclarations qui peuvent être mises dans un intérieur représentent des aspects de la matière de l'objet. La modification de la taille d'un objet ne change pas sa matière. Deux pièces de même acier, l'une deux fois plus grande que l'autre, ont toutes deux la même densité. La pièce la plus grande est seulement plus lourde.

Donc, dans POV-Ray, si vous dessinez une lentille avec un verre d'ior 1.5 et que vous l'agrandissez, la distance de focale de la lentille sera plus longue puisque l'ior reste le même. Pour l'atténuation de la lumière, cela signifie qu'un objet sera plus "sombre" après son agrandissement. L'intensité de la lumière décroît d'une certaine quantité par unité de POV-Ray. L'objet est devenu plus gros, fait plus d'unités POV-Ray, donc plus de lumière est atténuée. Les fade_distance, fade_power eux-mêmes n'ont pas changé.

La même chose s'applique au média. Imaginez un média comme une densité de particules, vous spécifiez 100 particules par cube d'unité POV-Ray. Si vous agrandissez une unité cubique POV-Ray pour être le double dans toutes les directions, vous aurez un total de 800 particules dans l'objet. L'objet paraîtra différent puisque nous aurons plus de particules à traverser. Pourtant la densité de l'objet est toujours de 100 particules par unité cubique POV-Ray. Dans media cette "densité de particules" est fixée par la couleur après les déclarations emission, absorption, ou dans scattering.

#version 3.5;
global_settings {assumed_gamma 1.0}
camera {location <0, 0,-12.0> look_at 0 angle 30}
#declare Container_T = texture {
	pigment {rgbt <1, 1, 1, 1>}
	finish {ambient 0 diffuse 0}
}

#declare Scale = 2;

box {	//La référence
	<-1,-1, 0>, <1, 1, .3>
	hollow
	texture {Container_T}
	interior {
		media {
			intervals 1
			samples 1, 1
			emission 1
		}
	}
	translate <-2.1, 0, 0>
}

box {	// Objet doublé de taille
	<-1,-1, 0>, <1, 1, .3>	// paraît différent mais même
	hollow	// densité de particule
	texture {Container_T}
	interior {
		media {
			intervals 1
			samples 1, 1
			emission 1
		}
	}
	scale Scale
	translate <0, 0, 12>
}

box {	// Objet doublé de taille
	<-1,-1, 0>, <1, 1, .3>	// paraît différent mais la densité
	hollow	// de particule a été réduite
	texture {Container_T}
	interior {
		media {
			intervals 1
			samples 1, 1
			emission 1/Scale
		}
	}
	scale Scale
	translate <0, 0, 12>
	translate <4.2, 0, 0>
}

Le troisième objet de cette scène montre ce qu'il faut faire si vous voulez redimensionner l'objet et lui conserver la même apparence qu'auparavant. La caractéristique interior doit être divisée par le même rapport que celui de l'accroissement de l'objet. Cela n'est possible que dans un redimensionnement uniforme.

En général, l'approche correcte est de dimensionner la densité du média proportionnellement au changement de volume du conteneur. Pour le dimensionnement non uniforme, pour avoir un résultat non ambigu, qui peut être expliqué physiquement, nous devons faire :

Density*sqrt(3)/vlength(Scale)

Density est votre densité initiale du média et Scale est le vecteur de dimensionnement appliqué au conteneur.

Note : les modificateurs de densité dans la déclaration density{} sont dimensionnés en même temps que l'objet.

3.5.1.4 La réfraction

Quand la lumière passe à travers une surface, que ce soit en entrant ou en sortant d'un milieu dense, le chemin du rayon lumineux est courbé. Une telle courbe est appelée réfraction. Le taux de courbure dépend de la densité du matériau. L'air, l'eau, le cristal et les diamants ont tous des densités différentes, donc réfractent différemment. L'indice de réfraction ou ior est utilisé par les scientifiques pour décrire la densité relative des substances. Le mot clé ior est utilisé dans POV-Ray, dans interior pour activer la réfraction et spécifier la valeur de son indice. Par exemple :

object {MyObject pigment {Clear} interior {ior 1.5}}

La valeur de ior par défaut est 1.0, et ne donne pas de réfraction. C'est l'index de l'air. Celui de l'eau est 1.33, 1.5 pour le verre et 2.4 pour le diamant.

Normalement, les surfaces transparentes ou semi transparentes ne réfractent pas la lumière, dans POV-Ray. Les versions précédentes vous obligaient à utiliser le mot clé refraction dans la déclaration de finition pour activer la réfraction. Cela n'est plus nécessaire : tout ior non nul active la réfraction.

En plus de l'activation ou non de la réfraction, l'ancien mot clé refraction était suivi par un numérique entre 0.0 et 1.0. Les valeurs intermédiaires assombrissaient la lumière réfléchie, ne correspondant à aucune propriété physique. De nombreuses scènes ont été créées avec des valeurs intermédiaires avant que le défaut ne soit découvert, aussi la caractéristique fut maintenue. Une manière plus appropriée de réduire l'éclat des lumières réfractées est de changer la valeur de filter ou de transmit dans les couleurs spécifiées du pigment, ou d'utiliser les mots clés fade_power et fade_distance. Voir "L'atténuation".

Note : la réfraction ou l'ior ne rendent pas les objets transparents. La transparence ne vient que s'il y a une valeur différente de zéro pour le filtre ou la transmission dans la couleur.

Les mots clés refraction et ior étaient spécifiés dans finish, mais maintenant, ils le sont dans interior. Ils sont acceptés dans finish pour des raisons de compatibilité et génèrent un message d'alerte.

3.5.1.5 La dispersion

Pour tous les matériaux avec un ior différent de 1.0, l'index de réfraction n'est pas constant à travers le spectre. Il change comme une fonction d'onde. Généralement, l'index de réfraction décroît à mesure que l'amplitude de l'onde augmente. Par conséquent, la lumière passant à travers un matériau sera séparée selon la longueur d'onde. C'est connu en tant que dispersion chromatique.

Par défaut, POV-Ray ne calcule pas la dispersion lors de la traversée d'un objet transparent par la lumière. Pour obtenir un effet plus réaliste, les mots clés dispersion et dispersion_samples peuvent être ajoutés au bloc interior{}. Ils simuleront la dispersion en créant un effet prismatique coloré dans l'objet.

La valeur de dispersion est le rapport des indices de réfraction du violet au rouge. Elle contrôle la force de la dispersion (de combien est la dispersion des couleurs) utilisée. Une valeur de 1 ne donne aucune dispersion, les bonnes valeurs vont de 1.01 à 1.1.

Note : il n'y aura aucune dispersion, sauf si le mot clé ior a été spécifié dans interior{ }. Un ior de 1 est légal. L'ior n'a aucune influence sur la force de la dispersion, seulement sur l'angle de la réfraction.

Comme POV-Ray n'utilise pas la longueur d'onde pour le rendu, un spectre est simulé. La valeur dispersion_samples contrôle le nombre de pas de couleur et la douceur dans le spectre. La valeur par défaut est 7, le minimum est 2. Des valeurs de 100 ou plus peuvent être nécessaires pour obtenir un résultat très adouci.

3.5.1.5.1 La dispersion et les caustiques

La dispersion n'affecte que l'intérieur d'un objet et n'a aucun effet sur les trucages des éclats (Voir "Les éclats (caustiques) truqués").
Pour voir les effets de la dispersion sur les caustiques, la projection de photon est nécessaire (Voir les sections "Les photons" et "La dispersion & les photons").

3.5.1.6 L'atténuation

L'atténuation de la lumière est utilisée pour modéliser la décroissance de son intensité, tandis qu'elle traverse un objet transparent. Les mots clés fade_power, fade_distance et fade_color sont spécifiés dans la rubrique interior.

La valeur fade_distance détermine la distance que doit parcourir la lumière pour perdre la moitié de son intensité, tandis que la valeur de fade_power décrit la vitesse d'atténuation. fade_color colorise l'atténuation. Pour les effets réalistes, la puissance d'atténuation est entre 1 et 2. Les valeurs par défaut sont 0.0 pour fade_power et fade_distance, désactivant cette caractéristique. Le défaut pour fade_color est <0, 0, 0>, si fade_color est <1, 1, 1> il n'y a pas d'atténuation. La couleur actuelle donne une atténuation colorée. <1, 0, 0> paraît rouge, pas cyan comme dans le média.

L'atténuation est calculée par une formule similaire à celle de l'atténuation de la source de lumière.


Si vous placez fade_power d'un intérieur d'un objet à 1000 ou plus, une fonction d'atténuation exponentielle réaliste sera utilisée :

Attenuation = exp(-depth/fade_dist)

Les mots clés fade_power et fade_distance étaient dans la finition, à l'origine, mais se trouvent maintenant dans la déclaration de l'intérieur. Ils sont acceptés dans la finition pour des raisons de compatibilité et génèrent un message d'alarme.

3.5.1.7 Les éclats simulés

Les éclats sont des effets de lumière qui arrivent lorsque la lumière et reflétée ou réfractée par les surfaces réflectives ou réfractives spéculaires. Imaginez un verre d'eau sur une table. Si le soleil éclaire le verre, vous verrez des tâches de lumière sur la table. Certains de ces points sont causés par la lumière réfléchie par le verre, tandis que d'autres sont dus à la réfraction de la lumière par l'eau.

Parce qu'il est très difficile et long de calculer ces effets (quoique cela ne soit pas impossible, voir la section "Les photons"), POV-Ray utilise une méthode relativement simple pour simuler les éclats de la réfraction. La méthode calcule l'angle entre le rayon arrivant et la normale de surface. Là où ils sont presque parallèles, cela éclaircit l'ombre. Quand l'angle est grand, l'effet est diminué. A l'inverse des éclats réels, l'effet ne varie pas avec la distance. Ces effets sont des aires limitées qui sont ombrées par l'objet translucide. Vous n'aurez pas ces effets avec les surfaces réfléchissantes, ou dans les zones non ombrées par l'objet.

Le mot clé caustics power contrôle l'effet. Les valeurs vont habituellement de 0.0 à 1.0 ou plus. Le défaut est zéro, qui désactive les éclats. Des valeurs basses donnent de vagues accentuations, tandis que de hautes valeurs donnent de petits et intenses points focaux simulés.

Ce mot clé était dans la finition, à l'origine, mais se trouve maintenant dans la déclaration de l'intérieur. Il est accepté dans la finition pour des raisons de compatibilité et génère un message d'alarme.

3.5.1.8 L'objet média

La déclaration interior peut contenir une ou plusieurs déclarations media. Le média est utilisé pour simuler des particules en suspension comme la fumée, la brume ou la poussière, ou des éléments mobiles comme la vapeur, ou le feu et les explosions. Quand il est utilisé avec l'intérieur d'un objet, l'effet est contraint par la forme de l'objet. Les calculs commencent quand le rayon entre dans un objet, et se termine quand il en sort. Cette section ne traite des médias que lors de l'utilisation avec un intérieur d'objet. La syntaxe complète et une explication de chaque paramètre et option est donnée dans la section sur le média.

Typiquement, l'objet est doté d'une texture totalement transparente, toutefois, média fonctionne aussi avec des objets partiellement transparent. Le modèle de texture n'affecte pas le média d'intérieur, sauf, peut être, pour créer des ombres dessus. Le modèle de texture d'un objet ne s'applique qu'à la surface. Tous les modèles de média d'intérieur sont totalement indépendants de la texture.

Dans les versions précédentes, cette caractéristique était appelée halo, et était une partie de la texture, avec le pigment, la normale et la finition. Voir "Pourquoi media et interior sont-ils nécessaires ?" pour une explication sur les raisons de ce changement.

Le média peut aussi être spécifié en dehors d'un objet pour simuler l'atmosphère. Il n'y a pas d'objet contraignant dans ce cas. Si vous voulez des effets médias seulement dans une aire particulière, vous devez utiliser un objet média plutôt que de compter seulement sur le modèle média. En général, ce sera plus rapide et plus précis, car il ne fait les calculs que dans l'objet conteneur. Voir "Le média atmosphérique" pour des détails sur l'utilisation du média non contraint.

Vous pouvez spécifier plus d'une déclaration de média au sein d'un même intérieur. Dans ce cas, tous les médias participent, et là où ils se chevauchent, ils s'additionnent.

Tout objet qui est supposé avoir un média, que ce soit un objet média ou un média atmosphérique, doit être creux. Sinon le média est bloqué. Voir "Les objets pleins et vides" pour les détails.

Complément sur la finition

Complément sur la texture Complément sur le média Complément sur les photons

3.5 L'intérieur, le média et les photons 3.5 L'intérieur, le média et les photons 3.5.2 Le média 3.5.2 Le média