Motylek Normal Mapping 1 - Introduction Le Normal Mapping (appelé aussi Bump Mapping) est une technique d’éclairage par pixel. Elle repose sur le Modèle d’éclairage de Blinn-Phong dans lequel on va déformer « la normal » à la surface N pour donner l’effet d’un relief. Le vecteur Normal est obtenu via la « Normal-Map », une texture blueté dans laquelle la couleur RVB représente la Normal à la surface. surface 2 - Eclairage de Blinn-Phong Blinn L = Direction de la lumière N = Normale a la surface Eye = Direction de l’observateur R = reflet de la lumière par rapport à la Normale. Li = - L (vecteur) b = Coefficient de brillance (shininess) M = Material Motylek • Composante diffuse : o La lumière est réfléchie uniformément dans toutes les directions o Dépend de l’incidence o Intensité : modulée par « N.Li » (cos de l’angle N et Li) Id = Ld * Md * Cos (θ) • Composante Ambiante : o La lumière des parties cachées o Ambiant Global + Ambiant o Intensité ambiante : Ia = Ga * Ma + La * Ma • Composante Spéculaire (Blinn) : o Ici le calcul du reflet est important on va donc utiliser la formule suivante au lieu de celle de Blinn-Phong Blinn Phong qui utilise le vecteur H (Half Vector). Is = (R.Eye (R.Eye)s * Ls * Ms • Coefficient d’atténuation : o Ce coefficient est constant pour tous les vertex si on souhaite avoir une lumière directionnelle att = constante. constante o Si on souhaite avoir une lumière « ponctuelle » on calcul ce coefficient de la manière suivante : att = 1 / (k0 +k1*d + k2*d2) avec K0 : atténuation constante K1 : atténuation linéaire K2 : atténuation quadratique d : Distance [Vertex – Source Lumineuse • Couleur du Pixel : Color = Ambiant Global + att (Ambiant + diffuse + spéculaire) Motylek 3 - L’espace Tangent Une fois que le modèle d’éclairage est mis en place il suffit de remplacer la normale à la surface par le vecteur Normal de la « Normal-Map Normal » qui n’est rien d’autre que la couleur de la texture. Le seul bémol c’est que les vecteurs Normaux stockés dans la « NormalMap » sont exprimé dans le repère Tangent, alors lors que tous les autres vecteurs (Lumière, position …) sont exprimés dans le repère Camera. Camera • • Le repère Tangent est constitué par : o Origine = position du Vertex {0.0 , 0.0 , 0.0} RTangent o Vecteur Tangent Ta {1.0 , 0.0 , 0.0} RTangent o Vecteur Binormal Bi {0.0 , 1.0 , 0.0} RTangent o Vecteur Normal No {0.0 , 0.0 , 1.0} RTangent Dans le repère Camera on a: a o Position du Vertex {v.x , v.y , v.z}R RCamera o Vecteur Normal {n.x , n.y , v.z}R v.z} Camera o Vecteur Direction Lumière L {l.x , l.y , l.z}RCamera Il nous faut maintenant calculer le Vecteur Tangent ainsi que le Vecteur Binormal dans le repère Camera afin de constituer le repère Tangent. Tangent (Calculs Calculs de ces vecteurs voir Bibliographie Calcul de l’espace tangent) tangent Le but est donc d’exprimer d’exprimer tous les autres vecteurs (comme le vecteur direction de la lumière, le vecteur direction de l’observateur …) dans le repère Tangent afin que les calculs (Produit uit scalaire principalement) aient un sens. Le calcul Matriciel suivant nous montre comment passer le vecteur U(X_(Rc), X_(Rc), X_(Rc) (Rc)) exprimé dans le repère Camera (Rc) au repère Tangent (Rt) : |X_(Rt)| | Ta_X(Rc) Ta_Y(Rc) Ta_Z(Rc) | |X X_(Rc)| |Y_(Rt)| = | Bi_X(Rc) Bi_Y(Rc) |Y Y_(Rc)| |Z_(Rt)| | No_X(Rc) No_Y(Rc) No_Z(Rc) | Bi_Z(Rc) | x |Z Z_(Rc)| Motylek Ce calcul Matriciel peut être remplacé par 3 produits scalaires : X_(Rt) Y_(Rt) Z_(Rt) = = = U(Rc) DOT Ta(Rc) U(Rc) DOT Bi(Rc) U(Rc) DOT No(Rc) 4 - Résultats • TeaPot : + Motylek • Mur : + • Planete Mars : + Motylek 5 - Bibliographie • Cours Master2 IAMI http://www.irit.fr/~Mathias.Paulin/IUP http://www.irit.fr/~Mathias.Paulin/IUP-SI/M2/4-glsl.pdf • GLSL Tutorial http://www.lighthouse3d.com/opengl/glsl/index.php?intro • Bump Mapping avec le GLSL http://www.ozone3d.net/tutorials/bump_mapping.php • Calcul de l’espace Tangent http://www.ozone3d.net/tutorials/mesh_deformer_p2.php#tangent_space
© Copyright 2024