Aller au menu - Aller au contenu

Icône Lumière sur...

Mise à jour : 01/07/2010
Difficulté : Facile Facile Creative Commons BY-NC-SA
525 visites depuis 7 jours, dont 3 sur ce chapitre classé 218/786
Ce chapitre aurait aussi pu s'appeler Que la lumière soit, mais j'ai essayé de ne pas trop faire cliché... :-°
Pourtant, c'est exactement ce dont on va parler ici : la lumière...
Sommaire du chapitre :
Icône du chapitre
Chapitre précédent Sommaire Chapitre suivant

Encore un illuminé...

Encore de la lumière ? On sait faire, nous, depuis longtemps !

C'est vrai, c'est vrai, vous connaissez déjà les sources de lumière, et vous savez que l'on peut les colorer (vous le saviez... n'est-ce pas ?).
Mais voilà, elles ne sont pas parfaites ces lumières... Leur plus grand défaut est que même à des kilomètres, elles éclaireront toujours autant qu'à quelques mètres (voire même plus !).

Pourtant, ces petites lumières sont capables de bien plus que ça... C'est ce que nous allons découvrir ! :D

Angle ? Distance ?

Par défaut, le seul paramètre qui influe sur la quantité de lumière que reçoit une surface, c'est l'angle d'incidence du rayon qui arrive.
Plus l'angle est faible, plus la surface est éclairée, et vice-versa. (On avait déjà vu ça dans les textures, vous vous souvenez ?)

Voici un schéma qui montre cela :
Angle d'incidence
Les traits blancs en pointillés représentent les normales (la verticale :p )
Ici, on voit bien que α est plus petit que β : le point A sera donc plus éclairé que le point B.
De cette manière, lorsqu'une lumière éclaire un plan, les points les plus proches seront les plus éclairés, ce qui semble assez logique.

Mais voilà un exemple où ça pose problème :
Angle d'incidence : problème ?
Ici, les points A et B reçoivent la lumière sous le même angle : ils seront donc tous les deux très éclairés. Pourtant, B est plus loin que A et devrait être plus sombre en théorie.
Cet effet s'appelle la diffusion et, sans entrer dans les détails, il suffit de savoir que l'intensité lumineuse est inversement proportionnelle au carré de la distance. o_O En gros, plus c'est loin, plus c'est sombre ! :p D'ailleurs, vous connaissez tous ça : essayez un peu d'éclairer l'autre côté de la rue avec votre portable, ça marchera beaucoup moins bien qu'à 5 cm...

Si POV-Ray n'active pas par défaut cette option, c'est parce que l'échelle n'est pas fixe : rien n'indique que, dans votre scène, 1 unité vaut 1 centimètre, 1 mètre ou 3.14 kilomètres... C'est donc à nous de spécifier la distance nécessaire à l'atténuation.

Rassurez-vous, si tout ça vous a paru un peu trop abstrait, c'était juste pour votre culture générale ! ;)
Voyons maintenant comment utiliser tout ça :
Code : C
1
2
3
4
5
6
light_source {
    <0, 5, 0> // Position
    rgb 1 // Couleur : blanc
    fade_power 2
    fade_distance 5
}

On a donc ajouté fade_power et fade_distance.
  • fade_power indique la puissance à laquelle l'intensité décroît. Vous pouvez mettre n'importe quoi, mais la valeur "réaliste" est 2.
  • fade_distance spécifie la distance à laquelle l'intensité est à son niveau normal. Plus près, elle sera plus élevée, et plus loin elle sera plus sombre.


Et voici une scène pour tester :
Code : C
 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
global_settings {
  ambient_light 0
}

camera {
  location <-2,3,-5>
  look_at y
}

light_source {
  <0, 1, -1>
  rgb 1
  fade_distance 5
  fade_power 2
}

plane {
  y
  0
  pigment { rgb <1,1,0> }
}

union {
  box {
    -1, 1
    translate <1, 1, 5>
  }

  box {
    -1, 1
    translate <-1, 1, 30>
  }
  pigment { rgb <1, 0, 1> }
}

Image utilisateur
J'ai ajouté ambient_light 0 pour que l'on puisse mieux voir le résultat.

On voit clairement que la boîte plus éloignée est plus sombre. Pour comparer, voici la même scène, avec une lumière classique :
Image utilisateur

On remarque en particulier que la première boîte est éclairée de la même manière : c'est normal, elle est située à une distance d'environ 5 unités ;) .

Dans la pénombre tu sombreras

