Aller au menu - Aller au contenu

Icône Les médias (2/2)

Mise à jour : 01/07/2010
Difficulté : Facile Facile Creative Commons BY-NC-SA
525 visites depuis 7 jours, dont 39 sur ce chapitre classé 218/786
Voici la suite du chapitre sur les médias.
Au programme : les médias colorés, et la simulation de poussières.
Sommaire du chapitre :
Icône du chapitre
Chapitre précédent Sommaire

De la couleur

Vous vous souvenez que les médias ressemblent beaucoup aux pigments ?
Eh bien, toujours comme les pigments, il est possible de modifier la répartition des couleurs, en utilisant color_map :

Code : Autre
1
2
3
4
5
6
7
8
9
10
11
12
media {
    emission rgb 1
    density {
        spherical
        turbulence 1
        color_map {
            [0   rgb <0, 0, 0>]
            [0.1 rgb <1, 0, 0>]
            [1   rgb <1, 1, 0>]
        }
    }
}


Image utilisateur

Cela donne une espèce de boule de feu : le centre est jaune, et les bords sont un peu plus rouges. Le rgb <0, 0, 0> associé à la valeur 0 permet d'avoir une transition douce vers une zone transparente (émission de noir = pas d'émission du tout).

En fait, la couleur finale est le produit de la couleur d'émission avec celle de la densité. Donc en mettant une émission blanche, seule la couleur de la densité importe. Et vice-versa.

Bien évidemment, cela est également vrai pour l'absorption.
La densité définie est commune à l'absorption et à l'émission. Pas moyen de séparer les deux sans créer un deuxième bloc média.


Voici un exemple avec l'absorption :
Code : Autre
1
2
3
4
5
6
7
8
9
10
11
12
media {
    absorption rgb 1
    density {
        spherical
        turbulence 1                                
        color_map {
            [0   rgb <0, 0, 0>]
            [0.1 rgb 1 - <1, 0, 0>]
            [1   rgb 1 - <1, 1, 0>]
        }
    }
}


Pour obtenir à peu près les mêmes couleurs qu'en émission, j'ai pris le complémentaire à 1 des couleurs dans la densité.

Image utilisateur

On voit bien la différence : avant, on émettait de la lumière : la flamme était plus claire que le fond. Ici, on en absorbe : le feu paraît plus sombre.

Pour obtenir une bonne flamme plausible, il est souvent nécessaire d'employer deux médias : un d'absorption et un d'émission.

Car tu es poussière...

Les médias qu'on a vus jusqu'ici étaient bien pratiques pour faire une boule de feu ou un sabre laser, mais certaines choses sont toujours impossibles à faire, en particulier la poussière : on veut quelque chose qui soit blanc à la lumière, et noir dans l'ombre... Alors qu'ici, on peut faire soit blanc, soit noir... (Bon, j'exagère un peu, mais vous comprenez... n'est-ce pas ? o_O )
L’idéal serait de faire des milliers de petites particules, pour simuler ce qui se passe effectivement ; mais là encore, outre le temps de calcul considérable que cela demanderait, le résultat ne serait pas parfait.

Heureusement pour nous, et comme toujours :) , il existe une solution : un troisième type de média, en plus de l'émission et de l'absorption, spécialement conçu pour des particules fines en suspension dans l'air (au hasard, comme la poussière :-° ).

Ce type de média est un poil plus compliqué que les deux autres, il a donc droit à un bloc entier rien qu'à lui :D : scattering.
Code : Autre
1
2
3
4
media {
  scattering {
  }
}


Dans ce bloc, on va mettre deux éléments :
  • Le type de poussière (on va voir plus tard les différents types) : c'est un entier de 1 à 5
  • Une couleur définissant l'intensité du média
Et c'est tout ! :p

Pour cette partie, on va changer de scène de test :

Code : Autre
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
global_settings {
        ambient_light 0.05
}

// ----------------------------------------

camera {
    location  <1.4, 0.5, -4.8>
    look_at   <-0.1, -1,  0.0>
}


light_source {
  <0, 0, 0>
  rgb 1
  translate 10*z
}

// ----------------------------------------

// The Wall
difference {
  box {
    <-5, -0.5, -0.2>,
    < 5,  0.5,  0.2>
  }
  #declare i = 0;
  #while (i < 9)
    cylinder {
      <0, 0, -1>
      <0, 0,  1>
      0.3
      translate (-4 + i) * x
    }
    #declare i = i + 1;
  #end 
  pigment { rgb 1 }
  finish { ambient 0 }
}

// La poussière
box {
  // Pour éviter les surfaces qui coïncident, on décale très légèrement.
  <-5, -0.499, -4.999>,
  < 5,  0.499,  0.499>
  pigment { rgbt 1 }
  hollow
  interior {
    media {
      samples 50
      scattering {
        // Caractéristiques du média
      }
    }
  }
}

Nouveauté ici : samples, qui sert à améliorer la précision des calculs (tout en ralentissant le rendu). Cela correspond en réalité au nombre d'échantillons qu'il faut prendre le long d'un rayon : plus cette valeur est haute, plus c'est précis, et plus c'est lent.

Le calcul de ce genre de média demande un peu plus de calculs, et peut donc être assez long... Patience, donc ! ;)


Type 1 : Isotrope


