Théorie sur les lights
Propos par tmyke

le mercredi 04 novembre 2009 18h 30mn 42s

7039 visualisations

Lumire et la 3D, les bases thoriques.  Ce sont de lments rsums, mais qui permettent de peut-tre
de mieux comprendre les base concernant tout ce qui tourne autour des clairages de nos mesh et de nos scenes

Le droulement du tuto :
Les Lights: introduction
La lumire ambiante
La rflexion diffuse
La rflexion spculaire
Attnuation de la lumire
Modle de lumire complexe
Utilisation de l'intensit
Les modles d'ombrage
Les diffrents type de lights






Les Lights: introduction

L'clairage, comme dans le monde rel, ainsi que dans le cinma (je fais souvent cette analogie ce milieu...), tient une place capitale dans le rendu des divers mondes en 3D que nous
allons crer. Comme dans la plupart des domaines en informatique, nous allons arriver nos fins coups de calcul mathmatiques, et ce pour le plus grand plaisir de nos yeux.

Nous allons donc intgrer une notion supplmentaire au sein de la gomtrie de nos objet, concernant la dfinition de nos points et nos triangles, qui est la notion de 'normale' une
face. Sans trop rentrer dans les dtails pour le moment, le vecteur normal d'une face est en fait le vecteur reprsentant la perpendiculaire au plan form par une face ou une surface
donne. Deuxime notion lie au normal face, chacun de ces vecteurs doit tre normalis (longueur comprise entre 0.0 et 1.0).


Donnons-nous le temps de voir les diffrents types composante des lumires:


La lumire ambiante

La lumire ambiante correspond au modle le plus simple. On considre qu'il existe une source lumineuse prsente partout et qui claire de manire gale dans toutes les directions.
Ce modle de lumire correspond au niveau minimum d'clairage qui sera appliqu sur les objets. En terme physique cela correspond un peu au soleil rflchi par tout
l'environnement qui donne une sorte de lumire prsente partout.

On dfinie l'intensit de cette lumire sur une surface comme suit :        Ip = pa*Ia

Cette intensit lumineuse est constante sur toute la surface. 'Ia' dsigne l'intensit de la lumire, 'pa' est le coefficient de rflexion de la lumire ambiante par la surface (0 <= pa <= 1).
'Ip' correspond l'intensit de la lumire rsultant de la rflexion sur la surface.

Prenons un objet fait d'une matire unique. pa reste constant sur la totalit de l'objet. Dans ce cas, l'objet apparait d'une seule et mme couleur. Ce modle d'illumination ne met pas
en valeur le volume d'un objet comme vous pouvez le voir sur la figure qui suit.

http://irrlicht-fr.org/_imagesT/img_11.jpg

La rflexion diffuse

On prend maintenant comme hypothse que la source de lumire est ponctuelle et qu'elle met de manire constante dans toutes les directions de l'espace.

Dans le modle de rflexion diffuse, l'intensit en un point d'une surface dpend de l'angle form entre le rayon de lumire qui touche le point de la surface et la normale la surface.
Plus l'angle form entre le rayon de lumire et la normale au plan est faible, plus l'intensit lumineuse rflchie visible par l'observateur est forte.

Le principe physique qui se cache derrire ce modle est simple. Notre source lumineuse met une certaine nergie au mtre carr. Suivant l'incidence des rayons lumineux, cette
nergie sera rpartie sur une plus ou moins importante surface de l'objet. Si les rayons et la surface sont perpendiculaires, alors l'nergie lumineuse sera rpartie sur la plus petite
surface possible et donc l'nergie par unit de surface sera maximale (voir figure).

http://irrlicht-fr.org/_imagesT/img_12.jpg