Généralités


Un autre grand défaut des sources de lumière est qu'elles sont trop ponctuelles : dans la vraie vie, ce genre d'objet n'existe pas. En effet, tout a une taille : une ampoule, un filament, ... rien n'est réellement réduit à un point. Et le principal résultat est que les bords des ombres ne sont jamais totalement nets : il y a toujours une fine zone de pénombre, impossible à réaliser avec une source ponctuelle.
Heureusement, POV-Ray a pensé à nous : il existe un moyen de simuler ces sources de lumière étendues.
En fait, on va simplement utiliser plein de petites sources ponctuelles pour en remplacer une grosse.

Bon, bien sûr, ça veut aussi dire qu'il va falloir calculer beaucoup plus de rayons, ce qui implique un temps de rendu souvent beaucoup plus long... :( Mais bon, on n'a rien sans rien ! ;)

Code : C
1
2
3
4
5
6
light_source {
    <2, 10, -2>
    rgb 1
    area_light
    x, y, 5, 5
}


area_light indique que l'on veut une lumière étendue.
Ensuite, x et y sont deux vecteurs qui forment un parallélogramme (ici un carré) : ce parallélogramme sera rempli par une grille de sources de lumières.
Enfin, 5 et 5 donnent le nombre de sources à utiliser dans chaque direction pour faire la grille : ici, on aura 5x5 = 25 sources de lumière au total. De quoi faire une pénombre assez sympathique ^^ .

La grille est toujours centrée sur la position initiale de la source de lumière.
De plus, l'intensité de chaque petite source est adaptée pour que l'ensemble corresponde à la valeur spécifiée.


Voici donc le résultat avec une sphère :

Area_light en action

Bon, ce n'est pas parfait, on voit bien les bandes : c'est parce que l'on n'a mit que 5*5 = 25 points dans notre grille. Avec 10*10 = 100, on aurait déjà de meilleurs résultats, mais ce serait plus long à rendre. ;)
On peut bien entendu mélanger une source étendue avec une atténuation :D ! A vous d'essayer ;) .

Compléments


Voici quelques petites options que vous pouvez utiliser pour améliorer encore votre source étendue :

Circular


Circular permet de réorganiser la grille pour en faire un disque. A première vue, ça semble un peu inutile, mais en réalité c'est très pratique, en particulier sur les ombres des sphères : une grille rectangulaire leur donne souvent une impression angulaire. circular permet d'éviter ça. :) Le reste du temps, vous n'en aurez pas besoin.

Orient


Le mot-clé orient permet à la source de lumière de toujours montrer son meilleur profil... :-°

Voici un schéma qui montre ce qui se passe quand la source étendue est mal orientée :
Image utilisateur
Image utilisateur
Dans le premier cas, la source est de face, et la pénombre est ainsi assez grande.
Dans le deuxième cas, en revanche, le source est vue de profil, et la pénombre s'en retrouve fortement diminuée !

Avec orient, la source est tournée de façon à toujours être de face, ce qui permet d'avoir une pénombre optimale !
De cette manière, on a en réalité une source en 3 dimensions.

Attention cependant, il y a trois règles à respecter pour utiliser orient :
  • Il faut utiliser circular. Si vous ne le faites pas, POV-Ray le fera automatiquement et donnera un message d'avertissement. C'est d'ailleurs l'un des plus grands intérêts de circular.
  • La grille doit être un carré parfait : même longueur pour les deux côtés, même nombre de lumière pour chaque côté.
  • Il faut plus d'une source de lumière dans la grille.

La dernière règle peut paraître évidente : s'il n'y a qu'une source de lumière, un area_light ne sert à rien ! >_<
Les deux premières le sont un peu moins, mais ce sont les règles... :(
Au final, on obtient donc une espèce de sphère de lumière.

Voici la même sphère, avec un orient (et donc circular) cette fois :
Image utilisateur
Même si l'effet n'est pas flagrant, en regardant bien, on voir la différence.

Jitter


Le gros problème de cette technique, c'est qu'on a des bandes d'ombre, car chaque petite source de la grille est ponctuelle. Pour limiter cela, on n'aurait qu'à mettre des centaines ou des milliers de sphères, mais ça commencerait à être trop dur pour votre petit processeur... :-°
Il existe donc une méthode permettant de déplacer légèrement et aléatoirement les points de la grille à chaque rayon, afin justement d'éviter le phénomène de bandes : jitter. Il suffit d'ajouter ce mot-clé dans votre source de lumière pour activer cette option.
Comme je viens de le dire, cela modifie aléatoirement la position des sources de lumière. Donc cela n'est pas adapté à une animation : vous aurez l'impression que l'ombre vibre...

Voici toujours la même scène avec jitter et une grille de 10x10 cette fois :
Image utilisateur
Et une autre scène, avec 30x30 lumières cette fois :
Image utilisateur

Pour avoir des résultats encore meilleurs, une seule solution : augmenter la résolution de la grille...

Sous les feux des projecteurs

Voici un autre type de source de lumière, souvent intéressant : les projecteurs, ou spot.
Ce type de source n'éclaire que dans une direction :
Spot
Ici, la zone C est normalement éclairée, la zone A ne l'est pas du tout ; entre les deux, la zone B est de moins en moins éclairée (il y a un dégradé d'intensité).

