FurMark
Current Version: 1.8.2
»FurMark
»Benchmark Submissions

GPU Caps Viewer
Current Version: 1.8.9
»GPU Caps Viewer
»GPU DB Submissions

PhysX FluidMark
Current Version: 1.2.0
»PhysX FluidMark
»Benchmark Submissions

Blogs
»Demoniak3D Blog
»JeGX's Infamous Lab

Link to Us

oZone3D.Net 100% Realtime 3D

»All Site's Network
 
Bump Mapping avec le GLSL

Par Jérôme 'JeGX' GUINOT
jegx [at] ozone3d [dot] net - The oZone3D Team

Version initiale: 4 Novembre 2005
Mise à jour: 8 Mars 2006
Mise à jour: 30 Décembre 2006




[ Index ]

Introduction | Page 2 | Page 3 | Page 4

»Next Page



2 - Equations d'éclairage

La couleur finale du pixel affiché à l'écran est donnée par l'équation suivante:

If = Ia + Id + Is

If est l'intensité de la couleur finale du pixel, Ia est l'intensité de la couleur ambiante, Id est l'intensité de la couleur diffuse et Is celle de la couleur spéculaire. Pour plus d'explications sur ces différentes composantes, voir le tutorial sur Lighting & Materials (prochainement disponible).

Ia, Id et Is sont tous des vecteurs 4D RGBA.

Le terme Ia reprèsente la composante ambiante. Ia est le résultat de la multiplication entre la composante ambiante de la lumière et celle du matériau qui compose la surface de l'objet 3D:

Ia = Al * Am

Al est la composante ambiante de la lumière et Am celle du matériau. Ia est généralement un vecteur RGBA constant, et cette valeur est la même quelque soit le pixel considéré. Nous verrons dans un autre tutorial une expression plus évoluée de ce terme ambiant avec la technique dite d'Ambient Occlusion Lighting.

Le terme Id reprèsente la composante diffuse finale. Cette composante est obtenue par:

Id = Dl * Dm * LambertTerm

Dl est la composante diffuse de la lumière et Dm celle du matériau. Le facteur LambertTerm est la clé de voûte des équations d'éclairage. C'est en effet la valeur de ce facteur qui va permettre de créer l'ombre propre d'un objet 3D (self-shadowing). Ce coefficient de Lambert se calcule avec le produit scalaire suivant:

LambertTerm = max( N dot L, 0.0)

N est le vecteur normal au pixel considéré et L le vecteur lumière au même pixel. Cette relation simple mais ôh combien fondamentale, nous dit que la valeur du coefficient de Lambert sera maximale (1.0) si l'angle entre les 2 vecteurs L et N vaut zéro c'est à dire que le pixel fait face directement à la lumière. Pour tous les autres cas, le coefficient de Lambert variera entre 0.0 et 1.0 ce qui donnera naissance à l'ombre propre.

La fonction max() est juste là pour nous empêcher d'avoir une valeur négative pour le terme de Lambert.

Mise à jour: 8 Mars 2006:

Le terme Is reprèsente la composante spéculaire finale. Cette composante est obtenue par:

Is = Sm x Sl x pow( max(R dot E, 0.0), f )

Le terme Is est de loin le plus compliqué à calculer mais il nous permet d'obtenir ces fameux reflets spéculaires à la surface des objets. Sl est la composante spéculaire de la lumière et Sm celle du matériau. E est le vecteur caméra et R est le vecteur lumière L réfléchi par rapport à la normale N. R est obtenu par:

R = reflect(-L, N)

N est le vecteur normal au pixel considéré, L le vecteur lumière et reflect() une fonction (disponible en GLSL) qui permet de calculer le vecteur réflexion de L par rapport à N . La fonction pow() est la fonction puissance qui permet d'élever un nombre n à la puissance p: pow(n, p). f est le facteur exponentiel spéculaire (le fameux shininess en OpenGL) qui représente la dureté et la précision du reflet spéculaire.

Ces quelques petites explications nous montrent l'importance du vecteur normal N. Dans un rendu classique, le vecteur N au niveau d'un pixel est le résultat de l'interpolation des trois vecteurs normaux des trois vertices qui composent la face courante de l'objet 3D. Dans ce cas là les variations du vecteur N sont très faibles sur la face courante.

La technique du bump mapping consiste justement à donner plus de vie et de pétillant à ce pauvre vecteur N en puisant pour chaque pixel un vecteur normal dans une normal-map. Pour plus de détail sur la normal-map voir ce tutorial: Normal Maps. Les textures utilisées pour ce tutoriel sont les mêmes que celles du tutoriel sur les normal-maps.





[ Index ]

Introduction | Page 2 | Page 3 | Page 4

»Next Page







Langue:

3D Graphics Search Engine:

The Geeks Of 3D





Geeks3D News


HackLAB News

Demoniak3D
Current Version: 1.23.0
»Demoniak3D
»Download
»Libraries and Plugins
»Demos
»Online Help - Reference Guide
»Codes Samples


Misc
»Texture DataPack #1
»Asus Silent Knight CPU Cooler
Page generated in 0.069463968276978 seconds.