Maintenant, on sait pourquoi l'angle form entre la normale au plan et les rayons de lumire est important. Par contre, on ne connait toujours pas la lumire qui sera rflchie en
direction de l'observateur. Pour cela on se base sur les proprits de la surface. Si on considre que la surface est une surface Lambertienne (surface mate) comme le papier ou la
neige, alors, on peut considrer que la lumire qui arrive sur la surface est rflchie dans toutes les directions de manire gale. Dans ce cas, la position de l'observateur ne compte
pas. La lumire mise en direction de l'observateur dpend donc de l'intensit de la source lumineuse Il, de l'angle theta form par le rayon de lumire et la normale au plan et du
coefficient de rflexion pd de la lumire diffuse par la surface (0 <= pd <= 1). On obtient la formule :  Ip = pd * Il * cos(theta)

Pour la figure :

http://irrlicht-fr.org/_imagesT/img_13.jpg

On notera au passage que si theta est suprieur PI/2 alors c'est que la face n'est pas du tout claire par la source lumineuse car elle lui tourne le dos. Dans ce cas, l'intensit
lumineuse est 0.

Voici un exemple de rflexion diffuse :

http://irrlicht-fr.org/_imagesT/img_14.jpg

La rflexion spculaire

Le modle de rflexion spculaire se diffrencie du modle de diffusion en faisant intervenir le point d'observation. Dans ce modle les rayons de lumire sont rflchis par symtrie
par rapport la normale la surface. Ce modle correspond aux proprits de "miroir" des objets.

Il faut calculer quel est le rayon rflchi sur la face. Ensuite, l'intensit de la lumire observe dpend de theta qui correspond l'angle entre le rayon rflchi et le point d'observation,
de l'intensit Il de la source de lumire et du coefficient de rflexion ps de la lumire spculaire par la surface (0 <= ps <= 1). Si on se prend le rayon rflchi dans l'oeil alors on a
l'intensit maximum. Autour de cela, on peut quand mme voir quelque chose d'un peu attnu. Cela veut dire que la surface ne rflchit pas directement la rayon mais qu'il y a une
certaine "diffusion" autour du rayon rflchi. La fonction cosinus joue bien son rle ici mais comme on veut pouvoir rgler la diffusion autour du rayon rflchi, on introduit le coefficient
n. On obtient la formule :

Is = ps * Il * cos(theta)^n


http://irrlicht-fr.org/_imagesT/img_15.jpg

Voici un exemple de rflexion spculaire :


http://irrlicht-fr.org/_imagesT/img_16.jpg


Attnuation de la lumire

Jusqu' prsent, on n'a pas pris en compte la distance entre la source lumineuse et la surface. On peut faire intervenir un coefficient d'attnuation de la lumire dans les modles de
rflexion diffuse et de rflexion spculaire pour pondrer l'intensit de la lumire en fonction de la distance.

Voici un exemple de coefficient de pondration :  fd = min(1/(c1+c2*dist+c3*dist^2), 1)

On prend le minimum entre 1 et la valeur calcule pour que l'attnuation ne devienne pas une amplification.

Cette formule fait intervenir trois nouveau coefficients sur lesquels on peut jouer.

Pour utiliser cette formule dans les modles de rflexion vus ci-dessus, il suffit de calculer la distance entre la source et le point pour lequel on calcul l'intensit de la lumire. Ensuite,
il faut calculer la lumire avec le modle choisi ainsi que le coefficient fd. Le rsultat de l'intensit correspond la multiplication de l'intensit calcule par le coefficient de pondration
fd.


Modle de lumire complexe

Maintenant pour avoir des illuminations un peu complexes, on combine la lumire spculaire avec la lumire diffuse et la lumire ambiante tout en faisant intervenir le coefficient de
pondration en fonction de la distance. Pour cela rien de plus facile, il suffit de calculer les intensits d'illumination pour chacun de ces modles et de faire la somme des rsultats pour
obtenir l'intensit de la lumire.