Nous allons donc devoir définir deux angles : le premier, α, définira la zone C, c'est-à-dire la partie qui sera éclairée de manière uniforme ; le second, β, forcément plus grand, donnera l'angle de toute la zone éclairée : hors de cette zone, ce sera le noir total. Entre les deux, l'intensité lumineuse passera doucement de sa valeur maximale à 0.

Il faut bien comprendre que les angles ne s'ajoutent pas ! β devra donc toujours être supérieur à α si l'on veut avoir un fondu et pas une frontière trop brutale !


Voici un exemple :
Image utilisateur

On distingue assez bien ici les trois zones A, B et C

Le mot-clé à utiliser pour dire que l'on veut un projecteur est spotlight.
Viens après le point central que l'on souhaite éclairer : pour ça, on utilise point_at suivi de la position du point en question.
Il faut ensuite renseigner les deux angles : radius pour α et falloff pour β.
Code : C
1
2
3
4
5
6
7
8
light_source {
  <0, 1, 0>
  rgb 1
  spotlight
  point_at <0, 0, 0>
  radius 15
  falloff 30
}



Un quatrième paramètre existe : tightness, qui donne un meilleur contrôle sur le dégradé. Par contre, son principal défaut est que la zone centrale n'est plus uniforme.
Il faudra donc utiliser ce paramètre quand vous ne voulez pas de répartition uniforme, mais souhaitez quelque chose de plus précis que le simple dégradé (radius 0 falloff 30 peut marcher mais offre très peu de contrôle).

Comme il est un peu compliqué, il est conseillé de toujours utiliser falloff 0 avec. Ainsi, on n'utilise plus que tightness et radius pour tout contrôler.

Quoi ?! Mais tu avais dit que falloff devait être plus grand que radius !! :colere2:

En général, oui ! Mais ici, puisque l'on utilise tightness, on a droit à une exception :p !

Les valeurs normales sont de 0 à l'infini : plus tightness est élevé, plus la zone centrale est resserrée.
Voici un schéma tiré de la doc de POV-Ray expliquant cela, avec radius 90 (la valeur indiquée est celle de tightness) :
Courbe
De cette manière, on a un peu plus de contrôle sur notre lumière ! :)


C'est tout ce qu'il y a à savoir sur les projecteurs. Evidemment, ils sont compatibles avec area_light et l'atténuation ! A vous d'essayer... ;)

Extra

Voici maintenant deux petits paramètres, bien moins utiles mais qui sont pourtant bien pratiques parfois : shadowless et projected_through.

Shadowless



En ajoutant le mot-clé shadowless à une source de lumière, celle-ci ne fera plus d'ombre ! o_O

Voici un exemple :

Shadowless

A l'inverse, le mot-clé no_shadow peut être ajouté dans un objet : il n'aura plus d'ombre, quelle que soit la source de lumière !

Projected_through



Cette option prend un objet en paramètre, et fait exactement le contraire de l'ombre : seule la lumière qui "traverse" l'objet sera prise en compte :

Image utilisateur

J'ai ajouté ici le cube en transparent pour que l'on voit bien qu'il s'agit de son ombre qui est éclairée.

Code : C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
light_source {
    <3, 5, -2>
    rgb 1
    projected_through { 
        box { 
            -1, 1 
            translate y 
        } 
    }
}
Je voulais faire un chapitre un peu plus court pour vous reposer, mais apparement c'est raté... :-°
J'espère que vous avez quand même compris l'essentiel.
La plupart du temps, vous aurez besoin de area_light pour avoir des zombres zolies, les autres options sont déjà bien plus rares.
Chapitre précédent Sommaire Chapitre suivant

Partager

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