Bon, c'est bien joli tout ça, mais ça ne nous avance pas trop...
Le problème, c'est que notre média émet ou absorbe assez uniformément, ce qui limite assez les applications possibles.
Heureusement, vous vous en doutez, il existe un moyen de modifier cette répartition au sein du conteneur

: c'est la densité du média.
Pour la définir, très simple : il faut faire un bloc
density dans le bloc
media. C'est dans ce bloc que nous allons mettre la description de la densité.
Cette densité est en fait une "fonction" qui assigne à chaque point de l'espace la concentration du média à cet endroit.
Tiens tiens... associer à chaque point de l'espace une valeur, ça ressemble un peu aux pigments, non ?
Et oui, vous allez voir, définir une densité ressemble fortement à définir un pigment...
Voici un exemple :
Code : Autre1
2
3
4
5
6
7
8
| media {
emission rgb 1
density {
gradient x
translate x/2
scale 2
}
} |
translate et
scale sont là pour que le gradient soit bien placé pour s'étaler sur toute la sphère.
L'émission est ici concentrée sur la partie droite de la sphère, la partie gauche étant presque transparente.
J'ai ici utilisé
gradient, mais n'importe quel autre motif marche aussi.
En plus de ceux que vous connaissez déjà, quatre motifs sont spécifiques aux densités.
Spherical
Très pratique, spherical donne une valeur de 1 au point
<0,0,0> et décroît de manière sphérique, jusqu'à atteindre 0 sur la sphère de rayon 1. Il vaut 0 partout ailleurs (c'est la différence avec onion).
Cela permet notamment de ne pas avoir de discontinuité aux bords de la sphère, la densité ne passant plus brutalement de 1 à 0.
Le motif spherical se concentre donc dans une sphère de centre 0 et de rayon 1, quel que soit le conteneur ! C'est pour cela que, dans la scène de test, le conteneur est bien une sphère de centre 0 et de rayon 1, que l'on déplace après avec translate.
Cylindrical
Cylindrical est cette fois adaptée à des cylindres centrés en 0, alignés selon l'axe
y, de rayon 1.
Le principe est le même que pour spherical : sur toute la droite
Oy, le motif vaut 1 ; il diminue progressivement jusqu'à arriver à 0 à une distance de 1. Comme spherical, il vaut 0 partout ailleurs.
(J'ai remplacé ici la sphère par un cylindre, pour mieux voir la répartition.)
Ici encore, faites attention à bien choisir votre conteneur, quitte à le modifier après à coups de
scale,
rotate ou
translate.
Planar
Planar est un motif qui vaut 1 sur tout le plan
Oxz, vaut

entre
-y et
+y, et 0 partout ailleurs. Évidemment, il est prévu pour entourer un plan.
Cependant, n'utilisez pas de plan comme conteneur !! Les plans sont infinis, ce qui risque de rendre votre calcul trèèès long. Utilisez donc plutôt une boîte qui entoure le plan.
J'ai ici utilisé une boîte comme conteneur, cela permet de mieux voir le plan.
Boxed
Enfin,
boxed est, lui, prévu pour être utilisé dans une boîte allant de
<-1,-1,-1> à
<1,1,1> : le motif vaut 1 au centre (en
<0,0,0>) et décroît vers le bord de la boîte. Comme toujours, il vaut 0 partout ailleurs.