De la mme manire, si on veut placer plusieurs sources de lumire dans une scne, il suffit de calculer l'intensit de la lumire sur une face pour chaque source et ensuite de faire la
somme de toutes les intensits pour avoir l'intensit rsultat de l'ensemble des sources de lumire sur la face.


Utilisation de l'intensit

Gnralement, un point sur un cran (pixel) est reprsent par 3 composantes : le rouge, le vert et le bleu. Si on considre la couleur marron. Elle peut se dcomposer comme suit :
165 rouge, 42 vert, 42 bleu. Supposons que l'on ait calcul une intensit de 0.7 sur ce point marron. Si on veut obtenir le nouveau marron il suffit de multiplier les composantes rouge,
verte et bleue du marron pour obtenir le marron correspondant l'intensit 0.7. On obtient alors : 115 rouge, 29 vert, 29 bleu.

Cela nous amne une autre question. Les valeurs de rouge, de vert et de bleu sur un cran (dans une mmoire vido) sont bornes. Si on prend le cas o nos valeurs sont
comprises entre 0 et 255, on peut se demander ce qu'il se passe si on dborde. En effet, l'intensit de la lumire en un point peut tre importante (8 par exemple). Dans ce cas, si les
valeurs dbordent, on peut tout simplement se contenter de plafonner les valeurs 255. Cela ne correspond pas un modle physique mais peut faire un peu comme un
blouissement o tout devient blanc si la lumire est trop forte.

Voici un exemple qui met en oeuvre ce type de saturation en utilisant la lumire ambiante, la rflexion diffuse et spculaire :

http://irrlicht-fr.org/_imagesT/img_17.jpg


Les modles d'ombrage

On sait maintenant calculer l'intensit de la lumire en un point. Seulement pour des raisons de performance la plupart du temps, on ne calcule pas la lumire en chaque point. De
plus, la plupart des logiciels 3D modlisent les objets avec des polygnes. Seulement l'objet final souhait n'est pas un objet avec un ensemble de faces plates. On ne peut pas mettre
une infinit de faces plates pour dfinir des objets courbes. Dans ce cas, il est quand mme souhaitable d'avoir un aspect courb.

Il existe plusieurs faons de procder pour approximer la lumire en un point. On va voir les plus courantes.

L'ombrage plat
On commence par la mthode la plus simple. On calcule la lumire pour un seul point de la surface que l'on veut reprsenter et on utilise la mme intensit pour toute la surface.
Cette mthode tendance a beaucoup faire ressortir les polygnes qui reprsentent un objet.
http://irrlicht-fr.org/_imagesT/img_18.jpg

L'ombrage de Gouraud
Le principe de l'ombrage de Gouraud est de calculer l'intensit de la lumire pour les sommets du polygne et d'interpoler linairement l'intensit des sommets pour dterminer
l'intensit en un point de la face. L'interpolation linaire se fait sur le polygne projet.

Cette technique permet d'avoir un lissage qui "gomme" les frontires entre les polygnes que l'on obtient avec un ombrage plat.
Voici un exemple de remplissage avec Gouraud :
http://irrlicht-fr.org/_imagesT/img_19.jpg

L'ombrage de Phong
L'ombrage de Phong est assez similaire l'ombrage de Gouraud la diffrence prs que ce n'est pas l'intensit lumineuse des sommets que l'on interpole linairement sur le
polygone 3D mais ce sont les normales des sommets.