C'est le type le plus simple : quand le média est directement éclairé, il renvoie une partie de la lumière vers la caméra ; le reste du temps, il absorbe un peu la lumière qui le traverse. Résultat : il paraît clair au soleil, et noir dans l'ombre.
Voici ce que ça donne :
Code : Autre
1
2
3
scattering {
  1, rgb 0.009
}


Type 1 - Face
Type 1 - Dos

Magique ! :lol: On peut vraiment voir la lumière traverser les trous dans le mur.
Avantage : assez rapide à calculer (par rapport aux autres), des résultats acceptables pour de la poussière ambiante.


Type 2 : Brumeux


Ce type est en principe plus destiné à simuler des particules relativement fines...
Le résultat est surtout une différence d'intensité lumineuse en fonction de l'angle d'incidence :

Type 2 - Face
Type 2 - Dos

La lumière est plus forte quand la source de lumière est presque devant nous, et moins forte quand elle éclaire la zone de travers ou quand on regarde de derrière.
Avantage : des résultats très sympathiques pour donner de l'ambiance, du genre manoir hanté...


Type 3 : Nuageux


Ce type est comme le précédent, mais en encore plus accentué : on voit encore moins de derrière et de côté, et encore plus quand on est juste en face :

Type 3 - Face
Type 3 - Dos

Ce type de média est en principe adapté aux particules des nuages et du ciel pollué.
Comme le type 2, mais en plus intense...


Type 4 : Modèle de Rayleigh


Ce modèle est prévu pour simuler de très petites particules, comme les molécules d'air.

Type 4 - Face
Type 4 - Dos

La particularité de ce modèle est que l'intensité est maximale quand la source de lumière est juste devant nous, mais aussi quand elle est juste derrière nous ; elle est donc minimale quand elle éclaire la zone transversalement.
A utiliser lorsqu'il n'y a pas de brouillard ni de pluie, comme dans un cinéma ou dans une maison.


Type 5 : Modèle d'Henyey-Greenstein


Ce modèle est assez polyvalent : il prend un paramètre supplémentaire qui modifie son comportement : ainsi, il peut aussi bien ressembler à un média isotrope qu'à un média de type Murky.

Pour contrôler ce paramètre, il suffit de mettre eccentricity après la couleur, suivi d'une valeur entre 0 et 1 :
Code : Autre
1
2
3
4
scattering {
  // Caractéristiques du média
  5, rgb 0.2 eccentricity 0.6
}

Plus la valeur entrée est proche de 0, plus le média sera isotrope ; à l'inverse, une valeur de 1 sera directionnelle à l'extrême.
Il est possible de mettre des valeurs négatives (entre 0 et -1) : dans ce cas, le média sera visible lorsque la lumière est derrière la caméra et non devant.
Il est très polyvalent, c'est donc difficile de bien cerner quand l'utiliser. Sachez que puisqu'il est possible de modifier l'excentricité de manière continue, il peut être utile dans vos animations, si le brouillard doit changer.


Conclusion


Ces médias vous seront à coup sûr extrêmement utiles pour ajouter un petit effet de lumière très sympathique dans vos scènes : rayons de soleil à travers une fenêtre, éclipse de soleil, ... Les utilisations sont très nombreuses. Avec un spot, cela peut également servir à faire une sorte d'illumination divine. Enfin, c'est à vous de chercher ! :p

Comme pour les médias d'émission ou d'absorption, il est possible de spécifier une densité.
Avec un peu de turbulence, on peut arriver à des effets de fumée plutôt pas mal :
Type 3 - Turbulence
Attention cependant, cela augmentera encore considérablement le temps de calcul (2 minutes pour cette petite image)...

Sachez aussi que l'effet est encore plus impressionnant dans une animation (ici avec un type 3) :
Type 3 - Animation - Fumée

De la précision !

On a vu plus haut qu'il fallait parfois changer un paramètre, samples, pour que le rendu soit correct.

En effet, calculer l'apparence du média n'est pas très facile : comme un média peut avoir des valeurs différentes en tout point de l'espace, il faudrait en théorie calculer sa valeur partout, ce qui prendrait du temps... Beaucoup de temps. Beaucoup trop, en fait. :(
On va donc devoir approximer le résultat réel, en prenant quelques échantillons de temps en temps.

Bien sûr, ce n'est pas parfait, mais si on prend assez d'échantillons et que le média ne change pas trop d'un point à un autre, cela donne un résultat acceptable. Et c'est là que ça se complique : c'est combien, suffisamment d'échantillons ? Ça va dépendre de beaucoup de choses : le média lui-même, mais aussi l'environnement, les lumières, ...

On va donc devoir indiquer nous-mêmes ce nombre d'échantillons à prendre. La valeur par défaut est de 10, ce qui est souvent assez peu. Vous pouvez monter facilement jusqu'à 30, 50, voire plus de 100 si le média est très complexe.
Comme toujours, plus d'échantillons veut dire de meilleurs résultats, mais un temps de calcul plus long.
Ainsi s'achève le chapitre sur les médias.
Comme toujours, prenez le temps de le digérer : essayez-les, expérimentez...

Voici un petit exemple de ce que vous pouvez déjà faire très simplement avec quelques médias :

POV-Jedi

Un média d'émission pour l'épée, et un média de type scattering autour de notre brave chevalier lui donnent une allure un peu plus spectaculaire ;) .
Chapitre précédent Sommaire

Partager

Il n'y a pas encore de commentaire pour ce tuto.