# Ombrage de Phong

Le terme ombrage de Phong désigne à la fois le modèle d'illumination de Phong et l'interpolation de Phong, deux algorithmes de traitement 3D en infographie. Tous les deux furent développés par Bùi Tường Phong et publiés en 1973.

## Modèle d'illumination de Phong
### Description du modèle

L'illumination de Phong est un modèle local, c'est-à-dire que le calcul se fait en chaque point. Ce modèle empirique n'a rien d'exact, mais permet de calculer de manière crédible la lumière réfléchie par le point étudié, pour cela il combine trois éléments : la lumière ambiante, la lumière diffuse (modèle lambertien) et la lumière spéculaire (voir réflexion spéculaire).
Le but est de calculer l'intensité lumineuse qui va être émise par réflexion par le point étudié, éclairé par une source supposée ponctuelle, dans une direction précise (celle de l'observateur). Pour cela, la lumière est séparée en trois composantes :
* La composante ambiante représente les parasites provenant d'autre chose que la source considérée, la lumière réfléchie par d'autres points par exemple. La lumière ambiante est supposée égale en tout point de l'espace ;
* La lumière incidente est réfléchie dans toutes les directions. La composante diffuse indique l'intensité qui repart en tenant compte de l'inclinaison avec laquelle la lumière incidente arrive sur la surface, mais en supposant que l'intensité est la même quelle que soit la direction que prend le rayon réfléchi ;
* Malgré tout, il y a plus de lumière renvoyée dans la direction de la réflexion géométrique (celle dans laquelle repartirait le rayon en arrivant sur un miroir). Le rôle de la composante spéculaire est d'en tenir compte.

### Paramètres

* On définit pour chaque matériau des constantes caractéristiques :
** $k_{a}\in [0,1]$ : constante liée à la composante ambiante, la proportion de lumière renvoyée ;
** $k_{d}\in [0,1]$ : constante liée à la composante diffuse ;
** $k_{s}\in [0,1]$ : constante liée à la composante spéculaire ;
** $\alpha \gg 1$ : constante liée au brillant du matériau : plus $\alpha$ est grand, plus la surface est brillante. Cette constante peut prendre des valeurs élevées : 10, 100 ou plus.
(Les valeurs indiquées sont seulement un ordre de grandeur.)
* On appelle $i_{a}$, $i_{d}$ et $i_{s}$ l'intensité des lumières incidentes ambiante, diffuse et spéculaire. $I_{a}$, $I_{d}$, $I_{s}$ et $I$ les intensités réfléchies, $I$ étant le total.
* On définit les vecteurs suivants : ${\vec {L}}$ pour la lumière, ${\vec {N}}$ pour la normale à la surface, ${\vec {V}}$ pour la direction de vue de l'observateur et ${\vec {R}}$ pour la direction dans laquelle serait réfléchie la lumière sur un miroir. ${\vec {R}}$ se déduit par la relation ${\vec {R}}=2({\vec {N}}\cdot {\vec {L}}){\vec {N}}-{\vec {L}}=2\cos \theta {\vec {N}}-{\vec {L}}$.
Tous ces vecteurs doivent être normalisés pour que les produits scalaires donnent simplement le cosinus de l'angle entre les vecteurs.

### Formules

La composante ambiante, $I_{a}$ est simplement donnée par :
    $I_{a}=i_{a}.k_{a}$
La composante diffuse, $I_{d}$ est donnée par :
    $I_{d}=i_{d}k_{d}({\vec {L}}\cdot {\vec {N}})=i_{d}k_{d}\cos \theta$
    De la même manière que le Soleil chauffe plus au zénith, $I_{d}$ est maximale lorsque la lumière arrive sur la surface selon la direction normale, c'est-à-dire ${\vec {L}}={\vec {N}}$
La composante spéculaire, $I_{s}$ est donnée par :
    $I_{s}=i_{s}k_{s}({\vec {R}}\cdot {\vec {V}})^{\alpha }=i_{s}k_{s}\cos ^{\alpha }\Omega$
    Si ${\vec {V}}={\vec {R}}$, $I_{s}$ est maximale. Plus $\alpha$ est grand plus les taches lumineuses seront petites.
L'intensité réfléchie totale est ainsi :
    $I=I_{a}+I_{d}+I_{s}$
Pour plusieurs sources lumineuses, on obtient comme formule complète :
    $I=i_{a}k_{a}+\sum _{n\in \{sources\}}{\Bigi_{d,n}k_{d}({\vec {L}}_{n}\cdot {\vec {N}})+i_{s,n}k_{s}({\vec {R}}_{n}\cdot {\vec {V}})^{\alpha }{\Big )}$

### Application à l'infographie

Lorsqu'on souhaite appliquer cet algorithme en infographie, on sépare les composantes rouge/vert/bleu de la couleur de la texture pour le point considéré. Puis on applique la formule à $i_{a}=i_{d}=i_{texture}$ pour les composantes ambiante et diffuse.

## Les failles du modèle de Phong

La composante spéculaire se base sur deux vecteurs directionnels, l'observateur et la lumière, et interdit toute radiosité du modèle. Ce modèle est empirique et n'est fondé sur aucune théorie physique, mais uniquement sur les observations de Phong. Ce modèle ne prévoit pas la diffusion de la lumière avec la distance.

## L'interpolation de Phong

Cette méthode, à mettre en parallèle avec l'interpolation de Gouraud, produit de bons résultats de rendus, souvent plus réalistes que son prédécesseur.
Le principal problème de l'ombrage de Gouraud est qu'il ne calcule que les sommets des polygones : une source lumineuse spéculaire placée au centre d'un triangle n'apparaîtra pas. Ce problème est réglé avec l'interpolation de Phong.
Il est à noter que, dans un triangle, les trois sommets ont la même normale, ainsi d'ailleurs qu'en tout point du triangle. Pour un rendu plus lisse, la normale de chaque sommet d'un triangle peut être calculée en faisant la moyenne de toutes les surfaces utilisant ce sommet. On se retrouve alors avec trois normales qui peuvent être différentes.
Soient trois sommets distincts : v$_1$, v$_2$ et v$_3$, ayant pour vecteurs unitaires normaux n$_1$, n$_2$ et n$_3$. Comme pour l'interpolation de Gouraud, celle-ci se fait de façon linéaire sur toute la surface du triangle $v_{1}v_{2}v_{3}$, seulement elle se fait depuis les trois vecteurs normaux des sommets, c'est-à-dire que nous interpolons en fait les vecteurs normaux au lieu des couleurs.
À la différence de l'interpolation de Gouraud cependant, le calcul ne se fait pas sur trois points par surface, mais pour tous les points d'une surface — ou plus raisonnablement, sur plusieurs subdivisions de points. Cette méthode, bien plus lente, est parfois traitée directement par le matériel, via les shaders.