En effet, si on revient un peu en arrire, on a vu que pour calculer l'intensit lumineuse en un point, on a besoin de la normale la surface en ce point pour les modles comme la
diffusion et la spcularite. Avec l'ombrage de Phong, on interpole linairement les normales des sommets pour dterminer une normale en chaque point et on se sert de cette
normale pour recalculer en chaque point l'intensit de la lumire. On se rend bien compte que cette mthode est bien plus coteuse qu'un ombrage de Gouraud met elle permet un
meilleur rendu du modle d'illumination spculaire avec un plus petit nombre de polygne. En effet, la "tche" de lumire peu tre petite et mme entirement comprise dans un
polygne. Dans ce cas, si on calcule l'intensit aux sommets, elle ne sera pas importante alors qu'elle est importante au centre. Avec Gouraud, on ne la verra pas alors qu'avec Phong
elle apparatra car la lumire est recalcule en chaque point (mme si c'est avec une normale interpole).

La plupart des images qui illustrent les modles de lumire ont t faites avec Phong. Mais voici un exemple rvlateur du remplissage de Phong :
http://irrlicht-fr.org/_imagesT/img_20.jpg


Les diffrents type de lights
Les lights sont des nodes comme les autres, et nous avons vu ci dessus, quelles taient leurs influences sur les objets 3D. On peut, sur le plan informatique, les diviser en deux
grandes catgories:

1. Lumires Ambiantes:

Petit rappel sur ce que l'on a vu : une lumire ambiante est une lumire tellement disperse qu'elle n'a plus ni direction ni source. Une lumire ambiante illumine avec la mme
intensit en tout point de la scne. Elle se dfinit par sa couleur et son intensit. Elle ne contribue aucune rflexion spculaire et est compltement indpendante des autres
lumires prsentes dans la scne. Elle est la moins onreuse (en termes de calculs) de tous les types de lumires.

2. Lumires directionnelles:

Comme son nom l'indique, une lumire directionnelle possde une direction en plus d'une couleur et d'une intensit. La direction est la distance comprise entre le point d'origine
et la position courante de la lumire. On trouve trois sortes de lumires directionnelles, dtailles dans les trois sous-chapitres qui suivent...


Point
Un point de lumire ne possde pas de direction et illumine de manire gale dans toutes les directions. Un feu de camp est un bon exemple de lumire point, une ampoule aussi.
Ces lumires sont plus onreuses que les lumires directionnelles. A la diffrence de ces dernires, une lumire point possde une attnuation (l'intensit de la lumire dcrot
avec la distance) et une distance d'clairage (distante au-del de laquelle la lumire n'illumine plus).

http://irrlicht-fr.org/_imagesT/img_21.jpg

Directionelle
Il s'agit d'une source de lumire. Elle ne possde pas de position et produit une lumire qui parcourt la scne en droite ligne. Dans les jeux, elle est souvent utilise pour reproduire
la lumire du soleil ou de la lune. Elle n'est pas trs onreuse mais consommer toutefois avec modration pour viter de faire plir votre fps.


http://irrlicht-fr.org/_imagesT/img_22.jpg

Spot
Une lumire spot est comparable celle d'une torche lectrique ou des phares d'une automobile. Il s'agit de la lumire la plus complique implmenter et la plus onreuse en calcul.
Elle possde une direction et une position. L'intensit de la lumire est spare en deux cnes. Dans le cne intrieur la lumire est plus intense que dans le cne extrieur. Seuls les
objets se trouvant dans un de ces cnes se trouvent illumins. En plus de la position, direction, attnuation et distance d'clairage, vous devez dfinir la taille des cnes et la faon
dont ils s'imbriquent.

http://irrlicht-fr.org/_imagesT/img_23.jpg

#1 

04-11-2009 19:48:40

TUpac
Habitu
Date d'inscription: 08-09-2009
Messages: 387
Corrections: 1

Bravo, trs bon tuto !! Surtout en une soire. Joli ! wink
Je trouve important que les progueurs prennent concsience de la complexit du sous systme qu'ils utilisent. C'est vrai que pour ce tuto, il faut remonter loin car a date un peu au niveau de l'invention(annes 90). Mais xpliqu aussi bien et avec des jolies vaches comme a, moi je craque !!!
Merci Tmyke wink

Dernire modification par TUpac (04-11-2009 19:49:12)


"Si vous ne partagez pas votre stabilité avec les pauvres, les pauvres partageront leur instabilité avec vous."

Hors ligne


#2 

04-11-2009 20:19:31

tmyke
Administrateur
Date d'inscription: 24-03-2008
Messages: 1025

Je ferrais quelques ajouts ds demain wink

Hors ligne


#3 

05-11-2009 14:51:35

nico
Webmaster
Date d'inscription: 07-08-2009
Messages: 563
Corrections: 9

Gnial le tuto, surtout les petits shemas qui facilitent nettement la comprhension wink
a serais bien que tu crive aussi les formules sans abrger les mots, pour encore plus de simplicit, part a c'est super !

Par contre je ne comprend pas comment sont reprsents les directions de la lumire en 3d ? quel est l'unit de mesure ?

Enfin en tout cas merci pour le tuto.

Hors ligne


#4 

05-11-2009 17:28:06

tmyke
Administrateur
Date d'inscription: 24-03-2008
Messages: 1025

J'ai donc ajout le petit complment promis.

nico a crit:

Par contre je ne comprend pas comment sont reprsents les directions de la lumire en 3d ? quel est l'unit de mesure ?

Pour ce qui est des direction, on parle d'angles au mme titre qu'un node standard...
Et pour ce qui est des units de mesure, cela reste trs virtuel... comme quand tu dfinit un cube de 1.0f de cot, c'est 1.0f quoi en fait ?
Il n'y a pas d'unit de mesure proprement parl, aprs tout est par contre question de proportion et de relativit entre les grandeur sur une mme scene,
et en relation avec la valeur talon, le 1 wink

Hors ligne


#5 

05-11-2009 18:28:16

nico
Webmaster
Date d'inscription: 07-08-2009
Messages: 563
Corrections: 9

merci pour les precisions, je suppose donc qu'il faut 2 angles pour dfinir une direction 3d ?

Hors ligne


#6 

05-11-2009 18:42:45

tmyke
Administrateur
Date d'inscription: 24-03-2008
Messages: 1025

le plus souvent cela suffit; d'ailleurs comme le dit le tuto, seul les lights directionnelles et spot on besoin d'informations de ce genre...

Hors ligne


#7 

05-11-2009 19:57:08

nico
Webmaster
Date d'inscription: 07-08-2009
Messages: 563
Corrections: 9

ok, merci smile
Aussinon pour faire le chipoteur wink pour la reflexion diffuse tu dit que si l\'angle entre la source lumineuse et la normale est suprieur pi/2, alors la face ne sera pas clair, mais si l\'angle fait pile poil pi/2, la face ne devrait pas tre clair non plus ? enfin je suppose wink

Hors ligne


#8 

05-11-2009 20:00:16

tmyke
Administrateur
Date d'inscription: 24-03-2008
Messages: 1025

nico a crit:

enfin je suppose wink

tu suppose bien wink

Hors ligne


#9 

05-11-2009 20:24:10

nico
Webmaster
Date d'inscription: 07-08-2009
Messages: 563
Corrections: 9

ok smile

Hors ligne


#10 

06-11-2009 02:48:03

Magun
SleekThink Producer
Lieu: Punakha
Date d'inscription: 18-11-2007
Messages: 902
Corrections: 2
Site web

pas mal le tuto wink
bien que je n'est pas le courage de tout lire ... sa semble correct et bien expliquer big_smile

Hors ligne


#11 

17-08-2010 09:33:41

caitness
Petit nouveau
Date d'inscription: 17-08-2010
Messages: 1

bon tuto simple et clair

Hors ligne


Options Liens officiels Caractristiques Statistiques Communaut
Corrections
irrlicht
irrklang
irredit
irrxml
xhtml 1.0
css 2.1
Propuls par FluxBB
Traduit par FluxBB.fr
Analys par
872 membres
1423 sujets
11109 messages
Dernier membre inscrit: Glider
7 invits en ligne
Aucun membre connect
RSS Feed

[ Gnre en 0.059 sec., 10 requtes excutes ]